# 3.5 ARP und IPv6 Neighbor Discovery analysieren

Damit ein Endgerät ein IP-Paket innerhalb eines lokalen Ethernetnetzes übertragen kann, benötigt es die zugehörige MAC-Adresse des nächsten direkten Kommunikationspartners.

Bei IPv4 übernimmt diese Zuordnung das Address Resolution Protocol, kurz ARP. IPv6 verwendet dafür Neighbor Discovery, kurz NDP beziehungsweise ND, auf Basis von ICMPv6.

> **Grundregel:** Für ein Ziel im lokalen Subnetz wird die MAC-Adresse des Zielsystems benötigt. Für ein Ziel in einem entfernten Subnetz wird normalerweise die MAC-Adresse des nächsten Routers benötigt – nicht die MAC-Adresse des entfernten Zielsystems.

---

<details>
<summary><strong>1. Welche Aufgabe erfüllt ARP?</strong></summary>

ARP ordnet eine lokale IPv4-Adresse einer MAC-Adresse zu.

**Beispiel im selben Subnetz**

```text
CLIENT-023
IPv4: 192.0.2.23/24
MAC:  00-11-22-33-44-55

SERVER-01
IPv4: 192.0.2.80/24
MAC:  AA-BB-CC-DD-EE-FF
```

Der Client kennt zunächst nur die IPv4-Adresse des Servers und sendet eine ARP-Anfrage:

```text
Wer hat 192.0.2.80?
Antwort bitte an 192.0.2.23.
```

Die Anfrage wird als Ethernet-Broadcast gesendet:

```text
FF:FF:FF:FF:FF:FF
```

Der Server antwortet normalerweise per Unicast:

```text
192.0.2.80 befindet sich unter AA:BB:CC:DD:EE:FF.
```

Der Client kann die Zuordnung anschließend vorübergehend in seiner Nachbartabelle speichern.

</details>

<details>
<summary><strong>2. Welche MAC-Adresse wird bei einem entfernten IPv4-Ziel aufgelöst?</strong></summary>

**Ausgangslage**

```text
Client:  192.0.2.23/24
Gateway: 192.0.2.1
Ziel:    198.51.100.20
```

Das Ziel liegt nicht im lokalen Subnetz `192.0.2.0/24`.

Der Client ermittelt daher normalerweise nicht die MAC-Adresse von `198.51.100.20`, sondern die MAC-Adresse des nächsten Routers:

```text
ARP-Anfrage:
Wer hat 192.0.2.1?
```

Anschließend entsteht vereinfacht folgender Frame:

```text
Ethernet-Ziel-MAC: MAC-Adresse des Gateways
IP-Zieladresse:    198.51.100.20
```

| Ebene | Ziel |
|---|---|
| Ethernet | nächster Router |
| IPv4 | entferntes Zielsystem |

Die Ethernetadressen können sich an jedem gerouteten Abschnitt ändern. Die IP-Zieladresse bleibt ohne NAT normalerweise bis zum Ziel bestehen.

</details>

<details>
<summary><strong>3. Welche Symptome sprechen für ein ARP- oder Neighbor-Discovery-Problem?</strong></summary>

- Gateway ist trotz korrekter IP-Konfiguration nicht erreichbar,
- Ziel im selben Subnetz ist nicht erreichbar,
- Nachbareintrag bleibt unvollständig,
- dieselbe IP-Adresse erscheint mit wechselnden MAC-Adressen,
- Verbindung funktioniert nur sporadisch,
- IP-Adresskonflikt wird gemeldet,
- ARP-Anfragen werden gesendet, aber nicht beantwortet,
- Neighbor Solicitation wird nicht beantwortet,
- IPv6-Adresse bleibt im Zustand `tentative`,
- IPv6 Duplicate Address Detection schlägt fehl,
- falscher statischer Nachbareintrag ist vorhanden,
- Proxy ARP oder Proxy NDP antwortet unerwartet,
- Switchport befindet sich im falschen VLAN,
- WLAN-Client-Isolation verhindert direkte Kommunikation,
- Security-Funktion blockiert ARP- oder NDP-Nachrichten,
- virtuelle Maschinen oder Container verwenden unerwartete Nachbareinträge.

</details>

<details>
<summary><strong>4. Wie wird entschieden, ob ARP für das Ziel oder für das Gateway verwendet wird?</strong></summary>

Zuerst wird die ausgewählte Route geprüft.

**Windows**

```powershell
[RO] Find-NetRoute -RemoteIPAddress 198.51.100.20
```

**Linux**

```bash
[RO] ip route get 198.51.100.20
```

**macOS**

```bash
[RO] route -n get 198.51.100.20
```

**Bewertung**

| Routenergebnis | Aufzulösender direkter Nachbar |
|---|---|
| Ziel gilt als direkt verbunden | Ziel-IP-Adresse |
| Route enthält ein Gateway beziehungsweise Next Hop | Gateway-Adresse |
| Route verwendet Tunnelinterface | Verhalten abhängig vom Tunnel |
| Route fehlt | keine reguläre Weiterleitung möglich |
| Ziel wird fälschlich als lokal behandelt | möglicherweise falsches Präfix |

Eine falsche Subnetzmaske kann dazu führen, dass ein Client ARP-Anfragen für ein eigentlich entferntes Ziel sendet.

</details>

<details>
<summary><strong>5. Wie wird die IPv4-Nachbartabelle unter Windows angezeigt?</strong></summary>

**PowerShell**

```powershell
[RO] Get-NetNeighbor -AddressFamily IPv4
```

**Übersichtliche Darstellung**

