Dlaczego potrzebujesz adresu IPv6 Neighbor Solicitation, aby uzyskać adres MAC?

12

Jestem programistą i właśnie dostałem darmową książkę o IPv6 na Techdays, którą czytam dla zabawy. Oddali go, ponieważ jest to trochę stara książka (W2008), więc może jest inaczej w przypadku innych / nowszych systemów operacyjnych, ale nie rozumiem konieczności uzyskania adresu MAC przez Neighbor Discovery.

Zgodnie z książką, każdy węzeł automatycznie otrzymuje lokalny adres IP łącza, który jest tworzony z adresu MAC poprzez wstawienie FF-FEmiędzy 3 i 4 bajtami i odwrócenie bitu U / L, tak aby lokalny adres IP łącza węzeł z adresem MAC 00-AA-00-3F-2A-1Cstaje się FE80::2AA:FF:FE:3F:2A1C.

Aby ustalić adres MAC warstwy łącza, na adres lokalny adres IP łącza wysyłana jest wiadomość Neighbor Solicitation, która odpowiada wiadomością zawierającą adres MAC ... Ale nadawca już o tym wie, ponieważ MAC jest zakodowany w łączu lokalny adres IP. Brzmi więc jak wysłanie pocztówki do kogoś, kto prosi o adres.

Edwin
źródło

Odpowiedzi:

20

Każdy węzeł automatycznie generuje adres lokalny dla łącza, ale:

  • Adres ten może nie zostać wygenerowany w formacie EUI-64 określonym w RFC 2464 . Adresy IPv6 mogą być również adresami generowanymi kryptograficznie ( RFC 3972 ), tymczasowymi adresami prywatności ( RFC 4941 ) lub w nowoczesnych systemach operacyjnych stabilnymi adresami prywatności ( RFC 7217 ).

  • Adres, który wygląda tak, jakby miał identyfikator interfejsu EUI-64, może w rzeczywistości nie odpowiadać wskazanemu adresowi MAC z powodu jawnej konfiguracji przez administratora.

Ponieważ nie można po prostu „przekonwertować adresu z powrotem” na adres MAC, należy wysłać zapytanie sąsiada w celu ustalenia adresu MAC.

Są też inne powody, dla których konieczne jest pozyskiwanie sąsiadów. Niektóre z nich to:

  • Wykrywanie duplikatów adresów ( RFC 4862 ). Możliwe, że jakiś inny host mógł (słusznie lub niesłusznie) zgłosić adres, którego host chce użyć.
  • Wykrywanie nieosiągalności sąsiada. Brak odpowiedzi na prośbę sąsiada jest jednym ze wskaźników, że sąsiad jest nieosiągalny.

Książki są dobre i dobre, ale bardzo przestarzałe książki mogą nie być tak przydatne. Nawet IPv6 miał znaczące zmiany w ciągu ostatnich dziesięciu lat. Najlepszym źródłem prawdy są odpowiednie RFC, zarówno oryginalne, jak i te oznaczone jako zaktualizowane lub nieaktualne. RFC są określone wystarczająco szczegółowo, aby umożliwić napisanie zgodnych implementacji. Możesz poznać wszystkie szczegóły odkrywania sąsiadów, czytając RFC 4861 .

Michael Hampton
źródło
Dzięki za poprawki; jeśli nie używasz formatu EUI-64, rzeczywiście istnieje potrzeba wykrycia MAC. Ale tak naprawdę nie rozumiem obaw związanych z prywatnością w formacie EUI-64 dla adresów lokalnych dla linków, ponieważ adres lokalny dla linków jest ograniczony do linku i na tym łączu adres MAC będzie musiał (i może być) ) znany zresztą (przez Neighbor Solicitation) do komunikacji Ethernet, więc w przypadku złych intencji adres MAC można zapisać wzdłuż stałego adresu prywatności na łączu lokalnym, prawda?
Edwin,
@Edwin, SLAAC był pierwotnie używany do wszystkich adresów IPv6, nie tylko adresów Link-Local, więc host mógł być śledzony. SLAAC to tylko jedna metoda przypisywania adresów lokalnych. Można je również przypisać ręcznie, co nie daje adresu MAC w adresie Link-Local. Znam niektóre osoby, które chcą ręcznie przypisać wszystkie adresy, w tym Link Local. Wydaje się, że to dużo pracy za niewielki lub żaden zysk, ale sprawia, że ​​są szczęśliwi, a wszystkie identyfikatory IID wszystkich adresów w interfejsie są takie same, w preferowanej kolejności.
Ron Maupin
@Edwin I każdy host rzeczywiście utrzyma docelową pamięć podręczną (patrz RFC 4861), która jest analogiczna do tabeli ARP IPv4, którą utrzymują hosty.
Michael Hampton
CGA mogłoby być prostsze i bezpieczniejsze, gdyby adresy były dwa razy większe. Połowa specyfikacji to obejścia polegające na tym, że w identyfikatorze interfejsu mają tylko 64 bity, a najlepiej około 162 bitów. Należy pamiętać, gdy pojawia się pomysł, że 128 bitów to za dużo.
kasperd
Co uważasz za niestandardowe w tym dokumencie Microsoft? Dla mnie wygląda na to, że po prostu podsumowuje RFC, z którymi się połączyłeś.
kasperd
9

Więc albo źle zrozumiałeś, albo zostałeś źle poinformowany o kilku rzeczach.

Korzystając z SLAAC, host może zbudować własne adresowanie IPv6 przy użyciu swojego adresu MAC, ale wiele osób uważało, że jest to niebezpieczne, przekazując zbyt wiele informacji i umożliwiając śledzenie określonego hosta. Na tej podstawie opracowano rozszerzenia prywatności i losowe adresowanie, które są wykorzystywane przez systemy operacyjne w celu zapewnienia prywatności / bezpieczeństwa. Oznacza to, że host może utworzyć własne adresowanie, nie oparte na adresie MAC.

Kiedy host musi wykryć adres MAC sąsiada w IPv4, używa ARP. ARP rozgłasza żądanie, ale IPv6 nie ma rozgłoszenia. Zamiast tego każdy host musi dołączyć do grupy multiemisji z zamówionym węzłem. Ta grupa opiera się na ostatnich 24 bitach adresu IPv6. Ponieważ interfejsy IPv6 mogą mieć dowolną liczbę adresów IPv6, host może dołączyć do wielu grup multiemisji Zażądanego Węzła. Host IPv6 szukający adresu MAC innego hosta wyśle ​​żądanie multiemisji do grupy multiemisji Zażądanego węzła docelowego adresu IPv6.

Zapewnia to przewagę nad ARP IPv4. Ponieważ ARP korzysta z emisji dla żądań, przerywa każdy host w domenie emisji warstwy 2. Ponieważ grupa multiemisji z zamówionym węzłem wykorzystuje ostatnie 24 bity docelowego adresu IPv6, żądanie multiemisji ND prawdopodobnie przerwie tylko hosta docelowego lub ewentualnie jednego lub dwóch innych hostów w domenie rozgłoszeniowej warstwy 2.

Ron Maupin
źródło