ping6.net
Grundlagen

IPv6 Neighbor Discovery Protocol (NDP): Wie Geräte sich gegenseitig finden

Tiefer Einblick in NDP, das Protokoll, das ARP in IPv6 ersetzt. Lernen Sie Router Solicitation, Neighbor Solicitation und die Funktionsweise der Adressauflösung kennen.

ping6.net14. Dezember 202423 min read
IPv6NDPNeighbor DiscoveryARP-ErsatzNetzwerk

NDP ersetzt mehr als nur ARP#

In IPv4 verwendet die Adressauflösung ARP – ein separates Layer-2-Protokoll. Router Discovery nutzt ICMP Router Discovery oder DHCP. Redirect-Nachrichten verwenden ICMP. Duplicate Address Detection existiert überhaupt nicht.

IPv6 konsolidiert alle diese Funktionen im Neighbor Discovery Protocol. NDP übernimmt:

  • Adressauflösung (die Aufgabe von ARP)
  • Router Discovery (Finden von Default-Gateways)
  • Prefix Discovery (Lernen von Netzwerkpräfixen für Autokonfiguration)
  • Parameter Discovery (MTU, Hop-Limit)
  • Address Autoconfiguration (SLAAC)
  • Duplicate Address Detection (Vermeidung von Konflikten)
  • Neighbor Reachability (ist mein Nachbar noch erreichbar?)
  • Next-Hop Determination (welchen Router soll ich verwenden?)
  • Redirect-Nachrichten (bessere Routen existieren)

NDP läuft vollständig über ICMPv6 und verwendet fünf Nachrichtentypen (133-137). Es ist nicht optional. Blockieren Sie NDP und IPv6 funktioniert nicht mehr.

TL;DR - Kurzübersicht

Wichtige Punkte:

  • NDP konsolidiert ARP, Router Discovery und Autokonfiguration in ein Protokoll, das über ICMPv6 läuft
  • Fünf Nachrichtentypen (133-137) handhaben alles von Adressauflösung bis Router Advertisements
  • Sicherheit: Alle NDP-Nachrichten erfordern Hop Limit 255, um Off-Link-Angriffe zu verhindern

Direkt zu: Router Advertisement für SLAAC-Details, Adressauflösung in Aktion für praktische Beispiele, oder Troubleshooting für häufige Probleme.

Die fünf NDP-Nachrichtentypen#

Alle NDP-Nachrichten sind ICMPv6-Pakete mit spezifischen Typnummern. Diese fünf Nachrichten zu verstehen bedeutet, die Funktionsweise von IPv6-Netzwerken auf fundamentaler Ebene zu verstehen.

TypNameGesendet vonZweckZiel
133Router Solicitation (RS)HostsRouter-Informationen anfordernff02::2 (all-routers)
134Router Advertisement (RA)RouterPräsenz und Konfiguration ankündigenff02::1 (all-nodes) oder Unicast
135Neighbor Solicitation (NS)Beliebiger KnotenAdressauflösung, ErreichbarkeitSolicited-Node-Multicast oder Unicast
136Neighbor Advertisement (NA)Beliebiger KnotenAntwort auf NSUnicast oder ff02::1
137RedirectRouterBesserer Next-Hop existiertUnicast (ursprünglicher Sender)

Jede NDP-Nachricht hat eine gemeinsame Sicherheitsanforderung: Hop-Limit muss 255 sein. Dies verhindert Off-Link-Angriffe, da Router das Hop-Limit dekrementieren. Pakete von entfernten Angreifern kommen mit Hop-Limit < 255 an und werden verworfen.

Router Solicitation (Typ 133)#

Hosts senden Router Solicitations, wenn sie möchten, dass Router sich sofort ankündigen, anstatt auf die nächste geplante Router Advertisement zu warten.

ICMPv6-Struktur:

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     Type      |     Code      |          Checksum             |
|     (133)     |      (0)      |                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                            Reserved                           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Options ...
+-+-+-+-+-+-+-+-+-+-+-+-

Felder:

  • Type: 133
  • Code: 0
  • Reserved: 32 Bits, muss Null sein
  • Options: Source Link-Layer Address (optional, einschließen wenn Quelladresse nicht :: ist)

Wann gesendet:

  • Schnittstelle wird aktiviert
  • Host bootet
  • IPv6-Stack wird initialisiert
  • Host benötigt schnelle Konfiguration

Quelladresse:

  • Link-Local-Adresse (falls konfiguriert)
  • :: (unspezifiziert, falls noch keine Adresse vorhanden)

Ziel: ff02::2 (All-Routers-Multicast-Adresse)

Hop-Limit: 255 (erforderlich)

Beispielpaket:

IPv6 Header:
  Source: fe80::a4b2:c3d4:e5f6:7890
  Destination: ff02::2
  Next Header: 58 (ICMPv6)
  Hop Limit: 255
 
ICMPv6:
  Type: 133 (Router Solicitation)
  Code: 0
  Options:
    Source Link-Layer Address: 00:1a:2b:3c:4d:5e

Rate-Limiting:

Hosts dürfen Router Solicitations nicht zu häufig senden. RFC 4861 empfiehlt maximal eine alle 3 Sekunden. Dies verhindert Flooding von Routern bei Netzwerkinstabilität.

Warum es wichtig ist:

Ohne RS würden Hosts auf periodische Router Advertisements warten (alle paar Minuten gesendet). RS ermöglicht es Hosts, die Konfiguration in Sekunden statt Minuten zu erhalten und beschleunigt die Netzwerkinitialisierung.