```powershell
[RO] Get-NetNeighbor -AddressFamily IPv4 |
    Sort-Object InterfaceIndex, IPAddress |
    Format-Table InterfaceAlias,
                 InterfaceIndex,
                 IPAddress,
                 LinkLayerAddress,
                 State,
                 PolicyStore
```

**Ein bestimmter Nachbar**

```powershell
[RO] Get-NetNeighbor `
    -InterfaceAlias 'Ethernet' `
    -IPAddress '192.0.2.1'
```

**Klassischer Befehl**

```cmd
[RO] arp -a
```

Bestimmte IP-Adresse suchen:

```cmd
[RO] arp -a 192.0.2.1
```

Die PowerShell-Ausgabe zeigt zusätzlich den Zustand des Eintrags. `arp -a` unterscheidet hauptsächlich zwischen dynamischen und statischen Einträgen.

</details>

<details>
<summary><strong>6. Welche Neighbor-Zustände zeigt Windows?</strong></summary>

Mögliche Zustände von `Get-NetNeighbor`:

| Zustand | Bedeutung |
|---|---|
| `Unreachable` | Nachbar gilt als nicht erreichbar |
| `Incomplete` | Auflösung wurde begonnen, aber noch nicht abgeschlossen |
| `Probe` | Erreichbarkeit wird aktiv geprüft |
| `Delay` | Prüfung wird kurz verzögert |
| `Stale` | Eintrag ist vorhanden, wurde aber länger nicht bestätigt |
| `Reachable` | Nachbar wurde kürzlich als erreichbar bestätigt |
| `Permanent` | statischer beziehungsweise dauerhafter Eintrag |
| `Unknown` | Zustand konnte nicht eindeutig bestimmt werden |

Ein Eintrag im Zustand `Stale` ist nicht automatisch fehlerhaft. Er kann bei der nächsten Verwendung erneut geprüft werden.

Ein dauerhaft `Incomplete` bleibender Eintrag deutet darauf hin, dass die Adressauflösung nicht erfolgreich abgeschlossen wird.

</details>

<details>
<summary><strong>7. Wie wird die IPv4-Nachbartabelle unter Linux angezeigt?</strong></summary>

**Alle IPv4-Nachbarn**

```bash
[RO] ip -4 neighbour show
```

Kurzform:

```bash
[RO] ip -4 neigh
```

**Bestimmte Schnittstelle**

```bash
[RO] ip -4 neighbour show dev eth0
```

**Bestimmte IP-Adresse**

```bash
[RO] ip -4 neighbour show 192.0.2.1
```

**Änderungen live beobachten**

```bash
[RO] ip monitor neigh
```

Beenden mit:

```text
Strg+C
```

**Klassischer ARP-Befehl**

```bash
[RO] arp -an
```

Der ältere Befehl `arp` ist nicht auf jeder Linux-Installation standardmäßig vorhanden. Für moderne Systeme ist `ip neighbour` vorzuziehen.

</details>

<details>
<summary><strong>8. Welche Neighbor-Zustände zeigt Linux?</strong></summary>

| Zustand | Bedeutung |
|---|---|
| `INCOMPLETE` | Adressauflösung läuft, aber MAC-Adresse fehlt |
| `REACHABLE` | Nachbar wurde kürzlich als erreichbar bestätigt |
| `STALE` | Eintrag ist bekannt, Bestätigung ist aber älter |
| `DELAY` | Erreichbarkeitsprüfung wird verzögert |
| `PROBE` | Nachbar wird aktiv geprüft |
| `FAILED` | Auflösung beziehungsweise Erreichbarkeitsprüfung ist fehlgeschlagen |
| `NOARP` | für diesen Eintrag wird keine normale Nachbarauflösung durchgeführt |
| `PERMANENT` | statischer, dauerhafter Eintrag |

**Beispiel**

```text
192.0.2.1 dev eth0 lladdr 00:11:22:33:44:01 REACHABLE
```

| Bestandteil | Bedeutung |
|---|---|
| `192.0.2.1` | IPv4-Adresse des Nachbarn |
| `dev eth0` | verwendete Schnittstelle |
| `lladdr` | Link-Layer-Adresse folgt |
| `00:11:22:33:44:01` | MAC-Adresse |
| `REACHABLE` | aktueller Zustand |

**Fehlgeschlagener Eintrag**

```text
192.0.2.80 dev eth0 FAILED
```

Dies bedeutet, dass die Nachbarauflösung beziehungsweise Erreichbarkeitsprüfung fehlgeschlagen ist. Die genaue Ursache kann weiterhin bei VLAN, Zielgerät, Switch, WLAN-Isolation oder Filterung liegen.

</details>

<details>
<summary><strong>9. Wie wird die IPv4-Nachbartabelle unter macOS angezeigt?</strong></summary>

**Alle ARP-Einträge**

```bash
[RO] arp -an
```

**Bestimmte IP-Adresse**

```bash
[RO] arp -n 192.0.2.1
```

**Routingtabelle mit Link-Layer-Einträgen**

```bash
[RO] netstat -rn -f inet
```

Beispiel eines vollständigen Eintrags:

```text
? (192.0.2.1) at 00:11:22:33:44:01 on en0 ifscope [ethernet]
```

Beispiel eines unvollständigen Eintrags:

```text
? (192.0.2.80) at (incomplete) on en0 ifscope [ethernet]
```

Ein unvollständiger Eintrag bedeutet, dass keine verwendbare MAC-Adresse ermittelt wurde.

</details>

<details>
<summary><strong>10. Wie wird ein Nachbareintrag kontrolliert erzeugt?</strong></summary>

Wenn noch kein Eintrag vorhanden ist, kann eine normale Kommunikation zum direkten Nachbarn die Auflösung auslösen.

