Protokol IPv6 ND (Neighbor Discovery) a možnosti jeho sledování v Cisco IOS a v různých OS klienských zařízení
Vypracovali: Jan Náhlý (nah012) Vašek Pazdur (paz058)
Neighbour Discovery je protokol nad IPv6, který umožňuje zjišťovat stav počítačů na stejném segmentu. Tento protokol má několik funkcí Nahrazuje protokoly ARP/RARP z IPv4 . Umožňuje automaticky zjistit adresu sítě a masku na daném segmentu . Umožňuje automaticky zjistit, jaké routery se na segmentu nacházejí a k jakým cílovým adresám směrují packety . 4. Umožňuje zjistit, když nějaký počítač nedosažitelný. 5. Umožňuje automaticky přepnout na používání jiné default gateway. 1. 2. 3.
Neighbor Discovery (dále jen ND) a ICMPv6 spolu velice úzce souvisí, jelikož ND využívá několik typů ICMP zpráv a to jsou: Router Advertisement, Router Solicitation, Neighbor Advertisement, Neighbor Solicitation a Redirect.
Router Solicitation zprávy jsou nepovinné, zasílá je počítač, když chce najít lokální router. Když chce počítač zjistit, jaké routery se na segmentu nacházejí, pošle Router Solicitation packet. Všechny routery na to odpoví packetem Router Advertisement. Routery zasílají s určitou periodou packety Router Advertisement automaticky, aby si všechny počítače aktualizovali informace. Typ ICMPv6 zprávy 133
Router Advertisement zprávy jsou zasílány pouze routery a obsahují informace o routeru a také o síti, ve které se nachází. Z packetu počítač snadno získá informace o adrese a masce sítě, o linkové adrese routeru a od adresách/maskách, kam je tento router schopen směrovat. Používá se k autokonfiguraci. Typ ICMPv6 zprávy 134
Redirect packet je ekvivalentní ICMP redirect z IPv4. Router může pomocí redirect packetu odesílateli říct, že by měl k danému cíli posílat packety jinou kratší cestou – informuje o lepším next-hop. Ke zjišťování sousedů se používá:
Neighbor Solicitation zpráva umožňuje zařízením dotazovat se a kontrolovat, jestli daný soused existuje a jestli je dostupný a duplicitu adres. Pokud chce počítač zjistit linkovou adresu jiného počítače na témže segmentu, pošle Neighbour Solicitation packet. Funkčnost je ekvivalentní packetu ARP Request na IPv4. Jako odpověď dostane Neighbour Advertisement, který obsahuje danou adresu. Typ ICMPv6 zprávy 135
Neighbor Advertisement odpověď na Neighbor Solicitation, obdobně jako funkčnost packetu ARP Response na IPv4. Router může rovněž posílat nevyžádané NA zprávy k informování o změně linkové adresy Typ ICMPv6 zprávy 136
Schéma zapojení projektu
Příkazy ke konfiguraci ipv6 na routech RA, RB a na straně LINUX a WIN 7
Konfigurace IPv6 na routech RA, RB configure terminal RA (config)# ipv6 unicast-routing RA (config)# interface f0/0 RA (config-if)# no ip address RA (config-if)# ipv6 address 2001:1::1/64 RA (config-if)# no shutdown RA (config-if)# exit
//zapnutí ipv6 na routeru //nastavení interface fastEthernet //vypne IPv4 adresu na rozhraní //nastavení IPv6 adresy
Konfigurace IPv6 na Koncové PC stanici (Linux, Win 7) Na koncové stanici stačí nastavit IPv6 adresu na rozhraní. LINUX Příkaz pro nastavení IPv6 adresy je následující: ifconfig eth0 inet6 add 2001:1::3/64 WINDONS 7 Nastavení přes grafické rozhraní. Adresa je 2001:1::4/64
Debugging ipv6 Neighbor Discovery (sledování v Cisco IOS) Je potřeba zapnout debug ipv6 icmp jak na routru RA, tak na routru RB, jelikož icmp zprávy jsou to, co se v ipv6 využívá místo protokolu ARP. RA#debug ipv6 icmp ICMP Packet debugging is on RB#debug ipv6 icmp ICMP Packet debugging is on
Nyní se podíváme na sousedy routeru RA následujícím příkazem RA#show ipv6 neigbors RA#
Jelikož ještě nedošlo k nalezení sousedů (jak připojených počítačů, tak ani sousedního routeru) nedojde tedy k vypsání žádného souseda (zatím nebyl vznesen dotaz na MAC adresu k IP adrese). Router můžeme objevit několika způsoby - buď se ohlásí sám, nebo odpoví na Router solicitation paket. Typicky je Router solicitation posílán zařízeními těsně po bootu, takže má okamžitě k dispozici síťovou konektivitu a nemusí čekat, až router pošle zprávu sám od sebe. Router, který je korektně zkonfigurován, posílá periodicky Router advertisement zprávy do dané sítě. Pokud router obdrží Neighbor solicitation paket, pošle Router advertisement paket. Router advertisement paket posílá router pomocí muticastu pro všechny routery v rámci linky. Naši situaci tedy napravíme např. pingem. RA#ping ipv6 2001:1::5
Router A nezná cílovou MAC adresu, pošle tedy ICMPv6 zprávu NS na solicitated-node multicast adresu, která je vypočítána jako funkce vyžádané cílové adresy. Solicited-node multicast adresa se skládá z prefixu FF02:: 1: FF00: 0 / 104 a poslední 24-bitů této adresy IPv6 (tedy té, pro kterou chceme solicitation-node multicast adresu vypočítat). Například pro IPv6 adesu FE80::2AA:FF:FE28:9C5A je odpovídající solicited-note adresa je FF02::1:FF28:9C5A. A pro náš případ to tedy bude FF02::1:FF00:5 ICMPv6 zpráva obsahuje – zdrojovou adresu a solicitation-node multicast adresu. Dále v datové část ICMPv6 options zahrnuje i linkovou adresu routeru. . RB slyší na tento dotaz, protože naslouchá komunikaci pro solicited-node multicast adresy ipv6 - a to pro všechny unicast adresy, které vlastní.
Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 2001:1::5, timeout is 2 seconds: !!!!!
Při komunikaci mezi směrovačem a PC (popř. mezi PC) dochází k zasílání neighbor solicitation a neighbor advertisement. Když se A snaží získat linkovou adresu B, pošle ICMPv6 neighbor solitication paket se zdrojovou adresou obsahující IPv6 adresu A a cílovou adresou obsahující solicited multicast adresu, příslušnou B. ICMP paket dále v datové části (ICMPv6 options) zahrnuje linkovou adresu A. Host B odpoví ICMPv6 neighbor advertisement paketem, který v ICMPv6 options obsahuje linkovou adresu B. *May 25 09:52:20.331: ICMPv6: Sent N-Solicit, Src=2001:1::2, Dst=FF02::1:FF00:5 *May 25 09:52:20.335: ICMPv6: Received N-Advert, Src=2001:1::5, Dst=2001:1::2
Teprve až po té můžeme na RB sledovat průběh pingu a zachytit tyto packety. *May 25 09:52:20.335: ICMPv6: Sent echo request, Src=2001:1::2, Dst=2001:1::5 *May 25 09:52:20.339: ICMPv6: Received echo reply, Src=2001:1::5, Dst=2001:1::2
Můžeme si to také ověřit tak, že se podíváme do „Joined group address“ sekce, kde můžeme vidět multicast adresy, pro které tento router naslouchá. A to následujícím příkazem: RB#show ipv6 int f0/0 FastEthernet0/0 is up, line protocol is up IPv6 is enabled, link-local address is FE80::214:A8FF:FE99:48BC No Virtual link-local address(es): Global unicast address(es): 2001:1::1, subnet is 2001:1::/64 Joined group address(es): FF02::1 FF02::2 FF02::1:FF00:1 FF02::1:FF00:5 FF02::1:FF99:48BC MTU is 1500 bytes ICMP error messages limited to one every 100 milliseconds ICMP redirects are enabled ICMP unreachables are sent ND DAD is enabled, number of DAD attempts: 1 ND reachable time is 30000 milliseconds (using 24073) ND advertised reachable time is 0 (unspecified) ND advertised retransmit interval is 0 (unspecified) ND router advertisements are sent every 200 seconds ND router advertisements live for 1800 seconds ND advertised default router preference is Medium Hosts use stateless autoconfig for addresses.
RB odpoví na zprávu, jelikož je adresa 2001:1::5 uvedená v cílové časti paketu. Odpoví icmpv6 zprávou typu 136 neighbor advertisement a přiloží MAC adresu do části paketu, která je určena pro tento účel. Poté teprve dochází k zasílání echo request a echo reply. *May 25 09:52:20.331: ICMPv6: Sent N-Solicit, Src=2001:1::2, Dst=FF02::1:FF00:5 *May 25 09:52:20.335: ICMPv6: Received N-Advert, Src=2001:1::5, Dst=2001:1::2
Opět se můžeme nyní podívat, kdo je sousedem: RA#show ipv6 neighbors IPv6 Address Interface 2001:1::5 Fa0/0 FE80::214:A8FF:FE99:48BC Fa0/0
Age Link-layer Addr State 4 0016.7669.0088
STALE
4 0016.7669.0088
STALE
Tyto jednotlivé záznamy mají určitou životnost a v případě, že je již záznam nemusí být aktuální (reach), tak se mu zvýší stáří (age) a stává se tento záznam „vyčpělým“ (stale). Age je stáří v minutách. Informace o MAC adresách odpovídajících jednotlivým IP adresám se ukládají do cache paměti, kde jsou uloženy do vypršení své platnosti. Není tedy třeba hledat MAC adresu před odesláním každého datagramu – jednou získaná informace se využívá opakovaně. V případě nepoužívání této adresy dochází k jejímu stárnutí a případně dochází i k odstranění souseda z cache paměti. Odesláním paketu k sousedovi, který je Stale, ho překlasifikuje na delay. To je optimalizační část, kdy se dává prostor vyšší vrstvě, aby rozhodla o dostupnosti souseda (např. navázáné TCP spojení ho činí dostupným a není třeba posílat sondy). Pokud do krátkého časového limitu vyšší vrstva nepotvrdí dostupnost souseda, dostane se do stavu Probe, kdy jsou mu odesílány sondy (Neighbor Unreachability Detection) a další časový limit se čeká na jeho odpovědi. Pokud žádná nedorazí, stává se soused nedostupným, což se projeví odstraněním jeho záznamu z Neighbor Cache. Zde je zachycen (tučně znárodněn) výpis, kdy došlo k obnovení platnosti záznamu díky zaslání unicast NS. RB#show ipv6 neighbors IPv6 Address Interface 2001:1::5 FE80::216:76FF:FE69:1C8 FE80::650C:19A4:CACF:870E
Age Link-layer Addr State 3 0016.7669.01c8 3 0016.7669.01c8 4 0021.70d0.979d
STALE Fa0/0 STALE Fa0/0 STALE Fa0/0
RB# *May 25 10:09:47.623: ICMPv6: Received N-Solicit, Src=FE80::650C:19A4:CACF:870E, Dst=FF02::1:FFB4:ADE8 *May 25 10:09:47.623: ICMPv6: Sent N-Advert, Src=FE80::21E:BEFF:FEB4:ADE8, Dst=FE80::650C:19A4:CACF:870 *May 25 10:09:52.623: ICMPv6: Sent N-Solicit, Src=FE80::21E:BEFF:FEB4:ADE8, Dst=FE80::650C:19A4:CACF:87E *May 25 10:09:52.623: ICMPv6: Received N-Advert, Src=FE80::650C:19A4:CACF:870E, Dst=FE80::21E:BEFF:FEB 8 RB#show ipv6 neighbors IPv6 Address Interface 2001:1::5 FE80::216:76FF:FE69:1C8 FE80::650C:19A4:CACF:870E
Vymazat tabulku sousedů můžeme příkazem RA#clear ipv6 neighbor RA#clear ipv6 neighbor Ethernet 0/0
Age Link-layer Addr State 3 0016.7669.01c8 3 0016.7669.01c8 0 0021.70d0.979d
STALE Fa0/0 STALE Fa0/0 REACH Fa0/0
V případě že máme stále puštěný debug (RB#debug ipv6 icmp), můžeme si všimnout, že chodí periodicky zprávy router-advertisement *Apr 23 06:36:04.215: ICMPv6: Sent R-Advert, Src=FE80::215:C6FF:FE84:220, Dst=FF02::1
Jak již bylo řečeno výše, tato zpráva slouží k autokonfiguraci.
Debugging ipv6 Neighbor Discovery (sledování na Linuxu) Logika zasílání zpráv je samosebou stejná. Rozdíl je pouze v možnostech sledování. Pro sledování provozu na Linuxovém hostu jsme použili tcpdump a filtrovali jsme icmpv6 packety. root@cnap-desktop:/home/cnap# tcpdump icmp6
komunikace host-host Snažili jsme se o ping z PC A (2001:1::4) na PC B (2001:1::200) root@cnap-desktop:/home/cnap#ping6 2001:1:200 12:05:20.186230 IP6 2001:1::4 > ff02::1:ff00:200: ICMP6, neighbor solicitation, who has 2001:1::200, length 32 12:05:20.187206 IP6 2001:1::a08f:3532:13f9:af03 > ff02::1:ff00:4: ICMP6, neighbor solicitation, who has 2001:1::4, length 32 12:05:20.187257 IP6 2001:1::4 > 2001:1::a08f:3532:13f9:af03: ICMP6, neighbor advertisement, tgt is 2001:1::4, length 32 12:05:20.188247 IP6 2001:1::200 > 2001:1::4: ICMP6, neighbor advertisement, tgt is 2001:1::200, length 32 12:05:20.188263 IP6 2001:1::4 > 2001:1::200: ICMP6, echo request, seq 1, length 64 12:05:20.189259 IP6 2001:1::200 > 2001:1::4: ICMP6, echo reply, seq 1, length 64
Opět zde můžeme vidět nejprve dotaz neighbor solicitation na to kdo má ipv6 adresu 2001:1::200, odpověď neighbor advertisement a potom teprve začínají chodit echo reqesty a echo reply.
A opět zde také můžeme zachytávat periodické router-advertisement 12:06:12.645501 IP6 fe80::214:a8ff:fe99:48bc > ip6-allnodes: ICMP6, router advertisement, length 64
Na výpis dostupných sousedů se pak můžeme podívat zadáním příkazu root@cnap-desktop:/home/cnap# ip -6 neigh show
manuálně můžeme souseda vložit takto: ip -6 neigh add
lladdr dev <device>
příklad: root@cnap-desktop:/home/cnap# ip -6 neigh add fec0::1 lladdr 02:01:02:03:04:05 dev eth0
manuálně vymazat takto: ip -6 neigh del lladdr dev <device>
příklad: root@cnap-desktop:/home/cnap# ip -6 neigh del fec0::1 lladdr 02:01:02:03:04:05 dev eth0
vymazat tabulku sousedů můžeme takto: root@cnap-desktop:/home/cnap# ip neigh flush
Debugging ipv6 Neighbor Discovery (sledování na WIN 7) Pro sledování packetů icmpv6 pro Windows 7 jsme použili Wireshark. V cmd jsme zadali příkaz ping na 2001:1::4 C:\Users\nah012# ping 2001:1::4
Opět je zde vidět zaslání nejprve icmpv6 zprávy neighbor solicitation z 2001:1::200 na 2001:1::4 a odpovědi neighbor advertisement a potom teprve dochází k provedení echo request a echo reply. Zároveň je zde i dobře zachycen další typ zprávy router unreachable. Tato zpráva je generována v případě dostatečně dlouhého zpoždění (neaktivity). Uzel vysílá cílené NS na PC. Pokud je dosažitelný, přijde odpověď NA. V opačném případě dojde k vyjmutí z cache paměti.
Sousedy si potom můžeme vypsat v příkazovém řádku pomocí následujících příkazů: C:\Users\nah012# netsh netsh>interface ipv6 show neighbors
viz. výpis v obrázku níže.
Manuálně můžeme souseda přidat takto: netsh> interface ipv6 add neighbors <MAC addresa>
Smazat tabulku sousedů můžeme takto: netsh> interface ipv6 delete neighbors
Smazat tabulku sousedů na konkrétním rozhraní můžeme takto: netsh> interface ipv6 delete neighbors
Smazat konkrétní záznam můžeme takto: netsh> interface ipv6 delete neighbors
Závěr: Povedlo se nám zachytávat icmpv6 zprávy, které slouží ke komunikaci pro ND. Toto sledování jsme provedli jak při komunikaci ve směru host-host, tak také při komunikaci routeru s hostem a naopak. Sledování a debug jsme provedli na stanicích s Linuxem, stanicích s Windows 7 a na routerech.
Použitá literatura [1] www.faqs.org - domov RFC RFC 1885 - Internet Control Message Protocol (ICMPv6) for IPv6 RFC 2461 - Neighbor Discovery for IPv6 [2] www.wikipedia.org ARP – Address Resolution Protocol [3] www.microsoft.com