Router Advertisement (Typ 134)#

Router senden Router Advertisements, um ihre Präsenz anzukündigen, Netzwerkpräfixe zu bewerben und Konfigurationsparameter bereitzustellen. Dies ist die Grundlage der Stateless Address Autoconfiguration (SLAAC).

ICMPv6-Struktur:

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     Type      |     Code      |          Checksum             |
|     (134)     |      (0)      |                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Cur Hop Limit |M|O|H|Prf|Resvd|       Router Lifetime         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                         Reachable Time                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                          Retrans Timer                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Options ...
+-+-+-+-+-+-+-+-+-+-+-+-

Felder:

Cur Hop Limit (8 Bits): Empfohlener Wert für das Hop-Limit-Feld in ausgehenden Paketen. Typischerweise 64. Hosts kopieren dies in ihr IPv6-Header-Hop-Limit-Feld.

Flags (8 Bits):

  • M (Managed Address Configuration): DHCPv6 für Adressen verwenden
  • O (Other Configuration): DHCPv6 für andere Konfiguration verwenden (DNS, NTP usw.)
  • H (Home Agent): Router ist ein Mobile-IPv6-Home-Agent (selten verwendet)
  • Prf (Router Preference): 2-Bit-Präferenz (00=mittel, 01=hoch, 11=niedrig)
  • Reserved: 3 Bits

Router Lifetime (16 Bits): Wie lange (in Sekunden) dieser Router als Default-Gateway verwendet werden soll. 0 bedeutet „kein Default-Router". Maximal 9000 Sekunden (2,5 Stunden).

Reachable Time (32 Bits): Wie lange (in Millisekunden) ein Nachbar als erreichbar betrachtet wird, nachdem eine Erreichbarkeitsbestätigung empfangen wurde. 0 bedeutet nicht spezifiziert (Standardwert oder zuvor empfangenen Wert verwenden).

Retrans Timer (32 Bits): Zeit zwischen erneuten Übertragungen von Neighbor Solicitations (in Millisekunden). Wird für Adressauflösung und Neighbor Unreachability Detection verwendet.

Häufige Optionen:

Source Link-Layer Address (Typ 1): MAC-Adresse des Routers. Ermöglicht Hosts, Neighbor Solicitation für den Router zu überspringen.

MTU (Typ 5): Empfohlene MTU für den Link. Typischerweise 1500.

Prefix Information (Typ 3): Netzwerkpräfixe für Adress-Autokonfiguration. Dies ist die kritische Option für SLAAC.

RDNSS (Typ 25): Recursive DNS-Server-Adressen. RFC 8106.

DNSSL (Typ 31): DNS-Suchliste. RFC 8106.

Wann gesendet:

  • Periodisch (alle 200-600 Sekunden, typischerweise 200)
  • Als Antwort auf Router Solicitation
  • Wenn sich die Router-Konfiguration ändert

Quelle: Link-Local-Adresse des Routers (fe80::/10)

Ziel:

  • ff02::1 (All-Nodes-Multicast) für periodische Ankündigungen
  • Unicast zum anfragenden Host bei Antwort auf RS

Hop-Limit: 255 (erforderlich)

Beispielpaket:

IPv6 Header:
  Source: fe80::1
  Destination: ff02::1
  Next Header: 58 (ICMPv6)
  Hop Limit: 255
 
ICMPv6:
  Type: 134 (Router Advertisement)
  Code: 0
  Cur Hop Limit: 64
  Flags: M=0, O=0 (nur SLAAC)
  Router Lifetime: 1800 Sekunden (30 Minuten)
  Reachable Time: 30000 ms
  Retrans Timer: 1000 ms
 
  Options:
    Source Link-Layer Address: 00:11:22:33:44:55
    MTU: 1500
    Prefix Information:
      Prefix: 2001:db8:1234:5678::/64
      Valid Lifetime: 86400 (24 Stunden)
      Preferred Lifetime: 14400 (4 Stunden)
      Flags: L=1 (on-link), A=1 (autonomous/SLAAC)
    RDNSS:
      Lifetime: 3600
      Addresses: 2001:4860:4860::8888, 2001:4860:4860::8844

Flag-Kombinationen:

MOVerhalten
00Nur SLAAC, kein DHCPv6 (am häufigsten)
01SLAAC für Adressen, DHCPv6 für DNS/NTP/usw.
10DHCPv6 für Adressen (ungewöhnlich, selten verwendet)
11DHCPv6 für alles (Unternehmensnetzwerke)

Prefix-Information-Option:

Diese Option macht SLAAC möglich. Sie teilt Hosts mit, welches Netzwerkpräfix sie bei der Autokonfiguration von Adressen verwenden sollen.

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     Type      |    Length     | Prefix Length |L|A|R|Reserved1|
|      (3)      |      (4)      |               | | | |         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                         Valid Lifetime                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       Preferred Lifetime                      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                           Reserved2                           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
+                                                               +
|                                                               |
+                            Prefix                             +
|                                                               |
+                                                               +
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Felder:

  • Prefix Length: Normalerweise 64 für SLAAC
  • L-Flag: On-Link (Präfix befindet sich auf lokalem Link)
  • A-Flag: Autonom (für SLAAC verwenden)
  • R-Flag: Router-Adresse (Präfix enthält Interface-ID des Routers)
  • Valid Lifetime: Wie lange Adressen gültig sind (typischerweise 86400 = 24 Stunden)
  • Preferred Lifetime: Wie lange Adressen für neue Verbindungen verwendet werden sollen (typischerweise 14400 = 4 Stunden)
  • Prefix: Das tatsächliche Netzwerkpräfix (z. B. 2001:db8:1234:5678::)

