IPV6 + OpenWRT + UCI + ADSL Telecom HowTo

In questi giorni di festa mi sono cimentato ad un upgrade dell’harware di rete a casa dei miei genitori. Avendo messo un router con Openwrt ho provato ad usare il collegamento IPV6 nativo della rete Telecom e la cosa bella è che ha funzionato!

Screenshoot Luci interface

Visto che in rete si trova una guida per router Fritz!box e router Cisco ho deciso di scrivere queste due righe per fare la medesima configurazione con OpenWrt.

La configurazione hardware è costituita da router tplink TL-WR1043ND con openwrt (Attitude Adjustment 12.09-beta) a cui è collegato un modem adsl sulla porta wan. Considerando che i modem puri vanno scomparendo è anche possibile usare un router adsl economico con firmware originale e usarlo come modem impostandolo in modalità “bridge” . Il collegamento verso il provider avviene tramite pppoe, ecco la sezione relativa del file /etc/config/network

config interface ‘wan’
option _orig_ifname ‘eth0.2’
option _orig_bridge ‘false’
option proto ‘pppoe’
option ifname ‘eth0.2’
option username ‘adsl@alice6.it’
option password ‘IPV6@alice6’
option ipv6 ‘1’
option mtu ‘1492’
option metric ‘100

 

La configurazione software si basa sull’utilizzo di wide-dhcpv6-client e radvd. Come funziona: il client dhcp6c riceve la delega per un /64 , imposta le interfacce locali del router e scrive il prefisso ottenuto nel file /var/etc/radvd.conf in modo tale che radvd possa mandare i RA sulla rete locale.

Una volta istallati i package (opkg install wide-dhcpv6-client radvd) si configurano. Ecco i miei file.

/etc/config/config/dhcp6c

‘dhcp6c’ ‘basic’
option ‘enabled’ ‘1’                            # 1 = enabled; 0 = disabled
option ‘interface’ ‘wan’                        # This is the interface the DHCPv6 client will run on
option ‘dns’ ‘dnsmasq’                          # Which DNS server you run (only dnsmasq currently supported)
option ‘debug’ ‘1’                              # 1 = enable debugging; 0 = disable debugging

# Send options (1 = send; 0 = do not send)
option ‘pd’ ‘1’                                 # Prefix Delegation
option ‘na’ ‘1’                                 # Non-Temporary Address
option ‘rapid_commit’ ‘1’                       # Rapid Commit

# Request options (1 = request; 0 = do not request)
option ‘domain_name_servers’ ‘1’
option ‘domain_name’ ‘0’
option ‘ntp_servers’ ‘0’
option ‘sip_server_address’ ‘0’
option ‘sip_server_domain_name’ ‘0’
option ‘nis_server_address’ ‘0’
option ‘nis_domain_name’ ‘0’
option ‘nisp_server_address’ ‘0’
option ‘nisp_domain_name’ ‘0’
option ‘bcmcs_server_address’ ‘0’
option ‘bcmcs_server_domain_name’ ‘0’

# Override the used DUID, by default it is derived from the interface MAC
# The given value must be uppercase and globally unique!
#option ‘duid’ ’00:03:00:06:D8:5D:4C:A5:03:F2′

# Script to run when a reply is received
option ‘script’ ‘/usr/bin/dhcp6c-state’

# Define one or more interfaces on which prefixes should be assigned
config ‘interface’ ‘loopback’
option ‘enabled’ ‘0’                            # 1 = enabled; 0 = disabled
option ‘sla_id’ ‘0’                             # Site level aggregator identifier specified in decimal (subnet)
option ‘sla_len’ ‘0’                            # Site level aggregator length (64 – size of prefix being delegated)

config ‘interface’ ‘lan’
option ‘enabled’ ‘1’
option ‘sla_id’ ‘1’
option ‘sla_len’ ‘0’

Come potete vedere l’unica interfaccia che ottiene l’IPV6 è la lan. In realtà ho provato ad fare in modo che anche la porta WAN abbia un IPV6 ma essendo l’interfaccia nello stato “UNKNOW” invece che “UP” dhcpv6c non gli fornisce un ipv6 global, comunque il routing è garantito da indirizzi link (classe fe80::) tra il router e il provider.

L’altro file da configurare è /etc/config/radvd

config interface
option interface        ‘lan’
option AdvSendAdvert    1
option MinRtrAdvInterval 3
option MaxRtrAdvInterval 10
option AdvLinkMTU 1280
option AdvManagedFlag   0
option AdvOtherConfigFlag 0
list client             ”
option ignore           0

config prefix
option interface        ‘lan’
# If not specified, a non-link-local prefix of the interface is used
list prefix             ”
option AdvOnLink        1
option AdvAutonomous    1
option AdvRouterAddr    1
option ignore           0

config route
option interface        ‘lan’
list prefix             ”
option ignore           0

Una volta avviato il tutto vi dovreste trovare il file generato /var/etc/radvd.conf che assomiglia a questo:

interface br-lan
{
MaxRtrAdvInterval 10;
MinRtrAdvInterval 3;
AdvLinkMTU 1280;
AdvSendAdvert on;
AdvManagedFlag off;
AdvOtherConfigFlag off;

prefix 2a01:2003:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx/64
{
AdvOnLink on;
AdvAutonomous on;
AdvRouterAddr on;
};
};

That’s all folk

FaByS

 

Aggiornamento 26/04/2014

Avendo creato un nodo ninux dove è presente questo router, dopo aver cambiato delle configurazioni sul firewall tutto il meccanismo a cominciato a non funzionare più. O meglio l’ipv6 il router l’otteneva ma il dhcp6c non scriveva correttamente il prefisso nel file /var/etc/radvd.conf. Solo un laconico messaggio nel syslog: ” client6_recvreply: got an expected reply, sleeping.”

Riavviando a mano il dhcp6c tutto tornava a funzionare. Non riuscendo a venirne a capo ho optato per un workaround: uno script eseguito dal crontab che fa il check della configurazione ogni 5 minuti e se non trova il prefisso lo riavvia.

Lo script è il seguente:

 

 

#!/bin/ash
if [ `cat /var/etc/radvd.conf | grep prefix | wc -l` -eq 0 ]; then /etc/init.d/dhcp6c restart; echo “ipv6 Workaround” >> /var/log/ninux.log ; fi

Tags: ,

2 Responses to “IPV6 + OpenWRT + UCI + ADSL Telecom HowTo”

  1. gabriel Says:

    ci avevo provato pure io, ma non sapevo come scrivere il prefisso per radvd…. c’è modo di ottenere una /64 statica? così è prettamente inutile…

    Gabriel da Firenze

  2. eugenio Says:

    Io non sono riuscito a farlo funzionare :'( mi va con ipv4 ma se abilito ipv6 mi cade il link wireles ogni minuto- minuto e mezzo 🙁

Leave a Reply