**Windows**

```powershell
[TEST] Test-Connection 192.0.2.1 -Count 1
```

Danach:

```powershell
[RO] Get-NetNeighbor `
    -InterfaceAlias 'Ethernet' `
    -IPAddress '192.0.2.1'
```

**Linux**

```bash
[TEST] ping -c 1 192.0.2.1
```

Danach:

```bash
[RO] ip neighbour show 192.0.2.1
```

**macOS**

```bash
[TEST] ping -c 1 192.0.2.1
```

Danach:

```bash
[RO] arp -n 192.0.2.1
```

Auch wenn das Ziel ICMP nicht beantwortet, kann durch die lokale Zustellung ein ARP-Eintrag entstehen. Voraussetzung ist, dass das Betriebssystem das Ziel als direkten Nachbarn behandelt.

</details>

<details>
<summary><strong>11. Wie wird ARP mit arping aktiv geprüft?</strong></summary>

`arping` sendet aktive ARP-Anfragen auf einer lokalen Ethernetverbindung. Das Werkzeug ist nicht unter jedem Betriebssystem standardmäßig vorhanden.

**Linux-Beispiel**

```bash
[TEST][PRIV] sudo arping \
    -I eth0 \
    -c 4 \
    192.0.2.1
```

| Option | Bedeutung |
|---|---|
| `-I eth0` | Schnittstelle |
| `-c 4` | vier Anfragen |
| Zieladresse | direkt zu prüfende lokale IPv4-Adresse |

**Einsatzmöglichkeiten**

- direkte lokale Erreichbarkeit prüfen,
- Antwort-MAC-Adresse bestimmen,
- erkennen, ob mehrere Geräte antworten,
- ARP unabhängig von ICMP testen.

**Einschränkungen**

- funktioniert nur für direkt erreichbare IPv4-Nachbarn,
- prüft kein geroutetes entferntes Ziel,
- kann Sicherheitsüberwachung auslösen,
- verschiedene `arping`-Implementierungen besitzen unterschiedliche Optionen,
- eine Antwort beweist nicht die Funktion höherer Protokolle.

Vor der Verwendung muss die lokale Syntax geprüft werden:

```bash
[RO] arping --help
```

oder:

```bash
[RO] man arping
```

</details>

<details>
<summary><strong>12. Wie wird ARP mit Wireshark oder TShark untersucht?</strong></summary>

**Wireshark-Display-Filter**

```text
arp
```

Nur Anfragen:

```text
arp.opcode == 1
```

Nur Antworten:

```text
arp.opcode == 2
```

Bestimmte IPv4-Adresse:

```text
arp.src.proto_ipv4 == 192.0.2.1 || arp.dst.proto_ipv4 == 192.0.2.1
```

**Capture-Filter**

```text
arp
```

**TShark-Liveanzeige**

```bash
[TEST][PRIV][SENS] tshark \
  -i INTERFACE \
  -f "arp"
```

**Zeitlich begrenzte Aufnahme**

```bash
[TEST][PRIV][FILE][SENS] dumpcap \
  -i INTERFACE \
  -f "arp" \
  -a duration:30 \
  -w arp-diagnose.pcapng
```

**ARP-Felder anzeigen**

```bash
[RO][SENS] tshark \
  -r arp-diagnose.pcapng \
  -Y "arp" \
  -T fields \
  -e frame.time \
  -e eth.src \
  -e eth.dst \
  -e arp.opcode \
  -e arp.src.proto_ipv4 \
  -e arp.src.hw_mac \
  -e arp.dst.proto_ipv4 \
  -e arp.dst.hw_mac
```

Die lokal verfügbaren Feldnamen können geprüft werden:

```bash
[RO] tshark -G fields |
    grep -E $'\tarp\.'
```

</details>

<details>
<summary><strong>13. Wie wird eine erfolglose ARP-Auflösung im Paketmitschnitt erkannt?</strong></summary>

Typisches Muster:

```text
Client → Broadcast: Who has 192.0.2.80?
Client → Broadcast: Who has 192.0.2.80?
Client → Broadcast: Who has 192.0.2.80?
Keine Antwort
```

Mögliche Ursachen:

- Zielsystem ist ausgeschaltet,
- Ziel besitzt eine andere IP-Adresse,
- Ziel befindet sich nicht im selben VLAN,
- Client befindet sich im falschen VLAN,
- Switchport ist falsch konfiguriert,
- WLAN-Client-Isolation ist aktiv,
- Layer-2-Sicherheitsmechanismus blockiert den Verkehr,
- falsche Subnetzmaske lässt ein entferntes Ziel lokal erscheinen,
- virtuelle Bridge oder Netzwerkschnittstelle ist falsch verbunden,
- Ziel antwortet aufgrund eines lokalen Netzwerkproblems nicht.

**Wichtiger Gegencheck**

Wenn der Client ARP für eine entfernte Zieladresse sendet, muss zuerst Präfix und Route geprüft werden. Die Ursache liegt dann möglicherweise nicht bei ARP, sondern in einer falschen Subnetzkonfiguration.

</details>

<details>
<summary><strong>14. Was ist Gratuitous ARP?</strong></summary>

Gratuitous ARP ist eine ARP-Nachricht, bei der ein Gerät eine eigene IPv4-/MAC-Zuordnung ohne vorherige normale Anfrage bekannt gibt oder prüft.

Mögliche Zwecke:

- Erkennung eines Adresskonflikts,
- Aktualisierung von Nachbartabellen,
- Übernahme einer virtuellen IP-Adresse,
- Hochverfügbarkeits-Failover,
- Mitteilung nach einem MAC- oder Portwechsel,
- Aktualisierung von Switch- und Hostinformationen.

