Przydatne linki
- dr inż. Maciej Sobieraj - Rozdział 8: DHCP
- David Bombal - DHCP Explained - Step by Step Server Configuration
- NetworkAcademy.io - IPv6 Stateless Address Auto-configuration (SLAAC)
- NetworkAcademy.io - Stateful DHCPv6
- NetworkAcademy.io - Stateless DHCPv6
Spis treści
Zazwyczaj łącząc się z jakąś siecią, np. zwykłą domową siecią WiFi nie konfigurujemy adresu IP, maski podsieci, bramy domyślnej i serwera DNS ręcznie - byłoby to upierdliwe robiąc to za każdym razem prawda? Zazwyczaj klikamy "połącz" i wszystko działa i śmiga jak należy. Dlaczego? Właśnie dzięki protokołowi dynamicznej konfiguracji hosta (Dynamic Host Configuration Protocol), który robi to za nas
DHCP działa w architekturze klient-serwer - serwer dzierżawi adres IPv4 klientowi, który o niego poprosi (logiczne). Klient musi co jakiś czas zwracać się do serwera z prośbą o przedłużenie dzierżawy - adresy nie są przypisywane raz na zawsze. Gdy, przkładowo, komputer zostanie przeniesiony do innej sieci, nieużywany adre po wygaśnięciu dzierżawy wraca do puli dostępnych adresów IP i będzie mógł zostać przypisany następnemu urządzeniu.
Najpierw host rozgłasza wiadomość DHCPDISCOVER w celu odkrycia adresu serwera DHCP. Serwer otrzymując tą wiadomość dodaje wpis do tablicy ARP i rezerwuje dostępny adres IP z puli, następnie odsyła wiadomość unicast DHCPOFFER korzystając z adresu MAC klienta. Klient otrzymawszy odpowiedź rozgłasza komunikat DHCPREQUEST w celu poinformowania swojego serwera jak również pozostałych serwerów DHCP w sieci o akceptacji dzierżawy adresu IP (ten komunikat jest również wysyłany w celu odnowienia dzierżawy). Na koniec serwer odpowiada komunikatem DHCPACK, który jest duplikatem wiadomości DHCPOFFER, ale ze zmienionym typem wiadomości. Po otrzymaniu tej wiadomości, klient wykonuje zapytanie ARP dla przypisanego mu adresu - jeśli nie uzyska odpowiedzi to znaczy, że przypisany mu adres IP jest prawidłowy i może go używać jako własny.
W celu odnowienia dzierżawy zostają wymienione wiadomości DHCPREQUEST i DHCPACK między klientem a serwerem (tym razem DHCPREQUEST jest unicastem)
Router(config)#ip dhcp excluded-address 192.168.8.1
Router(config)#ip dhcp excluded-address 192.168.8.250 192.168.8.254
Router(config)#ip dhcp pool POOL1
Router(dhcp-config)#network 192.168.8.0 255.255.255.0
Router(dhcp-config)#default-router 192.168.8.1
Router(dhcp-config)#dns-server 192.168.8.1
Router(dhcp-config)#domain-name example.lan
Router(dhcp-config)#end
Router#
W powyższym przykładzie najpierw wykluczamy adresy z puli dostępnych adresów: 192.168.8.1
i od 192.168.8.250
do 192.168.8.254
(adresy te nie będą dzierżawione klientom). Następnie tworzymy nową pulę adresów o nazwie POOL1, w której ustawiamy takie informacje jak sieć, brama domyślna, serwer DNS czy nazwa domeny.
W przypadku, gdy serwer DHCP znajduje się w innej sieci, możemy skonfigurować na interfejsie adres pomocniczy, który będzie przekazywał (relay) żądania do odpowiedniego serwera DHCP
Router(config)#interface g0/1
Router(config-if)#ip helper-address 192.168.4.20
Router(config-if)#
Router#show running-config | section dhcp
ip dhcp excluded-address 10.0.0.1
ip dhcp excluded-address 192.168.8.1
ip dhcp excluded-address 192.168.8.250 192.168.8.254
ip dhcp pool POOL1
network 192.168.8.0 255.255.255.0
default-router 192.168.8.1
dns-server 192.168.8.1
domain-name example.lan
Router#
Router#show ip dhcp binding
IP address Client-ID/ Lease expiration Type
Hardware address
10.0.0.5 00D0.FFC9.0B44 -- Automatic
10.0.0.4 00E0.A328.97B6 -- Automatic
10.0.0.6 0009.7C26.1591 -- Automatic
10.0.0.3 0060.47E7.0217 -- Automatic
10.0.0.2 00E0.8F7A.1D84 -- Automatic
10.0.0.7 0007.EC94.740E -- Automatic
Router#
C:\>ipconfig /all
FastEthernet0 Connection:(default port)
Connection-specific DNS Suffix..: example.lan
Physical Address................: 0009.7C26.1591
Link-local IPv6 Address.........: FE80::209:7CFF:FE26:1591
IPv6 Address....................: ::
IPv4 Address....................: 192.168.8.2
Subnet Mask.....................: 255.255.255.0
Default Gateway.................: ::
192.168.8.1
DHCP Servers....................: 192.168.8.1
DHCPv6 IAID.....................:
DHCPv6 Client DUID..............: 00-01-00-01-3A-9D-2D-EE-00-09-7C-26-15-91
DNS Servers.....................: ::
192.168.8.1
C:\>ipconfig /release
IP Address......................: 0.0.0.0
Subnet Mask.....................: 0.0.0.0
Default Gateway.................: 0.0.0.0
DNS Server......................: 0.0.0.0
C:\>ipconfig /renew
IP Address......................: 192.168.8.2
Subnet Mask.....................: 255.255.255.0
Default Gateway.................: 192.168.8.1
DNS Server......................: 192.168.8.1
C:\>
Routery również mogą mieć przypisywane adresy poprzez DHCP. Nasze routery domowe często dostają adresy na porcie WAN od serwera DHCP należącego do dostawcy usług internetowych (ISP).
Przykładowa kofniguracja:
Router(config)#interface g0/1
Router(config-if)#ip address dhcp
Router(config-if)#no shutdown
Router(config-if)#
Adres IPv6 GUA można skonfigurować z wykorzystaniem jednej z trzech metod:
- SLAAC (stateless address autoconfiguration) - host sam konfiguruje adres IPv6 oraz wszystko co potrzebne korzystając z informacji otrzymanych od routera
- SLAAC + bezstanowy DHCPv6 - host sam konfiguruje swój adres IPv6 oraz kontaktuje się z serwerem DHCPv6 w celu uzupełnienia pozostałych informacji
- Stanowy DHCPv6 - router powiadamia hosta, że ten powinien skontaktować się z serwerem DHCPv6, od którego pobierze adres IPv6 oraz wszystkie niezbędne informacje
Router co 200 sekund wysyła komunikat ICMPv6 RA (router advertisement) informujący o sposobie konfiguracji adresu IPv6. Zawiera trzy flagi:
- A (autokonfiguracja adresu) - użyj SLAAC
- O (inna konfiguracja) - użyj SLAAC i bezstanowy DHCPv6
- M (zarządzana konfiguracja adresu) - użyj stanowego DHCPv6
Router wyśle również komunikat RA na żądanie klienta, gdy ten wyśle komunikat ICMPv6 RS (router solicitation) na adres multicast ff02::2
(wszystkie routery IPv6).
Adres LLA (link-local) jest tworzony automatycznie po uruchomieniu interfejsu z IPv6
SLAAC jest usługą bezstanową, czyli nie ma żadnego serwera zarządzającego przydzielaniem adresów IPv6 GUA. Host sam tworzy swój adres korzystając z danych zawartych w komunikacie RA
flaga | wartość |
---|---|
A | 1 |
O | 0 |
M | 0 |
Istnieją dwie możliwości utworzenia identyfikatora interfejsu hosta w adresie IPv6:
- losowo generowany - system operacyjny generuje losowy 64-bitowy identyfikator
- EUI-64 - host używa swojego adresu MAC (48 bitów) i wstawia w środku 12-bitową wartość
fffe
Część systemów korzysta z pierwszej metody ze względu na obawy dotyczące prywatności w przypadku EUI-64 (adres MAC identyfikuje fizyczne urządzenie i zawiera dane producenta).
Nie ma gwarancji, że wygenerowany ID interfejsu będzie unikatowy, dlatego hosty korzystają z procesu DAD (wykrywanie duplikatów adresów) w celu wykrycia konfliktów.
Po utworzeniu ID interfejsu, host wysyła wiadomość ICMPv6 NS (neighbor solicitation) na odpowiedni adres multicast solicited-node. Jeśli nie otrzyma odpowiedzi w postaci komunikatu ICMPv6 NA (neighbor advertisement), oznacza to, że wygenerowany adres jest unikatowy.
Router(config)#ipv6 unicast-routing
SLAAC jest domyślną opcją po włączeniu routingu IPv6
Komunikaty serwer-klient korzystają z portu docelowego UDP 546, a klient-serwer z UDP 547
Kroki w celu pobrania informacji od serwera DHCPv6 i ewentualnego wydzierżawienia adresu IPv6:
- host wysyła wiadomość RS
- router odpowiada RA informując, aby klient zgłosił się do serwera DHCPv6
- klient próbuje zlokalizować serwer DHCPv6 wysyłając komunikat DHCPv6 SOLICIT na adres multicast
ff02::1:2
- przynajmniej jeden serwer DHCPv6 odpowiada komunikatem DHCPv6 ADVERTISE
- odpwiedź hosta zależy od tego, czy DHCPv6 jest stanowy czy bezstanowy:
- stanowy - host wysyła do serwera komunikat DHCPv6 REQUEST w celu uzyskania adresu IPv6 i wszystkich potrzebnych parametrów konfiguracji
- bezstanowy - host sam tworzy swój adres IPv6 korzystając z prefiksu zawartego w komunikacie RA oraz generując identyfikator interdajsu, a następnie wysyła do serwera DHCPv6 wiadomość DHCPv6 INFORMATION-REQUEST w celu uzyskania pozostałych potrzebnych parametrów konfiguracji
- serwer wysyła do klienta komunikat DHCPv6 REPLY
flaga | wartość |
---|---|
A | 1 |
O | 1 |
M | 0 |
Router(config)#ipv6 unicast-routing
Router(config)#ipv6 dhcp pool IPV6_STATELESS
Router(config-dhcpv6)#dns-server 2001:dead:beef:1::1
Router(config-dhcpv6)#domain-name example.lan
Router(config-dhcpv6)#exit
Router(config)#interface g0/1
Router(config-if)#ipv6 address fe80::1 link-local
Router(config-if)#ipv6 address 2001:dead:beef:1::1/64
Router(config-if)#ipv6 nd other-config-flag
Router(config-if)#ipv6 dhcp server IPV6_STATELESS
Router(config-if)#no shut
Router(config-if)#end
Router#
Router#enable
Router#configure terminal
Enter configuration commands, one per line. End with CNTL/Z.
Router(config)#ipv6 unicast-routing
Router(config)#interface g0/1
Router(config-if)#ipv6 enable
Router(config-if)#ipv6 address autoconfig
Router(config-if)#end
Router#
flaga | wartość |
---|---|
A | 0 |
O | 0 |
M | 1 |
Router(config)#ipv6 unicast-routing
Router(config)#ipv6 dhcp pool IPV6_STATEFUL
Router(config-dhcpv6)#address prefix 2001:dead:beef:1::/64
Router(config-dhcpv6)#dns-server 2001:dead:beef:1::1
Router(config-dhcpv6)#domain-name example.lan
Router(config-dhcpv6)#exit
Router(config)#interface g0/1
Router(config-if)#ipv6 address fe80::1 link-local
Router(config-if)#ipv6 address 2001:dead:beef:1::1/64
Router(config-if)#ipv6 nd managed-config-flag
Router(config-if)#ipv6 nd prefix default no-autoconfig
Router(config-if)#ipv6 dhcp server IPV6_STATEFUL
Router(config-if)#no shut
Router(config-if)#end
Router#
Router(config)#ipv6 unicast-routing
Router(config)#interface g0/1
Router(config-if)#ipv6 enable
Router(config-if)#ipv6 address dhcp
Router(config-if)#end
Router#
Jeśli serwer DHCPv6 znajduje się w innej sieci, router można skonfigurować jako agenta przekazywania (relay agent), który przekaże dalej komunikaty DHCPv6
Router(config)#interface g0/1
Router(config-if)#ipv6 dhcp relay destination 2001:dead:beef:2::1 g0/0