Spis treści

Automatyczna konfiguracja sieci - DHCP, NDP, DHCPv6

Do umożliwienia komunikacji z innymi bezpośrednio podłączonymi urządzeniami, urządzenie może samodzielnie ustawić sobie adres ze specjalnych sieci 169.254.0.0/16 (IPv4) lub fe80::/64 (IPv6). Adresy z tych sieci są ważne tylko w obrębie połączenia (ang. link-local) i w związku z tym adresy z tych sieci mogą być jednocześnie używane na wielu urządzeniach. Przy użyciu tych adresów konieczne jest wskazanie też interfejsu przez który ma następować komunikacja. W Linuksie prawidłowa składnia to adres%interfejs, np. ping fe80::1%eth0.

Dla IPv4 ustawianie tych adresów realizowane jest na żądanie administratora przez zeroconf).

Protokół IPv6 określa, że urządzenie natychmiast po nawiązaniu połączenia na warstwie łącza danych musi automatycznie ustawić sobie adres z sieci fe80::/64.

Ustawianie adresów link-local przebiega następująco:

  1. urządzenie samodzielnie wybiera adres (zwykle na podstawie swojego adresu MAC),
  2. urządzenie sprawdza czy nikt inny nie ma takiego adresu (wysyłając pakiet ARP lub Neighbor Solicitation),
  3. urządzenie ustawia sobie wybrany adres, bądź ponawia procedurę (wybierając inny adres).

Adres z sieci lokalnej, brama i adres serwera DNS

Do zapewnienia dostępu do sieci lokalnej i internetu komputer potrzebuje adresu IP (z sieci lokalnej), tras (zwykle wystarczy adres IP bramy domyślnej) i adresu IP serwera nazw. Te adresy może ustawić:

DHCP - przydzielanie IPv4

Działanie

DISCOVEROFFERREQUESTACKREQUESTACKRELEASEKlientSerwerDHCPSerwerDHCPodświeżeniedzierawy zwolnienieadresupobranieadresu
Przebieg (bezproblemowego) pobrania adresu z serwera DHCP i późniejszego działania klienta:

  1. klient wysyła komunikat DISCOVER na adres rozgłoszeniowy (255.255.255.255),
  2. serwery odpowiadają komunikatem OFFER zawierającym proponowany adres IP i czas dzierżawy, informacje o trasie domyślnej, serwerach DNS (i, jeśli skonfigurowano, o innych ustawieniach sieci),
  3. klient w odpowiedzi na pierwszą ofertę wysyła REQUEST prosząc o wydzierżawienie adresu IP,
  4. serwery potwierdza komunikatem ACK wydzierżawienie adresu (z zawartością podobną jak OFFER),
  5. każdorazowo przed upływem czasu dzierżawy klient wysyła ponownie REQUEST i otrzymuje kolejny ACK (przedłużający dzierżawę),
  6. jeśli klient kończy używać adres IP przed upływem czasu dzierżawy, może wysłać komunikat RELEASE.

W komunikatach DISCOVER, OFFER, REQUEST i ACK mogą być przekazywane dodatkowo opcje które informują klienta/serwer o ustawieniach sieci/klienta. Pozwalają one np. ustawić serwer czasu, poinformować serwer o nazwie urządzenia klienta, określić jaka jest nazwa domenowa komputerów w sieci, przesłać do urządzenia informacje o dodatkowych trasach. Lista zdefiniowanych opcji jest tutaj.

Pobieranie adresów

Przykładowe implementacje klientów DHCP:

Podstawy konfiguracji

Dnsmasq jest popularnym niewielkim serwerem DNS i DHCP. Zwykle konfiguruje się jego zachowanie w pliku konfiguracyjnym, na potrzeby laboratorium wszystkie opcje podawane są z linii komend.

Serwer DHCP wymaga, żeby na interfejsie z którego przyszła prośba o IP był już nadany adres IP z sieci z której ma przydzielić adres IP.

Przykładowa komenda do uruchomienia samego serwera DHCP używając dnsmasq:

dnsmasq -d -p0 --interface=eth0 --dhcp-range=192.168.0.100,192.168.0.199

Opcja -d uruchamia dnsmasq w trybie diagnostycznym (zajmuje terminal i wypisuje na niego komunikaty diagnostyczne),
-p0 wyłącza działanie dnsmasq jako serwer DNS,
--interface=… wskazuje na którym urządzeniu serwer ma działać,
natomiast --dhcp-range=… określa które adresy IP mają być przydzielane.

Zbiór adresów do przydzielania przez serwer DHCP nazywa się pulą adresów (address pool).

Często ustawia się serwer DHCP tak, by zawsze przydzielał wskazanym urządzeniom konkretne adresy. W tym celu definiuje się statyczne dzierżawy (static leases), czyli mówi który adres jest zajęty/zarezerwowany przez np. przez wskazany MAC.
Przykład takiej konfiguracji w dnsmasq:

dnsmasq -d -p0 --interface=eth0 --dhcp-range=192.168.0.100,192.168.0.150 \
        --dhcp-host=7e:04:fe:43:67:41,192.168.0.123,laptop               \
        --dhcp-host=b6:d0:06:16:49:80,192.168.0.245                

gdzie np. 7e:04:fe:43:67:41 to MAC urządzenia które ma zawsze dostawać adres 192.168.0.123 i mieć proponowaną nazwę hosta laptop.

Domyślnie serwer dnsmasq ustawia adres własny IP jako trasę domyślną, proponuje siebie jako sewer DNS (dnsmasq normalnie działa jako DNS i DHCP jednocześnie). Można zmienić to zachowanie podając własne wartości tych czy innych opcji, np. komendą:

dnsmasq -d -p0 --interface=eth0 --dhcp-range=192.168.0.100,192.168.0.199 \
        --dhcp-option option:dns-server,150.254.5.4,150.254.5.11         \
        --dhcp-option=option:ntp-server,150.254.5.25                     \
        --domain=cs.put.poznan.pl

Klient może zażądać konkretnych opcji, dla dhcpcd można to uzyskać np. komendą dhcpcd -4 -o ntp_servers -d eth0.
Listę opcji które zna dnsmasq można wyświetlić komendą dnsmasq --help dhcp.

NDP - informowanie o konfiguracji IPv6

Działanie

Do IPv6 włączono protokół NDP pozwalający, poza wyszukaniem adresu MAC który ma komputer ze wskazanym IPv6, poznać podstawowe informacje o sieci.
W IPv6 routery powinny periodyczne i na żądanie (Router Solicit, RS) wysyłać komunikat Router Advertisment (RA).

Komunikaty RA mogą zawierać:

Dodatkowo urządzenia uznają adres z którego otrzymano RA za trasę domyślną. Jeśli tak nie jest, przy próbie użycia tego routera jako bramy domyślnej dostaną w odpowiedzi komunikat Redirect ze wskazaniem właściwej trasy.

Do wysłania komunikatu Router Solicit i wyświetlenia otrzymanych RA można użyć narzędzia rdisc6, np:
rdisc6 br0

Samodzielna konfiguracja adresów (SLAAC)

Jeśli RA wskazuje że urządzenie może samo wybrać adresy IP ze wskazanych sieci, to urządzenie wykonuje taką konfigurację automatycznie. Taką konfigurację nazywa się Stateless Adress Autoconfiguration (SLAAC).

W laboratoriach sieciowych administrator tak ustawił zachowanie systemu, by nie wykonywać automatycznej konfiguracji. Wykonaj poniższe komendy żeby odblokować SLAAC:

sysctl net.ipv6.conf.p4p1.addr_gen_mode=0 net.ipv6.conf.p4p2.addr_gen_mode=0
sysctl net.ipv6.conf.p4p1.autoconf=1      net.ipv6.conf.p4p2.autoconf=1
sysctl net.ipv6.conf.p4p1.accept_ra=1     net.ipv6.conf.p4p2.accept_ra=1

