1/48 ARP – Address Resolution Protocol

ARP (Address Resolution Protocol) oraz NDP (Neighbor Discovery Protocol) – ARP mapuje adresy IP na MAC w sieciach IPv4 i IPv6.

Prezentacja obejmuje: budowę ramki ARP, działanie ARP Request/Reply, tablicę ARP, Gratuitous ARP, Proxy ARP, ARP Spoofing, a także NDP w IPv6 (NS, NA, RS, RA, DAD, SLAAC, NUD).

48 slajdów z diagramami, tabelami i przykładami z konsoli.

ARP jest protokołem niezbędnym do poprawnego funkcjonowania sieci Ethernet, ponieważ bez niego hosty nie wiedziałyby, pod jaki adres MAC wysyłać ramki przeznaczone dla konkretnego adresu IP.

Mechanizm ten został opracowany w czasach, gdy sieci komputerowe dopiero raczkowały, a jego konstrukcja okazała się na tyle uniwersalna, że przetrwał do dziś w niemal niezmienionej postaci.

Choć ARP działa tylko w obrębie jednej podsieci, to właśnie on umożliwia komunikację bezpośrednią pomiędzy urządzeniami w tej samej domenie rozgłoszeniowej.

Bez tego protokołu każdy pakiet IP wymagałby ręcznego skonfigurowania powiązań pomiędzy adresami logicznymi a fizycznymi.

Co istotne, protokół ten nie zapewnia żadnych mechanizmów uwierzytelniania, co czyni go podatnym na szereg ataków.

Z tego powodu w nowoczesnych sieciach stosuje się dodatkowe zabezpieczenia, takie jak Dynamic ARP Inspection.

W środowisku IPv6 jego funkcje przejął znacznie bardziej rozbudowany protokół NDP, który eliminuje wiele słabości ARP.

2/48 Plan prezentacji

Część 1: ARP w IPv4

  • Czym jest ARP? (RFC 826)
  • Budowa ramki ARP (28 bajtów)
  • ARP Request (broadcast) i ARP Reply (unicast)
  • Tablica ARP (cache) i zarządzanie
  • Gratuitous ARP (GARP)
  • Proxy ARP
  • ARP Spoofing i zabezpieczenia
  • Polecenia: arp, ip neigh, arping, tcpdump

Część 2: NDP w IPv6

  • Neighbor Discovery Protocol (RFC 4861)
  • ICMPv6 jako podstawa NDP
  • Neighbor Solicitation (NS) i NA
  • Router Solicitation (RS) i RA
  • Duplicate Address Detection (DAD)
  • SLAAC i autokonfiguracja
  • Neighbor Cache i NUD
  • Polecenia: ip -6 neigh, ping6, tcpdump
Blok narzędziowy uczy praktycznego wykorzystania poleceń systemowych i analizatorów pakietów, co jest niezwykle ważne z punktu widzenia administratora sieci.

Taki podział prezentacji na cztery logiczne bloki pozwala studentom stopniowo przyswajać materiał od podstaw ARP w IPv4, przez zaawansowane mechanizmy NDP w IPv6, aż po praktyczne narzędzia do diagnostyki i analizy.

Każda część została zaprojektowana tak, aby stanowić zamkniętą całość, ale jednocześnie płynnie wprowadzać w kolejne zagadnienia.

W części pierwszej szczególny nacisk położono na szczegółową budowę ramki ARP oraz sekwencję wymiany komunikatów Request i Reply.

Druga część koncentruje się na różnicach pomiędzy ARP a NDP oraz na nowych funkcjach, takich jak DAD i SLAAC, które nie mają swojego bezpośredniego odpowiednika w IPv4.

Podsumowanie zaś zestawia oba protokoły w formie tabelarycznej, co ułatwia zapamiętanie kluczowych różnic i podobieństw.

3/48 Czym jest ARP?
ARP działa TYLKO w obrębie jednej podsieci. Do komunikacji z innymi podsieciami pakiet jest kierowany do bramy domyślnej.

ARP (Address Resolution Protocol) – protokół warstwy łącza (L2), zdefiniowany w RFC 826 (1982).

Zadanie: ARP – mapowanie adresów logicznych (IP) na fizyczne (MAC) w sieciach Ethernet / Wi-Fi.

Gdy host A chce wysłać pakiet IP do hosta B w tej samej sieci, ARP rozwiązuje adres MAC B.

ARP jest czasem nazywany protokołem warstwy L2.5 (pomiędzy L2 a L3 modelu OSI).

ARP przez dziesięciolecia pozostawał niezmieniony, co świadczy o jakości jego pierwotnego projektu, ale też o braku motywacji do wprowadzania radykalnych zmian w warstwie łącza.

Jego umiejscowienie na styku warstwy drugiej i trzeciej modelu OSI bywa przedmiotem dyskusji, ponieważ nagłówek ARP nie jest ani typowym nagłówkiem L2, ani L3.

W praktyce każdy system operacyjny implementuje ARP w jądrze, aby zapewnić jak najkrótszy czas odpowiedzi na żądania rozpoznawania adresów.

Bez tego protokołu routing wewnątrz podsieci byłby niemożliwy bez ręcznej konfiguracji tablic MAC na każdym hoście.

Wraz z pojawieniem się IPv6 twórcy protokołu postanowili przeprojektować mechanizm mapowania adresów, tworząc NDP, który jest nie tylko bezpieczniejszy, ale też znacznie bardziej funkcjonalny.

Mimo to ARP wciąż pozostaje kluczowym elementem sieci IPv4 i prawdopodobnie pozostanie nim jeszcze przez wiele lat.

4/48 Budowa ramki ARP
PoleRozmiarOpis
HTYPE2 BTyp sprzętu (1 = Ethernet)
PTYPE2 BTyp protokołu (0x0800 = IPv4)
HLEN1 BDługość adresu sprzętowego (6 dla MAC)
PLEN1 BDługość adresu protokołu (4 dla IPv4)
OPER2 BOperacja: 1=Request, 2=Reply, 3=RARP Req, 4=RARP Rep
SHAHLENSender Hardware Address (MAC nadawcy)
SPAPLENSender Protocol Address (IP nadawcy)
THAHLENTarget Hardware Address (MAC celu)
TPAPLENTarget Protocol Address (IP celu)

Nagłówek ARP ma stały rozmiar 28 bajtów (dla IPv4/Ethernet).

Pole EtherType w ramce Ethernet = 0x0806.

Nagłówek ARP o długości 28 bajtów został zaprojektowany tak, aby był jak najbardziej uniwersalny i mógł obsługiwać różne typy sieci oraz protokołów warstwy wyższej.

Pola HTYPE i PTYPE określają, dla jakiego rodzaju sprzętu i protokołu przeznaczona jest dana ramka ARP, co pozwala na stosowanie tego samego formatu w sieciach Ethernet, Token Ring czy FDDI.

Długości adresów HLEN i PLEN są dynamicznie określane na podstawie typu sprzętu i protokołu, co daje elastyczność przy przejściu na nowe technologie.

Pole OPER wskazuje, czy mamy do czynienia z żądaniem, odpowiedzią, czy też rzadziej używanymi typami, takimi jak RARP Request i Reply.

Pozostałe cztery pola zawierają adresy źródłowe i docelowe zarówno warstwy łącza, jak i warstwy sieciowej, co w przypadku ARP Reply pozwala od razu poznać poszukiwane powiązanie.

Co ciekawe, w przypadku ARP Request pole THA (docelowy adres MAC) jest wypełnione zerami, ponieważ właśnie ta wartość jest poszukiwana.

Taka konstrukcja sprawia, że protokół jest niezwykle lekki i efektywny.

5/48 ARP Request
PoleWartość
Ethernet dstFF:FF:FF:FF:FF:FF
Ethernet srcMAC_A
EtherType0x0806
OPER1 (Request)
SHAMAC_A
SPA192.168.1.1
THA00:00:00:00:00:00 (nieznany)
TPA192.168.1.10 (szukany IP)

Pytanie ARP: "Kto ma IP 192.168.1.10?"

Host A (192.168.1.1) wysyła ARP Request broadcast (MAC dst = FF:FF:FF:FF:FF:FF).

Odbierają go wszystkie hosty w tej samej domenie rozgłoszeniowej.

Odpowiada host 192.168.1.10 (MAC: aa:bb:cc:dd:ee:ff).

Wysłanie ramki z docelowym adresem MAC FF:FF:FF:FF:FF:FF powoduje, że każda karta sieciowa w domenie rozgłoszeniowej odbiera tę ramkę i przekazuje ją do jądra systemu operacyjnego do dalszego przetworzenia.

Choć jest to skuteczna metoda dotarcia do wszystkich urządzeń, generuje ona niepotrzebne obciążenie tych hostów, które nie są adresatem zapytania.

W przypadku sieci VLAN broadcast ARP jest ograniczony wyłącznie do portów należących do tej samej sieci VLAN, co stanowi naturalną barierę dla rozprzestrzeniania się ruchu ARP.

W dużych sieciach z setkami hostów częste broadcasty ARP mogą stanowić zauważalny narzut, dlatego nowoczesne przełączniki stosują mechanizmy takie jak ARP throttling czy cache.

W protokole IPv6 problem ten rozwiązano poprzez zastosowanie adresacji multicastowej zamiast broadcastowej, co znacząco redukuje liczbę urządzeń przetwarzających niepotrzebne zapytania.

Warto też pamiętać, że broadcast ARP nie przechodzi przez routery, co jest zarówno ograniczeniem, jak i cechą zwiększającą bezpieczeństwo.

6/48 ARP Reply
PoleWartość
Ethernet dstMAC_A
Ethernet srcMAC_B
EtherType0x0806
OPER2 (Reply)
SHAMAC_B
SPA192.168.1.10
THAMAC_A
TPA192.168.1.1

Host B (192.168.1.10) odpowiada ARP Reply unicast – bezpośrednio do hosta A.

Odpowiedź ARP: "Mam IP 192.168.1.10, mój MAC to: BB:BB:BB:BB:BB:BB"

Większość systemów zapamiętuje odpowiedź w tablicy ARP (ARP cache).

Co ważne, system operacyjny po odebraniu ARP Reply nie tylko uzupełnia wpis dla adresu IP, o który pytał, ale często także aktualizuje tablicę ARP dla adresu IP nadawcy odpowiedzi.

Przejście z transmisji broadcastowej w żądaniu na unicastową w odpowiedzi jest celowym zabiegiem optymalizacyjnym, który minimalizuje niepotrzebny ruch w sieci.

Gdy host B odpowiada na zapytanie ARP, zna już adres MAC nadawcy, więc może wysłać odpowiedź bezpośrednio do niego, co oszczędza zasoby pozostałych stacji.

W polu THA odpowiedzi znajduje się adres MAC hosta A, który został pobrany z pola SHA odebranego żądania, co zapewnia poprawną serializację ramki.

To zjawisko, znane jako ARP cross-population, przyspiesza późniejszą komunikację, ponieważ obie strony znają już swoje adresy MAC bez potrzeby wysyłania dodatkowych zapytań.

W systemach Linux wpisy utworzone na podstawie odpowiedzi ARP przechodzą w stan REACHABLE, który utrzymuje się przez kilkadziesiąt sekund przy braku aktywności.