**Typisches Szenario**

```text
Firewall A besitzt virtuelle IP 192.0.2.1.
Firewall A fällt aus.
Firewall B übernimmt 192.0.2.1.
Firewall B sendet Gratuitous ARP mit ihrer MAC-Adresse.
```

Clients sollen dadurch die neue Zuordnung lernen.

Viele Gratuitous-ARP-Nachrichten sind nicht automatisch schädlich. Sie müssen im Zusammenhang mit Hochverfügbarkeit, Clusterbetrieb, Virtualisierung und Adresskonflikten bewertet werden.

</details>

<details>
<summary><strong>15. Was ist Proxy ARP?</strong></summary>

Beim Proxy ARP antwortet ein Gerät auf eine ARP-Anfrage für eine andere IPv4-Adresse mit seiner eigenen MAC-Adresse.

Vereinfacht:

```text
Client fragt:
Wer hat 192.0.2.80?

Router antwortet:
192.0.2.80 befindet sich unter meiner MAC-Adresse.
```

Der Router übernimmt anschließend die Weiterleitung zum eigentlichen Ziel.

Proxy ARP kann bewusst eingesetzt werden, beispielsweise für bestimmte Netzdesigns oder Übergangslösungen. Es kann aber auch Fehlkonfigurationen verbergen.

**Hinweise auf Proxy ARP**

- mehrere IP-Adressen werden derselben Router-MAC zugeordnet,
- ein vermeintlich lokales Ziel wird über einen Router erreicht,
- Kommunikation funktioniert trotz ungewöhnlicher Subnetzkonfiguration,
- Paketmitschnitt zeigt Antworten eines Routers für fremde IP-Adressen.

Proxy ARP darf nicht ohne Prüfung der Netzwerkarchitektur als Angriff oder Fehlfunktion bewertet werden.

</details>

<details>
<summary><strong>16. Welche Aufgabe erfüllt IPv6 Neighbor Discovery?</strong></summary>

IPv6 verwendet kein ARP. Neighbor Discovery arbeitet mit ICMPv6 und übernimmt mehrere Funktionen:

- Auflösung von IPv6-Adresse zu MAC-Adresse,
- Erreichbarkeitsprüfung von Nachbarn,
- Routererkennung,
- Präfixinformationen,
- Duplicate Address Detection,
- Weiterleitung auf einen besseren Router,
- teilweise automatische Adresskonfiguration.

Wichtige ICMPv6-Nachrichten:

| Typ | Nachricht | Aufgabe |
|---:|---|---|
| 133 | Router Solicitation | Client fordert Routerinformationen an |
| 134 | Router Advertisement | Router teilt Präfixe und Parameter mit |
| 135 | Neighbor Solicitation | Nachbarauflösung oder Erreichbarkeitsprüfung |
| 136 | Neighbor Advertisement | Antwort beziehungsweise Ankündigung eines Nachbarn |
| 137 | Redirect | Router weist auf einen besseren nächsten Hop hin |

NDP verwendet Multicast statt des aus IPv4 bekannten Broadcasts.

</details>

<details>
<summary><strong>17. Wie funktioniert die IPv6-Nachbarauflösung?</strong></summary>

Vereinfachter Ablauf:

```text
Client                                   IPv6-Nachbar
  │                                           │
  │──── Neighbor Solicitation ───────────────>│
  │<─── Neighbor Advertisement ───────────────│
  │                                           │
```

Die Neighbor Solicitation wird normalerweise an eine zur Zieladresse gehörende Solicited-Node-Multicast-Adresse gesendet.

**Wichtiger Unterschied zu ARP**

| IPv4 | IPv6 |
|---|---|
| ARP | ICMPv6 Neighbor Discovery |
| Ethernet-Broadcast | IPv6-Multicast |
| separate ARP-Nachricht | Teil von ICMPv6 |
| ARP-Tabelle | IPv6-Nachbartabelle |

ICMPv6 darf nicht pauschal blockiert werden. Viele ICMPv6-Nachrichten sind für die grundlegende IPv6-Funktion erforderlich.

</details>

<details>
<summary><strong>18. Wie wird die IPv6-Nachbartabelle unter Windows angezeigt?</strong></summary>

```powershell
[RO] Get-NetNeighbor -AddressFamily IPv6
```

Übersicht:

```powershell
[RO] Get-NetNeighbor -AddressFamily IPv6 |
    Sort-Object InterfaceIndex, IPAddress |
    Format-Table InterfaceAlias,
                 InterfaceIndex,
                 IPAddress,
                 LinkLayerAddress,
                 State
```

Bestimmte Link-Local-Adresse:

```powershell
[RO] Get-NetNeighbor `
    -InterfaceAlias 'Ethernet' `
    -IPAddress 'fe80::1'
```

Bei Link-Local-Adressen ist die Schnittstelle beziehungsweise Scope-ID entscheidend, da `fe80::/10` auf mehreren Interfaces verwendet werden kann.

**Alternative klassische Anzeige**

```cmd
[RO] netsh interface ipv6 show neighbors
```

</details>

<details>
<summary><strong>19. Wie wird die IPv6-Nachbartabelle unter Linux angezeigt?</strong></summary>

**Alle IPv6-Nachbarn**

```bash
[RO] ip -6 neighbour show
```

**Bestimmte Schnittstelle**

```bash
[RO] ip -6 neighbour show dev eth0
```

**Bestimmte Adresse**

```bash
[RO] ip -6 neighbour show 2001:db8:20::20
```

**Änderungen beobachten**

