Zum Inhalt springen

IPv6/Host/Neighbor Cache

Aus Foxwiki

IPv6 Neighbor Cache

Beschreibung

Nodes am internen Link
  • Router
  • Linux Host
  • Windows Host
Neighbor Discovery Protocol (NDP)
  • Über die Link-local Addresses können Nodes auf dem internen Link kommunizieren
  • Dies kann mit Echo Requests getestet werden
Link-local Addresses zu Link-layer Addresses auflösen

Nodes waren in der Lage die Link-local Addresses ihrer Nachbarn zu gültigen Link-layer Addresses aufzulösen

  • Unser Link internal ist ein virtuelles Ethernet, die Link-layer Addresses entsprechen in unserem Netz deshalb den bei Ethernet gebräuchlichen MAC-Adressen
  • Zuständig für die Auflösung von IPv6-Adressen zu Link-layer Addresses ist das Neighbor Discovery Protocol (NDP), spezifiziert in RFC 4861
NDP wird über ICMPv6 transportiert
  • Damit ist es von IPv6 abhängig, wenn es IPv6-Adressen auflösen soll
  • Wie und warum das dennoch funktioniert, werden wir uns gleich anschauen
  • Vorher machen wir uns aber noch mit den Neighbor Caches vertraut
  • Jeder Node betreibt einen Neighbor Cache in dem er die Ergebnisse der Link-layerAdressauflösungen zwischenspeichert

Unter IPv4 haben wir für die Auflösung noch ARP benutzt, dessen Ergebnisse in der ARP-Tabelle zwischengespeichert wurden

Gültigkeit des Neighbor Caches

Einträge im Neighbor Caches sind je nach Betriebssystem und Zustand unterschiedlich lange gültig

  • Im Normalfall sind sie recht kurzlebig
  • Daher sind für die folgenden Experimente mitunter mehrere Anläufe notwendig

Für das Einfangen eines ganz bestimmten Zustands müssen wir zum richtigen Zeitpunkt den Neighbor Cache auslesen

  • Manchmal ist es daher vorteilhaft, das nächste Kommando schon in der Zwischenablage bereitzuhalten, um schneller reagieren zu können

Windows

Wechsel zur Virtuellen Maschine windows

  • Terminal öffnen
    • zum Beispiel mit der bereits bekannten Methode Windows-Taste+R und cmd
  • Um sicherzugehen, dass sich Einträge im Neighbor Cache befinden werden, kommunizieren wir mit einem anderen Node auf dem Link

Echo Request an die Link-local Address von linux

C:\Users\user> ping -n3 fe8::2:ff:fe6:d1e%12
Pinging fe8::2:ff:fe6:d1e %12 with 32 bytes of data :
Reply from fe8::2:ff:fe6:d1e%12: time <1 ms
Packets : Sent = 3 , Received = 3, Lost = ( % loss ) ,

Sobald eine Antwort eintrifft, können wir den Vorgang abbrechen und den Neighbor Cache ausgeben lassen

C:\Users\user> netsh interface
Interface 12: LAN1
Internet Address
---------------------------fe8 ::2 : ff : fe6 : d1e
ff 2 ::1
ff 2 ::1: ff6 : d1e


ipv6 show neighbors
Physical Address
----------------- - -6 - d -1 e
33 -33 - - - - 1
33 -33 - ff -6 - d -1 e

Type
--------Reachable
Permanent
Permanent

Die IPv6-Adresse fe8 ::2 :ff:fe6 :d1e wurde korrekt zur Link-layer Address - - -6 - d-1e aufgelöst

  • Der Zustand des Eintrages ist Reachable, das heißt, der zugehörige Node gilt auf dem Link als erreichbar

Nach circa 20 Sekunden lassen wir uns den Neighbor Cache ein weiteres Mal ausgeben:

C:\Users\user> netsh interface
Interface 12: LAN1
Internet Address
---------------------------fe8 ::2 : ff : fe6 : d1e
ff 2 ::1
ff 2 ::1: ff6 : d1e
ipv6 show neighbors
Physical Address
----------------- - -6 - d -1 e
33 -33 - - - - 1
33 -33 - ff -6 - d -1 e
Type
--------Stale
Permanent
Permanent

