User Tools

Site Tools


doc:appunti:net:ipv6

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
doc:appunti:net:ipv6 [2012/12/07 10:22] – [Neighbors table] niccolodoc:appunti:net:ipv6 [2019/08/26 11:06] (current) – [Configurazione automatica] niccolo
Line 34: Line 34:
 ip -6 route add <ipv6network>/<prefixlength> via <ipv6address> [dev <device>] ip -6 route add <ipv6network>/<prefixlength> via <ipv6address> [dev <device>]
 ip -6 route del <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 add default via <ipv6address> [dev <device>] 
-ip -6 route del default via <ipv6address>+ip -6 route del default via <ipv6address> [dev <device>]
 </code> </code>
  
Line 49: Line 49:
  
 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). 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).
 +
 +Per modificare uno di quei parametri creare un file **/etc/sysctl.d/90-local-ipv6.conf** con ad esempio:
 +
 +<file>
 +net.ipv6.conf.eth1.accept_ra=0
 +</file>
 +
 +Per rendere immediatamente attive le modifiche:
 +
 +<code>
 +cat /proc/sys/net/ipv6/conf/eth1/accept_ra 
 +1
 +sysctl --system
 +cat /proc/sys/net/ipv6/conf/eth1/accept_ra 
 +0
 +</code>
 ===== Configurazione manuale ===== ===== Configurazione manuale =====
  
Line 150: Line 166:
 Cioè: Cioè:
  