```bash
[RO] ip monitor neigh
```

**Router und Standardroute**

```bash
[RO] ip -6 route show default
```

**IPv6-Adressen und deren Zustand**

```bash
[RO] ip -6 address show dev eth0
```

Auf folgende Zustände achten:

```text
tentative
dadfailed
deprecated
```

`dadfailed` weist darauf hin, dass Duplicate Address Detection für diese Adresse fehlgeschlagen ist.

</details>

<details>
<summary><strong>20. Wie wird die IPv6-Nachbartabelle unter macOS angezeigt?</strong></summary>

**IPv6-Nachbartabelle**

```bash
[RO] ndp -an
```

**Bestimmten Nachbarn anzeigen**

```bash
[RO] ndp -n fe80::1%en0
```

Die Schnittstellenangabe `%en0` ist bei Link-Local-Adressen häufig erforderlich.

**IPv6-Routingtabelle**

```bash
[RO] netstat -rn -f inet6
```

**IPv6-Konfiguration einer Schnittstelle**

```bash
[RO] ifconfig en0
```

Zu prüfen sind:

- Link-Local-Adresse,
- globale beziehungsweise interne IPv6-Adressen,
- Präfixlängen,
- Adresszustände,
- Standardrouter,
- Nachbareinträge und deren MAC-Adressen.

</details>

<details>
<summary><strong>21. Wie wird IPv6 Neighbor Discovery mit Wireshark untersucht?</strong></summary>

**Alle Neighbor-Discovery-Nachrichten**

```text
icmpv6.type >= 133 && icmpv6.type <= 137
```

**Router Solicitation**

```text
icmpv6.type == 133
```

**Router Advertisement**

```text
icmpv6.type == 134
```

**Neighbor Solicitation**

```text
icmpv6.type == 135
```

**Neighbor Advertisement**

```text
icmpv6.type == 136
```

**Redirect**

```text
icmpv6.type == 137
```

**Bestimmte IPv6-Adresse**

```text
ipv6.addr == 2001:db8:20::20
```

**Capture-Filter für relevante ICMPv6-Nachrichten**

```text
icmp6
```

**Zeitlich begrenzte Aufnahme**

```bash
[TEST][PRIV][FILE][SENS] dumpcap \
  -i INTERFACE \
  -f "icmp6" \
  -a duration:30 \
  -w ipv6-nd.pcapng
```

**TShark-Auswertung**

```bash
[RO][SENS] tshark \
  -r ipv6-nd.pcapng \
  -Y "icmpv6.type >= 133 && icmpv6.type <= 137" \
  -T fields \
  -e frame.time \
  -e eth.src \
  -e eth.dst \
  -e ipv6.src \
  -e ipv6.dst \
  -e icmpv6.type
```

</details>

<details>
<summary><strong>22. Was ist Duplicate Address Detection bei IPv6?</strong></summary>

Bevor eine neue IPv6-Adresse regulär verwendet wird, prüft der Host normalerweise, ob sie bereits auf dem lokalen Link verwendet wird.

Vereinfacht:

```text
Neuer Host
  → Neighbor Solicitation für die eigene geplante Adresse
  → keine widersprechende Antwort: Adresse kann verwendet werden
```

Antwortet ein anderes Gerät, kann die Adresse als doppelt erkannt werden.

**Mögliche Zustände**

| Zustand | Bedeutung |
|---|---|
| `tentative` | Prüfung läuft |
| `preferred` | Adresse kann normal verwendet werden |
| `deprecated` | Adresse wird nicht mehr für neue Verbindungen bevorzugt |
| `dadfailed` beziehungsweise `Duplicate` | Konflikt erkannt |

**Mögliche Ursachen eines DAD-Fehlers**

- tatsächlich doppelte statische IPv6-Adresse,
- fehlerhafte virtuelle Netzwerkkonfiguration,
- Loop oder reflektierte Pakete,
- fehlerhaftes Proxy-NDP-Verhalten,
- duplizierte virtuelle Maschine mit identischer Konfiguration,
- Sicherheitsgerät beantwortet Anfragen unerwartet.

Ein DAD-Fehler darf nicht durch dauerhaftes Abschalten der Konflikterkennung verdeckt werden.

</details>

<details>
<summary><strong>23. Wie werden Router Advertisements in die Diagnose einbezogen?</strong></summary>

Router Advertisements können unter anderem mitteilen:

- verfügbare Router,
- Präfixinformationen,
- Präfixlänge,
- Gültigkeitsdauer,
- bevorzugte Dauer,
- ob SLAAC verwendet werden kann,
- Hinweise auf DHCPv6,
- MTU,
- Routeninformationen,
- weitere IPv6-Parameter.

**Typische Fehlerbilder**

- Client erhält nur Link-Local-Adresse,
- IPv6-Standardroute fehlt,
- falsches Präfix wird angekündigt,
- nicht autorisierter Router sendet Advertisements,
- mehrere Router kündigen widersprüchliche Informationen an,
- Router Advertisement erreicht bestimmte VLANs nicht,
- ICMPv6 wird gefiltert,
- Präfix ist abgelaufen oder falsch konfiguriert.

**Windows-Routen**

```powershell
[RO] Get-NetRoute -AddressFamily IPv6
```

**Linux**

```bash
[RO] ip -6 route
```

**macOS**

```bash
[RO] netstat -rn -f inet6
```

Ein vorhandener DHCPv6-Server ersetzt nicht automatisch die Router Advertisements für die Standardrouterinformation.

</details>

<details>
<summary><strong>24. Warum dürfen Nachbartabellen nicht vorschnell geleert werden?</strong></summary>