Der Eintrag für die Adresse fe8 ::2 :ff:fe6 :d1e hat seinen Zustand zwischenzeitlich auf Stale gewechselt

  • Die Nachbarn am Link können offensichtlich verschiedene Zustände haben

Linux

Die Zustände werden wir in einem weiteren Experiment, diesmal von Linux aus, untersuchen

  • Wir verschicken Echo Requests an fuzzball, werden uns aber bei Eingabe der Adresse im letzten Zeichen vertippen
  • Die Echo Requests gehen an die Adresse fe8 ::219:83ff:fe 9:17db
  • Den Vorgang brechen wir vorerst nicht ab
user@linux:~ ping6 fe8::219:83ff:fe9:17db%eth
PING fe8::219:83ff:fe9:17db% eth '
( fe8 ::219:83 ff : fe 9 :17 db ) 56 data bytes
From fe8 ::2 : ff : fe6 : d1e icmp_seq =1 Destination '
unreachable : Address unreachable
48 packets transmitted ,
received , +42 errors , 1 % '
packet loss , time 47182 ms

Während Linux weiter fleißig Echo Requests versendet, öffnen wir ein zweites Terminal und schauen in diesem auf den Neighbor Cache

  • Unter Linux steht uns dafür das Kommando ip neighbor show zur Verfügung
user@linux:~ ip neighbor show
fe8::219:83ff:fe9:17 db dev eth INCOMPLETE

Wir lernen mit Incomplete einen weiteren Zustand kennen

Nun brechen wir das Senden der Echo Requests im ersten Terminal ab, wechseln zügig in das zweite Terminal und lassen uns erneut den Neighbor Cache ausgeben

user@linux:~ ip neighbor show
fe8::219:83ff:fe9:17 db dev eth FAILED

Sofern wir uns nicht zu viel Zeit gelassen haben, sehen wir noch den Zustand Failed bevor der Eintrag aus dem Neighbor Cache verschwindet

  • Failed ist kein Zustand, den man in RFC 4861 findet, sondern soll verdeutlichen, dass die Auflösung der Adresse nicht erfolgreich beendet werden konnte

Zustände der Einträge

Bedeutungen der Zustände
Zustand Beschreibung
Incomplete Es findet gerade eine Adressauflösung statt
  • Diese konnte aber noch nicht erfolgreich beendet werden
Reachable Der zugehörige Nachbar gilt als erreichbar
  • Entweder findet gerade eine Kommunikation mit ihm statt oder eine solche ist erst wenige Sekunden her
Stale Die Erreichbarkeit des zugehörigen Nachbarn ist unbekannt
  • Es fand kürzlich eine Kommunikation mit ihm statt
  • Solange keine weitere Kommunikation beabsichtigt ist, sollte auf eine erneute Adressauflösung verzichtet werden
Delay Der zugehörige Nachbar gilt nicht als erreichbar
  • Es wurde aber wieder eine Kommunikation mit ihm gestartet
  • Bleibt eine Bestätigung der Erreichbarkeit durch die kommunizierende Schicht aus, wird auf IP-Schicht die Erreichbarkeit aktiv überprüft werden
Probe Der zugehörige Nachbar gilt nicht als erreichbar
  • Seine Erreichbarkeit wird gerade aktiv geprüft
  • Sollte die Prüfung fehlschlagen, wird der Eintrag entfernt

Adressauflösung mitschneiden

Dass die Neighbor Caches funktionieren haben wir gerade gesehen
  • Auch wissen wir dank der erfolgreichen Echo Requests, dass die Auflösung von IPv6-Adressen und Link-layer Addresses funktioniert
  • Es ist nun an der Zeit, die Frage nach dem Wie zu beantworten
Dazu suchen wir uns einen Node aus, der gerade einen leeren Neighbor Cache hat, zum Beispiel fuzzball
  • Das Kommando zum Anzeigen des Neighbor Caches ist uns aus den vorherigen Experimenten noch bekannt
  • Sollten sich noch gültige Einträge im Neighbor Cache befinden, warten wir noch etwas ab

