Ich benutze auf meinem DSL Router WRT54GL derzeit die Linuxdistribution OpenWRT. Es exitiert zwar eine Anleitung für IPv6 auf dieser Distribution, allerdings ist diese nicht mehr wirklich aktuell. Diese Anleitung wurde erfolgreich mit der OpenWRT Version 8.09.1 (Kamikaze) entwickelt. Um IPv6 mit HE zum fliegen zu bringen sind folgende Schritte notwendig:
Zunächst müssen mit opkg install folgende Pakete installiert werden
ip6tables
kmod-ip6tables
kmod-ipv6
radvd
Der Tunnelbroker geht von einer statischen IP aus, bei DSL ändert sich diese jedoch üblicherweise mit jeder Neueinwahl. Um den Tunnelendpunkt bei jeder Änderung wieder aufzusetzen habe ich ein Shellskript erstellt. Es wird immer aufgerufen wenn sich ein Interfacestatus ändert. Zunächst wird die Benutzernummer gebraucht, welche auf der Hurricane Electric Tunelbroker Homepage direkt neben "UserID" steht. Ebenfalls auf der HE Seite unter "Tunnel Details" ist die "Global Tunnel ID" zu finden. Der letzte notwendige Wert ist das mit MD5 gehashte Passwort. Dies lässt sich am einfachsten an der Shell erstellen:
$ echo -n 'XXX' | md5sum
bc9189406be84ec297464a514221406d -
Die MD5 Summe das Passworts XXX ist in diesem Beispiel also bc9189406be84ec297464a514221406d. Der letzte Wert der benötigt wird ist die "Client IPv6 address", welche sich ebenfalls bei den "Tunnel Details" befindet.
Diese Werte müssen in das Skript unten eingetragen und in der Datei /etc/hotplug.d/iface/10-ipv6 gespeichert werden:
#!/bin/sh
USER="XXX"
PASS="XXX"
ID="XXX"
CLIENT="XXX/64"
REMOTEV4="216.66.80.30"
ROUTEDNET="XXX::/48"
EXT="wan"
INT="lan"
TUNNEL="he-ipv6"
. /etc/functions.sh # common functions
include /lib/network # include /lib/network/*.sh
scan_interfaces # read and parse the network config
if [ "$ACTION" = "ifup" -a "$INTERFACE" = "$EXT" ]
then
config_get IPV4 "$EXT" ipaddr
logger "updating ipv4 tunnel endpoint to $IPV4"
wget -O - "http://ipv4.tunnelbroker.net/ipv4_end.php?ipv4b=$IPV4&pass=$PASS&user_id=$USER&tunnel_id=$ID" > /dev/null 2>&1
ip tunnel add $TUNNEL mode sit remote $REMOTEV4 local $IPV4 ttl 255
ip link set $TUNNEL up
ip addr add $CLIENT dev $TUNNEL
ip route add ::/0 dev $TUNNEL
config_get LANIF "$INT" ifname
ip route add $ROUTEDNET dev $LANIF
fi
if [ "$ACTION" = "ifdown" -a "$INTERFACE" = "wan" ]
then
ip tunnel del $TUNNEL
config_get LANIF "$INT" ifname
ip route del $ROUTEDNET dev $LANIF
fi
Um die Kommunikation mit dem Tunnelbroker zu erlauben muss dieser in der OpenWRT IPv4 Firewall (/etc/config/firewall) freigeschaltet werden:
config rule
option src_ip 216.66.80.30
option proto 41
option target ACCEPT
Um den Router auch gegenüber dem Internet zu schützen sollten in die Datei /etc/firewall.user folgende Zeilen hinzugefügt werden:
### ipv6 stuff
ip6tables -F INPUT
ip6tables -P INPUT DROP
ip6tables -A INPUT -p tcp --dport 22 -j ACCEPT
ip6tables -A INPUT -p icmpv6 -j ACCEPT
ip6tables -F FORWARD
ip6tables -A FORWARD -j ACCEPT
Diese Firewall schützt nur den Router und nicht die Clients im Netz dahinter. Entweder man erweitert die Regeln oben entsprechend oder man spendiert jedem Client eine IPv6 Firewall. Die oben gemachten Änderungen werden nach einem "/etc/init.d/firewall restart" aktiv.
Die Einstellungen sind gemacht und nach einem "ifdown wan; ifup wan" sollte der Tunnel stehen. Dies kann gleich mit ping6 geprüft werden:
root@OpenWrt:~# ping6 -c3 www.kame.net
PING www.kame.net (2001:200:0:8002:203:47ff:fea5:3085): 56 data bytes
64 bytes from 2001:200:0:8002:203:47ff:fea5:3085: seq=0 ttl=51 time=294.092 ms
64 bytes from 2001:200:0:8002:203:47ff:fea5:3085: seq=1 ttl=51 time=292.718 ms
64 bytes from 2001:200:0:8002:203:47ff:fea5:3085: seq=2 ttl=51 time=293.255 ms
--- www.kame.net ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 292.718/293.355/294.092 ms
root@OpenWrt:~# ping6 -c3 ipv6.google.com
PING ipv6.google.com (2001:4860:a003::68): 56 data bytes
64 bytes from 2001:4860:a003::68: seq=0 ttl=59 time=19.912 ms
64 bytes from 2001:4860:a003::68: seq=1 ttl=59 time=15.248 ms
64 bytes from 2001:4860:a003::68: seq=2 ttl=59 time=15.082 ms
--- ipv6.google.com ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 15.082/16.747/19.912 ms
Um nun die Clients im eigenen Heimnetz per Autokonfiguration mit IPv6 zu versorgen muss der Linux Router Advertisement Daemon konfiguriert werden. Dazu wird das oben beantragte Routed /48 benötigt. Die Konfiguration sieht bei mir folgendermassen aus:
/etc/config/radvd
config interface
option interface 'lan'
option AdvSendAdvert 1
option AdvManagedFlag 0
option AdvOtherConfigFlag 0
option ignore 0
config prefix
option interface 'lan'
# If not specified, a non-link-local prefix of the interface is used
option prefix '2001:470:9888::/64'
option AdvOnLink 1
option AdvAutonomous 1
option AdvRouterAddr 0
option AdvPreferredLifetime 600
option AdvValidLifetime 1200
option ignore 0
config rdnss
option interface 'br-lan'
# If not specified, the link-local address of the interface is used
option addr ''
option ignore 1
Für die option "prefix" muss das eigene bei HE beantragte /48 eingetragen werden. Achtung: als Netzmaske für radvd ist /64 zwingend notwendig, denn nur so können sich die Clients mit Hilfe von EUI-64 selbst eine Adresse würfeln. Trägt man hier /48 bleiben 16 Bits übrig, von denen der Client nicht weiss, wie er sie füllen soll. Nachdem man den Daemon aktiviert und gestartet ist sollten alle Clients im dahinterliegenden Netz automatisch mit IPv6 versorgt werden, sofern das Betriebssystem dies unterstützt.
root@OpenWrt:~# /etc/init.d/radvd enable
root@OpenWrt:~# /etc/init.d/radvd start


Kommentare