W Linuksie jeśli urządzenie jest ustawione jako router (ma włączone przekazywanie pakietów), to domyślnie ignoruje RA. (Odszukaj tutaj klucza accept_ra). Można wyświetlić bieżące ustawienia przetwarzania RA komendą sysctl -ar 'accept_ra$.

Konfiguracja

Podobnie jak dla IPv4, do przykładowej konfiguracji wykorzystane jest narzędzie dnsmasq, i podobnie jak dla IPv4, do poprawnego działania należy najpierw ustawić adres z sieci na wskazanym interfejsie.

Przykładowa komenda do ustawienia wysyłania RA i określenia że urządzenia mają wszystko zrobić samodzielnie:

dnsmasq -d -p0 --interface=eth0 --dhcp-range=fd00::,ra-only

Przykładowa komenda wskazująca dodatkowo serwery DNS i lokalna domenę:

dnsmasq -d -p0 --interface=eth0 --dhcp-range=fd00::,ra-only                       \
        --dhcp-option=option6:domain-search,cs.put.poznan.pl                      \
        --dhcp-option=option6:dns-server,[2001:808:201::5:4],[2001:808:201::5:11]

NDP + DHCPv6

Jeżeli możliwości NDP są niewystarczające lub administrator chce decydować o tym jakie adresy zostaną przyznane urządzeniom, może w RA nakazać użycie serwera DHCPv6.

Protokół DHCPv6 działa podobnie do DHCP, jedynie klient do zażądania dodatkowej konfiguracji (jeśli nie prosi o adres) wysyła INFORMATION-REQUEST zamiast odpowiednika1) DISCOVER.

Pobieranie adresów bądź dodatkowej konfiguracji z serwera DHCPv6

Przykładowe komendy ustawiające IPv6 z użyciem serwera DHCPv6:

SLAAC + dodatkowa konfiguracja z DHCPv6

Przykładowa komenda konfigurująca wysyłanie RA pozwalającego samodzielnie wybrać adres, ale dostarczająca dodatkowych ustawień z użyciem DHCPv6:

dnsmasq -d -p0 --interface=eth0 --dhcp-range=fd00::,ra-stateless                  \
        --dhcp-option=option6:domain-search,cs.put.poznan.pl                      \
        --dhcp-option option6:dns-server,[2001:808:201::5:4],[2001:808:201::5:11] \
        --dhcp-option option6:ntp-server,[2001:808:201::5:25]

Klient, podobnie jak dla DHCP, w DHCPv6 może zażądać konkretnych opcji, np. komendą dhcpcd -6 -o ntp_servers -d eth0.
Listę opcji które zna dnsmasq można wyświetlić komendą dnsmasq --help dhcp6.

DHCPv6

Przykładowa komenda konfigurująca wysyłanie RA nakazującego użycie DHCPv6 i dostarczająca adresy IPv6 po DHCPv6:

dnsmasq -d -p0 --interface=eth0 --dhcp-range=fd00::1,fd00::f --enable-ra

Przykładowa komenda konfigurująca wysyłanie RA nakazującego użycie DHCPv6 i dostarczająca adresy IPv6 i dodatkową konfigurację sieci po DHCPv6:

dnsmasq -d -p0 --interface=eth0 --dhcp-range=fd00::1,fd00::f --enable-ra          \
        --dhcp-option=option6:domain-search,cs.put.poznan.pl                      \
        --dhcp-option option6:dns-server,[2001:808:201::5:4],[2001:808:201::5:11] \
        --dhcp-option option6:ntp-server,[2001:808:201::5:25]             

Static leases w DHCPv6

Do przydzielania konkretnym urządzeniom wybranych adresów IPv6 protokół DHCPv6 przewiduje użycie, do określania o które urządzenie chodzi, identyfikatora DUID wybieranego przez klienta. Ustawiając statyczną dzierżawę najprościej znaleźć użyty przez klienta DUID i skopiować go do konfiguracji – DUID może być generowany na kilka sposobów i nie wszystkie z tych sposobów zawierają adres MAC.

1) W DHCPv6 zmieniono nazwy komunikatów w porównaniu z DHCP, nawet dla komunikatów których semantyka została bez zmian.