7/48 Pełny przepływ ARP
  1. Host A chce wysłać pakiet do B (192.168.1.10)
  2. A sprawdza tablicę ARP – brak wpisu
  3. A wysyła ARP Request broadcast (MAC FF:FF:FF:FF:FF:FF)
  4. Wszystkie hosty odbierają request, ale tylko B rozpoznaje swoje IP
  5. B wysyła ARP Reply unicast do A (ze swoim MAC)
  6. A zapisuje parę IP↔MAC w tablicy ARP (stan REACHABLE)
  7. A może teraz wysłać ramki Ethernet bezpośrednio do B
Cały proces trwa milisekundy. ARP Request ma rozmiar 42 B (14 B Ethernet + 28 B ARP).

Cały proces rozpoznawania adresu MAC od momentu wysłania ARP Request do otrzymania ARP Reply trwa zazwyczaj od kilkuset mikrosekund do kilku milisekund, co jest wartością pomijalną z perspektywy użytkownika.

Warto podkreślić, że host A przed wysłaniem broadcastu zawsze najpierw sprawdza swoją lokalną tablicę ARP, aby uniknąć niepotrzebnego generowania ruchu sieciowego.

Jeśli wpis w cache jest w stanie REACHABLE, system wykorzystuje zapamiętane powiązanie i od razu przystępuje do wysyłania danych.

Dopiero gdy wpis wygaśnie lub zostanie oznaczony jako STALE, inicjowana jest nowa sesja rozpoznawania.

W systemach Linux domyślny czas utrzymywania wpisu w stanie REACHABLE wynosi około trzydziestu sekund od momentu ostatniego potwierdzenia aktywności, co stanowi kompromis między świeżością danych a liczbą generowanych zapytań.

W przypadku braku komunikacji z danym hostem wpis przechodzi w stan STALE i ostatecznie po kilku minutach jest usuwany z tablicy.

8/48 Tablica ARP (ARP Cache)
Adres IPAdres MACInterfejsTyp
192.168.1.1aa:bb:cc:dd:ee:01eth0dynamiczny
192.168.1.10aa:bb:cc:dd:ee:0aeth0dynamiczny
192.168.1.254aa:bb:cc:dd:ee:feeth0statyczny

Czas życia wpisu ARP (TTL):

SystemCzas życia
Linux~3 s (INCOMPLETE), ~30 s (REACHABLE)
Windows~2 min (nieużywany), ~10 min (aktywny)
macOS~20 s (niekompletny), ~20 min (kompletny)
Cisco IOS~4 godziny (domyślnie)

Każdy system przechowuje rozpoznane pary IP ↔ MAC w lokalnej tablicy ARP.

Tablica ARP jest fundamentalnym elementem każdego systemu sieciowego, ponieważ przechowuje rozpoznane wcześniej powiązania między adresami IP i MAC, co pozwala uniknąć powtarzania kosztownych zapytań broadcastowych.

Każdy wpis w tablicy ARP posiada swój czas życia, który jest zarządzany niezależnie przez system operacyjny i może się znacznie różnić pomiędzy różnymi platformami.

W systemie Linux wpisy dynamiczne przechodzą przez stany INCOMPLETE, REACHABLE, STALE, DELAY i PROBE, zanim ostatecznie zostaną uznane za FAILED i usunięte.

Co istotne, wpisy statyczne są odporne na wygaśnięcie i nie mogą być nadpisane przez odpowiedzi ARP pochodzące z sieci, co stanowi skuteczną ochronę przed atakami ARP spoofing.

Administratorzy często stosują wpisy statyczne dla kluczowych urządzeń, takich jak routery czy serwery DNS, aby zapewnić niezmienność ich mapowania i jednocześnie zwiększyć bezpieczeństwo.

W praktyce jednak zarządzanie setkami statycznych wpisów w dużej sieci byłoby niepraktyczne, dlatego stosuje się je wybiórczo.

9/48 Polecenia ARP – Linux

ip neigh (nowe narzędzie z iproute2)

# Wyświetlenie tablicy ARP
ip neigh show

# Dodanie statycznego wpisu
ip neigh add 192.168.1.100 lladdr aa:bb:cc:dd:ee:ff dev eth0

# Usunięcie wpisu
ip neigh del 192.168.1.100 dev eth0

arp (starsze narzędzie z net-tools)

# Wyświetlenie tablicy
arp -n

# Dodanie wpisu
arp -s 192.168.1.100 aa:bb:cc:dd:ee:ff

# Usunięcie
arp -d 192.168.1.100

# Czyszczenie całej tablicy
ip neigh flush all
Wskazówka: ip neigh jest nowoczesnym zamiennikiem arp z pakietu iproute2.

Narzędzie ip z pakietu iproute2 jest obecnie standardem w systemach Linux i wypiera starsze polecenie arp z pakietu net-tools, które w wielu nowoczesnych dystrybucjach nie jest już instalowane domyślnie.

Wybór pomiędzy ip neigh a arp sprowadza się nie tylko do kwestii dostępności, ale także do funkcjonalności, ponieważ ip neigh oferuje znacznie więcej opcji zarządzania sąsiadami.

Polecenie ip neigh umożliwia nie tylko wyświetlanie i dodawanie wpisów, ale także zmianę ich stanu, co przydaje się przy debugowaniu problemów z komunikacją.

Starsze narzędzie arp z kolei jest prostsze w użyciu i bardziej intuicyjne dla początkujących administratorów, którzy dopiero uczą się diagnostyki sieci.

Warto zauważyć, że ip neigh pokazuje zarówno sąsiadów IPv4, jak i IPv6, co czyni je narzędziem uniwersalnym niezależnie od stosowanego protokołu.

Podczas czyszczenia całej tablicy ARP polecenie ip neigh flush all jest znacznie szybsze niż ręczne usuwanie każdego wpisu z osobna.

10/48 Polecenia ARP – Windows

arp w Windows

# Wyświetlenie tablicy ARP
arp -a

# Wyświetlenie dla konkretnego interfejsu
arp -a -N 192.168.1.1

# Dodanie wpisu statycznego
arp -s 192.168.1.100 aa-bb-cc-dd-ee-ff

# Usunięcie wpisu
arp -d 192.168.1.100

netsh (zaawansowane)

# Wyświetlenie interfejsów
netsh interface ipv4 show interfaces

# Wyświetlenie sąsiadów
netsh interface ipv4 show neighbors
Uwaga: W Windows notacja MAC używa myślników: aa-bb-cc-dd-ee-ff (nie dwukropków).

W systemie Windows zarządzanie tablicą ARP odbywa się zarówno za pomocą klasycznego polecenia arp, jak i zaawansowanych cmdletów PowerShell, które oferują znacznie większe możliwości skryptowania i automatyzacji.

Polecenie netsh interface ipv4 show neighbors stanowi pomost pomiędzy starym arp a nowoczesnym podejściem PowerShell, udostępniając szczegółowe informacje o każdym wpisie ARP wraz z interfejsem, przez który jest on osiągalny.

W Windows format zapisu adresów MAC z myślnikami zamiast dwukropków jest specyficzny dla tej platformy i wynika z tradycji sięgającej czasów systemu MS-DOS.

Administratorzy pracujący w heterogenicznych środowiskach muszą pamiętać o tych różnicach podczas przenoszenia skryptów pomiędzy Linuxem a Windows.

Nowoczesne podejście z wykorzystaniem PowerShell i modułu NetAdapter umożliwia programowe zarządzanie tablicą ARP, co jest szczególnie przydatne w środowiskach korporacyjnych z setkami stacji roboczych.

Polecenie Get-NetNeighbor zwraca obiekty z właściwościami takimi jak IPAddress, LinkLayerAddress, State i InterfaceAlias.

11/48 arping – diagnostyka ARP

Przykłady:

# Sprawdzenie czy IP jest używane
arping 192.168.1.10

# Wysłanie 3 ARP requestów
arping -c 3 192.168.1.10

# Określenie interfejsu
arping -I eth0 192.168.1.10

# Gratuitous ARP
arping -A -c 3 192.168.1.1

# DAD
arping -D -c 3 192.168.1.100

Przykładowe wyjście:

ARPING 192.168.1.10
42 bytes from aa:bb:cc:dd:ee:ff (192.168.1.10):
  index=0 time=1.230 msec
  index=1 time=0.850 msec
--- statistics ---
2 transmitted, 2 received, 0% unanswered

arping – narzędzie do wysyłania ARP Requestów i pomiaru odpowiedzi.

Narzędzie arping jest niezwykle przydatne w sytuacjach, gdy standardowe ping nie działa, ponieważ pozwala na diagnostykę na poziomie warstwy łącza bez konieczności konfiguracji adresu IP na interfejsie.

W przeciwieństwie do ping, który wymaga działającego stosu IP i poprawnej konfiguracji routingu, arping wysyła ramki ARP bezpośrednio przez wskazany interfejs, co czyni go idealnym narzędziem do testowania łączności w warstwie drugiej.

Opcja -A (unsolicited ARP) pozwala na wysłanie gratuitous ARP, co jest przydatne przy wymuszeniu aktualizacji tablic ARP w innych urządzeniach sieciowych.

Z kolei opcja -D (DAD probe) służy do sprawdzenia, czy dany adres IP jest już używany w sieci, bez konieczności jego konfigurowania na interfejsie.

Wyniki arping pokazują czas odpowiedzi w milisekundach, co pozwala ocenić opóźnienie na poziomie warstwy łącza.

W środowiskach, gdzie stosowana jest autoryzacja 802.1X, arping może również pomóc w diagnostyce problemów z dostępem do sieci.

12/48 tcpdump – podsłuch ARP
# Tylko ruch ARP
tcpdump -i eth0 arp

# Tylko ARP Request
tcpdump -i eth0 'arp[6:2] = 1'

# Tylko ARP Reply
tcpdump -i eth0 'arp[6:2] = 2'

# ARP dla konkretnego IP
tcpdump -i eth0 'arp and host 192.168.1.10'

Przykład wyjścia:

12:34:56.789012 ARP, Request who-has 192.168.1.10
  tell 192.168.1.1, length 28
12:34:56.789123 ARP, Reply 192.168.1.10 is-at
  aa:bb:cc:dd:ee:ff, length 28

tcpdump – analizator ruchu sieciowego.

Filtry dla ARP:

Użycie przełącznika -e (print link-level header) pokazuje adresy MAC źródła i przeznaczenia, co jest kluczowe przy analizie ARP, gdzie adresy te są niezbędne do zrozumienia przepływu komunikacji.

tcpdump jest podstawowym narzędziem każdego administratora sieci do analizy ruchu ARP, ponieważ umożliwia przechwytywanie i szczegółowe badanie każdej ramki przechodzącej przez interfejs sieciowy.

Przełącznik -v (verbose) dodaje dodatkowe informacje, takie jak długość ramki i szczegóły pól nagłówka ARP.

Filtrowanie ruchu za pomocą wyrażeń takich jak ' arp [6:2] = 1' pozwala na wyodrębnienie tylko żądań ARP, co jest przydatne podczas diagnozowania problemów z rozpoznawaniem adresów.

W przypadku podejrzenia ataku ARP spoofing, tcpdump w połączeniu z filtrem arp pozwala szybko zidentyfikować nietypową aktywność.

Warto pamiętać, że do przechwytywania pakietów w systemach Linux wymagane są uprawnienia roota lub odpowiednie capability CAP_NET_RAW.

