# IPv6 Tunnelbroker (Hurricane Electric)

Diese Anleitung soll die Einrichtung eines 6to4 IPv6 Tunnels beschreiben. Bitte die Anleitung nicht einfach per Copy&amp;Paste durcharbeiten, sondern auch verstehen. Meine persönlichen Angaben zum Tunnel oder Zugangsdaten wurden anonymisiert oder geschwärzt.

Mit dem [IPv6 Tunnelbroker](https://tunnelbroker.net "https://tunnelbroker.net") bietet [Hurricane Electric](http://he.net "http://he.net") (HE) einen kostenlosen 6to4 Tunnelservice an (ähnlich wie Sixxs, nur ist HE nicht so [assig](https://forum.openwrt.org/viewtopic.php?id=56520 "https://forum.openwrt.org/viewtopic.php?id=56520") und [unfreundlich](https://www.mail-archive.com/public@tldainc.org/msg00025.html "https://www.mail-archive.com/public@tldainc.org/msg00025.html")). Man bekommt direkt ein /64er Netz zugewiesen und verfügt damit über 18446744073709551616 IP-Adressen. Das sollte eine Weile ausreichen. Man kann sich auch ein /48er Netz geben lassen. In ein /48 passen nochmal 65536 /64er Netze. Das entspricht dann 1208925819614629174706176 IPv6-Adressen.

Um nun den Tunnelbroker Service mit [Ubiquiti EdgeMAX Routern](https://www.ubnt.com "https://www.ubnt.com") verwenden zu können sind ein paar vorbereitende Schritte notwendig. Verfügt man über eine statische IP für den Internetzugang, kann der DynDNS-Teil weg gelassen werden. Die Anleitung geht im Folgenden davon aus, dass man seine WAN-IP dynamisch zugeteilt bekommt.

<div id="bkmrk-anmeldung-bei-tunnel">1. <div>Anmeldung bei [Tunnelbroker](https://tunnelbroker.net/register.php "https://tunnelbroker.net/register.php")</div>
2. <div>einen IPv6 Tunnel registrieren</div>
3. <div>Anmeldung bei [DNS-O-MATIC](https://www.dnsomatic.com "https://www.dnsomatic.com"). Dieser kostenlose Service kann verschiedenste andere Services über eine neu zugeteilte WAN-IP informieren. Ich nutze das z.B. mit [afraid.org](http://freedns.afraid.org "http://freedns.afraid.org") (dynDNS Provider) und um die clientseitige Tunnel-IP bei HE zu setzen, da sonst der Tunnel nicht aufgebaut werden kann</div>

</div>#### DNS-O-MATIC

Beginnen wir mit der Konfiguration von DNS-O-MATIC. Auf deren Webseite habe ich die beiden Services afraid.org und Tunnelbroker angelegt.

Bei afraid.org kann man sich eine Subdomain unter verschiedensten Domains aussuchen und diese bei einer Änderung der WAN-IP durch seinen Router oder andere Mechanismen automatisch mit der neuen IP updaten lassen.

Um das durch DNS-O-MATIC erledigen zu lassen, besorgt man sich auf der afraid-Seite [http://freedns.afraid.org/dynamic/](http://freedns.afraid.org/dynamic/ "http://freedns.afraid.org/dynamic/") seinen Update-Key. Dieser versteckt sich bei der registrierten Subdomain hinter dem „Direct URL“ Link. Einfach den String nach „[http://freedns.afraid.org/dynamic/update.php](http://freedns.afraid.org/dynamic/update.php "http://freedns.afraid.org/dynamic/update.php")?“ rauskopieren und in das Key-Feld bei DNS-O-MATIC eintragen und speichern.

[![afraid1.png](https://wiki.magenbrot.net/uploads/images/gallery/2021-05/scaled-1680-/afraid1.png)](https://wiki.magenbrot.net/uploads/images/gallery/2021-05/afraid1.png)

 Abb.1

Um die IP bei Tunnelbroker auch updaten zu können braucht man folgende Infos von deren Seite:

<div id="bkmrk-username-%28nicht-die-"><div>- <div>Username (nicht die lange User-ID, die im Inhaltsteil nach dem Login angezeigt wird)</div>
- <div>Passwort ist der Update Key auf der Detailseite des Tunnels (Advanced), alternativ das Tunnelbroker Passwort, wenn man keinen Update Key hat</div>
- <div>den DNS-Namen des Tunnel. Dieser wird z.B. auf der Übersichtsseite angezeigt und hat folgendes Format: &lt;user&gt;-&lt;index&gt;.tunnel.&lt;tunnel-server&gt;.&lt;datacenter&gt;.ipv6.he.net</div>

</div></div>[![tunnelbroker1.png](https://wiki.magenbrot.net/uploads/images/gallery/2021-05/scaled-1680-/tunnelbroker1.png)](https://wiki.magenbrot.net/uploads/images/gallery/2021-05/tunnelbroker1.png)

 Abb.2

[![tunnelbroker2.png](https://wiki.magenbrot.net/uploads/images/gallery/2021-05/scaled-1680-/tunnelbroker2.png)](https://wiki.magenbrot.net/uploads/images/gallery/2021-05/tunnelbroker2.png)

Abb.3

Damit wäre der Dyndns-Service vorbereitet und kann auf dem Router konfiguriert werden (pppoe0 ist mein WAN-Interface):

<div id="bkmrk-admin%40gate%3A%7E%24-config"><div>```
admin@gate:~$ configure

set service dns dynamic interface pppoe0 service dyndns host-name all.dnsomatic.com
set service dns dynamic interface pppoe0 service dyndns login <dns-o-matic login>
set service dns dynamic interface pppoe0 service dyndns password <dns-o-matic passwort>
set service dns dynamic interface pppoe0 service dyndns protocol dyndns2
set service dns dynamic interface pppoe0 service dyndns server updates.dnsomatic.com

commit
save
exit
```

</div></div>Will man gleich testen, ob das klappt, erzwingt man am einfachsten einen Reconnect:

<div id="bkmrk-admin%40gate%3A%7E%24-discon"><div>```
admin@gate:~$ disconnect interface pppoe0
admin@gate:~$ connect interface pppoe0
```

</div></div>Auf der DNS-O-MATIC-Seite sollten nun beide Services mit einem grünen Daumen-hoch markiert und die aktuelle IP hinterlegt sein.

Bevor der Tunnel konfiguriert wird, empfiehlt es sich eine passende Firewall zu konfigurieren. Mit LOCAL\_TUN0 ist dabei ausgehender Datenverkehr (LAN → WAN), TUN0\_LOCAL eingehend zum Router, TUN0\_IN eingehend ins lokale Netz (FORWARD) gemeint. Das kann dann z.B. so aussehen:

<div id="bkmrk-admin%40gate%3A%7E%24-config-0"><div>```
admin@gate:~$ configure

set firewall all-ping enable
set firewall broadcast-ping disable
set firewall ipv6-name LOCAL_TUN0 default-action accept
set firewall ipv6-name LOCAL_TUN0 description 'outgoing to IPv6 Tunnel'
set firewall ipv6-name TUN0_IN default-action drop
set firewall ipv6-name TUN0_IN description 'IPv6 Tunnel to local net'
set firewall ipv6-name TUN0_IN enable-default-log
set firewall ipv6-name TUN0_IN rule 1 action accept
set firewall ipv6-name TUN0_IN rule 1 description 'Must be allowed or MTU discovery will break'
set firewall ipv6-name TUN0_IN rule 1 icmpv6 type packet-too-big
set firewall ipv6-name TUN0_IN rule 1 protocol icmpv6
set firewall ipv6-name TUN0_IN rule 2 action accept
set firewall ipv6-name TUN0_IN rule 2 description 'Allow ICMP echo reply'
set firewall ipv6-name TUN0_IN rule 2 icmpv6 type pong
set firewall ipv6-name TUN0_IN rule 2 limit burst 1
set firewall ipv6-name TUN0_IN rule 2 limit rate 50/minute
set firewall ipv6-name TUN0_IN rule 2 protocol icmpv6
set firewall ipv6-name TUN0_IN rule 3 action accept
set firewall ipv6-name TUN0_IN rule 3 description 'May cause fragmentation issues otherwise'
set firewall ipv6-name TUN0_IN rule 3 icmpv6 type time-exceeded
set firewall ipv6-name TUN0_IN rule 3 protocol icmpv6
set firewall ipv6-name TUN0_IN rule 4 action accept
set firewall ipv6-name TUN0_IN rule 4 description 'Allow established/related'
set firewall ipv6-name TUN0_IN rule 4 protocol all
set firewall ipv6-name TUN0_IN rule 4 state established enable
set firewall ipv6-name TUN0_IN rule 4 state invalid disable
set firewall ipv6-name TUN0_IN rule 4 state new disable
set firewall ipv6-name TUN0_IN rule 4 state related enable
set firewall ipv6-name TUN0_IN rule 5 action drop
set firewall ipv6-name TUN0_IN rule 5 description 'Drop invalid state'
set firewall ipv6-name TUN0_IN rule 5 log disable
set firewall ipv6-name TUN0_IN rule 5 protocol all
set firewall ipv6-name TUN0_IN rule 5 state established disable
set firewall ipv6-name TUN0_IN rule 5 state invalid enable
set firewall ipv6-name TUN0_IN rule 5 state new disable
set firewall ipv6-name TUN0_IN rule 5 state related disable
set firewall ipv6-name TUN0_LOCAL default-action drop
set firewall ipv6-name TUN0_LOCAL description 'IPv6 Tunnel to EdgeRouter'
set firewall ipv6-name TUN0_LOCAL enable-default-log
set firewall ipv6-name TUN0_LOCAL rule 1 action accept
set firewall ipv6-name TUN0_LOCAL rule 1 description 'Must be allowed or MTU discovery will break'
set firewall ipv6-name TUN0_LOCAL rule 1 icmpv6 type packet-too-big
set firewall ipv6-name TUN0_LOCAL rule 1 protocol icmpv6
set firewall ipv6-name TUN0_LOCAL rule 2 action accept
set firewall ipv6-name TUN0_LOCAL rule 2 description 'Allow ICMP echo reply'
set firewall ipv6-name TUN0_LOCAL rule 2 icmpv6 type pong
set firewall ipv6-name TUN0_LOCAL rule 2 limit burst 1
set firewall ipv6-name TUN0_LOCAL rule 2 limit rate 50/minute
set firewall ipv6-name TUN0_LOCAL rule 2 protocol icmpv6
set firewall ipv6-name TUN0_LOCAL rule 3 action accept
set firewall ipv6-name TUN0_LOCAL rule 3 description 'May cause fragmentation issues otherwise'
set firewall ipv6-name TUN0_LOCAL rule 3 icmpv6 type time-exceeded
set firewall ipv6-name TUN0_LOCAL rule 3 protocol icmpv6
set firewall ipv6-name TUN0_LOCAL rule 4 action accept
set firewall ipv6-name TUN0_LOCAL rule 4 description 'Allow established/related'
set firewall ipv6-name TUN0_LOCAL rule 4 protocol all
set firewall ipv6-name TUN0_LOCAL rule 4 state established enable
set firewall ipv6-name TUN0_LOCAL rule 4 state invalid disable
set firewall ipv6-name TUN0_LOCAL rule 4 state new disable
set firewall ipv6-name TUN0_LOCAL rule 4 state related enable
set firewall ipv6-name TUN0_LOCAL rule 5 action drop
set firewall ipv6-name TUN0_LOCAL rule 5 description 'Drop invalid state'
set firewall ipv6-name TUN0_LOCAL rule 5 log disable
set firewall ipv6-name TUN0_LOCAL rule 5 protocol all
set firewall ipv6-name TUN0_LOCAL rule 5 state established disable
set firewall ipv6-name TUN0_LOCAL rule 5 state invalid enable
set firewall ipv6-name TUN0_LOCAL rule 5 state new disable
set firewall ipv6-name TUN0_LOCAL rule 5 state related disable
set firewall ipv6-receive-redirects disable
set firewall ipv6-src-route disable
set firewall ip-src-route disable
set firewall log-martians enable
set firewall receive-redirects disable
set firewall send-redirects enable
set firewall source-validation disable
set firewall syn-cookies enable

commit
save
exit
```

</div></div>Für die Konfiguration des Tunnels werden noch folgende Daten von der Tunnelbroker Detailseite benötigt. HE gibt auch hier ein komplettes /64er als Transfernetz heraus:

<div id="bkmrk-client-ipv6-address-"><div>- <div>Client IPv6 Address (endet auf ::2/64, Abb.4.4)</div>
- <div>Server IPv4 Address (Abb.4.2)</div>
- <div>Routed IPv6 Prefixes (Abb.4.1)</div>
- <div>die eigene interne LAN-IP</div>

</div></div>Achtung: Die IPv6 Tunnel Endpunkte und der geroutete IPv6-Prefix sind unterschiedlich! Auf der Tunnelbroker-Seite sind diese deswegen auch dick hervorgehoben. Das muss bei der weiteren Konfiguration beachtet werden.

[![tunnelbroker3.png](https://wiki.magenbrot.net/uploads/images/gallery/2021-05/scaled-1680-/tunnelbroker3.png)](https://wiki.magenbrot.net/uploads/images/gallery/2021-05/tunnelbroker3.png)

 Abb.4

Die Konfiguration des Tunnels sieht dann so aus:

<div id="bkmrk-admin%40gate%3A%7E%24-config-1"><div>```
admin@gate:~$ configure

set interfaces tunnel tun0 address '<Client IPv6 Address>'
set interfaces tunnel tun0 description 'he.net IPv6 Tunnel'
set interfaces tunnel tun0 encapsulation sit
set interfaces tunnel tun0 firewall in ipv6-name TUN0_IN
set interfaces tunnel tun0 firewall local ipv6-name TUN0_LOCAL
set interfaces tunnel tun0 firewall out ipv6-name LOCAL_TUN0
set interfaces tunnel tun0 local-ip <interne LAN-IP>
set interfaces tunnel tun0 multicast disable
set interfaces tunnel tun0 remote-ip <Server IPv4 Address>
set interfaces tunnel tun0 ttl 255

commit
save
exit
```

</div></div>Der Tunnel sollte nun schon aufgebaut sein. Die Firewall ist aktiviert.

<div id="bkmrk-admin%40gate%3A%7E%24-show-i"><div>```
admin@gate:~$ show interfaces tunnel tun0 brief
Codes: S - State, L - Link, u - Up, D - Down, A - Admin Down
Interface    IP Address                        S/L  Description                 
---------    ----------                        ---  -----------                 
tun0         <ipv6 network>/64                 u/u  he.net IPv6 Tunnel
```

</div></div>„u/u“ bedeutet State und Link sind up, der Tunnel ist also funktional.

Damit das IPv6 Netz auch im LAN verwendbar wird, fehlen noch ein paar Dinge.

Erstmal wird eine IPv6-IP (die erste freie IP (::1 ist HE, ::2 deine Seite des Tunnels) aus deinem IPv6-Netz (::3) auf das LAN-Interface des Routers gelegt (bei mir ist das switch0). Danach werden noch die Default-Route für IPv6, DHCPv6 (soll nur für Nameserver, Searchdomain und NTP verwendet werden) und die Router-Adverts (d.h. die Clients konfigurieren sich ihre IPv6-Adresse anhand ihrer MAC-Adresse selbst) konfiguriert. Der Name-Server kommt von der Tunnelbroker Webseite (Abb.4.5).

<div id="bkmrk-admin%40gate%3A%7E%24-config-2"><div>```
admin@gate:~$ configure
set protocols static interface-route6 '::/0' next-hop-interface tun0

set service dhcpv6-server shared-network-name LAN1-IPv6 subnet '<ipv6 routed network>' domain-search <lan.local>
set service dhcpv6-server shared-network-name LAN1-IPv6 subnet '<ipv6 routed network>' name-server '2001:470:20::2'
set service dhcpv6-server shared-network-name LAN1-IPv6 subnet '<ipv6 routed network>' sntp-server '<ipv6 routed network>::1/64'

set interfaces switch switch0 address '<ipv6 routed network>::1/64'
set interfaces switch switch0 description LAN1
set interfaces switch switch0 dhcpv6-options parameters-only
set interfaces switch switch0 ipv6 dup-addr-detect-transmits 1
set interfaces switch switch0 ipv6 router-advert cur-hop-limit 64
set interfaces switch switch0 ipv6 router-advert default-preference high
set interfaces switch switch0 ipv6 router-advert link-mtu 1280
set interfaces switch switch0 ipv6 router-advert managed-flag false
set interfaces switch switch0 ipv6 router-advert max-interval 600
set interfaces switch switch0 ipv6 router-advert other-config-flag true
set interfaces switch switch0 ipv6 router-advert prefix '<ipv6 routed network>' autonomous-flag true
set interfaces switch switch0 ipv6 router-advert prefix '<ipv6 routed network>' on-link-flag true
set interfaces switch switch0 ipv6 router-advert prefix '<ipv6 routed network>' valid-lifetime 2592000
set interfaces switch switch0 ipv6 router-advert reachable-time 0
set interfaces switch switch0 ipv6 router-advert retrans-timer 0
set interfaces switch switch0 ipv6 router-advert send-advert true

commit
save
exit
```

</div></div>Damit sollten sich nun die IPv6-fähigen Clients in eurem LAN bereits ihre Adresse geholt/erzeugt haben und über den Tunnel nach draußen gehen können.

Hier ein paar Möglichkeiten den IPv6-Verkehr zu beobachten / debuggen:

<div id="bkmrk-informationen-zum-tu">- <div>Informationen zum Tunnel: show interfaces tunnel tun0 brief</div>
- <div>Packetdump: show interfaces tunnel tun0 capture</div>
- <div>Bytes, Packets und Fehlerraten zeigen: show interfaces tunnel detail</div>
- <div>Traceroute: traceroute6 [www.heise.de](http://www.heise.de "http://www.heise.de")</div>
- <div>Ping: ping6 [www.heise.de](http://www.heise.de "http://www.heise.de")</div>

</div>