User Tools

Site Tools


doc:appunti:net:ipv6

This is an old revision of the document!


IPv6

Struttura di un indirizzo IPv6

L'indirizzo è lungo 128 bit, la prima metà è la parte network (di cui i primi bit indicano il tipo), la seconda metà è la parte interface. Per generare automaticamente la parte interface può essere usato una parte del MAC address, generando il cosiddetto Extended Unique Identifier (EUI-64).

Tipi di indirizzo IPv6

  • global utilizzati per la connessione internet (prefisso 3)
  • link-local usato da apparati connessi fisicamente ad una LAN (prefisso FE80)
  • site-local per reti private (prefisso FEC0)

Per abbreviare un indirizzo IPv6 è possibile sostituire la sequenza :0: con :: e collassare una sequenza di due punti con solo il primo e l'ultimo.

Disabilitare IPv6

Da Debian Squeeze:

echo net.ipv6.conf.all.disable_ipv6=1 > /etc/sysctl.d/disableipv6.conf

Aggiungere e togliere un indirizzo IPv6

Per aggiungere e togliere un indirizzo IPv6 da riga di comando (non persiste al reboot):

ip -6 addr add <ipv6address>/<prefixlength> dev <interface>
ip -6 addr del <ipv6address>/<prefixlength> dev <interface>

Per aggiungere e togliere una rotta IPv6:

ip -6 route add <ipv6network>/<prefixlength> via <ipv6address> [dev <device>]
ip -6 route del <ipv6network>/<prefixlength> via <ipv6address> [dev <device>]
ip -6 route add default via <ipv6address>
ip -6 route del default via <ipv6address>

Configurazione automatica

La configurazione è integrata nel protocollo IPv6. La configurazione automatica viene detta stateless, cioè avviene senza il ricorso a risorse esterne.

Il kernel fornisce le seguenti interfacce per controllare la configurazione automatica, normalmente i meccanismi sono tutti attivi:

/proc/sys/net/ipv6/conf/eth0/accept_ra Decide se usare l'autoconfigurazione, compreso il rilevamento di un router.
/proc/sys/net/ipv6/conf/eth0/autoconf Se viene individuato un router, genera un indirizzo IPv6 utilizzando il MAC address.
/proc/sys/net/ipv6/conf/eth0/use_tempaddr Se viene individuato un router, genera un indirizzo IPv6 casuale temporaneo.

Quindi se esiste un host che annuncia la configurazione IPv6 (ad esempio un host GNU/Linux che esegue radvd, Router Advertisement Daemon), gli host nella stessa LAN si assegnano automaticamente un indirizzo IPv6 valido (ma non il default gateway).

Configurazione manuale

Anzitutto si deve disabilitare la configurazione automatica. Con Debian è necessario forzare il caricamento del modulo kernel IPv6 aggiungendo in /etc/modules:

# Force IPv6 preload, so that /etc/sysctl.d/local.conf will be
# parsed when the protocol is already available.
ipv6

e aggiungere una riga in /etc/sysctl.d/local.conf oppure in /etc/sysctl.conf:

net.ipv6.conf.default.autoconf=0
net.ipv6.conf.default.accept_ra=0

Il modulo ipv6 va caricato manualmente perché lo script /etc/init.d/procps.sh (che interpreta /etc/sysctl.conf) viene eseguito troppo presto nella fase di boot, quando ipv6 ancora non è disponibile e quindi l'impostazione non avrebbe effetto. Inoltre si deve agire su default piuttosto che su eth0, perché lo script viene eseguito prima che l'interfaccia sia disponibile.

Per configurare staticamente l'indirizzo IP e il default gateway si aggiunge una sezione in /etc/network/interfaces:

auto eth0

iface eth0 inet static
        address 62.48.51.14
        netmask 255.255.255.0
        broadcast 62.48.51.255
        gateway 62.48.51.1


iface eth0 inet6 static
        #pre-up modprobe ipv6
        address 2a01:6a0:ff:59::14
        netmask 64
        gateway 2a01:6a0:ff:59::1