13/48 Gratuitous ARP (GARP)
PoleWartość w GARP
MAC dstFF:FF:FF:FF:FF:FF
SHAMAC nadawcy
SPAIP nadawcy (to samo co TPA)
THAMAC nadawcy
TPAIP nadawcy (to samo co SPA)
OPER1 (Request)

Zastosowania GARP:

  • DAD – sprawdzenie, czy IP jest już używane
  • Aktualizacja tablic ARP po zmianie MAC
  • VRRP/HSRP – przejęcie IP przez router backup
  • Bonding/LACP – aktualizacja MAC po failover

Gratuitous ARPARP Request wysłany przez hosta o własny adres IP.

Gratuitous ARP to szczególny typ komunikatu ARP, w którym host wysyła zapytanie o własny adres IP, co pozwala innym urządzeniom w sieci na aktualizację ich tablic ARP bez oczekiwania na standardową wymianę Request i Reply.

Mechanizm ten jest powszechnie wykorzystywany w protokołach wysokiej dostępności, takich jak VRRP i HSRP, gdzie router zapasowy przejmuje adres IP routera podstawowego i informuje o tym pozostałe urządzenia poprzez wysłanie GARP.

W przypadku łączenia interfejsów w trybie bondingu (LACP) po awarii jednego z fizycznych interfejsów GARP pozwala na szybkie poinformowanie przełącznika o zmianie adresu MAC.

Kolejnym zastosowaniem jest wykrywanie duplikacji adresów IP w sieci, gdzie host przed skonfigurowaniem adresu wysyła GARP i oczekuje odpowiedzi.

W systemach Linux GARP można wygenerować ręcznie za pomocą arping z opcją -A, co jest przydatne podczas testowania zachowania sieci.

Należy jednak pamiętać, że niektórzy producenci przełączników mogą traktować nadmierną liczbę GARP jako potencjalny atak.

14/48 Proxy ARP
Zastosowanie: łączenie dwóch sieci bez routingu na hostach. Rozwiązanie niezalecane – lepiej użyć właściwego routingu.

Proxy ARP – router (lub inny host) odpowiada na ARP Request w imieniu innego hosta.

Używany gdy host A myśli, że host B jest w tej samej sieci, ale fizycznie B jest za routerem.

Schemat: Host A (192.168.1.10/24) → ARP "kto ma 10.0.0.10?" → Router (192.168.1.1) odpowiada swoim MAC → Router przekazuje ruch do B (10.0.0.10).

Mimo swojej prostoty Proxy ARP ma poważne wady, takie jak zwiększone obciążenie routera, problemy z bezpieczeństwem i utrudniona diagnostyka sieci.

Proxy ARP to mechanizm, w którym router lub dedykowany host odpowiada na zapytania ARP w imieniu innych urządzeń, tworząc iluzję, że wszystkie hosty znajdują się w tej samej sieci warstwy drugiej.

Rozwiązanie to było popularne w latach dziewięćdziesiątych, gdy brakowało świadomości routingu na hostach, a administratorzy chcieli łączyć ze sobą podsieci bez konieczności konfiguracji bram domyślnych.

Gdy host A pyta o adres IP znajdujący się w innej podsieci, router włączający Proxy ARP odpowiada swoim adresem MAC, a następnie przekazuje pakiety do właściwego celu.

Współcześnie odradza się stosowanie Proxy ARP na rzecz właściwego routingu z poprawnie skonfigurowanymi bramami domyślnymi.

Wyjątkiem są niektóre scenariusze w sieciach Wi-Fi, gdzie punkt dostępowy może używać Proxy ARP dla stacji w trybie oszczędzania energii.

15/48 ARP Spoofing / ARP Poisoning

Jak działa atak?

  1. Atakujący wysyła ARP Reply z IP routera i swoim adresem MAC
  2. Ofiara aktualizuje tablicę ARP – wpis routera wskazuje na atakującego
  3. Cały ruch ofiary idzie przez atakującego (MITM)

Narzędzia:

# arpspoof (z pakietu dsniff)
arpspoof -i eth0 -t 192.168.1.10 192.168.1.1

# ettercap
ettercap -T -M arp:remote /192.168.1.10/ /192.168.1.1/

ARP Spoofing – atak polegający na wysłaniu sfałszowanego ARP Reply.

ARP Spoofing, zwany również ARP Poisoning, jest jednym z najstarszych i najłatwiejszych do przeprowadzenia ataków w sieciach lokalnych, ponieważ protokół ARP nie weryfikuje autentyczności otrzymywanych odpowiedzi.

Atakujący może wysłać sfałszowaną odpowiedź ARP, w której podaje swój adres MAC jako adres routera, przez co cały ruch ofiary zaczyna płynąć przez jego maszynę.

W ten sposób atakujący może przechwytywać, modyfikować, a nawet blokować komunikację sieciową ofiary, realizując atak typu man-in-the-middle.

Narzędzia takie jak arpspoof z pakietu dsniff czy ettercap automatyzują ten proces, umożliwiając przeprowadzenie ataku za pomocą jednego polecenia.

Skutecznym zabezpieczeniem są statyczne wpisy ARP dla krytycznych urządzeń, ponieważ nie ulegają one nadpisaniu przez nieautoryzowane odpowiedzi.

Na poziomie przełącznika ochronę zapewnia Dynamic ARP Inspection, który weryfikuje poprawność komunikatów ARP na podstawie bazy danych DHCP Snooping.

Dodatkowo narzędzie arpwatch monitoruje zmiany w tablicach ARP i alarmuje administratora o podejrzanych aktywnościach.

16/48 Zabezpieczenia przed ARP Spoofing
MetodaOpis
Statyczne wpisy ARParp -s IP MAC – trwałe powiązanie
DAI (Dynamic ARP Inspection)Filtrowanie ARP na switchu (Cisco)
Port SecurityOgraniczenie liczby MAC na porcie
arpwatchMonitorowanie zmian w tablicy ARP
arptablesFirewall ARP w systemie Linux

DAI (Dynamic ARP Inspection)

ip dhcp snooping
ip dhcp snooping vlan 1
interface Gi0/1
 ip arp inspection trust

Wymaga DHCP Snooping.

Switch weryfikuje zgodność MAC źródła ARP z DHCP bindings.

Dynamic ARP Inspection to zaawansowany mechanizm bezpieczeństwa działający na przełącznikach warstwy trzeciej, który filtruje komunikaty ARP i odrzuca te, które są niezgodne z bazą danych DHCP Snooping.

DAI działa na zasadzie inspekcji każdej ramki ARP przechodzącej przez przełącznik i weryfikuje, czy adres MAC źródła w ramce Ethernet odpowiada adresowi MAC w nagłówku ARP, a także czy adres IP źródła jest zgodny z przypisaniem DHCP.

Porty zaufane (trust ports), na których zazwyczaj znajdują się routery i serwery, są zwolnione z inspekcji, ponieważ zakłada się, że nie będą generować fałszywych komunikatów ARP.

W przypadku wykrycia niezgodności przełącznik może odrzucić ramkę, wysłać alert do administratora lub zablokować port, na którym pojawiła się nieprawidłowość.

Konfiguracja DAI wymaga uprzedniego włączenia DHCP Snooping, ponieważ to właśnie on dostarcza bazy danych poprawnych przypisań adresów.

W środowiskach Cisco DAI konfiguruje się globalnie dla konkretnych sieci VLAN, co pozwala na selektywne stosowanie tej ochrony.

17/48 RARP, Inverse ARP i inne

RARP (Reverse ARP)

Inverse ARP (InARP)

Proxy ARP (Wireless)

RFC 903 – odwrotność ARP: MAC → IP.

OPER = 3 (request), 4 (reply).

Przestarzały – wyparty przez BOOTP/ DHCP.

Dla sieci Frame Relay / ATM – mapowanie DLCI (L2) na adres IP.

Działa jak RARP, ale dla sieci z przełączaniem.

W sieciach Wi-Fi, AP może odpowiadać jako proxy ARP dla stacji w trybie oszczędzania energii.

Reverse ARP, zdefiniowany w RFC 903, był historycznym protokołem używanym w latach osiemdziesiątych do odwrotnego mapowania adresów MAC na adresy IP, co było niezbędne do autokonfiguracji stacji bezdyskowych podczas rozruchu.

W przeciwieństwie do klasycznego ARP, który pyta kto ma dany adres IP, RARP wysyłał zapytanie z adresem MAC i oczekiwał odpowiedzi zawierającej przypisany adres IP.

Protokół ten działał jednak tylko w obrębie pojedynczej sieci lokalnej i wymagał obecności serwera RARP w każdej podsieci, co ograniczało jego skalowalność.

Z tych powodów RARP został wyparty przez BOOTP, a następnie przez DHCP, które oferują znacznie więcej funkcji, takich jak przekazywanie adresów DNS, bram domyślnych i innych opcji konfiguracyjnych.

Inverse ARP, używany w sieciach Frame Relay, działał na podobnej zasadzie co RARP, ale mapował adresy warstwy łącza DLCI na adresy IP.

Współcześnie oba protokoły mają znaczenie wyłącznie historyczne i nie są używane w nowoczesnych sieciach.

18/48 ARP dla IPv4 – podsumowanie

Zalety ARP:

  • Prostota i lekkość (28 B nagłówka)
  • Działa bez konfiguracji (plug-and-play)
  • Niski narzut na sieć
  • Wspierany przez wszystkie urządzenia sieciowe

Wady ARP:

  • Brak uwierzytelniania – podatny na spoofing
  • Broadcast – obciąża sieć
  • Brak ochrony prywatności – MAC widoczny
  • Nie działa przez routery (tylko L2)
  • Tylko dla IPv4 – w IPv6 zastąpiony przez NDP
Podsumowując część dotyczącą ARP, warto podkreślić, że protokół ten mimo swojego wieku wciąż stanowi nieodzowny element działania sieci IPv4 i prawdopodobnie nie zniknie szybko z krajobrazu sieciowego.

Jego główną zaletą jest prostota i zerokonfiguracyjne działanie, co sprawia, że nawet początkujący administrator nie musi ingerować w jego ustawienia.

Niestety, ta prostota idzie w parze z brakiem jakichkolwiek mechanizmów bezpieczeństwa, co czyni ARP najsłabszym ogniwem w łańcuchu bezpieczeństwa sieci LAN.

Ataki ARP spoofing są trywialne do przeprowadzenia, a jednocześnie niezwykle skuteczne, co zmusza administratorów do stosowania dodatkowych zabezpieczeń, takich jak DAI czy statyczne wpisy.

Kolejnym ograniczeniem jest użycie broadcastu, który w dużych sieciach generuje niepotrzebne obciążenie wszystkich urządzeń w domenie rozgłoszeniowej.

Z tych powodów w IPv6 zdecydowano się na całkowite przeprojektowanie mechanizmu mapowania adresów, tworząc protokół NDP jako integralną część ICMPv6.

19/48 Wprowadzenie do IPv6
CechaIPv4IPv6
Długość adresu32 bity (4 B)128 bitów (16 B)
Zapis192.168.1.12001:db8::1
ARPARP (RFC 826)NDP (RFC 4861)
BroadcastTakNie (multicast)
NATPowszechnyRzadki
AutokonfiguracjaDHCPSLAAC + DHCPv6
W IPv6 nie ma ARP! Funkcjonalność ARP została zastąpiona przez Neighbor Discovery Protocol (NDP) działający w oparciu o ICMPv6.