Das Leeren einer Nachbartabelle:

- verändert den Diagnosezustand,
- entfernt möglicherweise den Beleg einer falschen Zuordnung,
- erzwingt neue ARP- oder NDP-Auflösungen,
- kann Verbindungen kurzfristig unterbrechen,
- behebt eine falsche Zuordnung möglicherweise nur vorübergehend,
- beseitigt nicht die eigentliche Ursache.

Vorher sollten gespeichert werden:

**Windows**

```powershell
[RO][FILE][SENS] Get-NetNeighbor |
    Export-Csv 'C:\Temp\nachbartabelle-vorher.csv' `
    -NoTypeInformation `
    -Encoding UTF8
```

**Linux**

```bash
[RO][FILE][SENS] ip neighbour show \
    > /tmp/nachbartabelle-vorher.txt
```

**macOS**

```bash
[RO][FILE][SENS] arp -an \
    > /tmp/arp-vorher.txt
```

```bash
[RO][FILE][SENS] ndp -an \
    > /tmp/ndp-vorher.txt
```

Die Speicherorte müssen den betrieblichen Datenschutz- und Sicherheitsvorgaben entsprechen.

</details>

<details>
<summary><strong>25. Welche eingreifenden Befehle existieren?</strong></summary>

**Windows – IPv4-Nachbartabelle leeren**

```cmd
[PRIV][CHANGE][DISRUPT] netsh interface ip delete arpcache
```

**Linux – dynamische IPv4-Nachbarn einer Schnittstelle leeren**

```bash
[PRIV][CHANGE][DISRUPT] sudo ip -4 neighbour flush dev eth0
```

**Linux – IPv6-Nachbarn einer Schnittstelle leeren**

```bash
[PRIV][CHANGE][DISRUPT] sudo ip -6 neighbour flush dev eth0
```

**macOS – einzelnen ARP-Eintrag entfernen**

```bash
[PRIV][CHANGE][DISRUPT] sudo arp -d 192.0.2.1
```

**macOS – einzelnen IPv6-Nachbareintrag entfernen**

```bash
[PRIV][CHANGE][DISRUPT] sudo ndp -d fe80::1%en0
```

> Diese Befehle sind keine ersten Diagnoseschritte. Bei Remotezugriff kann insbesondere das Entfernen des Gatewayeintrags die aktive Verbindung kurzfristig beeinträchtigen. Syntax und unterstützte Optionen müssen lokal mit der jeweiligen Hilfeseite geprüft werden.

</details>

<details>
<summary><strong>26. Wie werden statische Nachbareinträge bewertet?</strong></summary>

Statische Einträge können bewusst eingerichtet sein, beispielsweise für:

- besondere Appliances,
- Hochverfügbarkeitslösungen,
- Sicherheitskonzepte,
- Testumgebungen,
- feste Nachbarzuordnungen.

Sie können jedoch veraltet sein, wenn:

- Netzwerkkarte ersetzt wurde,
- virtuelle Maschine verschoben wurde,
- Failover stattgefunden hat,
- Gerät eine neue MAC-Adresse verwendet,
- Netzwerkarchitektur geändert wurde.

**Windows**

```powershell
[RO] Get-NetNeighbor |
    Where-Object State -eq 'Permanent'
```

**Linux**

```bash
[RO] ip neighbour show nud permanent
```

**macOS**

```bash
[RO] arp -an
```

Statische Einträge dürfen nicht gelöscht werden, bevor Eigentümer, Zweck, Konfigurationsquelle und Rückweg geklärt sind.

</details>

<details>
<summary><strong>27. Wie werden ARP-Spoofing und Neighbor-Discovery-Manipulation erkannt?</strong></summary>

Mögliche Hinweise:

- Gateway-IP wechselt unerwartet zwischen MAC-Adressen,
- eine fremde MAC-Adresse beansprucht viele IP-Adressen,
- unerwartete Gratuitous-ARP-Nachrichten,
- nicht autorisierte Router Advertisements,
- mehrere Geräte antworten auf dieselbe Adresse,
- Verbindung wird über ein unbekanntes Gerät umgeleitet,
- Zertifikatswarnungen treten gleichzeitig auf,
- Netzwerküberwachung meldet Dynamic-ARP-Inspection- oder RA-Guard-Verstöße.

**Sicheres Vorgehen**

1. aktuelle Nachbartabelle sichern,
2. Zeitpunkt dokumentieren,
3. Switch-MAC-Tabelle und Portzuordnung prüfen,
4. DHCP- und Netzwerkdokumentation vergleichen,
5. Paketmitschnitt nur mit Freigabe erstellen,
6. Hochverfügbarkeits- und Proxyfunktionen ausschließen,
7. Informationssicherheit einbeziehen,
8. verdächtiges Gerät nicht unkoordiniert verändern.

Eine gemeinsame MAC-Adresse für mehrere IP-Adressen ist nicht automatisch ein Angriff. Router, Load Balancer, Firewalls, Proxy ARP und Cluster können dieses Muster beabsichtigt erzeugen.

</details>

<details>
<summary><strong>28. Wie wird zwischen Client-, VLAN- und Zielproblem unterschieden?</strong></summary>

