Premier Training & Business Partner Red Hat

Guida all’IPv6: link local address

Alessandro Lorenzi
Ti piacerebbe diventare anche tu uno di noi e
pubblicare i tuoi articoli nel blog degli RHCE italiani?

Uno dei vantaggi dell’IPv6 e’ il non avere strettamente bisogno di un server DHCP all’interno della rete. Ogni device e’ in grado di calcolare autonomamente un proprio indirizzo IPv6 per ogni interfaccia utilizzabile solamente all’interno di una rete broadcast (in soldoni una LAN), quindi non routato dai router IPv6. Stiamo parlando dell’indirizzo link-local.

Calcoliamo l’indirizzo link-local, un esempio pratico

Gli indirizzi link-local sono composti da due parti. Una prima parte FE80::/10 e una seconda parte calcolata a partire dal MAC address utilizzando l’algoritmo IEEE’s 64-bit Extended Unique Identifier (EUI-64).

Partiamo subito con un esempio, il mio MAC address e’ 08:3e:8e:bc:00:5b.

Dividiamo il MAC address in due parti, la prima meta’ e’ l’OUI, l’identificicativo del produttore, la seconda meta’ e’ univoco per ogni scheda di quel produttore. Tra le due parti inseriamo FF:FE. E’ un valore riservato, se troviamo un indirizzo IPv6 con quel valore li in quel punto sappiamo che – cascasse il mondo – e’ stato generato con EUI-64.

Intanto che ci siamo raggruppiamo i valori in gruppi di 4 anziche’ in gruppi di 2.

083e:8eff:febc:005b

Ora (e qui viene il difficile) dobbiamo invertire il valore del 7mo bit. trasformiamo 08 in binario ed eseguiamo la trasformazione.

0000 0100 = 08
0000 0110 = 0A

Quindi otteniamo 0a3e:8eff:febc:005b
Semplifichiamo togliendo gli 0 non necessari e aggiungiamo “fe80::” all’inizio e otteniamo: fe80::a3e:8eff:febc:5b che guardacaso e’ proprio l’indirizzo IPv6 che ritorna il comando ip!

ip a l wlp3s0
#[...]
#    inet6 fe80::a3e:8eff:febc:5b/64 scope link 
#[...]

Testing e Troubleshooting

Bene, ora vado su un altro computer e provo a fare il ping per vedere se tutto funziona.

ping6 fe80::a3e:8eff:febc:5b
# connect: Invalid argument

Che cosa c’e di sbagliato? Come dicevo fe80::/10 e’ una rete link-local, per cui dobbiamo dire a ping6 di quale rete si tratta, indicandogli la scheda di rete da cui far partire il ping.

ping6 -I wlp3s0 -c 4 fe80::a3e:8eff:febc:5b
# PING fe80::a3e:8eff:febc:5b(fe80::a3e:8eff:febc:5b) from fe80::a3e:8eff:febc:5b wlp3s0: 56 data bytes
# 64 bytes from fe80::a3e:8eff:febc:5b: icmp_seq=1 ttl=64 time=0.083 ms
# 64 bytes from fe80::a3e:8eff:febc:5b: icmp_seq=2 ttl=64 time=0.103 ms
# 64 bytes from fe80::a3e:8eff:febc:5b: icmp_seq=3 ttl=64 time=0.093 ms
# 64 bytes from fe80::a3e:8eff:febc:5b: icmp_seq=4 ttl=64 time=0.072 ms
#
# --- fe80::a3e:8eff:febc:5b ping statistics ---
# 4 packets transmitted, 4 received, 0% packet loss, time 2999ms
# rtt min/avg/max/mdev = 0.072/0.087/0.103/0.016 ms

It works!

Internet of the things.

Trovo molto interessante il concetto di indirizzo link-local applicato a quello che viene definito “l’internet delle cose”, ossia piccoli oggetti smart che si collegano ad una rete offro servizi, senza bisogno di particolari configurazioni. A qualsiasi rete collegheremo uno di questi oggetti sapremo sempre esattamente quale indirizzo IPv6 avranno, senza temere una sovrapposizione con altri oggetti della rete.

Info about author

Alessandro Lorenzi

RHCE Consultant at Extraordy