Wenn A=1, generieren Hosts Adressen durch Kombination des Präfixes mit einem Interface-Identifier:

Präfix aus RA:      2001:db8:1234:5678::/64
Interface-ID:       a4b2:c3d4:e5f6:7890  (von MAC abgeleitet oder zufällig)
Resultierende Adresse: 2001:db8:1234:5678:a4b2:c3d4:e5f6:7890

Router Advertisements sind kritisch

Blockieren Sie ICMPv6 Typ 134 und SLAAC funktioniert nicht mehr. Hosts haben nur Link-Local-Adressen (fe80::/10) ohne globale Konnektivität. Dies ist eine der häufigsten IPv6-Fehlkonfigurationen – Firewalls, die alle ICMPv6 blockieren, ohne zu verstehen, welche Typen essentiell sind.

Neighbor Solicitation (Typ 135)#

Neighbor Solicitation ist der IPv6-Ersatz für ARP. Es löst IPv6-Adressen in Link-Layer-(MAC-)Adressen auf und überprüft, ob Nachbarn noch erreichbar sind.

ICMPv6-Struktur:

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     Type      |     Code      |          Checksum             |
|     (135)     |      (0)      |                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                           Reserved                            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
+                                                               +
|                                                               |
+                       Target Address                          +
|                                                               |
+                                                               +
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Options ...
+-+-+-+-+-+-+-+-+-+-+-+-

Felder:

  • Type: 135
  • Code: 0
  • Reserved: 32 Bits, muss Null sein
  • Target Address: Abgefragte IPv6-Adresse
  • Options: Source Link-Layer Address (eingeschlossen, außer wenn Quelle :: ist)

Drei Anwendungsfälle:

1. Adressauflösung (ARP-Ersatz)#

Host A muss ein Paket an Host B auf demselben Link senden, kennt aber die MAC-Adresse von B nicht.

Prozess:

  1. A prüft seinen Neighbor-Cache – kein Eintrag für B
  2. A sendet NS an die Solicited-Node-Multicast-Adresse von B
  3. B empfängt NS und antwortet mit NA, das seine MAC enthält
  4. A cached das Mapping und sendet das ursprüngliche Paket

Beispiel:

# Host A möchte an 2001:db8::10 senden
 
IPv6 Header:
  Source: 2001:db8::1
  Destination: ff02::1:ff00:10  (Solicited-Node-Multicast)
  Hop Limit: 255
 
ICMPv6:
  Type: 135 (Neighbor Solicitation)
  Target Address: 2001:db8::10
  Options:
    Source Link-Layer Address: 00:1a:2b:3c:4d:5e

Berechnung der Solicited-Node-Multicast-Adresse:

IPv6 verwendet Solicited-Node-Multicast anstelle von Broadcast für Effizienz. Nur Hosts mit ähnlichen Adressen hören auf jede Solicited-Node-Gruppe.

Formel: ff02::1:ff + letzten 24 Bits der Zieladresse
 
Beispiele:
  2001:db8::10              -> ff02::1:ff00:10
  2001:db8::a4b2:c3d4:e5f6:7890 -> ff02::1:ff:f6:7890
  fe80::1                   -> ff02::1:ff00:1

Dies reduziert unnötige Verarbeitung. In IPv4 erreichen ARP-Broadcasts jeden Host im Netzwerk. In IPv6 treten nur Hosts, deren Adressen mit denselben 24 Bits enden, der Multicast-Gruppe bei und empfangen das NS.

2. Neighbor Unreachability Detection (NUD)#

Überprüfen, ob ein zuvor erreichbarer Nachbar noch erreichbar ist.

Prozess:

  1. Host hat kürzlich keinen Traffic vom Nachbarn erhalten
  2. Host sendet NS (Unicast) an Nachbarn
  3. Wenn NA empfangen wird, ist der Nachbar erreichbar
  4. Wenn nach Wiederholungen keine Antwort, wird der Nachbar als nicht erreichbar betrachtet

Beispiel:

IPv6 Header:
  Source: 2001:db8::1
  Destination: 2001:db8::10  (Unicast zum Nachbarn)
  Hop Limit: 255
 
ICMPv6:
  Type: 135 (Neighbor Solicitation)
  Target Address: 2001:db8::10
  Options:
    Source Link-Layer Address: 00:1a:2b:3c:4d:5e

NUD läuft automatisch im Hintergrund. Wenn Hosts Traffic senden, verfolgen sie, ob Nachbarn antworten. Wenn ein Nachbar schweigt, überprüft NUD die Erreichbarkeit, bevor er als tot erklärt wird.

3. Duplicate Address Detection (DAD)#

Bevor eine IPv6-Adresse verwendet wird, führen Hosts DAD durch, um sicherzustellen, dass kein anderer Knoten sie verwendet. Dies verhindert Adresskonflikte in SLAAC.

Prozess:

  1. Host generiert tentative Adresse (via SLAAC, DHCPv6 oder manuelle Konfiguration)
  2. Host sendet NS mit Quelle :: und Ziel = tentative Adresse
  3. Wenn jemand mit NA antwortet, ist die Adresse bereits in Verwendung (Konflikt)
  4. Wenn nach Timeout keine Antwort, ist die Adresse eindeutig und kann verwendet werden

Beispiel:

# Host möchte 2001:db8::a4b2:c3d4:e5f6:7890 verwenden
# Sendet zuerst DAD NS
 
