IPv6 Support
Einstellung von SixXs
Jahrelang habe ich noch bis vor kurzem einen SixXs Tunnel genutzt. Da die SixXs Macher beschlossen haben den Service einzustellen mußte ich in den Vergangenen Tagen einiges umbauen.
SixXs hatte ja viele große Vorzüge, nämlich statische Prefixe, reverse DNS Delegation und einen guten Client in einer Debian Installation. Dadurch kann man sich ganz einfach sein LAN und die zugehörige Firewall komfortabel konfigurieren und es "funktioniert einfach". So wie halt IPv6 gedacht ist.
Leben mit den dynamischen delegated Prefixes
Nun wird das IPv6 Leben unendlich viel Schmerzvoller. IPv6, sogar mit LAN Delegation gibts ja schon länger bei den verschiedenen Einwahlanbietern, allerdings ist jetzt alles dynamisch. Also die Adresse des Einwahlrouters/CPE/Fritz!Box und aller IPv6 Clients im LAN!
Was sind meine Voraussetzungen: Eine Fritz!Box als Einwahlrouter, von dort eine Punkt-zu-Punkt Verbindung zu einem Linux-Server der als Router mehrere Subnetze versorgt. Damit die Subnetze alle IPv6 bekommen können muß man sich von der Fritz!Box LAN Prefixe delegieren lassen. Dies muß man via DHCPv6 von der Fritz!Box abrufen.
Damit das tatsächlich funktioniert habe ich ein bißchen Tooling zusammengestellt.
- Ein Patch für Dibbler da dieser DHCPv6 Client die beste Basis für mein Vorhaben liefert (kann u.a. nur ein Delegated Prefix abrufen und startet dann ein Skript wenn es erfolgreich war)
- Ein Skript, welches das Netzwerk konfiguriert, radvd startet und dynamisch alle DNS Einträge (vorwärts und rückwärts) eintragen kann. Die Reverseauflösung funktioniert natürlich nur für einen selber, wird von den üblichen ISPs aber eh nicht gepflegt, also kann man nur gewinnen.
Anpassungen an Dibbler
Für dibbler-1.0.1 habe ich folgende, kleine Anpassungen gemacht
- Es werden nun immer /64 Prefixe für alle Interface gebildet. Die Defaultoption generiert Prefixe die 8 Bit verschoben kleiner sind als das abgerufene Prefix. Beispielhaft ergeben sich für ein abgerufenes /60 Prefix, dann /68 Prefixe. SLAAC kann man damit aber nicht mehr machen und ein /68 ist praktisch sinnlos. Mit meinen Anpassungen werden immer /64 Prefixe für die Interface verteilt.
- Die von dibbler geschriebene radvd Konfig wird nicht langsam immer größer und die default umask ist 022 (nicht 027), da ansonsten die von dibbler geschriebene radvd Konfiguration nicht mehr lesbar ist.
Abruf der Anpassungen unter dibbler-1.0.1-slash64subnets-2.diff.
Meine Konfiguration in /etc/dibbler/client.conf
sieht wie folgt aus. Hier ist die Voraussetzung das an eth1 der Internet-Upstream mit der Fritz!Box hängt und eth0 und eth4 mit /64 Prefixen versorgt werden sollen. Die eigentliche Arbeit der Netzwerkkonfiguration wird allerdings von dem in der Konfig genannten Skript durchgeführt.
# 8 (Debug) is most verbose. 7 (Info) is usually the best option log-level 7 # To perform stateless (i.e. options only) configuration, uncomment # this line below and remove any "ia" keywords from iface definitions # stateless experimental strict-rfc-no-routing 0 # Routing script welches das IPv6 routing aufsetzt... script "/root/bin/setup-networking.pl" downlink-prefix-ifaces eth0,eth4 iface 'eth0' no-config iface 'eth4' no-config iface 'eth1' { ia routing 1 pd { prefix :: /60 } }
Das Setup-Tool
Das Setup-Networking Skript ist das eigentlich spannende. Das wird von dibbler aufgerufen und macht folgende Dinge:
- Netzwerkkonfiguration aufsetzen und überall Routing und Gatewayaddressen definieren
- Regelmässig die Lifetime der Interfaces aktualisieren (Es werden die im DHCPv6 gelernten Werte verwendet)
- BIND9 dyndns updates für Vorwärts- und Rückwärtsauflösung generieren und direkt ausführen. Hierzu wird eine modifizierte "ethers" Datei verwendet.
Eine Ethers Datei wird in /etc/ethers-2.0
abgelegt und enthält jetzt - anders als das Original - IPv4 und - auf Wunsch - IPv6 Adressen. Man muß dann nur
definieren ob als v6 Suffix ein EUI-64 Token gewünscht wird oder ggf. einfach den Suffix direkt hereinschreiben. So wie in dem Beispiel unten. Dann
erzeugt das Skript passende nsupdate Kommandos um einem laufendem Bind Nameserver ein dynamisches Update zu verpassen.
# Fileformat of this new file # MAC-address ipv4 EUI-64(or /64 suffix) hostname network-interface 00:00:11:22:33:44 172.16.0.4 :0:0:0:1 meinname.dyn.example.com. eth0 00:22:33:44:55:66 172.16.0.5 EUI-64 meinandererhost.dyn.example.com eth4Das Konfigurationsskript kann man hier setup-networking.pl herunterladen und für seinen eigenen Zwecke anpassen. Allerdings macht dieses Skript eigentlich nur Sinn in Zusammenhang mit dem gepatchen dibbler.