Wenn der Node seine IPv6-Nachbarn schließlich vergessen hat, starten wir Wireshark auf dem entsprechenden Interface, hier eth1

Um eine Adressauflösung zu erzwingen versenden wir wieder Echo Requests
user@router:~ ping6 -c3 fe8::2:ff:fe6:d1e%eth1
PING fe8 ::2 : ff : fe6 : d1e % eth1 ( fe8 ::2 : ff : fe6 : d1e ) '
56 data bytes
64 bytes from fe8 ::2 : ff : fe6 : d1e : icmp_seq =1 ttl =64 '
time =3.75 ms
3 packets transmitted , 3 received , % packet loss , time '
2 5 ms

Neighbor Solicitation

Router Solicitation

Solicited Node Multicast Address

Pakete an die Solicited Node Multicast Address eines Nodes können auch bei unbekannter Link-layer Address an diesen

Abbildung 4.7 - Solicited Node Multicast Address

00:00:00:60:0d:1e

Link-Layer Address (MAC)

ff02::1:ff60:0d1e

Solicited Node Multicast Address

zugestellt werden

  • Wie genau das funktioniert werden wir in Abschnitt 4.5 Multicast lernen
  • Vorerst werden wir uns damit begnügen, dass es irgendwie funktioniert

Neighbor Advertisement

Neighbor Advertisement


Anhang

Siehe auch

Links

Weblinks

TMP

IPv6-Neighbor Cache

Bei IPv6 wird die MAC-Adressenanfrage nicht wie bei IPv4 über das ARP-Protokoll realisiert, sondern über das Neighbor Discovery Protokoll (ein spezifisches ICMPv6-Protokoll). Dementsprechend werden die angefragten MAC-Adresse-IP-Adresse-Zuordnungen in den Neighbor-Cache abgelegt

Die Abfrage dieses Caches erfolgt über den Befehl
 
$ ip -6 neigh
Manuelle MAC-Adressanfrage

Um eine MAC-Adressanfrage manuell zu initiieren kann das tool ndisc6 (neighbor discovery) verwendet werden

# ndisc6 <IPv6-Zieladresse> <Quellinterface>
# ndisc6 <2001:638:408:200::1> <eth1>

IPv6-Neighbour Cache

Der Befehl show ipv6-neighbour-cache zeigt den aktuellen Neighbour Cache an

Die Ausgabe ist folgendermaßen formatiert:

<IPv6-Adresse> iface <Interface> lladdr <MAC-Adresse> (<Switchport>) <Gerätetyp> <Status> src <Quelle>
Bestandteile der Konsolenausgabe show ipv6-neighbour-cache
Ausgabe Erläuterung
IPv6-Adresse Die IPv6-Adresse des benachbarten Gerätes
Interface Das Interface, über das der Nachbar erreichbar ist
MAC-Adresse Die MAC-Adresse des Nachbarn
Switchport Der Switchport, auf dem der Nachbar festgestellt wurde
Gerätetyp Gerätetyp des Nachbarn (Host oder Router)
Status Der Status der Verbindung zum benachbarten Gerät
Quelle Die IPv6-Adresse, über die der Nachbar entdeckt wurde
Mögliche Einträge
INCOMPLETE Die Auflösung der Adresse ist noch im Gange und die Link Layer Adresse des Nachbarn wurde noch nicht bestimmt
REACHABLE Der Nachbar ist in den letzten zehn Sekunden erreichbar gewesen
STALE Der Nachbar ist nicht länger als REACHABLE qualifiziert, aber eine Aktualisierung wird erst durchgeführt, wenn versucht wird ihn zu erreichen
DELAY Der Nachbar ist nicht länger als REACHABLE qualifiziert, aber es wurden vor kurzem Daten an ihn gesendet und auf Verifikation durch andere Protokolle gewartet
PROBE Der Nachbar ist nicht länger als REACHABLE qualifiziert. Es werden Neighbour Solicitation Probes an ihn gesendet um die Erreichbarkeit zu bestätigen