przejście do zawartości
Jan Kończak
Narzędzia użytkownika
Zaloguj
Narzędzia witryny
Narzędzia
Pokaż stronę
Poprzednie wersje
Odnośniki
Ostatnie zmiany
Menadżer multimediów
Indeks
Zaloguj
Ostatnie zmiany
Menadżer multimediów
Indeks
Jesteś tutaj:
start
»
bio-sk
»
dhcp_ndp_dhcpv6
bio-sk:dhcp_ndp_dhcpv6
Ta strona jest tylko do odczytu. Możesz wyświetlić źródła tej strony ale nie możesz ich zmienić.
===== Automatyczna konfiguracja sieci - DHCP, NDP, DHCPv6 ===== ==== Adresy link-local ==== 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. <small>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''.</small> <small> Dla IPv4 ustawianie tych adresów realizowane jest na żądanie administratora przez [[https://en.wikipedia.org/wiki/Zero-configuration_networking|zeroconf]]). </small> 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: <html><div style="margin-top:-1.2em"></div></html> - urządzenie samodzielnie wybiera adres (zwykle na podstawie swojego adresu MAC), - urządzenie sprawdza czy nikt inny nie ma takiego adresu (wysyłając [[bio-sk:lacza_danych#tlumaczenie_ip_na_mac|pakiet ARP lub Neighbor Solicitation]]), - 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ć: * ręcznie administrator (IPv4, IPV6), * urządzenie po uzyskaniu podstawowych informacji o sieci i samodzielnym wybraniu sobie adresu z sieci lokalnej (tylko IPv6), * urządzenie po otrzymaniu ich z serwera DHCP, który "wydzierżawia" temu urządzeniu na określony czas adres z sieci lokalnej (IPv4, IPV6). ==== DHCP - przydzielanie IPv4 ==== === Działanie === <html><center><svg style="height:8em;border:2px #ddd solid;padding:0.25em;" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 95 26.1"><defs><marker id="g" markerHeight="1" markerWidth="1" orient="auto-start-reverse" overflow="visible" preserveAspectRatio="xMidYMid" viewBox="0 0 1 1"><g fill="context-stroke" stroke="context-stroke" transform="scale(.5)"><circle cx="4" r="1"/><circle cx="8" r="1"/><circle cx="12" r="1"/></g></marker><marker id="a" markerHeight="1" markerWidth="1" orient="auto-start-reverse" overflow="visible" preserveAspectRatio="xMidYMid" viewBox="0 0 1 1"><g fill="context-stroke" stroke="context-stroke" transform="scale(.5)"><circle cx="4" r="1"/><circle cx="8" r="1"/><circle cx="12" r="1"/></g></marker><marker id="b" markerHeight="1" markerWidth="1" orient="auto-start-reverse" overflow="visible" preserveAspectRatio="xMidYMid" refX="5.5" viewBox="0 0 1 1"><path fill="context-stroke" fill-rule="evenodd" d="m0 0 5-5-17.5 5L5 5z" transform="scale(-.5)"/></marker></defs><g stroke-width=".3" transform="translate(4.2 -8.5)"><path fill="none" stroke="#000" marker-end="url(#a)" d="M7 10.6h35.3"/><path fill="none" stroke="#000" marker-end="url(#a)" d="M7 24.7h35.3"/><path id="c" fill="none" stroke="#880" stroke-width=".3" marker-end="url(#b)" d="m8.5 10.6 7 14"/><path fill="none" stroke="#000" marker-end="url(#a)" d="M7 31.8h35.3"/><path fill="none" stroke="#880" marker-end="url(#b)" d="m8.5 10.6 7 21.2"/><path id="d" fill="none" stroke="#008" stroke-width=".3" marker-end="url(#b)" d="m17 24.6 7.1-14"/><path fill="none" stroke="#008" marker-end="url(#b)" d="m17 31.7 12.6-21.1"/><path id="e" fill="none" stroke="#800" stroke-width=".3" marker-end="url(#b)" d="m25.4 10.6 7 14"/><path id="f" fill="none" stroke="#080" stroke-width=".3" marker-end="url(#b)" d="m33.9 24.7 7-14.1"/><text xml:space="preserve" fill="#880" stroke="#000" font-family="'DejaVu Sans Mono'" font-size="3.2" style="line-height:100%" transform="translate(.5 -.5)"><textPath xlink:href="#c" stroke="none">DISCOVER</textPath></text><text xml:space="preserve" fill="#008" stroke="#000" font-family="'DejaVu Sans Mono'" font-size="3.2" style="line-height:100%" transform="translate(1.3 -3.8)"><textPath xlink:href="#d" stroke="none">OFFER</textPath></text><text xml:space="preserve" fill="#800" stroke="#000" font-family="'DejaVu Sans Mono'" font-size="3.2" style="line-height:100%" transform="translate(1 1)"><textPath xlink:href="#e" stroke="none">REQUEST</textPath></text><text xml:space="preserve" fill="#080" stroke="#000" font-family="'DejaVu Sans Mono'" font-size="3.2" style="line-height:100%" transform="translate(2.7 -6.7)"><textPath xlink:href="#f" stroke="none">ACK</textPath></text><path fill="none" stroke="#000" marker-end="url(#a)" marker-start="url(#g)" d="M46.6 10.6h20.2"/><path fill="none" stroke="#000" marker-end="url(#a)" marker-start="url(#g)" d="M46.6 24.7h19.7"/><path fill="none" stroke="#000" marker-end="url(#a)" marker-start="url(#g)" d="M46.6 31.8h19.7"/><path fill="none" stroke="#800" marker-end="url(#b)" d="m49.4 10.6 7 14"/><path fill="none" stroke="#080" marker-end="url(#b)" d="m57.9 24.7 7-14.1"/><text xml:space="preserve" fill="#800" stroke="#000" font-family="'DejaVu Sans Mono'" font-size="3.2" style="line-height:100%" transform="translate(25 1)"><textPath xlink:href="#e" stroke="none">REQUEST</textPath></text><text xml:space="preserve" fill="#080" stroke="#000" font-family="'DejaVu Sans Mono'" font-size="3.2" style="line-height:100%" transform="translate(26.7 -6.7)"><textPath xlink:href="#f" stroke="none">ACK</textPath></text><path fill="none" stroke="#000" marker-start="url(#g)" d="M70.6 10.6h20.2"/><path fill="none" stroke="#000" marker-start="url(#g)" d="M70.6 24.7h20.2"/><path fill="none" stroke="#000" marker-start="url(#g)" d="M70.6 31.8h20.2"/><path fill="none" stroke="purple" marker-end="url(#b)" d="m73.8 10.6 7.1 14"/><text xml:space="preserve" fill="purple" stroke="#000" font-family="'DejaVu Sans Mono'" font-size="3.2" style="line-height:100%" transform="translate(50 1)"><textPath xlink:href="#e" stroke="none">RELEASE</textPath></text><text xml:space="preserve" x="7.1" y="11.3" font-family="'DejaVu Sans Mono'" font-size="3.2" style="line-height:82.7%" text-anchor="end"><tspan x="7.1" y="11.3" style="line-height:82.7%">Klient</tspan></text><text xml:space="preserve" x="7.2" y="24.8" font-family="'DejaVu Sans Mono'" font-size="3.2" style="line-height:82.7%" text-anchor="end"><tspan x="7.2" y="24.8" style="line-height:82.7%">Serwer</tspan><tspan x="7.2" y="27.5" style="line-height:82.7%">DHCP</tspan></text><text xml:space="preserve" x="7.2" y="31.9" font-family="'DejaVu Sans Mono'" font-size="3.2" style="line-height:82.7%" text-anchor="end"><tspan x="7.2" y="31.9" style="line-height:82.7%">Serwer</tspan><tspan x="7.2" y="34.5" style="line-height:82.7%">DHCP</tspan></text><text xml:space="preserve" x="45.9" y="27.5" font-family="'DejaVu Sans Mono'" font-size="3.2" style="line-height:100%"><tspan x="45.9" y="27.5">odświeżenie</tspan><tspan x="45.9" y="30.7">dzierawy</tspan></text> <text xml:space="preserve" x="70.9" y="27.8" font-family="'DejaVu Sans Mono'" font-size="3.2" style="line-height:100%"><tspan x="70.9" y="27.8">zwolnienie</tspan><tspan x="70.9" y="31">adresu</tspan></text><text xml:space="preserve" x="20.8" y="27.5" font-family="'DejaVu Sans Mono'" font-size="3.2" style="line-height:100%"><tspan x="20.8" y="27.5">pobranie</tspan><tspan x="20.8" y="30.7">adresu</tspan></text><path fill="none" stroke="#888" d="M44.5 8.5v25.4M68.4 9.2v25.4"/></g></svg></center></html> Przebieg (bezproblemowego) pobrania adresu z serwera DHCP i późniejszego działania klienta: <html><div style="margin-top:-1.2em"></div></html> - klient wysyła komunikat DISCOVER na adres rozgłoszeniowy (255.255.255.255), - serwery odpowiadają komunikatem OFFER zawierającym proponowany adres IP i czas dzierżawy, informacje o trasie domyślnej, serwerach DNS (<small>i, jeśli skonfigurowano, o innych ustawieniach sieci</small>), - klient w odpowiedzi na pierwszą ofertę wysyła REQUEST prosząc o wydzierżawienie adresu IP, - serwery potwierdza komunikatem ACK wydzierżawienie adresu (z zawartością podobną jak OFFER), - każdorazowo przed upływem czasu dzierżawy klient wysyła ponownie REQUEST i otrzymuje kolejny ACK (przedłużający dzierżawę), - jeśli klient kończy używać adres IP przed upływem czasu dzierżawy, może wysłać komunikat RELEASE. <small>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 [[https://www.iana.org/assignments/bootp-dhcp-parameters/bootp-dhcp-parameters.xhtml|tutaj]]. </small> === Pobieranie adresów === Przykładowe implementacje klientów DHCP: * ''[[https://www.isc.org/downloads/dhcp/|dhclient]]'' – klient rozwijany wraz z serwerem ISC DHCP * żądanie adresu IP: ''dhclient [-d] //eth0//'' * uwolnienie adresu IP: ''dhclient -r //eth0//'' * ''[[https://roy.marples.name/projects/dhcpcd|dhcpcd]]'' – popularny klient DHCP dla Linuksów * żądanie adresu IP: **''dhcpcd -4 [-d] //eth0//''** * uwolnienie adresu IP: **''dhcpcd -4 -k //eth0//''** * ''[[https://en.wikipedia.org/wiki/Udhcpc|udhcpc]]'' – fragment busyboxa, popularny na urządzeniach wbudowanych * żądanie adresu IP: ''udhcpc -i //eth0//'' === Podstawy konfiguracji === [[https://pl.wikipedia.org/wiki/Dnsmasq|Dnsmasq]] jest popularnym niewielkim serwerem DNS i DHCP. Zwykle konfiguruje się jego zachowanie [[https://thekelleys.org.uk/gitweb/?p=dnsmasq.git;a=blob;f=dnsmasq.conf.example|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: <html><div style="margin-top:-1.2em"></div></html> dnsmasq -d -p0 --interface=eth0 --dhcp-range=192.168.0.100,192.168.0.199 <html><div style="margin-top:-1.2em"></div></html> 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. <small> Zbiór adresów do przydzielania przez serwer DHCP nazywa się pulą adresów (address pool). </small> 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'': <html><div style="margin-top:-1.2em"></div></html> 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 <html><div style="margin-top:-1.2em"></div></html> 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''. <small> 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ą: <html><div style="margin-top:-1.2em"></div></html> 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 <html><div style="margin-top:-1.2em"></div></html> 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''. </small> ==== 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ć: * listę prefiksów (sieci IPv6) z informacją czy urządzenie może samo wybrać sobie adres z tej sieci, * informacje czy w sieci jest serwer DHCPv6, oraz: * czy należy go użyć do pobrania adresów IPv6, * czy można go prosić o dodatkowe informacje o sieci, * listę serwerów DNS, * <small>nazwę domenową komputerów w sieci</small>. <html><div style="margin-top:-1.2em"></div></html> Dodatkowo urządzenia uznają adres z którego otrzymano RA za trasę domyślną. <small>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.</small> 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: <html><div style="margin-top:-1.2em"></div></html> 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 <small> W Linuksie jeśli urządzenie jest ustawione jako router (ma włączone przekazywanie pakietów), to domyślnie ignoruje RA. (Odszukaj [[https://docs.kernel.org/networking/ip-sysctl.html|tutaj]] klucza ''accept_ra''). Można wyświetlić bieżące ustawienia przetwarzania RA komendą ''sysctl -ar 'accept_ra$''. </small> === 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: <html><div style="margin-top:-1.2em"></div></html> dnsmasq -d -p0 --interface=eth0 --dhcp-range=fd00::,ra-only Przykładowa komenda wskazująca dodatkowo serwery DNS i lokalna domenę: <html><div style="margin-top:-1.2em"></div></html> 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 odpowiednika((W DHCPv6 zmieniono nazwy komunikatów w porównaniu z DHCP, nawet dla komunikatów których semantyka została bez zmian.)) DISCOVER. === Pobieranie adresów bądź dodatkowej konfiguracji z serwera DHCPv6 === Przykładowe komendy ustawiające IPv6 z użyciem serwera DHCPv6: * dhclient * żądanie konfiguracji: ''dhclient -6 [-d] //eth0//'' * uwolnienie adresu (jeśli został nadany): ''dhclient -6 -r //eth0//'' * dhcpcd * żądanie konfiguracji: **''dhcpcd -6 [-d] //eth0//''** * uwolnienie adresu (jeśli został nadany): **''dhcpcd -6 -k //eth0//''** === 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: <html><div style="margin-top:-1.2em"></div></html> 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] <html><div style="margin-top:-1.2em"></div></html> <small> 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''. </small> === DHCPv6 === Przykładowa komenda konfigurująca wysyłanie RA nakazującego użycie DHCPv6 i dostarczająca adresy IPv6 po DHCPv6: <html><div style="margin-top:-1.2em"></div></html> 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: <html><div style="margin-top:-1.2em"></div></html> 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 [[https://datatracker.ietf.org/doc/html/rfc8415#section-11|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.
bio-sk/dhcp_ndp_dhcpv6.txt
· ostatnio zmienione: 2024/12/19 14:13 przez
jkonczak
Narzędzia strony
Pokaż stronę
Poprzednie wersje
Odnośniki
Złóż / rozłóż wszystko
Do góry