IPv6 Stateless Autoconfiguration
Automatyczna konfiguracja adresów IPv6 bez serwerów DHCP.
Wizja „Podłącz i Działaj”: Nowy Sposób Dołączania do Sieci
W świecie IPv4 podłączenie urządzenia do sieci zazwyczaj wymaga centralnego koordynatora. Gdy podłączasz laptopa do sieci Wi-Fi, wysyła on rozgłoszenie z pytaniem: „Czy jest tu jakiś serwer DHCP? Potrzebuję adresu IP.” sprawdza swoją listę dostępnych adresów, przypisuje jeden do Twojego laptopa i zapisuje ten przydział. Jest to proces stanowy, ponieważ serwer musi utrzymywać „stan” (zapis) każdego urządzenia, które skonfigurował.
Projektanci IPv6 chcieli stworzyć bardziej usprawnione, zdecentralizowane i prawdziwie „podłącz i działaj” doświadczenie. Wyobrażali sobie świat, w którym urządzenie mogłoby połączyć się z siecią i samodzielnie skonfigurować sobie globalnie unikalny adres IP, bez konieczności pytania centralnego serwera o pozwolenie lub przydział.
Ta wizja jest realizowana poprzez . Słowo „bezstanowa” jest kluczowe: oznacza, że router dostarczający informacje sieciowe nie musi śledzić, które urządzenia przypisały sobie które adresy. Po prostu dostarcza niezbędne składniki, a każde urządzenie samo „piecze swoje ciasto”.
Silnik SLAAC: Protokół Wykrywania Sąsiadów (NDP)
SLAAC nie jest samodzielnym protokołem; jest to podstawowa funkcja Protokółu Wykrywania Sąsiadów (NDP). Jak dowiedzieliśmy się w lekcji o NDP, urządzenia w sieci IPv6 używają komunikatów ICMPv6 do poznawania swojego lokalnego środowiska. Dwa z tych komunikatów stanowią fundament SLAAC:
- Żądanie Routera (RS): Komunikat wysyłany przez hosta, gdy po raz pierwszy dołącza do sieci, z pytaniem: „Czy są tu jakieś routery, które mogą dać mi informacje o sieci?”
- Rozgłoszenie Routera (RA): Komunikat wysyłany przez router (okresowo lub w odpowiedzi na RS), który zawiera kluczowe parametry sieciowe. Dla SLAAC najważniejszą informacją w komunikacie RA jest prefiks sieciowy.
Komunikat RA to „przepis”, który dostarcza router, a prefiks sieciowy to główny składnik. Host następnie łączy ten składnik z własnym unikalnym składnikiem, aby utworzyć pełny, użyteczny adres IP.
Kompletny Proces SLAAC: Przewodnik Krok po Kroku
Prześledźmy całą podróż, jaką odbywa urządzenie od momentu podłączenia do sieci IPv6 do posiadania w pełni funkcjonalnego, globalnego adresu IP.
- Krok 1: Wygeneruj Adres Link-Local.
Zanim urządzenie pomyśli o komunikacji ze światem, potrzebuje tymczasowego, lokalnego adresu do komunikacji w swojej bezpośredniej sieci fizycznej. Tworzy ten samodzielnie. Zawsze zaczyna się od prefiksu
fe80::/10, a pozostałe 64 bity (Identyfikator Interfejsu) są zazwyczaj generowane na podstawie unikalnego adresu MAC sprzętu urządzenia. - Krok 2: Sprawdź Adres Link-Local (DAD).
Aby upewnić się, że nowo utworzony adres link-local nie jest już używany przez inne urządzenie (co jest bardzo rzadkie, ale możliwe), host wykonuje Wykrywanie Zduplikowanych Adresów (DAD). Wysyła komunikat Neighbor Solicitation z pytaniem: „Czy ktoś używa tego adresu?” Jeśli nie otrzyma odpowiedzi, wie, że adres jest unikalny i może go używać.
- Krok 3: Znajdź Router (Router Solicitation).
Teraz, gdy może komunikować się lokalnie, host potrzebuje informacji o szerszej sieci. Wysyła komunikat Router Solicitation (RS) na adres multemisji „wszystkie-routery” (
ff02::2). To urządzenie pyta: „Czy jakiś router może mi opowiedzieć o tej sieci?” - Krok 4: Odbierz Informacje o Sieci (Router Advertisement).
Router w sieci widzi RS i odpowiada komunikatem Router Advertisement (RA). RA zawiera mnóstwo informacji, ale dla SLAAC najważniejszy jest Prefiks Sieciowy (np.
2001:db8:acad:1::/64) i jego czas życia. - Krok 5: Utwórz Globalny Adres Unicast.
Host ma teraz dwa niezbędne składniki:
- 64-bitowy Prefiks Sieciowy od routera (
2001:db8:acad:1). - Własny 64-bitowy Identyfikator Interfejsu (który prawdopodobnie wygenerował już dla swojego adresu link-local).
Po prostu łączy je, tworząc pełny 128-bitowy Globalny Adres Unicast (GUA).
- 64-bitowy Prefiks Sieciowy od routera (
- Krok 6: Sprawdź Globalny Adres (DAD).
Na wszelki wypadek host ponownie wykonuje DAD, tym razem dla swojego nowego adresu globalnego. Wysyła kolejne Żądanie Sąsiada, aby upewnić się, że adres jest naprawdę unikalny na lokalnym łączu. Jeśli nie ma odpowiedzi, host oficjalnie przypisuje adres do swojego interfejsu.
W tym momencie urządzenie jest w pełni skonfigurowane z globalnie rutowalnym adresem IPv6 i zna swoją bramę domyślną (adres routera, który wysłał RA), a wszystko to bez serwera DHCP.
Dogłębnie: Proces EUI-64
Jedną z głównych metod generowania własnego 64-bitowego Identyfikatora Interfejsu przez hosta jest proces Zmodyfikowanego EUI-64. Ten algorytm bierze globalnie unikalny 48-bitowy adres MAC urządzenia i rozszerza go do 64-bitowego identyfikatora. Przeanalizujmy go.
Przykład: Konwersja Adresu MAC
Załóżmy, że nasze urządzenie ma adres MAC 00:1A:2B:3C:4D:5E.
- Krok 1: Podziel Adres MAC na Pół.
48-bitowy (6-bajtowy) adres MAC jest dzielony na dwie 24-bitowe (3-bajtowe) połówki.
00:1A:2B oraz 3C:4D:5E
- Krok 2: Wstaw Hekstet 'FFFE'.
16-bitowa wartość
FFFE(szesnastkowo) jest wstawiana dokładnie pomiędzy obie połówki. To rozszerza adres do 64 bitów.00:1A:2B:FF:FE:3C:4D:5E
- Krok 3: Odwróć 7. Bit.
To jest "Zmodyfikowana" część EUI-64. 7. bit pierwszego bajtu jest odwracany. Ten bit to . Odwrócenie go z 0 na 1 oznacza, że adres został lokalnie zmodyfikowany w celu utworzenia Identyfikatora Interfejsu.
- Pierwszy bajt to
00szesnastkowo, czyli00000000binarnie. - Bity są numerowane od 1 do 8. Musimy odwrócić 7. bit.
00000000 - Odwrócenie 7. bitu z 0 na 1 daje nam:
00000010. - W systemie szesnastkowym
00000010to02.
- Pierwszy bajt to
- Krok 4: Końcowy Identyfikator Interfejsu.
Mamy teraz ostateczny 64-bitowy Identyfikator Interfejsu.
021A:2BFF:FE3C:4D5E
Jeśli nasz prefiks sieciowy to
2001:db8:acad:1::/64, pełny adres globalny urządzenia będzie następujący:2001:db8:acad:1:21a:2bff:fe3c:4d5e
A Co z DNS? Rola DHCPv6
SLAAC jest genialny do przydzielania adresu IP i bramy domyślnej. Jednakże nie dostarcza on wszystkich niezbędnych parametrów konfiguracyjnych. W szczególności, podstawowy komunikat Router Advertisement nie zawiera adresów serwerów DNS. Urządzenie bez adresu serwera DNS nie może przeglądać internetu używając nazw domenowych.
W tym miejscu do gry wraca DHCP dla IPv6 (DHCPv6). Interakcja między SLAAC a DHCPv6 jest kontrolowana przez trzy flagi w komunikacie Router Advertisement wysyłanym przez router.
- Flaga A (Autonomous Address-Configuration Flag): Jeśli ustawiona na 1, informuje hosta, że powinien użyć SLAAC do utworzenia własnego adresu.
- Flaga M (Managed Address Configuration Flag): Jeśli ustawiona na 1, informuje hosta, że musi skontaktować się z serwerem DHCPv6 po swój adres IP. Nazywa się to „stanowym DHCPv6” i działa tak samo jak DHCP w IPv4.
- Flaga O (Other Configuration Flag): Jeśli ustawiona na 1, informuje hosta, że powinien skontaktować się z serwerem DHCPv6 w celu uzyskania dodatkowych informacji, takich jak adresy serwerów DNS, po tym jak już skonfigurował własny adres IP za pomocą SLAAC. Nazywa się to „bezstanowym DHCPv6”.
| Flaga A | Flaga M | Flaga O | Wynikowa Akcja Hosta |
|---|---|---|---|
| 1 | 0 | 0 | Tylko SLAAC. Host pobiera swój adres IP i bramę z RA. Musi znaleźć serwery DNS inną metodą (np. konfiguracja ręczna lub inny protokół). |
| 1 | 0 | 1 | SLAAC + Bezstanowe DHCPv6. To bardzo powszechna konfiguracja. Host używa SLAAC dla swojego adresu IP, ale dodatkowo pyta serwer DHCPv6 tylko o adresy serwerów DNS. |
| 0 | 1 | 1 | Tylko Stanowe DHCPv6. Host ignoruje SLAAC i kontaktuje się z serwerem DHCPv6 po swój adres IP, bramę, DNS i wszystkie inne parametry, tak jak w IPv4. |
Uwaga o Prywatności: EUI-64 a Rozszerzenia Prywatności
Metoda EUI-64, chociaż sprytna, ma jedną znaczącą wadę: ponieważ Identyfikator Interfejsu jest oparty na stałym, globalnie unikalnym adresie MAC urządzenia, nigdy się nie zmienia. Oznacza to, że gdy przemieszczasz swojego laptopa z sieci do sieci (np. z domu do kawiarni, na lotnisko), Twoje urządzenie może być śledzone w internecie przez jego stały Identyfikator Interfejsu.
Aby rozwiązać ten poważny problem prywatności, opracowano Rozszerzenia Prywatności IPv6 (RFC 4941). Nowoczesne systemy operacyjne (takie jak Windows, macOS, Android i iOS) domyślnie używają tej funkcji.
Zamiast używać statycznego identyfikatora EUI-64, urządzenie wygeneruje tymczasowy, losowy 64-bitowy Identyfikator Interfejsu dla swojego adresu globalnego. Ten adres jest używany do wszystkich połączeń wychodzących (jak przeglądanie internetu). Co kluczowe, ten tymczasowy adres jest okresowo zmieniany (np. codziennie). To sprawia, że śledzenie konkretnego urządzenia użytkownika w różnych sieciach na podstawie jego adresu IPv6 jest praktycznie niemożliwe, co znacznie zwiększa prywatność użytkownika. Urządzenie nadal utrzymuje swój stabilny, oparty na EUI-64 adres, aby w razie potrzeby odbierać określone połączenia przychodzące.