IPv6 Header:
  Source: ::  (unspezifizierte Adresse – Host hat noch keine Adresse)
  Destination: ff02::1:ff:f6:7890  (Solicited-Node-Multicast)
  Hop Limit: 255
 
ICMPv6:
  Type: 135 (Neighbor Solicitation)
  Target Address: 2001:db8::a4b2:c3d4:e5f6:7890
  Options: (keine – Quelle ist ::)

Wenn ein anderer Host diese Adresse verwendet, sendet er eine Neighbor Advertisement. Der anfragende Host erkennt den Konflikt und muss eine andere Adresse wählen.

DAD-Timeout: Typischerweise 1 Sekunde. Der Host wartet so lange auf eine Antwort. Wenn still, wird die Adresse als eindeutig angenommen.

Sicherheitsproblem: DAD hat keine Authentifizierung. Ein Angreifer kann auf jede DAD-Anfrage antworten und Hosts daran hindern, Adressen zu konfigurieren. Dies wird als DAD-DoS-Angriff bezeichnet. Lösungen umfassen SEND (Secure Neighbor Discovery) oder RA Guard, aber die Akzeptanz ist begrenzt.

Neighbor Advertisement (Typ 136)#

Wird als Antwort auf Neighbor Solicitation gesendet oder unaufgefordert, um Adress-/Link-Layer-Änderungen anzukündigen.

ICMPv6-Struktur:

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     Type      |     Code      |          Checksum             |
|     (136)     |      (0)      |                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|R|S|O|                     Reserved                            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
+                                                               +
|                                                               |
+                       Target Address                          +
|                                                               |
+                                                               +
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Options ...
+-+-+-+-+-+-+-+-+-+-+-+-

Felder:

Flags:

  • R (Router): Sender ist ein Router
  • S (Solicited): Advertisement ist eine Antwort auf NS
  • O (Override): Bestehenden Cache-Eintrag überschreiben

Target Address: Adresse, für die dieses Advertisement gesendet wird

Options: Target Link-Layer Address (MAC-Adresse)

Wann gesendet:

  • Antwort auf Neighbor Solicitation (S=1)
  • Unaufgeforderte Ankündigung einer Adressänderung (S=0)
  • Gratuitous NA, um Nachbarn nach Link-Layer-Adressänderung zu aktualisieren

Ziel:

  • Unicast zum anfragenden Knoten (bei Antwort auf NS)
  • ff02::1 (All-Nodes) für unaufgeforderte Ankündigungen

Hop-Limit: 255 (erforderlich)

Beispielantwort auf NS:

IPv6 Header:
  Source: 2001:db8::10
  Destination: 2001:db8::1  (Unicast zum Anforderer)
  Hop Limit: 255
 
ICMPv6:
  Type: 136 (Neighbor Advertisement)
  Flags: R=0, S=1 (solicited response), O=1 (override)
  Target Address: 2001:db8::10
  Options:
    Target Link-Layer Address: 00:aa:bb:cc:dd:ee

Flag-Bedeutungen:

S=1: Dies ist eine Antwort auf Ihr NS. Aktualisieren Sie Ihren Cache.

S=0: Unaufgeforderte Ankündigung. Ich habe etwas geändert.

O=1: Überschreiben Sie Ihren bestehenden Cache-Eintrag mit diesen Informationen.

O=0: Aktualisieren Sie den Cache nur, wenn kein Eintrag existiert.

Unaufgefordertes NA-Beispiel:

Host ändert seine MAC-Adresse (selten, aber passiert bei virtuellen Maschinen oder Interface-Rekonfiguration). Er sendet unaufgefordertes NA, um Nachbarn zu aktualisieren:

IPv6 Header:
  Source: 2001:db8::10
  Destination: ff02::1  (All-Nodes)
  Hop Limit: 255
 
ICMPv6:
  Type: 136 (Neighbor Advertisement)
  Flags: R=0, S=0 (unaufgefordert), O=1 (override)
  Target Address: 2001:db8::10
  Options:
    Target Link-Layer Address: 00:ff:ee:dd:cc:bb  (neue MAC)

Alle Nachbarn empfangen dies und aktualisieren ihre Caches.

Redirect (Typ 137)#

Router senden Redirect-Nachrichten, um Hosts zu informieren, dass ein besserer First-Hop-Router für ein bestimmtes Ziel existiert.

ICMPv6-Struktur:

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     Type      |     Code      |          Checksum             |
|     (137)     |      (0)      |                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                           Reserved                            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
+                                                               +
|                                                               |
+                       Target Address                          +
|                                                               |
+                                                               +
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
+                                                               +
|                                                               |
+                     Destination Address                       +
|                                                               |
+                                                               +
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Options ...
+-+-+-+-+-+-+-+-+-+-+-+-

Felder:

  • Type: 137
  • Code: 0
  • Target Address: Besserer Next-Hop-Router (oder Ziel, wenn On-Link)
  • Destination Address: Ziel, das die bessere Route verwenden sollte
  • Options: Target Link-Layer Address, Redirected Header (Teil des ursprünglichen Pakets)

Wann gesendet:

Router R1 empfängt ein Paket von Host A für Host B. R1 weiß, dass Router R2 (auf demselben Link wie A) ein besserer Next-Hop für B ist. R1 leitet das Paket an R2 weiter UND sendet ein Redirect an A, das ihm sagt, R2 künftig direkt zu verwenden.

Beispielszenario:

Netzwerktopologie:
  Host A: 2001:db8:1::10
  Router R1: 2001:db8:1::1 (Default-Gateway für A)
  Router R2: 2001:db8:1::2 (bessere Route zu 2001:db8:2::/64)
  Ziel B: 2001:db8:2::20
 