IPv6 jest odpowiedzią na wyczerpywanie się puli adresów IPv4 i został zaprojektowany w latach dziewięćdziesiątych przez Internet Engineering Task Force jako następca protokołu IPv4.

Najbardziej widoczną zmianą jest zwiększenie długości adresu ze 128 bitów w stosunku do 32 bitów w IPv4, co daje praktycznie niewyczerpaną liczbę adresów dla każdego urządzenia na Ziemi.

IPv6 eliminuje również potrzebę stosowania translacji adresów NAT, która w IPv4 jest powszechnie używana do oszczędzania adresów, ale komplikuje architekturę sieci i utrudnia komunikację end-to-end.

W IPv6 całkowicie zrezygnowano z broadcastu na rzecz multicastu, co znacząco redukuje niepotrzebny ruch sieciowy i poprawia wydajność.

Kolejną istotną zmianą jest wbudowana autokonfiguracja SLAAC, która pozwala hostom na automatyczne uzyskanie adresu IP bez konieczności stosowania serwera DHCP.

Wprowadzenie obowiązkowego mechanizmu wykrywania duplikacji adresów DAD zwiększa niezawodność konfiguracji sieci.

W kontekście mapowania adresów IPv6 całkowicie rezygnuje z ARP na rzecz protokołu NDP, który jest integralną częścią ICMPv6.

20/48 Neighbor Discovery Protocol (NDP)

Funkcje NDP:

  • Rozpoznawanie adresów L3→L2 (NS/NA)
  • Duplicate Address Detection (DAD)
  • SLAAC – bezstanowa autokonfiguracja
  • Wykrywanie routerów (RS/RA)
  • Neighbor Unreachability Detection (NUD)
  • Redirect – przekierowanie
CechaARP (IPv4)NDP (IPv6)
TransportRamka L2 (EtherType 0x0806)ICMPv6 (Next Header 58)
AdresacjaBroadcastSolicited-Node multicast
BezpieczeństwoBrakSEND (opcjonalnie)
Sprawdzanie osiągalnościBrak (TTL)NUD (aktywne)

NDP (RFC 4861) – zastępuje ARP w IPv6.

Działa przez ICMPv6.

Neighbor Discovery Protocol to znacznie więcej niż tylko zamiennik ARP dla IPv6, ponieważ łączy w sobie funkcje kilku protokołów IPv4, oferując jednocześnie nowe możliwości niedostępne wcześniej.

NDP odpowiada nie tylko za rozpoznawanie adresów warstwy łącza, ale także za wykrywanie routerów, autokonfigurację adresów, wykrywanie duplikacji adresów i monitorowanie osiągalności sąsiadów.

W przeciwieństwie do ARP, który używa ramek L2 z EtherType 0x0806, NDP działa jako część ICMPv6, co oznacza, że komunikaty NDP są przenoszone w pakietach IPv6 z Next Header 58.

Dzięki temu NDP korzysta z wbudowanych mechanizmów bezpieczeństwa IPsec, które mogą być stosowane do szyfrowania i uwierzytelniania komunikatów NDP.

Użycie adresacji solicited-node multicast zamiast broadcastu znacząco redukuje obciążenie sieci, ponieważ tylko hosty z pasującym sufiksem adresu przetwarzają dany komunikat.

Dodatkowo NDP wprowadza mechanizm Neighbor Unreachability Detection, który aktywnie monitoruje osiągalność sąsiadów, co jest znaczącym usprawnieniem w porównaniu z biernym mechanizmem czasu życia w ARP.

21/48 ICMPv6 – podstawa NDP
TypNazwaFunkcja
133Router Solicitation (RS)Host szuka routerów
134Router Advertisement (RA)Router odpowiada lub okresowo ogłasza
135Neighbor Solicitation (NS)Odpowiednik ARP Request
136Neighbor Advertisement (NA)Odpowiednik ARP Reply
137RedirectPrzekierowanie do lepszego routera

NDP używa ICMPv6 (RFC 4443).

Nagłówek ICMPv6 jest identyfikowany przez Next Header = 58 w IPv6.

Budowa: | Nagłówek IPv6 (40 B) | Type (1 B) | Code (1 B) | Checksum (2 B) | Body (zmienna) |

Dla protokołu NDP kluczowe są typy od 133 do 137, które odpowiadają odpowiednio za komunikaty RS, RA, NS, NA i Redirect.

ICMPv6 pełni w IPv6 znacznie ważniejszą rolę niż ICMPv4 w IPv4, ponieważ oprócz typowych funkcji raportowania błędów stanowi podstawę dla protokołu NDP i całego mechanizmu autokonfiguracji.

Wartość Next Header równa 58 w nagłówku IPv6 informuje odbiorcę, że następnym nagłówkiem w pakiecie jest właśnie ICMPv6, a nie TCP, UDP czy inny protokół.

Każdy komunikat ICMPv6 składa się z ośmiobajtowego nagłówka zawierającego typ, kod i sumę kontrolną, po którym następuje pole danych o zmiennej długości.

Wartość kodu w tych komunikatach jest prawie zawsze równa zero, ponieważ NDP nie definiuje podtypów dla poszczególnych typów wiadomości.

Suma kontrolna w ICMPv6 jest obliczana z uwzględnieniem pseudonagłówka IPv6, który zawiera adresy źródłowe i docelowe, co zapewnia integralność danych na poziomie warstwy sieciowej.

Wireshark i tcpdump rozpoznają te typy i wyświetlają je w czytelnej formie.

22/48 Solicited-Node Multicast Address

Zalety multicastu vs broadcast:

  • Tylko hosty z danym 24-bitowym sufiksem otrzymują pakiet
  • Znacznie mniejsze obciążenie sieci
  • Oszczędność energii (Wi-Fi, IoT)
AdresPrzeznaczenie
FF02::1All Nodes (wszystkie hosty)
FF02::2All Routers
FF02::1:FFXX:XXXXSolicited-Node

Zamiast broadcastu (jak w ARP), NDP używa solicited-node multicast.

Format adresu: FF02::1:FFXX:XXXX, gdzie XX:XXXX to ostatnie 24 bity adresu IPv6.

Przykład: Dla adresu FE80::217:7AFF:FE12:3456, solicited-node to FF02::1:FF12:3456.

Adres solicited-node multicast to jeden z kluczowych elementów optymalizacyjnych NDP, który zastępuje broadcast znany z ARP w IPv4, znacząco redukując liczbę urządzeń przetwarzających niepotrzebne komunikaty.

Adres ten jest generowany poprzez dodanie ostatnich dwudziestu czterech bitów adresu IPv6 do prefiksu FF02::1:FF00:0/104, co daje w efekcie adres multicastowy należący do grupy solicited-node.

Dzięki temu tylko hosty, których adres IPv6 kończy się tym samym 24-bitowym sufiksem, odbierają i przetwarzają dany komunikat NS, co w typowej sieci ogranicza liczbę odbiorców do zaledwie kilku urządzeń.

Ryzyko kolizji adresów solicited-node jest znikome, ponieważ prawdopodobieństwo, że dwa urządzenia w tej samej sieci mają ostatnie 24 bity adresu IPv6 identyczne, wynosi około 1 do 16 milionów.

Każdy interfejs IPv6 automatycznie dołącza do grupy multicastowej solicited-node dla każdego ze swoich adresów unicast, co jest realizowane przez stos IPv6 w jądrze systemu operacyjnego.

23/48 Neighbor Solicitation (NS)
PoleWartość
IPv6 srcAdres nadawcy (lub:: dla DAD)
IPv6 dstSolicited-Node multicast lub unicast
ICMPv6 Type135
Target AddressAdres IPv6 pytanego
OptionsSource Link-Layer Addr (MAC nadawcy)

Użycie NS:

  • Rozpoznawanie adresów – jak ARP Request
  • DAD – nadawca wysyła NS z własnym IP jako target
  • NUD – sprawdzenie, czy sąsiad jest osiągalny

Odpowiednik ARP Request w IPv4.

Neighbor Solicitation (NS) – ICMPv6 Type 135.

Neighbor Solicitation jest podstawowym mechanizmem rozpoznawania adresów w IPv6 i pełni analogiczną funkcję do ARP Request w IPv4, ale działa w oparciu o ICMPv6 z adresacją multicastową.

Gdy host A chce poznać adres MAC hosta B, wysyła NS na adres solicited-node multicast odpowiadający adresowi IPv6 hosta B, co jest znacznie bardziej efektywne niż broadcast w ARP.

W ramce NS obowiązkowe jest pole Target Address zawierające adres IPv6, dla którego poszukiwany jest adres MAC, oraz opcjonalne pole Source Link-Layer Address zawierające adres MAC nadawcy.

W przypadku wykrywania duplikacji adresów DAD, host wysyła NS z adresem źródłowym IPv6 ustawionym na:: (adres nieokreślony), ponieważ nie ma jeszcze przypisanego adresu IP.

Jeśli inny host w sieci ma już skonfigurowany ten adres, odpowie komunikatem NA, co spowoduje, że nowy host zrezygnuje z używania tego adresu.

NS jest również używany w mechanizmie Neighbor Unreachability Detection do okresowego sprawdzania osiągalności sąsiadów.

24/48 Neighbor Advertisement (NA)
PoleWartość
IPv6 srcAdres odpowiadającego
IPv6 dstAdres pytającego (unicast)
ICMPv6 Type136
FlagsR (Router), S (Solicited), O (Override)
Target AddressAdres odpowiadającego
OptionsTarget Link-Layer Addr (MAC)

Flagi NA:

FlagaZnaczenie
RRouter – nadawca jest routerem
SSolicited – odpowiedź na NS
OOverride – zastąp istniejący wpis w cache

Odpowiednik ARP Reply w IPv4.

Neighbor Advertisement (NA) – ICMPv6 Type 136.

Neighbor Advertisement jest odpowiednikiem ARP Reply w IPv6, ale oferuje znacznie bogatszy zestaw informacji dzięki trzem flagom: R, S i O, które znajdują się w nagłówku ICMPv6.

Flaga R informuje odbiorcę, że nadawca komunikatu NA jest routerem, co jest istotne dla hostów budujących tablicę routingu.

Flaga S wskazuje, czy dany NA jest odpowiedzią na wcześniej odebrane NS (Solicited), czy też jest to nieproszone ogłoszenie (Unsolicited), które pełni funkcję analogiczną do Gratuitous ARP w IPv4.

Flaga O (Override) informuje odbiorcę, czy powinien zastąpić istniejący wpis w swojej tablicy sąsiadów nowym adresem MAC, czy też zachować stary.

W odpowiedzi na standardowe zapytanie NS, host B wysyła NA z flagami S=1 i O=1, co oznacza, że jest to odpowiedź na zapytanie i należy nadpisać ewentualny istniejący wpis.

Nieproszone NA z flagą S=0 są wysyłane w sytuacjach awaryjnych, na przykład po zmianie adresu MAC interfejsu, aby poinformować pozostałe hosty w sieci o tej zmianie.

25/48 Pełny przepływ NS/NA
  1. Host A (FE80::1) chce wysłać pakiet do B (FE80::2)
  2. A sprawdza Neighbor Cache – brak wpisu
  3. A wysyła NS na solicited-node multicast (FF02::1:FF00:0002)
  4. Tylko hosty z pasującym sufiksem odbierają pakiet
  5. Host B (FE80::2) rozpoznaje swoje IP w Target Address
  6. B wysyła NA unicast do A (MAC: BB:BB:BB:BB:BB:BB, flagi S=1, O=1)
  7. A zapisuje MAC B w Neighbor Cache (stan REACHABLE)