| Beobachtung | Wahrscheinlichere Richtung |
|---|---|
| nur ein Client erhält keine ARP-Antwort | Client, Port oder lokale Sicherheitsregel |
| mehrere Clients im VLAN betroffen | VLAN, Switch oder Zielsystem |
| andere VLANs erreichen das Ziel | betroffenes VLAN oder Gatewayinterface |
| ARP-Anfrage verlässt Client nicht | Clientstack oder Schnittstelle |
| Anfrage sichtbar, Antwort fehlt | Ziel, VLAN-Pfad oder Filter |
| Antwort erreicht Switch, aber nicht Client | Port, WLAN oder Sicherheitsfunktion |
| falsche MAC antwortet | Proxy, Konflikt oder Manipulation |
| Gateway wird aufgelöst, Ziel nicht erreichbar | Problem liegt wahrscheinlich nach Layer 2 |
| Ziel wird fälschlich per ARP gesucht | falsches Präfix oder falsche Route |
| IPv6 NS ohne NA | Ziel, VLAN, Filter oder NDP-Konfiguration |
| nur IPv6 betroffen | ICMPv6, RA, NDP oder IPv6-VLAN-Pfad |

</details>

<details>
<summary><strong>29. Welche typischen Fehlinterpretationen müssen vermieden werden?</strong></summary>

| Beobachtung | Falscher Schluss | Richtige Einordnung |
|---|---|---|
| ARP-Tabelle ist leer | Netzwerk ist defekt | möglicherweise wurde noch kein lokaler Nachbar angesprochen |
| Eintrag ist `Stale` | Ziel ist nicht erreichbar | Eintrag wird bei Nutzung erneut geprüft |
| Eintrag ist `Incomplete` | Ziel ist ausgeschaltet | VLAN, Präfix und Filter bleiben mögliche Ursachen |
| entfernte Ziel-IP fehlt in ARP | Fehler liegt vor | nur der lokale Next Hop wird benötigt |
| viele IPs haben dieselbe MAC | Angriff | Router, Proxy ARP oder Cluster möglich |
| MAC-Adresse wechselt | Angriff | Failover oder Gerätewechsel möglich |
| Ping funktioniert nicht | ARP funktioniert nicht | Nachbartabelle getrennt prüfen |
| ARP funktioniert | Anwendung funktioniert | nur lokale Adressauflösung bestätigt |
| IPv6 hat keine ARP-Tabelle | IPv6 benötigt keine Auflösung | IPv6 verwendet NDP |
| ICMPv6 wird blockiert | nur Ping ist betroffen | zentrale IPv6-Funktionen können ausfallen |
| Nachbartabelle wurde geleert und es funktioniert | Ursache wurde behoben | Problem kann nur vorübergehend verdeckt sein |
| Gratuitous ARP sichtbar | Manipulation | Konfliktprüfung oder Failover möglich |

</details>

<details>
<summary><strong>30. Wie sieht der systematische Prüfablauf aus?</strong></summary>

| Schritt | Prüfung |
|---:|---|
| 1 | IP-Adresse und Präfix des Clients bestätigen |
| 2 | ausgewählte Route zum Ziel bestimmen |
| 3 | direkt aufzulösenden Nachbarn identifizieren |
| 4 | vorhandene Nachbartabelle unverändert sichern |
| 5 | Zustand und MAC-Adresse des Eintrags prüfen |
| 6 | mit funktionierendem Referenzclient vergleichen |
| 7 | normale Kommunikation zum direkten Nachbarn auslösen |
| 8 | Nachbartabelle erneut prüfen |
| 9 | bei Bedarf ARP beziehungsweise NDP kontrolliert mitschneiden |
| 10 | Anfrage und Antwort auf Client- und Netzseite verfolgen |
| 11 | Switchport, VLAN und MAC-Zuordnung prüfen |
| 12 | Proxy-, Cluster- und Hochverfügbarkeitsfunktionen berücksichtigen |
| 13 | Konflikt oder Manipulationsverdacht eskalieren |
| 14 | Tabelle nur nach Beweissicherung gezielt verändern |
| 15 | ursprüngliches Fehlerbild erneut testen |
| 16 | Ursache und Ergebnis dokumentieren |

**Merksatz**

```text
Route bestimmen → direkten Nachbarn bestimmen
→ Tabelle prüfen → Anfrage verfolgen → Antwort verfolgen
```

</details>

<details>
<summary><strong>31. Kompakte Befehlsübersicht für Windows, Linux und macOS</strong></summary>

| Aufgabe | Windows | Linux | macOS |
|---|---|---|---|
| IPv4-Nachbarn | `[RO] Get-NetNeighbor -AddressFamily IPv4` | `[RO] ip -4 neighbour` | `[RO] arp -an` |
| IPv6-Nachbarn | `[RO] Get-NetNeighbor -AddressFamily IPv6` | `[RO] ip -6 neighbour` | `[RO] ndp -an` |
| einzelner IPv4-Nachbar | `[RO] Get-NetNeighbor -IPAddress ZIEL` | `[RO] ip neighbour show ZIEL` | `[RO] arp -n ZIEL` |
| einzelne IPv6-Adresse | `[RO] Get-NetNeighbor -IPAddress ZIEL` | `[RO] ip -6 neighbour show ZIEL` | `[RO] ndp -n ZIEL%INTERFACE` |
| Route zum Ziel | `[RO] Find-NetRoute -RemoteIPAddress ZIEL` | `[RO] ip route get ZIEL` | `[RO] route -n get ZIEL` |
| Nachbaränderungen live | PowerShell wiederholt abfragen | `[RO] ip monitor neigh` | wiederholt `arp` beziehungsweise `ndp` |
| ARP aktiv testen | normales `Test-Connection` | `[TEST][PRIV] sudo arping -I INTERFACE -c 4 ZIEL` | abhängig von installiertem Werkzeug |
| ARP mitschneiden | `[TEST][PRIV][SENS] tshark -i INTERFACE -f "arp"` | gleicher Befehl | gleicher Befehl |
| NDP mitschneiden | `[TEST][PRIV][SENS] tshark -i INTERFACE -f "icmp6"` | gleicher Befehl | gleicher Befehl |
| ARP-Cache leeren | `[PRIV][CHANGE][DISRUPT] netsh interface ip delete arpcache` | `[PRIV][CHANGE][DISRUPT] sudo ip -4 neigh flush dev INTERFACE` | `[PRIV][CHANGE][DISRUPT] sudo arp -d ZIEL` |
| IPv6-Nachbarn leeren | nur gezielt nach lokaler Dokumentation | `[PRIV][CHANGE][DISRUPT] sudo ip -6 neigh flush dev INTERFACE` | `[PRIV][CHANGE][DISRUPT] sudo ndp -d ZIEL%INTERFACE` |