-  - Viene mandato una //neighbor solicitation// all **[[wp>Solicited-node multicast address]]** (link-local scope) con prefisso **''ff02::1:''** +  - Viene mandato una //neighbor solicitation// all **[[wp>Solicited-node multicast address]]** (link-local scope) con prefisso di 104 bit **''ff02::1:ff00''** e suffisso di 24 bit preso dall'indirizzo destinazione. 
-  - L'host risponde con il proprio MAC address annunciando il target IPv6+  - Il MAC address del destinatario è un multicast 33:33:ff:00:00:01, che dovrebbe essere registrato sull'host destinazione. 
 +  - L'host risponde con il proprio MAC address annunciando il target IPv6
 + 
 +Per vedere gli indirizzi multicast registrati su un host: 
 +<code> 
 +ip maddr show 
 +1:      lo 
 +        inet  224.0.0.1 
 +        inet6 ff02::1 
 +2:      eth0 
 +        link  33:33:ff:00:00:06 
 +        link  33:33:ff:ba:bb:ec 
 +        link  01:00:5e:00:00:01 
 +        link  33:33:00:00:00:01 
 +        inet  224.0.0.1 
 +        inet6 ff02::1:ff00:
 +        inet6 ff02::1:ffba:bbec 
 +        inet6 ff02::1 
 +</code> 
 + 
 +Ping per tutti gli host nel link-local scope: 
 + 
 +<code> 
 +ping6 ff02::1%eth0 
 +</code> 
 + 
 + 
 +Ping per tutti i router nel link-local scope: 
 + 
 +<code> 
 +ping6 ff02::2%eth0 
 +</code> 
 + 
 +==== Filtro multicast su switch ==== 
 + 
 +Alcuni switch hanno un filtro sui pacchetti multicast abilitato. Questo impedisce il funzionamento del protocollo **[[wp>Neighbor Discovery Protocol]]**, per cui il ''ping6'' funziona sugli host remoti, ma non su quelli locali. 
 + 
 +Ad esempio sullo switch **3Com 4228G** bisogna disabilitare il **''multicastFilter/igmp''**. 
 + 
 +===== Shorewall6: iptables con IPv6 ===== 
 + 
 +Vedere **[[http://www.shorewall.net/IPv6Support.html|Shorewall IPv6 Support]]**. 
 + 
 +Un firewall basato su iptables, come Shorewall, non ha alcun effetto sul traffico IPv6. Considerato che con IPv6 l'indirizzo assegnato ad un host ha //scope global// (cioè è raggiungibile da tutta internet) è chiaro che sul router/firewall è opportuno mettere alcune regole, come minimo bisogna bloccare tutto il traffico dall'esterno verso l'interno. 
 + 
 +Con Debian è sufficiente installare il pacchetto **shorewall6** che affianca il pacchetto **shorewall** e gestisce IPv6 in modo del tutto separato da IPv4. 
 + 
 +L'unica verifica da fare sullo Shorewall IPv4 è che in ''/etc/shorewall/shorewall.conf'' sia impostato: 
 + 
 +<file> 
 +DISABLE_IPV6=No 
 +</file> 
 + 
 +Copiare dagli esempi (contenuti in **''/usr/share/doc/shorewall6/default-config/''** oppure in **''/usr/share/shorewall6/configfiles/''**) alcuni file di configurazione, in generale servono 
 +questi: 
 + 
 +**''/etc/shorewall6/zones''** 
 + 
 +<file> 
 +fw      firewall 
 +net     ipv6 
 +</file> 
 + 
 +**''/etc/shorewall6/interfaces''** 
 + 
 +<file> 
 +net     eth0 
 +</file> 
 + 
 +**''/etc/shorewall6/policy''** 
 + 
 +<file> 
 +fw      all     ACCEPT 
 +all     all     REJECT          info 
 +</file> 
 + 
 +**''/etc/shorewall6/rules''** 
 + 
 +<file> 
 +Ping(ACCEPT)    all                        all 
 +AllowICMPs      all                        all 
 +ACCEPT          net                        fw    tcp     ssh,smtp,domain,www,pop3,imap2,imaps,https 
 +ACCEPT          net                        fw    udp     domain,openvpn 
 +ACCEPT          net:<2a01:4f8:d13:c03::2>  fw    tcp     5432 
 +</file> 
 + 
 +Quindi impostare in **''/etc/default/shorewall6''**: 
 + 
 +<file> 
 +startup=1 
 +</file> 
 + 
 +===== IPv6 su PPP ===== 
 + 
 +Alcuni provider forniscono indirizzi IPv6 sulla normale connessione ADSL. In generale funziona l'autoconfigurazione durante la negoziazione del **PPPoE** (PPP over Ethernet). Qui di seguito le note per la configurazione della connessione di un host basato su **Debian 9 Stretch**. 
 + 
 +=== Configurazione manuale === 
 + 
 +Se lo stack PPP non è opportunamente configurato, è possibile procedere alla **configurazione manuale** dell'indirizzo IPv6 e del relativo default gateway dopo che la connessione è stabilita. È ovviamente necessario conoscere i parametri che dovrebbero essere forniti dal provider. Ecco un esempio dei comandi da eseguire: 
 + 
 +<code> 
 +ip -6 addr add 2a02:1970:af32:421::1/64 dev ppp0 
 +ip -6 route add default via fe80::a64c:32fe:ac3b:9480 dev ppp0 
 +</code> 
 + 
 +=== Configurazione automatica === 
 + 
 +La configurazione standard di una connessione PPPoE con Debian prevede la creazione di una istanza in **/etc/network/interfaces**: 
 + 
 +<file> 
 +auto adsl 
 +iface adsl inet ppp 
 +    provider dsl-provider 
 +</file> 
 + 
 + 
 +Nel file **/etc/ppp/peers/dsl-provider** (oltre ai normali parametri //user// e //remotename//) si aggiungere il parametro: 
 + 
 +<file> 
 ++ipv6 
 +</file> 
 + 
 +Per ottenere la **configurazione automatica** si sfrutta il protocollo //Stateless Address Autoconfiguration// **SLAAC**, l'interfaccia ppp deve **accettare il Router Advertisements**. 
 + 
 +Il kernel di Linux espone il parametro **accept_ra** delle varie interfacce di rete tramite lo pseudo filesystem **/proc/sys/net/ipv6/conf/**. Questi sono i valori possibili: 
 + 
 +^  0 | Do not accept Router Advertisements. 
 +^  1 | Accept Router Advertisements if forwarding is disabled (default). 
 +^  2 | Overrule forwarding behaviour. Accept Router Advertisements even if forwarding is enabled. 
 + 
 +Il valore predefinito **1** ovviamente **non va bene per un firewall** che effettua il forward dei pacchetti da una LAN verso internet. 
 + 
 +Si potrebbe impostare a 2 il valore di default con questo comando: 
 + 
 +<code> 
 +echo 2 > /proc/sys/net/ipv6/conf/default/accept_ra 
 +</code> 
 + 
 +In questo modo - quando viene attivata l'interfaccia **ppp0** - si otterrebbe l'autoconfigurazione IPv6. Ma non vogliamo cambiare il valore predefinito per tutte le interfacce attivate; vogliamo una soluzione più mirata. Neanche intervenire su **/etc/network/interfaces** (tramite le clausole **pre-up** e/o **up**) è consigliabile, perché la tempistica con cui i comandi vengono eseguiti va in conflitto con i tempi che il kernel richiede a fare il setup dell'interfaccia. 
 + 
 +Sembra che la soluzione migliore sia quella di creare un file **/etc/ppp/ipv6-up.d/accept_ra** (deve essere eseguibile) con questo contenuto: 
 + 
 +<code bash> 
 +#!/bin/sh 
 +# Accept Router Advertisements; autoconfigure using them. 
 +echo 2 > "/proc/sys/net/ipv6/conf/${PPP_IFACE}/accept_ra" 
 +</code> 
 + 
 +**NOTA**: invece di utilizzare il comando **echo** è possibile, in alternativa, usare il comando **sysctl** come in questo esempio: 
 + 
 +<code> 
 +sysctl -w net.ipv6.conf.ppp0.accept_ra=2 
 +</code> 
 + 
 +=== Riferimenti web === 
 + 
 +Vedere questo post: **[[http://strugglers.net/~andy/blog/2011/09/04/linux-ipv6-router-advertisements-and-forwarding/|Linux, IPv6, router advertisements and forwarding]]**, nel quale si legge: 
 + 
 +//By default, a Linux host on an IPv6 network will listen for and 
 +solicit router advertisements in order to choose an IPv6 address 
 +for itself and to set up its default route. This is referred to 
 +as stateless address autoconfiguration (SLAAC).// 
 + 
 +//In this context, what makes the difference between router or not 
 +are the settings of the /proc/sys/net/ipv6/conf/*/forwarding 
 +files (or the net.ipv6.conf.*.forwarding sysctl). If you turn 
 +your host into a router by setting one of those to “1”, you may 
 +find that your host removes any IPv6 address and default route 
 +it learnt via SLAAC.//
doc/appunti/net/ipv6.1354872162.txt.gz · Last modified: 2012/12/07 10:22 by niccolo