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:
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ć:
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.
Przykładowe implementacje klientów DHCP:
dhclient
– klient rozwijany wraz z serwerem ISC DHCPdhclient [-d] eth0
dhclient -r eth0
dhcpcd
– popularny klient DHCP dla Linuksówdhcpcd -4 [-d] eth0
dhcpcd -4 -k eth0
udhcpc
– fragment busyboxa, popularny na urządzeniach wbudowanychudhcpc -i eth0
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ć,
--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
.
dnsmasq
można wyświetlić komendą dnsmasq --help dhcp
.
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
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$
.
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]
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.
Przykładowe komendy ustawiające IPv6 z użyciem serwera DHCPv6:
dhclient -6 [-d] eth0
dhclient -6 -r eth0
dhcpcd -6 [-d] eth0
dhcpcd -6 -k eth0
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
.
dnsmasq
można wyświetlić komendą dnsmasq --help dhcp6
.
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]
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.