Die Platzhalter `ZIEL` und `INTERFACE` müssen durch vorher eindeutig bestimmte Werte ersetzt werden.

</details>

<details>
<summary><strong>32. Dokumentationsvorlage</strong></summary>

```text
Ticketnummer:
Prüfzeitpunkt:
Zeitzone:
Betroffener Client:
Betriebssystem:
Schnittstelle:
MAC-Adresse:
VLAN:

IP-KONFIGURATION

Client-IPv4:
IPv4-Präfix:
Client-IPv6:
IPv6-Präfix:
Standardgateway IPv4:
Standardrouter IPv6:

ZIEL

Zielname:
Ziel-IPv4:
Ziel-IPv6:
Ziel laut Präfix lokal: Ja / Nein
Ausgewählte Route:
Ausgewählte Quelladresse:
Next Hop:
Direkt aufzulösender Nachbar:

NACHBARTABELLE VOR DEM TEST

IPv4-Nachbar:
MAC-Adresse:
Schnittstelle:
Zustand:
Dynamisch oder statisch:

IPv6-Nachbar:
MAC-Adresse:
Schnittstelle:
Zustand:
Dynamisch oder statisch:

AKTIVER TEST

Verwendeter Test:
Startzeit:
Endzeit:
Anfragen gesendet:
Antworten empfangen:

PAKETMITSCHNITT

ARP Request sichtbar:
ARP Reply sichtbar:
Neighbor Solicitation sichtbar:
Neighbor Advertisement sichtbar:
Router Advertisement sichtbar:
Quell-MAC:
Antwort-MAC:
Mehrere Antworten:
Gratuitous ARP:
Proxy ARP vermutet:
DAD fehlgeschlagen:

NETZWERKSEITE

Switch:
Switchport:
Port-VLAN:
Gelernte Client-MAC:
Gelernte Ziel-MAC:
MAC wechselt zwischen Ports:
Port-Security-Ereignisse:
ARP-/NDP-Schutzereignisse:

REFERENZCLIENT

Hostname:
Gleiches VLAN:
Nachbar-IP:
Nachbar-MAC:
Nachbarzustand:
Relevante Abweichungen:

Arbeitshypothese:
Begründung:
Originaltabelle gesichert:
Durchgeführte Änderung:
Rückweg:
Abschlussprüfung:
Ermittelte Ursache:
Sicherheitseskalation erforderlich: Ja / Nein
```

</details>

<details>
<summary><strong>33. Offizielle Quellen und weiterführende Dokumentation</strong></summary>

**Microsoft**

- [Get-NetNeighbor](https://learn.microsoft.com/powershell/module/nettcpip/get-netneighbor)
- [Find-NetRoute](https://learn.microsoft.com/powershell/module/nettcpip/find-netroute)
- [netsh interface](https://learn.microsoft.com/windows-server/administration/windows-commands/netsh-interface)
- [IPv6 Neighbor Discovery](https://learn.microsoft.com/windows-server/networking/technologies/ipv6/ipv6-top)

**Linux**

- [ip-neighbour – Linux Manual Page](https://man7.org/linux/man-pages/man8/ip-neighbour.8.html)
- [ip-monitor – Linux Manual Page](https://man7.org/linux/man-pages/man8/ip-monitor.8.html)
- [ip-route – Linux Manual Page](https://man7.org/linux/man-pages/man8/ip-route.8.html)
- Lokale Befehlsreferenz: `man arping`

**Apple**

- Lokale Befehlsreferenzen: `man arp`, `man ndp`, `man route`, `man netstat` und `man ifconfig`

**Wireshark**

- [ARP Display Filter Reference](https://www.wireshark.org/docs/dfref/a/arp.html)
- [ICMPv6 Display Filter Reference](https://www.wireshark.org/docs/dfref/i/icmpv6.html)
- [dumpcap Manual Page](https://www.wireshark.org/docs/man-pages/dumpcap.html)
- [tshark Manual Page](https://www.wireshark.org/docs/man-pages/tshark.html)

**Standards**

- [RFC 826 – Address Resolution Protocol](https://www.rfc-editor.org/rfc/rfc826)
- [RFC 5227 – IPv4 Address Conflict Detection](https://www.rfc-editor.org/rfc/rfc5227)
- [RFC 4861 – Neighbor Discovery for IPv6](https://www.rfc-editor.org/rfc/rfc4861)
- [RFC 4862 – IPv6 Stateless Address Autoconfiguration](https://www.rfc-editor.org/rfc/rfc4862)
- [RFC 6980 – Security Implications of IPv6 Fragmentation with NDP](https://www.rfc-editor.org/rfc/rfc6980)

> Nachbarzustände, Zeitlimits und verfügbare Diagnosefelder hängen vom Betriebssystem, Treiber und Netzwerkdesign ab. Eine fehlende Antwort muss immer zusammen mit Route, Präfix, VLAN und tatsächlichem Messpunkt bewertet werden.

</details>