Da alle Tunnelanbieter, die ich bisher probierte (SixXS, tunnelbroker.net, go6.net) entweder langsam waren oder gelegentlich nicht erreichbar (das ist echt nervig, wenn man die Websites, die man am häufigsten besucht, via IPv6 erreicht), habe ich mir meinen eigenen IPv6-Tunnel gebaut. Hier nun die Anleitung, wie das funktioniert:
Mein Setup sieht wie folgt aus:
Prinzip | Mit Adressen |
---|---|
Es gibt also, vereinfacht gesagt, eine virtuelle Maschine und einen Linux-Router, die einen IPv6-Tunnel aufbauen wollen. Die virtuelle Maschine und ihre dom0 laufen auf NetBSD, die Anleitung sollte jedoch mit kleinen Modifikationen auch für Linux gültig sein.
Voraussetzungen/Bezeichnungen
- Eine IP-Adresse, am besten eine dedizierte, als Endpunkt für den Tunnel.
IPv4-Endpunkt: 999.11.22.33 - Zwei /64-Subnetze für den Tunnel, eins als Transfernetz, eins zum benutzen. Effektiv brauchst du also ein eigenes /48.
IPv6-Transfernetz: 2001:dead:beef:2323::/64
IPv6-Subnetz: 2001:dead:beef:4242::/64 - Entweder eine statische IPv4-Adresse auf beiden Seiten oder ein Script, welches die IPv4-Adresse auf der Gegenseite updated.
Dynamische IPv4-Adresse: 888.11.22.33 - Auf dem Endpunkt muss natives (oder anderweitig beschafftes) IPv6 vorhanden sein und funktionieren.
- domU/Tunnelendpunkt: 2001:cafe:babe::1
Tunnelendpunkt konfigurieren
In der domU, wo der Tunnel laufen soll (in der dom0 soll nichts laufen aus Sicherheitsgründen), richten wir ihn folgendermaßen ein:
# ifconfig xennet0 alias 999.11.22.33ifconfig gif0 create
ifconfig gif0 tunnel 999.11.22.33 888.11.22.33
ifconfig gif0 inet6 2001:dead:beef:2323::1/64
route add -inet6 2001:dead:beef:4242:: 2001:dead:beef:2323::2
Wenn du Xen benutzt…
Der dom0 müssen wir noch sagen, dass sie Pakete an das Transfernetz und das Subnetz durch die domU schicken soll:
# route add -inet6 2001:dead:beef:2323:: 2001:cafe:babe::1 # route add -inet6 2001:dead:beef:4242:: 2001:cafe:babe::1
Wenn du Linux benutzt…
Es sollte mit folgenden Befehlen gehen (ungetestet):
# ip addr add 999.11.22.33 dev eth0ip tunnel add v6 mode sit remote 888.11.22.33 local 999.11.22.33 ttl 255
ip -6 addr add 2001:dead:beef:2323::1/64 dev v6
ip -6 route add 2001:dead:beef:4242:: via 2001:dead:beef:2323::2
Wenn du eine dynamische IPv4-Adresse hast…
…brauchst du ein Script, welches folgendes nach einem Wechsel der IP-Adresse macht:
#!/bin/sh ssh root@domU 'ifconfig gif0 tunnel 999.11.22.33 $(echo ${SSH_CONNECTION} | cut -d \' \' -f 1)'
(Danke an Raphael für den Tipp mit ${SSH_CONNECTION}.
Tunnel daheim konfigurieren
Nun richten wir den Tunnel zuhause ein:
# ip tunnel add v6 mode sit remote 999.11.22.33 local 888.11.22.33 ttl 255ip link set v6 up
ip -6 addr add 2001:dead:beef:2323::2/64 dev v6
ip -6 addr add 2001:dead:beef:4242::1/64 dev eth0
ip -6 route add default via 2001:dead:beef:2323::1 dev v6
Außerdem soll der Linux-Rechner via radvd
automatisch
Adressen zuweisen, sodass IPv6 out-of-the-box funktioniert:
# emerge radvd # vi /etc/radvd.conf interface eth0 { AdvSendAdvert on; prefix 2001:dead:beef:4242::/64 { AdvOnLink on; AdvAutonomous on; }; }; # /etc/init.d/radvd start # rc-update add radvd default
Ab jetzt sollten alle IPv6-fähigen Geräte im Netz eine IPv6-Adresse bekommen haben und können IPv6 benutzen.
Wenn du NAT benutzt
Solltest du NAT benutzen und den Tunnel auf einem Rechner hinter deinem Router einrichten, musst du als Adresse für local statt der externen Adresse (888.11.22.33) deine interne IP-Adresse (zum Beispiel 192.168.1.2) benutzen und auf deinem Router Protocol 41 auf 192.168.1.2 weiterleiten. Auf OpenWRT geht das mit:
iptables -t nat -A prerouting_rule -i ppp0 -p 41 -j DNAT --to 192.168.1.2 iptables -t filter -A forwarding_rule -i ppp0 -p 41 -d 192.168.1.2 -j ACCEPT
Bei vielen kommerziellen (nicht-freien) Routern hast du hier leider ein Problem. Diese haben einfach nicht bedacht, dass man bestimmte Protokolle weiterleiten können wollte. Eventuell klappt es, wenn du den entsprechenden Rechner als DMZ einrichtest.
Packet filter
Auf jedem Router sollte ein Packet filter laufen, sofern dahinter potentiell leicht exploitbare Rechner sind. Für mein Netz trifft das gelegentlich zu, da manchmal andere Menschen komische Fenster-Betriebssysteme mitbringen. Also machen wir lieber mal alles dicht standardmäßig:
# Direkte Verbindungen zum Linux-Router (da laufen auch Dienste): # Internes Netz darf auf alles zugreifen ip6tables -A INPUT -s 2001:dead:beef:4242::/64 -j ACCEPT # Rest ist dicht: ip6tables -A INPUT -p tcp -m state --state NEW -j REJECT # Verbindungen durch das Gateway: # Aus dem internen Netz darf alles durch ip6tables -A FORWARD -s 2001:dead:beef:4242::/64 -j ACCEPT # identd ist freigeschaltet auf der Workstation: ip6tables -A FORWARD -d 2001:dead:beef:4242:21d:33ff:fe6f:efe6/128 -p tcp --dport 113 -j ACCEPT # Der Rest ist dicht: ip6tables -A FORWARD -d 2001:dead:beef:4242::/64 -m state --state new -j REJECT
Fertig
$ traceroute6 noc.sixxs.net traceroute to noc.sixxs.net (2001:838:1:1:210:dcff:fe20:7c7c) from 2001:dead:beef:4242:21d:33ff:fe6f:efe6, 30 hops max, 16 byte packets 1 2001:dead:beef:4242::1 (2001:dead:beef:4242::1) 1.74 ms 0.159 ms 0.136 ms 2 2001:dead:beef:2323::1 (2001:dead:beef:2323::1) 35.483 ms 19.846 ms 24.145 ms 3 2001:cafe::1 (2001:cafe::1) 52.695 ms 21.539 ms 18.451 ms 4 2001:4d88:ffff:ffff:2:b341:abbf:1 (2001:4d88:ffff:ffff:2:b341:abbf:1) 21.399 ms 21.041 ms 20.602 ms 5 2001:4d88::1 (2001:4d88::1) 19.954 ms * 20.723 ms 6 v-transit-net.r1.fra3.de.opencarrier.eu (2001:7f8:3a:e104::1) 23.621 ms 23.663 ms 23.583 ms 7 oc-r1-fra3.r1.ams2.nl.opencarrier.eu (2001:7f8:3a:e002::2) 31.535 ms 47.19 ms 70.552 ms 8 ams-ix2.ipv6.concepts.nl (2001:7f8:1::a501:2871:2) 32.426 ms 34.049 ms 31.618 ms 9 2001:838:0:14::2 (2001:838:0:14::2) 32.141 ms 138.99 ms * 10 2001:838:0:10::2 (2001:838:0:10::2) 65.431 ms 72.294 ms 35.185 ms 11 noc.sixxs.net (2001:838:1:1:210:dcff:fe20:7c7c) 34.476 ms 34.152 ms 66.029 ms
Die einzelnen Hops dabei sind:
- Linux-Router
- Tunnelendpunkt
- dom0
- Transfernetz von vollmar
- vollmars Netz
- …
I run a blog since 2005, spreading knowledge and experience for almost 20 years! :)
If you want to support my work, you can buy me a coffee.
Thank you for your support! ❤️