Skip to main content
  1. Concetti/

NDP - Neighbor Discovery Protocol

·4 mins
Alessio Barnini
Author
Alessio Barnini
Table of Contents

Cosa fa
#

Protocollo IPv6 che sostituisce ARP. Usa ICMPv6 con multicast per trovare il MAC address di un host nella stessa LAN. Piu' efficiente di ARP perche' usa multicast invece di broadcast — solo il dispositivo interessato processa la richiesta.

TL;DR
#

ARP (IPv4):  broadcast → tutti ricevono e processano
NDP (IPv6):  multicast → solo chi ha quell'IP risponde

Stesso problema, soluzione piu' efficiente:
  "Qual e' il MAC di questo IPv6?" → Neighbor Solicitation  (Type 135)
  "Sono io, ecco il mio MAC"       → Neighbor Advertisement (Type 136)

Confronto ARP vs NDP
#

                    ARP (IPv4)              NDP (IPv6)
Protocollo          ARP (Layer 2/3)         ICMPv6 (Layer 3)
Trasmissione        Broadcast               Multicast
Indirizzo dst       ff:ff:ff:ff:ff:ff       ff02::1:ffxx:xxxx
Chi risponde        TUTTI processano        Solo il destinatario
Tipo richiesta      ARP Request (Opcode 1)  Neighbor Solicitation (135)
Tipo risposta       ARP Reply   (Opcode 2)  Neighbor Advertisement (136)
Cache               ARP cache               Neighbor cache
Comando Linux       ip neighbor show        ip neighbor show (stesso!)

Come funziona — passo per passo
#

Scenario: Host A (2001:db8:1:2::1003) vuole comunicare con Web Server (2001:db8:1:2::1000).

Passo 1 — Neighbor Solicitation (broadcast → multicast):

Host A
  │  ICMPv6 Type 135 — Neighbor Solicitation
  │  Ethernet dst: 33:33:ff:00:10:00  (multicast MAC derivato dall'IPv6)
  │  IPv6 dst:     ff02::1:ff00:1000  (multicast link-local)
  │  Payload: "Chi ha 2001:db8:1:2::1000? Il mio MAC e' 00:0c:29:2f:80:31"
[Solo il Web Server con IP 2001:db8:1:2::1000 processa]

Passo 2 — Neighbor Advertisement (multicast → unicast):

Web Server
  │  ICMPv6 Type 136 — Neighbor Advertisement
  │  Ethernet dst: 00:0c:29:2f:80:31  (unicast — diretto all'Host A)
  │  IPv6 dst:     2001:db8:1:2::1003 (unicast)
  │  Payload: "Sono io — MAC 00:0c:29:1f:a7:55"
[Host A aggiorna la neighbor cache e inizia la comunicazione]

Lettura pacchetti in Wireshark
#

Packet 1 — Neighbor Solicitation (Type 135):

Ethernet II:
  Src: 00:0c:29:2f:80:31    ← MAC del richiedente
  Dst: 33:33:ff:00:10:00    ← MAC multicast (derivato dall'IPv6 target)

IPv6:
  Src: 2001:db8:1:2::1003   ← richiedente
  Dst: ff02::1:ff00:1000    ← indirizzo multicast solicited-node
  Hop Limit: 255             ← NDP usa sempre 255 (non deve uscire dalla LAN)
  Next Header: ICMPv6 (58)

ICMPv6:
  Type: 135 (Neighbor Solicitation)
  Target Address: 2001:db8:1:2::1000     ← IP cercato
  Source link-layer: 00:0c:29:2f:80:31   ← MAC del richiedente incluso

Packet 2 — Neighbor Advertisement (Type 136):

Ethernet II:
  Src: 00:0c:29:1f:a7:55    ← MAC del rispondente
  Dst: 00:0c:29:2f:80:31    ← MAC unicast del richiedente

IPv6:
  Src: 2001:db8:1:2::1000   ← rispondente
  Dst: 2001:db8:1:2::1003   ← unicast — solo al richiedente

ICMPv6:
  Type: 136 (Neighbor Advertisement)
  Flags:
    Solicited: Set    ← risposta a una Solicitation (non gratuita)
    Override:  Set    ← aggiorna la cache anche se esiste gia'
  Target Address: 2001:db8:1:2::1000
  Target link-layer: 00:0c:29:1f:a7:55  ← MAC del rispondente

Unicast vs Multicast — perche' il cambio
#

SOLICITATION → multicast:
  Non conosco il MAC del destinatario
  Non posso mandare un unicast senza MAC
  → mando a tutti... ma solo a quelli interessati (multicast)

ADVERTISEMENT → unicast:
  Conosco il MAC del richiedente (era nella Solicitation)
  → mando direttamente a lui, nessun altro deve sapere

I tre tipi di trasmissione a confronto
#

Broadcast  → altoparlante in piazza
             TUTTI sentono e processano
             esempio: ARP in IPv4

Multicast  → newsletter con iscrizione
             solo chi e' iscritto riceve e processa
             esempio: NDP in IPv6, streaming video

Unicast    → lettera con indirizzo preciso
             solo il destinatario riceve
             esempio: la maggior parte del traffico TCP

Perche' multicast e' piu' efficiente in reti grandi:

Rete con 1000 dispositivi — ricerca MAC:

ARP broadcast:
  1000 dispositivi ricevono il pacchetto
  1000 stack di rete processano il frame
  999 lo scartano dopo averlo processato

NDP multicast:
  ~1 dispositivo riceve il pacchetto solicited-node
  (il multicast solicited-node e' quasi unicast per design)
  Solo 1 stack processa e risponde

Neighbor Cache — come ip neighbor show mostra anche IPv6
#

ip neighbor show
# 192.168.64.1 dev eth0 lladdr 72:8c:f2:1b:c8:64 REACHABLE   ← IPv4 ARP
# fe80::708c:f2ff:fe1b:c864 dev eth0 lladdr 72:8c:f2:1b:c8:64 router STALE  ← IPv6 NDP

Lo stesso comando mostra sia la ARP cache (IPv4) che la neighbor cache (IPv6). Gli stati sono identici: REACHABLE, STALE, FAILED.


Filtri Wireshark per NDP
#

# Tutto il traffico NDP
icmpv6.type == 135 || icmpv6.type == 136

# Solo Solicitation
icmpv6.type == 135

# Solo Advertisement
icmpv6.type == 136

# Tutto il multicast IPv6
ipv6.dst matches "^ff"

Scenario Reale Blue Team
#

Un volume anomalo di Neighbor Solicitation da uno stesso host puo' indicare NDP scanning — l'equivalente IPv6 di un ARP scan.

Un attaccante che manda molte Solicitation verso indirizzi IPv6 diversi sta cercando di mappare quali host sono attivi nella rete.

# Rileva NDP scanning in tcpdump
sudo tcpdump -i eth0 'icmp6 and ip6[40] == 135'
# Se vedi molte Solicitation dallo stesso src → possibile scanning
Warning

NDP spoofing e' l'equivalente IPv6 dell'ARP poisoning. Un attaccante puo' mandare Neighbor Advertisement falsi per avvelenare la neighbor cache. Le difese equivalenti a DAI per IPv6 si chiamano RA Guard e SEND (Secure Neighbor Discovery).


Collegato a
#

  • network — categoria
  • arp — protocollo equivalente per IPv4
  • ipv6 — il protocollo che NDP serve
  • icmp-mac-ip — ICMP e il suo ruolo nel networking
  • osi-model — NDP opera tra Layer 2 e Layer 3

Related