Różnica kluczowa: NS używa multicastu, a nie broadcastu – mniej hostów przetwarza pakiet.

Pełny przepływ wymiany komunikatów NS i NA w IPv6 jest analogiczny do sekwencji ARP Request i ARP Reply w IPv4, ale różni się istotnie sposobem adresacji i warstwą protokołu.

Host A rozpoczyna proces od sprawdzenia swojej tablicy sąsiadów Neighbor Cache, która pełni funkcję odpowiednika tablicy ARP w IPv4.

Jeśli nie znajdzie wpisu dla docelowego adresu IPv6, generuje komunikat NS i wysyła go na adres solicited-node multicast, a nie broadcast, co jest kluczową różnicą wydajnościową.

Gdy host B odbiera NS i rozpoznaje swój adres IP w polu Target Address, odpowiada komunikatem NA wysłanym jako unicast bezpośrednio do hosta A.

W NA host B umieszcza swój adres MAC w opcji Target Link-Layer Address oraz ustawia flagi S=1 i O=1, potwierdzając, że jest to odpowiedź i że należy nadpisać poprzedni wpis.

Po odebraniu NA host A zapisuje adres MAC w tablicy sąsiadów w stanie REACHABLE i może rozpocząć transmisję danych.

Cały proces przebiega w ciągu kilku milisekund, a zastosowanie multicastu zamiast broadcastu zmniejsza obciążenie pozostałych urządzeń w sieci.

26/48 Router Solicitation (RS) i Router Advertisement (RA)

Router Solicitation (RS) – Type 133

Router Advertisement (RA) – Type 134

IPv6 dst: FF02::2.

Host wysyła RS na FF02::2 (all routers) po włączeniu interfejsu.

Pytanie: "Czy jest jakiś router w sieci?"

IPv6 src: adres hosta (lub:: jeśli nie ma jeszcze adresu).

Router odpowiada (lub wysyła okresowo) na FF02::1 (all nodes).

RA zawiera: prefiks sieci (do SLAAC), MTU, Hop Limit, flagi M (Managed=DHCPv6), O (Other config), Lifetime, opcje DNS (RFC 6106 RDNSS).

Mechanizm Router Solicitation i Router Advertisement stanowi podstawę autokonfiguracji i wykrywania routerów w IPv6, zastępując funkcje, które w IPv4 są realizowane przez ICMP Router Discovery i DHCP.

Po włączeniu interfejsu sieciowego host wysyła komunikat RS na adres multicastowy wszystkich routerów FF02::2, informując o swojej obecności i prosząc o informacje konfiguracyjne.

Router odpowiada komunikatem RA wysłanym na adres wszystkich węzłów FF02::1, który zawiera prefiks sieci, maksymalny rozmiar MTU, limit hopów oraz flagi M i O określające sposób autokonfiguracji.

W ramach RA router może również przekazać adresy serwerów DNS za pomocą opcji RDNSS zdefiniowanej w RFC 6106, co eliminuje potrzebę stosowania DHCPv6 do dystrybucji DNS.

Router wysyła RA okresowo co około dwieście sekund, a host uznaje router za nieosiągalny, gdy nie otrzyma RA przez czas równy trzykrotności wartości Router Lifetime.

Wartość Router Lifetime w RA określa, jak długo host może traktować dany router jako domyślną bramę bez konieczności potwierdzenia.

27/48 Przepływ RS/RA
  1. Host A (nowy) generuje adres link-local FE80::1
  2. Host A wysyła RS (FF02::2): "Czy jest router?"
  3. Router odbiera RS, wysyła RA (FF02::1): prefiks 2001:db8:1:1::/64, MTU 1500, M=0
  4. Host A tworzy adres: 2001:db8:1:1::217:7AFF:FE12:3456 (EUI-64)
  5. Host A wykonuje DAD dla nowego adresu
SLAAC vs DHCPv6: M=0 → brak DHCPv6, host używa SLAAC. M=1 → host musi użyć DHCPv6.

Przepływ RS i RA ilustruje, jak nowy host dołączający do sieci IPv6 uzyskuje wszystkie niezbędne informacje konfiguracyjne bez konieczności ręcznej interwencji administratora.

Po wygenerowaniu adresu link-local FE80::1 host wysyła RS, na który router odpowiada RA zawierającym prefiks sieci, na przykład 2001:db8:1:1::/64.

Na podstawie otrzymanego prefiksu host generuje swój globalny adres IPv6, używając mechanizmu EUI-64 lub Privacy Extensions, a następnie wykonuje DAD, aby upewnić się, że adres jest unikalny w sieci.

Flaga M w RA decyduje o tym, czy host ma użyć DHCPv6 do uzyskania adresu IP Managed, czy też wystarczy SLAAC z RA.

Jeśli M=0 i O=0, host korzysta wyłącznie z SLAAC, natomiast jeśli O=1, host dodatkowo pobiera opcje konfiguracyjne z DHCPv6, takie jak adresy DNS.

W systemie Windows klient DHCPv6 odbiera RA i na jego podstawie podejmuje decyzję o sposobie konfiguracji adresacji.

W Linuksie natomiast implementacja SLAAC znajduje się bezpośrednio w jądrze i jest zarządzana przez parametr sysctl accept_ra.

28/48 Duplicate Address Detection (DAD)

Proces DAD:

  1. Host generuje potencjalny adres (SLAAC lub privacy)
  2. Wysyła NS z Target = nowy adres, IPv6 src = ::
  3. Jeśli nikt nie odpowie NA → adres unikalny
  4. Jeśli ktoś odpowie NA → duplikacja! – adres nie używany

Przykład DAD z tcpdump:

IP6 :: > ff02::1:ff12:3456: ICMPv6 NS
  who-has 2001:db8::217:7AFF:FE12:3456
  (source address: ::)
[Brak odpowiedzi -> adres OK]

DAD (RFC 4862) – sprawdzenie, czy adres IPv6 jest unikalny przed jego użyciem.

Duplicate Address Detection jest obowiązkowym mechanizmem w IPv6, który zapobiega sytuacjom, w którym dwa hosty w tej samej sieci używają tego samego adresu unicast, co prowadziłoby do poważnych problemów z komunikacją.

Proces DAD rozpoczyna się po wygenerowaniu potencjalnego adresu przez hosta, zarówno w przypadku adresu link-local, jak i globalnego adresu z SLAAC.

Host wysyła komunikat NS z adresem źródłowym IPv6 ustawionym na:: (adres nieokreślony) i polem Target Address zawierającym sprawdzany adres.

Jeśli inny host w sieci ma już skonfigurowany ten adres, odpowiada komunikatem NA, informując o duplikacji.

W przypadku wykrycia duplikacji host nie może używać tego adresu i musi wygenerować nowy, zazwyczaj poprzez wybranie innego identyfikatora interfejsu.

W przeciwieństwie do IPv4, gdzie DAD jest opcjonalny i rzadko stosowany, w IPv6 jest on wymagany dla każdego adresu unicast przed jego użyciem.

DAD wykonywany jest również dla adresów tymczasowych generowanych przez Privacy Extensions.

29/48 SLAAC – autokonfiguracja adresu

Jak działa SLAAC:

  1. Host otrzymuje prefiks z RA (np. 2001:db8::/64)
  2. Host generuje identyfikator interfejsu (64 bity)
  3. Standardowo: EUI-64 lub Privacy Extension
  4. Wykonuje DAD
  5. Adres = prefiks + identyfikator

EUI-64:

Privacy Extensions (RFC 4941):

Domyślnie w Windows, macOS, Android.

Linux: sysctl use_tempaddr=2.

SLAAC – Stateless Address Autoconfiguration (RFC 4862).

MAC: AA:BB:CC:DD:EE:FF → AA:BB:CC: FF:FE:DD:EE:FF + odwrócenie 7. bitu (U/L).

Końcowy identyfikator: A8:BB:CC:FF:FE:DD:EE:FF

Losowy identyfikator zmieniany w czasie.

SLAAC to mechanizm autokonfiguracji bezstanowej, który pozwala hostom IPv6 na samodzielne wygenerowanie adresu IP na podstawie prefiksu otrzymanego z RA, bez konieczności komunikacji z serwerem DHCP.

Proces SLAAC polega na połączeniu 64-bitowego prefiksu sieci otrzymanego z RA z 64-bitowym identyfikatorem interfejsu, który może być generowany na kilka sposobów.

Najprostszym jest EUI-64, który tworzy identyfikator na podstawie adresu MAC karty sieciowej poprzez wstawienie bajtów FF:FE w środek i odwrócenie siódmego bitu.

Wadą EUI-64 jest brak prywatności, ponieważ adres MAC producenta jest widoczny w adresie IPv6, co umożliwia śledzenie urządzenia.

Rozwiązaniem są Privacy Extensions z RFC 4941, które generują losowe identyfikatory interfejsu zmieniane w czasie, co utrudnia śledzenie użytkownika.

W systemie Windows i macOS Privacy Extensions są domyślnie włączone, podczas gdy w Linuksie wymagają ustawienia parametru use_tempaddr na 2.

Alternatywą jest Stable Privacy z RFC 8064, które generuje deterministyczny, ale stały w danej sieci identyfikator.

30/48 Neighbor Cache i NUD
StanZnaczenie
INCOMPLETENS wysłany, czekam na NA
REACHABLEPotwierdzona osiągalność
STALENiepotwierdzony od >30 s
DELAYDane do wysłania, czekam 5 s
PROBENS wysłany 3 razy co 1 s
FAILEDNieosiągalny

NUD (Neighbor Unreachability Detection):

NDP przechowuje informacje o sąsiadach w Neighbor Cache.

REACHABLE → STALE → DELAY (5 s) → PROBE (3x NS) → FAILED

NUD aktywnie sprawdza, czy sąsiad jest osiągalny – w przeciwieństwie do ARP (bierne TTL).

Neighbor Cache stanowi odpowiednik tablicy ARP w IPv4, ale jest znacznie bardziej rozbudowany, ponieważ przechowuje nie tylko pary adresów IP i MAC, ale także stan osiągalności każdego sąsiada.

W przeciwieństwie do tablicy ARP, która działa na zasadzie prostego czasu życia, Neighbor Cache implementuje maszynę stanów, która aktywnie monitoruje dostępność sąsiadów.

Początkowym stanem po wysłaniu NS jest INCOMPLETE, który po otrzymaniu NA przechodzi w REACHABLE.

Po upływie około trzydziestu sekund bez potwierdzenia komunikacji wpis przechodzi w stan STALE, a gdy pojawią się dane do wysłania, wpis przechodzi przez DELAY i PROBE, zanim ostatecznie zostanie uznany za FAILED.

NUD aktywnie sprawdza osiągalność sąsiadów poprzez wysłanie trzech komunikatów NS w odstępie jednej sekundy, co pozwala na szybkie wykrycie problemów z łącznością.

Dzięki temu mechanizmowi host w IPv6 może znacznie szybciej zareagować na awarię sąsiada niż w IPv4, gdzie trzeba czekać na wygaśnięcie czasu życia wpisu ARP.

W systemie Linux stan tablicy sąsiadów można podglądać za pomocą polecenia ip -6 neigh show.