Ablauf:
1. A sendet Paket an B über R1 (Default-Gateway)
2. R1 sieht, dass R2 ein besserer Next-Hop für 2001:db8:2::/64 ist
3. R1 leitet Paket an R2 weiter
4. R1 sendet Redirect an A:
   Target Address: 2001:db8:1::2 (R2)
   Destination Address: 2001:db8:2::20 (B)
5. A aktualisiert Routing-Tabelle: R2 für 2001:db8:2::/64 verwenden
6. Zukünftige Pakete von A an B gehen direkt an R2

Redirect-Nachricht von R1 an A:

IPv6 Header:
  Source: fe80::1  (R1's Link-Local)
  Destination: 2001:db8:1::10  (Host A)
  Hop Limit: 255
 
ICMPv6:
  Type: 137 (Redirect)
  Target Address: fe80::2  (R2 – besserer Next-Hop)
  Destination Address: 2001:db8:2::20  (B – Ziel über R2 zu erreichen)
  Options:
    Target Link-Layer Address: 00:11:22:33:44:55 (R2's MAC)
    Redirected Header: (ursprünglicher Paket-Header, der Redirect auslöste)

Sicherheitsüberlegungen:

Redirect-Nachrichten können missbraucht werden. Ein Angreifer im lokalen Link könnte bösartige Redirects senden, um:

  • Traffic durch die Maschine des Angreifers zu leiten (Man-in-the-Middle)
  • Traffic durch Umleitung zu nicht existierendem Router zu blockieren
  • Routing-Schleifen zu erstellen

Schutzmaßnahmen:

  • SEND (Secure Neighbor Discovery) authentifiziert Redirect-Nachrichten
  • Viele Hosts ignorieren Redirects von Nicht-Default-Gateway-Routern
  • Einige sicherheitsbewusste Netzwerke deaktivieren die Redirect-Verarbeitung vollständig
  • Redirects müssen vom aktuellen First-Hop-Router kommen (von Hosts geprüft)

Sollten Sie Redirects zulassen?

Heim-/Kleine Netzwerke: Sicher. Optimiert Routing, wenn mehrere Router existieren.

Unternehmensnetzwerke: Oft deaktiviert. Kontrollierte Routing-Tabellen und potenzielle Sicherheitsrisiken überwiegen die Vorteile.

Rechenzentren: Normalerweise deaktiviert. Statisches Routing oder dynamische Protokolle (BGP, OSPF) verwalten Routen.

Adressauflösung in Aktion#

Verfolgen wir den vollständigen Prozess, bei dem Host A ein Paket an Host B auf demselben Link sendet.

Ausgangszustand:

  • Host A: 2001:db8::1 (MAC: aa:aa:aa:aa:aa:aa)
  • Host B: 2001:db8::10 (MAC: bb:bb:bb:bb:bb:bb)
  • A's Neighbor-Cache ist leer

Schritt 1: Anwendung initiiert Verbindung

# Auf Host A
ping6 2001:db8::10

Schritt 2: Neighbor-Cache prüfen

# A prüft Neighbor-Cache
ip -6 neigh show 2001:db8::10
# (leer – kein Eintrag)

Schritt 3: Neighbor Solicitation senden

A sendet NS an Solicited-Node-Multicast-Adresse:

IPv6 Header:
  Source: 2001:db8::1
  Destination: ff02::1:ff00:10  (Solicited-Node für 2001:db8::10)
  Hop Limit: 255
 
Ethernet Header:
  Source MAC: aa:aa:aa:aa:aa:aa
  Dest MAC: 33:33:ff:00:00:10  (Multicast-MAC für ff02::1:ff00:10)
 
ICMPv6:
  Type: 135 (Neighbor Solicitation)
  Target Address: 2001:db8::10
  Options:
    Source Link-Layer Address: aa:aa:aa:aa:aa:aa

Schritt 4: B empfängt NS

Host B hört auf ff02::1:ff00:10 (weil seine Adresse mit :10 endet). Er empfängt das NS und verarbeitet es.

Schritt 5: B sendet Neighbor Advertisement

IPv6 Header:
  Source: 2001:db8::10
  Destination: 2001:db8::1  (Unicast zu A)
  Hop Limit: 255
 
Ethernet Header:
  Source MAC: bb:bb:bb:bb:bb:bb
  Dest MAC: aa:aa:aa:aa:aa:aa
 
ICMPv6:
  Type: 136 (Neighbor Advertisement)
  Flags: R=0, S=1 (solicited), O=1 (override)
  Target Address: 2001:db8::10
  Options:
    Target Link-Layer Address: bb:bb:bb:bb:bb:bb

Schritt 6: A aktualisiert Neighbor-Cache

# A's Neighbor-Cache hat jetzt Eintrag
ip -6 neigh show 2001:db8::10
# 2001:db8::10 dev eth0 lladdr bb:bb:bb:bb:bb:bb REACHABLE

Schritt 7: A sendet ursprüngliches Paket

Jetzt, da A die MAC von B kennt, sendet es das Ping-Paket:

IPv6 Header:
  Source: 2001:db8::1
  Destination: 2001:db8::10
 
Ethernet Header:
  Source MAC: aa:aa:aa:aa:aa:aa
  Dest MAC: bb:bb:bb:bb:bb:bb  (von NA gelernt)
 
ICMPv6:
  Type: 128 (Echo Request)

Gesamtzeit: Millisekunden. Der Prozess ist für Anwendungen unsichtbar.

Neighbor-Cache-Zustände#

Neighbor-Cache-Einträge durchlaufen mehrere Zustände, während NUD die Erreichbarkeit verfolgt.

ZustandBedeutungNächste Aktion
INCOMPLETENS gesendet, warte auf NATimeout oder NA empfangen
REACHABLENA kürzlich empfangen, bestätigt erreichbarTraffic senden oder Timeout
STALEEintrag alt, kürzlich nicht bestätigtTraffic senden (löst Probe aus)
DELAYTraffic an stale Eintrag gesendet, warteTimeout löst Probe aus
PROBESende NS zur ErreichbarkeitsüberprüfungNA empfangen oder Timeout
FAILEDKeine Antwort auf ProbesEintrag entfernen

Zustandsübergänge:

INCOMPLETE --NA empfangen--> REACHABLE
REACHABLE --Timeout--> STALE
STALE --Traffic gesendet--> DELAY
DELAY --Timeout--> PROBE
PROBE --NA empfangen--> REACHABLE
PROBE --Timeout--> FAILED

Neighbor-Cache prüfen (Linux):

ip -6 neigh show
 
# Beispielausgabe:
# 2001:db8::1 dev eth0 lladdr aa:aa:aa:aa:aa:aa REACHABLE
# 2001:db8::10 dev eth0 lladdr bb:bb:bb:bb:bb:bb STALE
# fe80::1 dev eth0 lladdr cc:cc:cc:cc:cc:cc DELAY

Timer:

  • REACHABLE-Timeout: 30 Sekunden (konfigurierbar, aus RA Reachable Time)
  • DELAY-Timeout: 5 Sekunden vor Übergang zu PROBE
  • Retransmit-Intervall: 1 Sekunde (konfigurierbar, aus RA Retrans Timer)
  • MAX_MULTICAST_SOLICIT: 3 Versuche vor Erklärung als FAILED

Diese stellen sicher, dass tote Nachbarn schnell erkannt werden, während unnötiger NUD-Traffic minimiert wird.

SLAAC: Adress-Autokonfiguration#

Die Kombination von Router Advertisements mit Duplicate Address Detection schafft Stateless Address Autoconfiguration. Hosts konfigurieren sich selbst ohne DHCP-Server.

Vollständiger SLAAC-Prozess:

Schritt 1: Schnittstelle wird aktiviert

Host aktiviert IPv6 auf Schnittstelle eth0.

Schritt 2: Link-Local-Adresse generieren

fe80:: + Interface-Identifier
fe80::a4b2:c3d4:e5f6:7890  (bei Verwendung von MAC-abgeleiteter IID)
fe80::1234:5678:9abc:def0  (bei Verwendung von zufälliger IID)

Schritt 3: DAD auf Link-Local durchführen

NS mit Quelle :: senden, um zu überprüfen, ob fe80::-Adresse eindeutig ist.

Schritt 4: Router Solicitation senden

IPv6 Header:
  Source: fe80::a4b2:c3d4:e5f6:7890
  Destination: ff02::2
  Hop Limit: 255
 
ICMPv6:
  Type: 133 (Router Solicitation)

Schritt 5: Router Advertisement empfangen

ICMPv6:
  Type: 134 (Router Advertisement)
  Flags: M=0, O=0 (SLAAC)
  Prefix Information:
    Prefix: 2001:db8:1234:5678::/64
    Flags: A=1 (autonomous)
    Valid Lifetime: 86400
    Preferred Lifetime: 14400

Schritt 6: Globale Adresse generieren

Präfix: 2001:db8:1234:5678::/64
IID: a4b2:c3d4:e5f6:7890
Ergebnis: 2001:db8:1234:5678:a4b2:c3d4:e5f6:7890

Schritt 7: DAD auf globale Adresse durchführen

NS senden, um zu überprüfen, ob 2001:db8:1234:5678:a4b2:c3d4:e5f6:7890 eindeutig ist.

Schritt 8: Adresse konfigurieren

ip -6 addr show eth0
 
# Ausgabe:
# inet6 2001:db8:1234:5678:a4b2:c3d4:e5f6:7890/64 scope global dynamic
# inet6 fe80::a4b2:c3d4:e5f6:7890/64 scope link

Schritt 9: Default-Route setzen

Link-Local-Adresse des Routers als Default-Gateway verwenden:

ip -6 route show
 
# Ausgabe:
# default via fe80::1 dev eth0 metric 1024
# 2001:db8:1234:5678::/64 dev eth0 proto kernel metric 256

Gesamtzeit: Ein paar Sekunden.

Privacy Extensions (RFC 4941):

MAC-abgeleitete Interface-IDs sind über Netzwerke hinweg verfolgbar. Privacy Extensions generieren zufällige IIDs, die sich regelmäßig ändern.

Original: 2001:db8:1234:5678:a4b2:c3d4:e5f6:7890  (statisch)
Privacy:  2001:db8:1234:5678:1a2b:3c4d:5e6f:7a8b  (ändert sich täglich)

Die meisten modernen Betriebssysteme aktivieren Privacy Extensions standardmäßig für ausgehende Verbindungen, während die stabile Adresse für eingehende Verbindungen beibehalten wird.

Sicherheitsüberlegungen#

NDP hat Schwachstellen, da es für vertrauenswürdige lokale Netzwerke entwickelt wurde. Angreifer im selben Link können:

Rogue Router Advertisements#

Angreifer sendet gefälschte RAs mit:

  • Falschem Präfix (Blackhole-Traffic oder Route durch Angreifer)
  • Kurzen Lifetimes (erzwinge häufige RA-Verarbeitung)
  • M=1-Flag (erzwinge DHCPv6 zum Server des Angreifers)

Auswirkung: Vollständige Kontrolle über Host-Konfiguration.

Abschwächung:

  • RA Guard: Switch-Funktion, die RAs von Nicht-Router-Ports blockiert
  • SEND (Secure Neighbor Discovery): Kryptografische Authentifizierung (komplex, selten eingesetzt)
  • Router-Präferenz: Hohe Präferenzwerte auf legitimen Routern verwenden

Neighbor Advertisement Spoofing#

Angreifer sendet gefälschte NAs, die vorgeben, ein anderer Host zu sein.

Auswirkung: Man-in-the-Middle-Angriffe, Traffic-Abfangen.

Abschwächung:

  • SEND: Authentifiziert NAs
  • Port-Sicherheit: Switches erzwingen MAC-Adressen-Bindungen
  • Überwachung: Doppelte MAC-Adressen erkennen

DAD-DoS#

Angreifer antwortet auf jede DAD-Anfrage und verhindert Adresskonfiguration.

Auswirkung: Hosts können keine Adressen erhalten, keine Konnektivität.

Abschwächung:

  • SEND: Authentifiziert DAD-Nachrichten
  • Rate-Limiting: NAs von einzelner Quelle begrenzen
  • Statische Adressen: SLAAC vollständig umgehen (nicht skalierbar)

Redirect-Angriffe#

Angreifer sendet gefälschte Redirects, die Traffic durch Angreifer leiten.

Auswirkung: Man-in-the-Middle, Traffic-Abfangen.

Abschwächung:

  • Redirects deaktivieren: Viele Betriebssysteme erlauben Deaktivierung der Redirect-Verarbeitung
  • SEND: Authentifiziert Redirects
  • Quelle überprüfen: Hosts sollten überprüfen, dass Redirects vom aktuellen First-Hop-Router kommen

Realität: Die meisten Netzwerke verwenden SEND aufgrund der Komplexität nicht. RA Guard auf Switches ist die praktische Verteidigung für Unternehmensnetzwerke.

Fehlerbehebung bei NDP-Problemen#

Host hat keine globale Adresse#

Symptome:

  • Nur fe80::-Adressen
  • Kann Link-Local, aber nicht global pingen
  • Keine Default-Route

Diagnose:

# Auf Router Advertisements prüfen
sudo tcpdump -i eth0 -vv 'icmp6 && ip6[40] == 134'
 
# RA-Akzeptanz prüfen
sysctl net.ipv6.conf.eth0.accept_ra
# Sollte 1 oder 2 für Hosts sein
 
# Manuell RS senden
rdisc6 eth0

Häufige Ursachen:

  • Kein Router im Link
  • Firewall blockiert Typ 134
  • accept_ra deaktiviert
  • IPv6-Forwarding aktiviert (deaktiviert RA-Verarbeitung)

Lösung: Router aktivieren, ICMPv6 Typ 134 erlauben, accept_ra=1 setzen.

Neighbor-Cache immer FAILED#

Symptome:

  • Kann Nachbarn nicht erreichen
  • NS gesendet, aber kein NA empfangen
  • Neighbor-Cache zeigt FAILED

Diagnose:

# NS/NA-Austausch beobachten
sudo tcpdump -i eth0 -vv 'icmp6 && (ip6[40] == 135 || ip6[40] == 136)'
 
# Neighbor-Cache prüfen
ip -6 neigh show
 
# Manuelles NS (Linux ndisc6-Tool)
ndisc6 2001:db8::10 eth0

Häufige Ursachen:

  • Firewall blockiert Typen 135/136
  • Ziel-Host IPv6 deaktiviert
  • Switch filtert Multicast
  • Falscher Link (Ziel auf anderem Subnetz)

Lösung: NDP durch Firewalls erlauben, IPv6 auf Ziel überprüfen.

DAD-Fehler#

Symptome:

  • Adresse zeigt „dadfailed"
  • Schnittstelle kann Adresse nicht konfigurieren
  • Kernel-Logs zeigen DAD-Konflikte

Diagnose:

# Adressstatus prüfen
ip -6 addr show eth0
 
# Beispielausgabe mit DAD-Fehler:
# inet6 2001:db8::10/64 scope global tentative dadfailed
 
# Auf Duplikat prüfen
ping6 -c 1 2001:db8::10

Häufige Ursachen:

  • Anderer Host verwendet dieselbe Adresse
  • Angreifer fälscht NA (DAD-DoS)
  • Virtuelle Maschinen mit geklonten MAC-Adressen

Lösung: Adresse ändern, doppelte Hosts untersuchen, VM-Konfiguration prüfen.

Praktische Beispiele mit Tools#

NDP mit tcpdump überwachen#

# Gesamter NDP-Traffic
sudo tcpdump -i eth0 -vv 'icmp6 && ip6[40] >= 133 && ip6[40] <= 137'
 
# Nur Router Advertisements
sudo tcpdump -i eth0 -vv 'icmp6 && ip6[40] == 134'
 
# Adressauflösung (NS/NA)
sudo tcpdump -i eth0 -vv 'icmp6 && (ip6[40] == 135 || ip6[40] == 136)'
 
# Nach Zieladresse filtern
sudo tcpdump -i eth0 -vv 'icmp6 && ip6[40] == 135' | grep '2001:db8::10'

Manuelle Neighbor-Cache-Verwaltung#

# Alle Nachbarn anzeigen
ip -6 neigh show
 
# Bestimmten Nachbarn anzeigen
ip -6 neigh show 2001:db8::10
 
# Eintrag löschen (erzwinge erneute Auflösung)
sudo ip -6 neigh del 2001:db8::10 dev eth0
 
# Statischen Eintrag hinzufügen
sudo ip -6 neigh add 2001:db8::10 lladdr aa:bb:cc:dd:ee:ff dev eth0

SLAAC testen#

# Adressen leeren
sudo ip -6 addr flush dev eth0
 
# IPv6 erneut aktivieren
sudo sysctl -w net.ipv6.conf.eth0.disable_ipv6=0
 
# Autokonfiguration beobachten
ip -6 addr show eth0
ip -6 route show

Verwandte Artikel#

  • ICMPv6 erklärt - NDP läuft über ICMPv6. Verstehen Sie das zugrunde liegende Protokoll.
  • IPv6-Adresstypen - Lernen Sie Link-Local, Solicited-Node-Multicast und andere von NDP verwendete Adresstypen kennen.
  • IPv6-Sicherheit - Sichern Sie NDP gegen Angriffe und erlauben Sie gleichzeitig wesentliche Funktionen.

NDP in Aktion testen

Verwenden Sie unser Ping-Tool, um Adressauflösung auszulösen, und Traceroute, um zu sehen, wie Hosts Next-Hop-Router entdecken.

Häufig gestellte Fragen#

Warum verwendet NDP Multicast statt Broadcast wie ARP?

Multicast ist effizienter. ARP-Broadcasts erreichen jeden Host im Netzwerk – alle müssen den Frame verarbeiten, auch wenn sie nicht das Ziel sind. NDP verwendet Solicited-Node-Multicast-Adressen, die aus der IPv6-Adresse des Ziels berechnet werden. Nur Hosts mit übereinstimmenden Adressen treten dieser Multicast-Gruppe bei und empfangen das Paket. Hosts filtern nicht übereinstimmende Multicasts in Hardware (NIC), wodurch die CPU-Last reduziert wird. In großen Netzwerken mit Tausenden von Hosts macht dies einen signifikanten Leistungsunterschied.

Kann ich NDP deaktivieren wie ich ARP deaktivieren kann?

Nein. NDP ist obligatorisch für den IPv6-Betrieb. Es übernimmt Adressauflösung, Router-Erkennung und Autokonfiguration. Deaktivieren Sie NDP und IPv6 funktioniert vollständig nicht mehr. Im Gegensatz zu IPv4, wo Sie statische ARP-Einträge verwenden können, erfordert IPv6 NDP für Router Advertisements (die Default-Gateways und Präfixe bereitstellen). Selbst mit statischen Nachbarn hätten Sie keine Möglichkeit, Router zu lernen oder Adressen automatisch zu konfigurieren.

Wie verhindert Duplicate Address Detection Konflikte?

Bevor eine Adresse verwendet wird, senden Hosts eine Neighbor Solicitation mit Quelladresse :: (unspezifiziert) und Ziel auf die zu verwendende Adresse gesetzt. Wenn ein anderer Host diese Adresse bereits verwendet, antwortet er mit einer Neighbor Advertisement. Der anfragende Host sieht die Antwort, erkennt den Konflikt und muss eine andere Adresse wählen. Wenn innerhalb von ~1 Sekunde keine Antwort eintrifft, wird die Adresse als eindeutig angenommen. DAD läuft sowohl für Link-Local- als auch für globale Adressen.

Was sind Solicited-Node-Multicast-Adressen?

Solicited-Node-Multicast-Adressen werden aus den letzten 24 Bits einer IPv6-Adresse unter Verwendung der Formel ff02::1:ff:XX:XXXX abgeleitet. Jede IPv6-Adresse tritt automatisch ihrer entsprechenden Solicited-Node-Multicast-Gruppe bei. Bei der Adressauflösung sendet der Sender NS an die Solicited-Node-Adresse statt an Broadcast. Nur Hosts mit Adressen, die mit denselben 24 Bits enden, empfangen es. Dies reduziert unnötige Verarbeitung im Vergleich zu Broadcast-basiertem ARP.

Warum müssen NDP-Pakete Hop-Limit 255 haben?

Sicherheit. Legitimes NDP stammt immer vom lokalen Link und setzt Hop-Limit auf 255. Router dekrementieren Hop-Limit beim Weiterleiten, sodass Pakete von entfernten Angreifern mit Hop-Limit < 255 ankommen. Durch Ablehnung von NDP-Paketen mit Hop-Limit != 255 schützen sich Hosts vor Off-Link-Angreifern, die gefälschte Router Advertisements, Neighbor Advertisements oder Redirects senden. Diese einfache Prüfung verhindert viele Fernangriffe ohne komplexe Authentifizierung.

Sollte ich SEND (Secure Neighbor Discovery) einsetzen?

Wahrscheinlich nicht. SEND bietet kryptografische Authentifizierung für NDP mittels Public-Key-Kryptografie und verhindert Spoofing-Angriffe. Theoretisch ist es großartig. In der Praxis ist es komplex, erfordert PKI-Infrastruktur, hat schlechte Betriebssystem-Unterstützung und fügt Latenz zu zeitkritischen Operationen wie Adressauflösung hinzu. Die meisten Netzwerke verwenden einfachere Abschwächungen: RA Guard auf Switches (blockiert RAs von Nicht-Router-Ports), Überwachung auf Rogue-RAs und physische/Link-Layer-Sicherheit. SEND ist für hochsichere Umgebungen geeignet, die bereit sind, in die Infrastruktur und Komplexität zu investieren.