Il comando pre-up non è necessario in questo caso, perché abbiamo fatto il preload in /etc/modules.

Al reboot si avranno due indirizzi su eth0, uno IPv4 e uno IPv6:

eth0      Link encap:Ethernet  HWaddr 00:50:FC:FF:1D:3E  
          inet addr:62.48.51.14  Bcast:62.48.51.255  Mask:255.255.255.0
          inet6 addr: fe80::250:fcff:feff:1d3e/64 Scope:Link
          inet6 addr: 2a01:6a0:ff:59::14/64 Scope:Global
          ...

Anche rotte predefinite ce ne saranno due:

ip -6 route show
2a01:6a0:ff:59::/64 dev eth0  proto kernel  metric 256  mtu 1500 advmss 1440 hoplimit 4294967295
fe80::/64 dev eth0  proto kernel  metric 256  mtu 1500 advmss 1440 hoplimit 4294967295
ff00::/8 dev eth0  metric 256  mtu 1500 advmss 1440 hoplimit 4294967295
default via 2a01:6a0:ff:59::1 dev eth0  metric 1  mtu 1500 advmss 1440 hoplimit 4294967295
route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
62.48.51.0      0.0.0.0         255.255.255.0   U     0      0        0 eth0
0.0.0.0         62.48.51.1      0.0.0.0         UG    0      0        0 eth0

Neighbors table

Con IPv6 non si ha la tabella di ARP con associazione IPv4 - MAC. Qualcosa di equivalente sono i vicini di IPv6:

ip -6 neigh show
fe80::223:5ff:fe1d:3ee8 dev eth0 lladdr 00:23:05:1d:3e:e8 router DELAY
2a01:6a0:ff:59::1 dev eth0 lladdr 00:23:05:1d:3e:e8 router REACHABLE

Per dimenticare l'associazione tra indirizzo IPv6 e il MAC address (link layer address):

ip -6 neigh del fe80::223:5ff:fe1d:3ee8 lladdr 00:23:05:1d:3e:e8 dev eth0
ip -6 neigh del 2a01:6a0:ff:59::1 lladdr 00:23:05:1d:3e:e8 dev eth0

Vediamo come funziona la scoperta di un vicino di rete:

ping6 2a01:6a0:ff:59::1
tcpdump -i eth0 -t -e -n 'icmp6'
00:50:fc:ff:1d:3e > 33:33:ff:00:00:01, ethertype IPv6 (0x86dd), length 86: 2a01:6a0:ff:59::14 > ff02::1:ff00:1: ICMP6, neighbor solicitation, who has 2a01:6a0:ff:59::1, length 32
00:23:05:1d:3e:e8 > 00:50:fc:ff:1d:3e, ethertype IPv6 (0x86dd), length 86: 2a01:6a0:ff:59::1 > 2a01:6a0:ff:59::14: ICMP6, neighbor advertisement, tgt is 2a01:6a0:ff:59::1, length 32
00:50:fc:ff:1d:3e > 00:23:05:1d:3e:e8, ethertype IPv6 (0x86dd), length 118: 2a01:6a0:ff:59::14 > 2a01:6a0:ff:59::1: ICMP6, echo request, seq 1, length 64
00:23:05:1d:3e:e8 > 00:50:fc:ff:1d:3e, ethertype IPv6 (0x86dd), length 118: 2a01:6a0:ff:59::1 > 2a01:6a0:ff:59::14: ICMP6, echo reply, seq 1, length 64

Cioè:

  1. Viene mandato una neighbor solicitation all Solicited-node multicast address (link-local scope) con prefisso ff02::1:
  2. L'host risponde con il proprio MAC address annunciando il target IPv6

Ping per tutti gli host nel link-local scope:

ping6 ff02::1%eth0

Ping per tutti i router nel link-local scope:

ping6 ff02::2%eth0
doc/appunti/net/ipv6.1354872742.txt.gz · Last modified: 2012/12/07 10:32 by niccolo