31/48 Redirect w NDP
Bezpieczeństwo: Redirect może być używany w atakach MITM. Należy weryfikować źródło redirectu.

ICMPv6 Redirect (Type 137) – router informuje hosta o lepszym routerze dla danego celu.

Schemat: Host A → Router1 → Router1 wie, że Router2 jest lepszy → Redirect "użyj Router2" → A → Router2.

Warunek: host wysyła pakiet przez Router1, ale Router1 wie o lepszej ścieżce przez Router2.

ICMPv6 Redirect to mechanizm optymalizacyjny, który pozwala routerowi na poinformowanie hosta o istnieniu lepszej ścieżki do konkretnego celu, co poprawia wydajność routingu w sieci lokalnej.

Gdy host wysyła pakiet do Router1, a Router1 wie, że Router2 znajduje się bliżej celu, wysyła komunikat Redirect z informacją o lepszym następnym skoku.

Mechanizm ten działa wyłącznie w obrębie tej samej sieci link-local, ponieważ dotyczy optymalizacji na pierwszym skoku, a nie globalnej optymalizacji tras.

Niestety, Redirect może być wykorzystany w atakach typu man-in-the-middle, jeśli atakujący wyśle sfałszowany komunikat Redirect, przekierowując ruch ofiary na swoją maszynę.

Z tego powodu nowoczesne systemy operacyjne weryfikują autentyczność komunikatów Redirect, sprawdzając, czy pochodzą one od routera aktualnie używanego jako brama domyślna.

W systemie Linux zachowanie dotyczące Redirect można kontrolować za pomocą parametru sysctl accept_redirects.

W sieciach korporacyjnych często wyłącza się Redirect ze względów bezpieczeństwa.

32/48 Opcje NDP
TypNazwa opcjiUżywana w
1Source Link-Layer AddressNS, RS, NA
2Target Link-Layer AddressNA, Redirect
3Prefix InformationRA
4Redirected HeaderRedirect
5MTURA
31RDNSS (DNS)RA (RFC 6106)

Przykład: Prefix Information (typ 3)

Prefix Length: 64
L flag: 1 (on-link)
A flag: 1 (SLAAC)
Valid Lifetime: 2592000 (30 dni)
Pref. Lifetime: 604800 (7 dni)
Prefix: 2001:db8:1:1::

Każda opcja ma 8-bajtowy nagłówek.

Wiadomości NDP zawierają pola opcji (Type-Length-Value).

Opcje NDP są kodowane w formacie Type-Length-Value, gdzie każda opcja zaczyna się od ośmiobajtowego nagłówka zawierającego typ i długość, co pozwala na elastyczne rozszerzanie protokołu o nowe funkcje.

Opcja typu 1 Source Link-Layer Address jest dodawana do komunikatów NS i RS, aby poinformować odbiorcę o adresie MAC nadawcy, co przyspiesza proces wzajemnego rozpoznawania.

Opcja typu 2 Target Link-Layer Address znajduje się w komunikatach NA i Redirect i zawiera adres MAC celu, który ma zostać zapisany w tablicy sąsiadów.

Opcja Prefix Information typu 3 jest kluczowa dla SLAAC, ponieważ przekazuje prefiks sieci wraz z czasem ważności i flagami L i A określającymi, czy prefiks jest on-link i czy może być używany do SLAAC.

Opcja RDNSS typu 31 zdefiniowana w RFC 6106 umożliwia routerowi przekazanie adresów serwerów DNS w ramach RA, co eliminuje konieczność stosowania DHCPv6 wyłącznie do dystrybucji DNS.

Dzięki temu hosty mogą uzyskać pełną konfigurację sieciową wyłącznie z RA.

33/48 Polecenia NDP – Linux

ip -6 neigh (sąsiedzi IPv6)

# Wyświetlenie sąsiadów IPv6
ip -6 neigh show

# Usunięcie wpisu
ip -6 neigh del fe80::1 dev eth0

# Dodanie wpisu statycznego
ip -6 neigh add fe80::1 lladdr aa:bb:cc:dd:ee:ff dev eth0 nud reachable

Inne polecenia IPv6:

# Wyświetlenie adresów IPv6
ip -6 addr show

# Tablica routingu IPv6
ip -6 route show

# PING IPv6
ping6 2001:db8::1
ping -6 2001:db8::1

# Traceroute6
traceroute6 2001:db8::1

Narzędzia do zarządzania sąsiadami IPv6 w systemie Linux są w dużej mierze takie same jak dla ARP w IPv4, ponieważ polecenie ip z pakietu iproute2 obsługuje oba protokoły w ujednolicony sposób.

Użycie ip -6 neigh show wyświetla tablicę sąsiadów IPv6 wraz z ich stanami, takimi jak REACHABLE, STALE, DELAY, PROBE i FAILED, co pozwala na szczegółową diagnostykę problemów z łącznością.

Statyczne wpisy dla sąsiadów IPv6 dodaje się z parametrem nud reachable, a czas życia wpisu można kontrolować za pomocą parametru nud stale lub nud permanent.

W przypadku gdy host nie odpowiada na zapytania NS, można ręcznie usunąć wpis z tablicy sąsiadów za pomocą ip -6 neigh del, co wymusi ponowne rozpoznanie adresu.

Do testowania łączności IPv6 na poziomie warstwy sieciowej służy polecenie ping6 lub ping -6, a do śledzenia trasy traceroute6.

W systemie Linux szczegółowe informacje o stanie IPv6 na interfejsach można uzyskać za pomocą ip -6 addr show.

34/48 Polecenia NDP – Windows

netsh dla IPv6

# Wyświetlenie sąsiadów
netsh interface ipv6 show neighbors

# Wyświetlenie adresów
netsh interface ipv6 show addresses

# Wyświetlenie tras
netsh interface ipv6 show routes

PowerShell

# Sąsiedzi IPv6
Get-NetNeighbor -AddressFamily IPv6

# PING IPv6
ping -6 2001:db8::1

# Traceroute
tracert -6 2001:db8::1

# Route
route print -6

W systemie Windows zarządzanie sąsiadami IPv6 odbywa się za pomocą polecenia netsh interface ipv6 show neighbors, które wyświetla tablicę sąsiadów w formacie podobnym do arp -a w IPv4.

PowerShell oferuje bardziej zaawansowane możliwości za pomocą cmdletu Get-NetNeighbor z parametrem -AddressFamily IPv6, który zwraca obiekty z właściwościami umożliwiającymi filtrowanie i sortowanie wyników.

Domyślnie Windows używa Privacy Extensions do generowania tymczasowych adresów IPv6, które zmieniają się co dwadzieścia cztery godziny, co utrudnia śledzenie urządzenia.

Do testowania łączności IPv6 w Windows służy ping -6 oraz tracert -6, które odpowiednio wysyłają ping i śledzą trasę do docelowego adresu IPv6.

Tablicę routingu IPv6 można wyświetlić za pomocą route print -6, która pokazuje wszystkie trasy IPv6 wraz z ich metrykami.

W przypadku problemów z autokonfiguracją SLAAC w Windows, warto sprawdzić stan usługi DHCPv6 Client, która odpowiada za przetwarzanie komunikatów RA.

35/48 tcpdump dla NDP

Filtry ICMPv6 dla NDP:

# Tylko ICMPv6
tcpdump -i eth0 icmp6

# Tylko NS i NA
tcpdump -i eth0 'icmp6 and (ip6[40+0]=135 or ip6[40+0]=136)'

# Tylko RS i RA
tcpdump -i eth0 'icmp6 and (ip6[40+0]=133 or ip6[40+0]=134)'

# DAD (src = ::)
tcpdump -i eth0 'icmp6 and ip6[8]=0 and ip6[9]=0'

Przykład wyjścia:

IP6 fe80::1 > ff02::1:ff00:2: ICMPv6 NS who-has fe80::2
  [source link-address=aa:bb:cc:dd:ee:ff]

IP6 fe80::2 > fe80::1: ICMPv6 NA fe80::2 is-at bb:bb:cc:dd:ee:ff
  (solicited) [override]

Analiza ruchu NDP za pomocą tcpdump wymaga znajomości filtrów ICMPv6, ponieważ komunikaty NDP są przenoszone jako część ICMPv6, a nie jako samodzielne ramki, jak ma to miejsce w przypadku ARP w IPv4.

Podstawowym filtrem jest icmp6, który przechwytuje wszystkie komunikaty ICMPv6, w tym także ping i inne typy, więc do wyodrębnienia tylko NDP warto użyć bardziej precyzyjnych filtrów.

Filtr icmp6 and (ip6[40+0]>=133 and ip6[40+0]<=137) ogranicza wynik wyłącznie do typów używanych przez NDP, czyli RS, RA, NS, NA i Redirect.

Do filtrowania samych NS i NA można użyć icmp6 and (ip6[40+0]=135 or ip6[40+0]=136), a dla RS i RA icmp6 and (ip6[40+0]=133 or ip6[40+0]=134).

Szczególnie przydatny w diagnostyce DAD jest filtr icmp6 and ip6[8]=0 and ip6[9]=0, który wyodrębnia pakiety z adresem źródłowym::. tcpdump z opcją -e pokazuje adresy MAC, co jest pomocne przy identyfikacji urządzeń uczestniczących w wymianie NDP.

36/48 SEcure Neighbor Discovery (SEND)

Problem z NDP:

  • Brak uwierzytelniania – każdy może odpowiedzieć na NS/NA
  • Ataki MITM, spoofing, DoS na NDP

Rozwiązanie SEND:

  • CGA (RFC 3972) – Cryptographically Generated Addresses
  • RSA Signatures – podpisywanie wiadomości NDP
  • Timestamp / Nonce – ochrona przed replay atakiem
Niestety: SEND nie jest szeroko wdrożony. Większość systemów polega na RA Guard + DHCPv6 Guard na switchu.

SEND (RFC 3971) – rozszerzenie NDP o zabezpieczenia kryptograficzne.

SEcure Neighbor Discovery to rozszerzenie NDP zaprojektowane w celu wyeliminowania słabości bezpieczeństwa protokołu, który tak jak ARP w IPv4 jest podatny na ataki spoofingowe i man-in-the-middle.

SEND wprowadza kryptograficzną autentykację komunikatów NDP poprzez zastosowanie Cryptographically Generated Addresses, które są generowane z klucza publicznego nadawcy.

Dzięki CGA atakujący nie może sfałszować adresu IPv6 ofiary, ponieważ nie posiada odpowiadającego mu klucza prywatnego.

Dodatkowo SEND używa podpisów RSA do uwierzytelniania komunikatów oraz znaczników czasowych i nonce do ochrony przed atakami replay.

Mimo zaawansowanych mechanizmów bezpieczeństwa, SEND nie został szeroko wdrożony w praktyce, ponieważ wymaga infrastruktury klucza publicznego i generuje znaczny narzut obliczeniowy.

Zamiast SEND, w rzeczywistych sieciach stosuje się RA Guard na przełącznikach oraz DHCPv6 Guard, które są prostsze w konfiguracji i nie wymagają zmian na hostach.

W systemie Linux wsparcie dla SEND wymaga osobnego narzędzia send lub implementacji w przestrzeni użytkownika.

37/48 RA Guard i DHCPv6 Guard

Atak fałszywym RA:

  1. Atakujący wysyła RA z prefiksem i dużym Router Lifetime
  2. Ofiary ustawiają atakującego jako domyślnego routera
  3. Atakujący przechwytuje ruch (MITM)

Narzędzie: fake_router6 (z THC-IPv6)

RA Guard (Cisco):

interface Gi0/2
 ipv6 nd raguard

interface Gi0/1
 ipv6 nd raguard trust-port

Ochrona przed fałszywymi RA – jeden z najgroźniejszych ataków w IPv6.

RA Guard to mechanizm bezpieczeństwa działający na przełącznikach warstwy drugiej, który chroni sieć przed atakami z wykorzystaniem fałszywych komunikatów Router Advertisement.

Atak fałszywym RA polega na tym, że atakujący wysyła do sieci komunikat RA z prefiksem i długim czasem Router Lifetime, przez co hosty ustawiają go jako swoją domyślną bramę.

Po przejęciu roli routera atakujący może przechwytywać cały ruch wychodzący z sieci, realizując skuteczny atak typu man-in-the-middle.

Narzędzie fake_router6 z pakietu THC-IPv6 automatyzuje ten atak, umożliwiając jego przeprowadzenie w ciągu kilku sekund.

RA Guard na przełączniku Cisco konfiguruje się poprzez oznaczenie portów jako zaufane trust-port dla routerów i blokowanie komunikatów RA na pozostałych portach.

W środowiskach, gdzie RA Guard nie jest dostępny, alternatywą jest ręczne wyłączenie akceptacji RA na hostach poprzez odpowiednie parametry sysctl w Linuksie.

DHCPv6 Guard działa na podobnej zasadzie, filtrując nieautoryzowane komunikaty DHCPv6 w sieci.

38/48 ARP vs NDP – porównanie
FunkcjaARP (IPv4)NDP (IPv6)
Rozpoznawanie adresówARP Request/Reply (L2)NS/NA (ICMPv6)
Detekcja duplikacjiGratuitous ARP (opcjonalny)DAD (obowiązkowy)
Adres docelowyBroadcast FF:FF:FF:FF:FF:FFSolicited-Node multicast
AutokonfiguracjaDHCP (osobny)SLAAC (wbudowany)
Wykrywanie routerówICMP Router Disc., DHCPRS/RA (obowiązkowe)
Sprawdzanie osiągalnościTimeout (bierne)NUD (aktywne)
BezpieczeństwoBrak (ARP spoofing)SEND (rzadko)
MTU discoveryBrakPath MTU Discovery
RedirectICMP Redirect (Type 5)ICMPv6 Redirect (Type 137)
NieosiągalnośćTTL wygasaNUD: STALE→DELAY→PROBE→FAILED

Porównanie ARP i NDP pokazuje fundamentalne różnice w podejściu do rozpoznawania adresów i zarządzania sąsiadami pomiędzy IPv4 a IPv6.

ARP działa na poziomie warstwy łącza w postaci samodzielnych ramek z EtherType 0x0806, podczas gdy NDP jest zintegrowany z ICMPv6 i korzysta z infrastruktury IPv6.

NDP wprowadza szereg usprawnień niedostępnych w ARP, takich jak obowiązkowe wykrywanie duplikacji adresów DAD, aktywne monitorowanie osiągalności sąsiadów NUD oraz wbudowana autokonfiguracja SLAAC.

Zamiast broadcastu, który w ARP obciąża wszystkie urządzenia w domenie rozgłoszeniowej, NDP używa solicited-node multicastu, który dociera tylko do wybranej grupy hostów.

W zakresie bezpieczeństwa oba protokoły mają podobne słabości, ale NDP oferuje opcjonalne rozszerzenie SEND z kryptograficznym uwierzytelnianiem.

NDP jest także bardziej złożony w implementacji niż ARP, co jest ceną za jego rozszerzoną funkcjonalność.

Mimo to w sieciach IPv6 NDP jest niezbędny i nie ma dla niego prostego zamiennika.

39/48 Analiza ARP w Wireshark

Filtry Wireshark dla ARP:

# Tylko ARP
arp

# ARP Request
arp.opcode == 1

# ARP Reply
arp.opcode == 2

# ARP z konkretnym IP
arp.src.proto_ipv4 == 192.168.1.10

# Gratuitous ARP
arp.dst.proto_ipv4 == arp.src.proto_ipv4

Przykład analizy:

Frame: 42 B.

EtherType: 0x0806 (ARP).

Opcode: 1 (Request).

Src MAC: aa:bb:cc:dd:ee:ff, Dst: ff:ff:ff:ff:ff:ff.

Sender MAC: aa:bb:cc:dd:ee:ff, Sender IP: 192.168.1.1.

Target MAC: 00:00:00:00:00:00, Target IP: 192.168.1.10.

Wireshark jest niezastąpionym narzędziem do analizy protokołu ARP, ponieważ pozwala na szczegółowe podejrzenie każdego bajtu nagłówka ARP w czytelnej formie drzewiastej.

Filtr arp w Wiresharku wyświetla wyłącznie ramki zawierające protokół ARP, co ułatwia diagnostykę w zatłoczonych sieciach.

Dla ARP Request opcode wynosi 1, a dla ARP Reply opcode wynosi 2, ale Wireshark dodatkowo wyświetla tekstowy opis typu ramki, co ułatwia szybką identyfikację.

W analizie ARP szczególnie przydatne jest śledzenie kolumny Informacje, która pokazuje, kto pyta o kogo w formacie who-has i is-at.

Do wykrywania Gratuitous ARP można użyć filtra arp.dst.proto_ipv4 == arp.src.proto_ipv4, który znajduje ramki, gdzie adres IP źródła i celu są takie same.

Wireshark pozwala również na eksportowanie wybranych ramek ARP do pliku CSV, co jest przydatne przy tworzeniu raportów i dokumentacji.

W przypadku dużych ilości ruchu warto zastosować przechwytywanie z filter capture arp, który odrzuca wszystkie ramki niebędące ARP jeszcze przed zapisem do pliku.

40/48 Analiza NDP w Wireshark

Filtry Wireshark dla NDP:

# ICMPv6
icmpv6

# NS
icmpv6.type == 135

# NA
icmpv6.type == 136

# RS / RA
icmpv6.type == 133 / 134

# DAD
ipv6.src == ::

Przykład NS:

ICMPv6 Type: 135 (NS), Target: fe80::2.

IPv6 Src: fe80::1, Dst: ff02::1:ff00:2, Next Header: 58 (ICMPv6).

Option: Source Link-Layer Address = aa:bb:cc:dd:ee:ff.

Wireshark oferuje zaawansowane wsparcie dla analizy protokołu NDP, automatycznie rozpoznając typy ICMPv6 związane z NDP i wyświetlając ich szczegółową strukturę.

Filtr icmpv6.type == 135 wyświetla wyłącznie komunikaty Neighbor Solicitation, a icmpv6.type == 136 tylko Neighbor Advertisement, co ułatwia skupienie się na konkretnym typie ruchu.

Dla analizy procesu DAD szczególnie przydatne jest filtrowanie ipv6.src ==::, które pokazuje wszystkie NS wysłane z adresem nieokreślonym.

Wireshark interpretuje również opcje NDP, takie jak Source Link-Layer Address i Target Link-Layer Address, wyświetlając adresy MAC w czytelnej formie.

Podczas analizy RA Wireshark rozkłada opcję Prefix Information na poszczególne pola, pokazując długość prefiksu, flagi L i A oraz czasy ważności.

W przypadku problemów z autokonfiguracją IPv6 warto przechwycić ruch ICMPv6 i przeanalizować sekwencję RS i RA, aby sprawdzić, czy router poprawnie odpowiada na zapytania hostów.

Wireshark umożliwia również śledzenie całej sesji NDP, podświetlając powiązane ze sobą komunikaty NS i NA.

41/48 Scenariusz: Diagnostyka problemów z ARP
Problem: Host A nie może pingować B (192.168.1.10), choć są w tej samej sieci.

Krok 1: Sprawdź ARP cache

ip neigh show | grep 192.168.1.10

Krok 2: Wyślij ARP ping

arping -c 3 192.168.1.10

Krok 3: tcpdump

tcpdump -i eth0 -e arp

Krok 4: Sprawdź switch

show mac address-table | inc aa:bb:cc:dd:ee:0a

Diagnostyka problemów z ARP wymaga systematycznego podejścia, które pozwala odróżnić problemy warstwy drugiej od problemów warstwy trzeciej modelu OSI.

Pierwszym krokiem jest zawsze sprawdzenie lokalnej tablicy ARP za pomocą ip neigh show, aby upewnić się, że wpis dla danego adresu IP istnieje i nie jest w stanie FAILED lub INCOMPLETE.

Jeśli wpis jest niekompletny, kolejnym krokiem jest wysłanie ARP Request za pomocą arping, które pokaże, czy cel odpowiada na zapytania ARP.

W przypadku braku odpowiedzi na arping należy użyć tcpdump do przechwycenia ruchu ARP i sprawdzenia, czy ARP Request w ogóle opuszcza interfejs źródłowy.

Jeśli ramka ARP wychodzi, ale nie ma odpowiedzi, problem leży po stronie hosta docelowego lub przełącznika pomiędzy nimi.

Na przełączniku warto sprawdzić tablicę MAC za pomocą show mac address-table, aby upewnić się, że port hosta docelowego jest aktywny i znajduje się w odpowiedniej sieci VLAN.

W przypadku sieci Wi-Fi warto również sprawdzić, czy oba urządzenia są podłączone do tego samego punktu dostępowego lub sieci mesh.

42/48 Scenariusz: Diagnostyka NDP
Problem: Host A (2001:db8::100) nie może pingować FE80::2.

Krok 1: Sprawdź sąsiadów

ip -6 neigh show

Krok 2: ping6 z scope ID

ping6 -c 3 fe80::2%eth0

Krok 3: tcpdump

tcpdump -i eth0 icmp6

Krok 4: sysctl

sysctl net.ipv6.conf.eth0.disable_ipv6

Diagnostyka problemów z NDP w IPv6 różni się od diagnostyki ARP w IPv4 przede wszystkim koniecznością uwzględnienia adresacji link-local i mechanizmów autokonfiguracji.

Pierwszym krokiem jest sprawdzenie tablicy sąsiadów za pomocą ip -6 neigh show, która pokazuje stan każdego wpisu i pozwala zidentyfikować, czy problem leży po stronie rozpoznawania adresów.

Jeśli wpis dla docelowego adresu jest w stanie INCOMPLETE, oznacza to, że NS został wysłany, ale nie odebrano NA.

Warto wtedy sprawdzić ping6 z jawnym określeniem interfejsu za pomocą %eth0, ponieważ adresy link-local wymagają określenia interfejsu wyjściowego.

Jeśli ping nie działa, należy przechwycić ruch za pomocą tcpdump z filtrem icmp6 i sprawdzić, czy NS w ogóle opuszcza interfejs źródłowy.

Gdy NS nie wychodzi, najczęstszą przyczyną jest brak trasy do docelowego adresu w tablicy routingu IPv6, co można sprawdzić za pomocą ip -6 route show.

W przypadku problemów z autokonfiguracją SLAAC warto również sprawdzić, czy host otrzymuje RA od routera, za pomocą tcpdump z filtrem icmp6 and ip6[40+0]==134.

43/48 Scenariusz: Wykrywanie ARP Spoofingu
Podejrzenie: Ktoś podszywa się pod router (192.168.1.1).

Krok 1: Sprawdź ARP table

arp -n | grep 192.168.1.1

Krok 2: Porównaj MAC z routerem

Krok 3: arpwatch

arpwatch -i eth0
Log: /var/log/arpwatch.log

Krok 4: tcpdump

tcpdump -i eth0 -e arp

Sprawdź fizycznie lub z konsoli: show interface.

Wykrywanie ARP spoofingu wymaga znajomości normalnego zachowania sieci i umiejętności identyfikacji anomalii w tablicach ARP.

Podstawowym objawem ataku ARP spoofing jest zmiana adresu MAC przypisanego do adresu IP routera w tablicy ARP ofiary, co można sprawdzić za pomocą arp -n | grep adres_routera.

Jeśli adres MAC routera nagle się zmienił bez uzasadnionej przyczyny, istnieje duże prawdopodobieństwo, że trwa atak.

Narzędzie arpwatch monitoruje tablicę ARP w czasie rzeczywistym i zapisuje wszystkie zmiany do pliku /var/log/arpwatch.log, wysyłając alerty o podejrzanych aktywnościach. tcpdump z filtrem arp pozwala na przechwycenie wszystkich komunikatów ARP w sieci i identyfikację nadmiernej liczby ARP Reply pochodzących z tego samego adresu MAC.

W przypadku potwierdzenia ataku, natychmiastowym zabezpieczeniem jest dodanie statycznego wpisu ARP dla adresu routera, co uniemożliwi nadpisanie go przez atakującego.

Długoterminowym rozwiązaniem jest wdrożenie Dynamic ARP Inspection na przełączniku, które automatycznie odrzuca nieautoryzowane odpowiedzi ARP.

44/48 Prywatność w IPv6

Problem z EUI-64:

Rozwiązania:

Privacy Extensions (RFC 4941)

Stable Privacy (RFC 8064)

Losowe identyfikatory zmienne w czasie.

Windows, macOS, Android domyślnie.

Linux: use_tempaddr=2.

Adres IPv6 z MAC (EUI-64) jest stały i unikalny.

Umożliwia śledzenie urządzenia między sieciami.

Ten sam identyfikator w sieci domowej i w kawiarni → można śledzić użytkownika.

Deterministyczny, ale stały dla danej sieci – hash (sieć + sekret).

Prywatność w IPv6 stała się istotnym zagadnieniem wraz ze wzrostem świadomości zagrożeń związanych z możliwością śledzenia urządzeń po adresie IPv6.

Problem polega na tym, że adres IPv6 wygenerowany za pomocą EUI-64 zawiera w sobie adres MAC karty sieciowej, który jest unikalny i niezmienny, co umożliwia śledzenie urządzenia pomiędzy różnymi sieciami.

Jeśli użytkownik łączy się z siecią domową, a następnie z siecią w kawiarni, ten sam identyfikator interfejsu IPv6 pozwala na powiązanie tych aktywności z tym samym urządzeniem.

Privacy Extensions rozwiązują ten problem poprzez generowanie losowych tymczasowych adresów, które są regularnie zmieniane, co utrudnia śledzenie.

W systemie Windows i macOS Privacy Extensions są domyślnie włączone, podczas gdy w Linuksie wymagają konfiguracji parametru use_tempaddr.

Alternatywą jest Stable Privacy z RFC 8064, który generuje adres deterministyczny na podstawie prefiksu sieci i lokalnego sekretu, co zapewnia prywatność bez zmienności adresu.

W praktyce większość nowoczesnych systemów operacyjnych domyślnie stosuje Privacy Extensions, rezerwując adres EUI-64 wyłącznie do celów diagnostycznych.

45/48 ARP i NDP w chmurze i wirtualizacji

AWS:

  • ARP w VPC – nie ma broadcastu L2. Mapowanie IP-MAC przez ENI.
  • Każda instancja ma statyczny MAC przypisany do ENI.

Azure:

  • W VNet nie ma broadcastu – ARP zastępowany przez Azure SDN.
  • MAC adresy przypisane przez Hyper-V Switch.

Docker/Kubernetes:

  • Kontenery współdzielą ARP z hostem (tryb bridge).
  • Calico: BGP + ARP dla IPv4, NDP dla IPv6.
  • Flannel: overlay (VXLAN) – ARP/NDP tylko w obrębie hosta.
Zrozumienie tych różnic jest kluczowe przy projektowaniu sieci w środowiskach hybrydowych.

W środowiskach chmurowych i wirtualizacyjnych tradycyjny ARP działa inaczej niż w klasycznych sieciach fizycznych, ponieważ hiperwizory i platformy chmurowe zarządzają mapowaniem adresów IP na MAC w sposób programowy.

W Amazon Web Services każda instancja Elastic Compute Cloud ma przypisany interfejs Elastic Network Interface ze statycznym adresem MAC, który nie zmienia się przez cały cykl życia instancji.

W Microsoft Azure sieć wirtualna VNet nie obsługuje broadcastu, a mapowaniem adresów IP na MAC zarządza programowalna sieć definiowana przez oprogramowanie Azure SDN.

W środowiskach kontenerowych Docker i Kubernetes zachowanie ARP zależy od użytego sterownika sieciowego, przy czym w trybie bridge kontenery współdzielą tablicę ARP z hostem.

W przypadku Calico, które używa routingu BGP, ARP jest stosowany wyłącznie dla bezpośrednich sąsiadów warstwy drugiej, a komunikacja między węzłami odbywa się na poziomie routingu.

Flannel z VXLAN tworzy nakładkową sieć tunelową, w której ARP działa tylko w obrębie pojedynczego hosta, a ruch między hostami jest enkapsulowany w UDP.

46/48 Ciekawostki i historia
  • RFC 826 (ARP) opublikowano w 1982 roku – ma ponad 40 lat!
  • Pierwszy ARP Spoofing opisano w 1990 (Phrack Magazine).
  • GARP w VRRP (RFC 3768) – przejęcie IP przez backup router.
  • SEND nigdy nie został szeroko wdrożony – RA Guard wygrał.
  • IPv6 ma obowiązkowy DAD, w IPv4 DAD opcjonalny.
  • SLAAC bez Privacy Extensions ujawnia producenta karty (OUI z EUI-64).
  • Cisco Catalyst: ARP cache 4h. Linux: ~3 min.
W protokole VRRP z RFC 3768 Gratuitous ARP jest używany do płynnego przejmowania adresów IP przez routery zapasowe, co jest kluczowe dla wysokiej dostępności sieci.

Historia protokołu ARP sięga początku lat osiemdziesiątych, kiedy to w 1982 roku opublikowano RFC 826, który pozostaje w mocy do dziś praktycznie bez zmian, co jest ewenementem w szybko rozwijającym się świecie protokołów sieciowych.

Pierwszy opis ataku ARP spoofing pojawił się w magazynie Phrack w 1990 roku, zaledwie osiem lat po publikacji ARP, co pokazuje, jak szybko odkryto słabości tego protokołu.

Co ciekawe, mimo że SEND został zaprojektowany jako rozwiązanie problemów bezpieczeństwa NDP, to nigdy nie zdobył popularności, a praktyka wybrała prostsze mechanizmy, takie jak RA Guard.

IPv6 wprowadził obowiązkowy DAD, podczas gdy w IPv4 wykrywanie duplikacji adresów jest opcjonalne i rzadko implementowane.

Adres IPv6 wygenerowany przez EUI-64 bez Privacy Extensions ujawnia nie tylko producenta karty sieciowej poprzez OUI, ale także umożliwia śledzenie urządzenia.

Różnice w czasie życia wpisów ARP pomiędzy systemami operacyjnymi sięgają od kilku minut w Linuksie do czterech godzin na przełącznikach Cisco.

47/48 Dodatkowe materiały i źródła
RFCTemat
826ARP – Address Resolution Protocol
903RARP – Reverse ARP
4861NDP – Neighbor Discovery Protocol
4862IPv6 SLAAC
3971SEND – Secure Neighbor Discovery
3972CGA – Cryptographically Generated Addresses
4941Privacy Extensions dla IPv6
6106IPv6 DNS (RDNSS) przez RA
8064Stable Privacy Addresses

Narzędzia:

NarzędzieZastosowanie
WiresharkAnaliza pakietów ARP/NDP
tcpdumpPodsłuch ruchu
arpingTesty ARP / GARP
iproute2 (ip)Zarządzanie ARP/NDP cache
arpwatchMonitoring ARP spoofingu
ettercapTesty penetracyjne ARP
scapyProgramowa generacja ARP/NDP
Podstawowym źródłem wiedzy są dokumenty RFC, z których najważniejsze to RFC 826 dla ARP i RFC 4861 dla NDP, które stanowią autorytatywną definicję tych protokołów.

Dodatkowe materiały źródłowe są niezbędne do pogłębienia wiedzy o protokołach ARP i NDP, ponieważ tematyka ta jest niezwykle obszerna i ciągle ewoluuje.

W praktyce inżynierskiej warto znać narzędzia takie jak Wireshark do analizy pakietów, tcpdump do przechwytywania ruchu, arping do testów ARP oraz iproute2 do zarządzania tablicami sąsiadów.

Do testów penetracyjnych i sprawdzania bezpieczeństwa sieci przydatne są narzędzia takie jak ettercap i arpspoof z pakietu dsniff, które pozwalają przeprowadzić kontrolowany atak ARP spoofing w środowisku laboratoryjnym.

W przypadku zaawansowanej analizy i generowania własnych pakietów ARP i NDP, Scapy oferuje programowe tworzenie i wysyłanie dowolnych ramek ARP oraz komunikatów ICMPv6.

Do monitorowania bezpieczeństwa ARP w sieci produkcyjnej polecane jest arpwatch, który automatycznie wykrywa zmiany w tablicach ARP i alarmuje administratora.

Znajomość tych narzędzi i źródeł jest kluczowa dla każdego administratora sieci.

48/48 Koniec prezentacji
Prezentacja zawiera 48 slajdów. Użyj menu "Skocz do" u góry.

Niebezpieczny (brak autentykacji).

ARP (IPv4, RFC 826) – prosty protokół L2.5 do mapowania IP↔MAC.

NDP (IPv6, RFC 4861) – bogatszy, bezpieczniejszy (SEND), z rozszerzeniami (SLAAC, DAD, NUD).

Oba protokoły są niezbędne do działania sieci Ethernet / Wi-Fi.

Prezentacja obejmująca protokoły ARP i NDP stanowi kompleksowe wprowadzenie do zagadnień mapowania adresów w sieciach IPv4 i IPv6.

Znajomość zarówno ARP, jak i NDP jest niezbędna dla każdego administratora sieci, ponieważ oba protokoły są fundamentem komunikacji w sieciach lokalnych.

ARP, mimo swojego wieku i znanych słabości bezpieczeństwa, wciąż pozostaje nieodzownym elementem sieci IPv4 i będzie używany jeszcze przez wiele lat.

NDP natomiast reprezentuje nowoczesne podejście do rozpoznawania adresów, łącząc w sobie wiele funkcji w jednym protokole.

Zachęcam do samodzielnego eksperymentowania z narzędziami opisanymi w prezentacji, ponieważ praktyczne doświadczenie jest najlepszym sposobem na zrozumienie działania tych protokołów.

W przypadku pytań lub problemów dokumenty RFC oraz społeczności internetowe są doskonałym źródłem dodatkowej wiedzy.

Dziękuję za uwagę i życzę sukcesów w zgłębianiu tajników sieci komputerowych.