Radoslaw Kamil Ejsmont entwickelt mein Projekt weiter. Die aktuellste Version findet ihr auf GitHub.
Seit langer Zeit habe ich mir Gedanken gemacht, weil die Anzahl der IPv4-verfügbaren Adressen immer kleiner wird und war selbstverständlich nicht überrascht, als ich im Februar 2011 gelesen habe, dass die letzte IPv4-Blöcke zugewiesen worden sind.
Da die Deutsche Telekom (mein DSL-Provider für zuhause) immer noch keine native IPv6-Konnektivität geschaltet hat (lieber nicht fragen! Ich habe einen Freund, der bei der Telekom arbeitet, und er hat mir erzählt, wie die Manager die Situation verwaltet haben!), habe ich mich entschieden einen der vielen IPv6-Tunnelprovider zu nutzen.
Nach einer kurzen Zeit bei SixXS (gelassen wegen der langen Wartezeiten und weil sie nicht die E-Mail beantworten und sogar die Tickets und die Forumsbeiträge löschen!) bin ich bei Hurrican Electric gelandet.
10 Minuten nach der Anmeldung hatte ich meinen funktionsfähigen Tunnel und mein /48-Subnet. Weitere 5 Minuten später konnten auch meine Frau und mein Roboter IPv6 verstehen. Eine kleine Firewall mit ip6tables und fertig! Nächster Punkt in meiner Liste: IPv6 auf lucabert.de.
Und nun beginnen die Probleme... lucabert.de ist ein virtueller Server, der auf einem Virtuozzo-Host bei meinem Provider läuft.
Virtuozzo erlaubt keine neue Kernelmodule zu laden und, bei den verfügbaren Modulen, war
sit
nicht dabei, also
ich hatte keine Möglichkeit den Tunnel zu bauen.Nach einer kurzen Suche bin ich bei diesem Projekt gelandet.
Ein Test hat ergeben, dass das Programm funktioniert und ich habe begonnen die Firewall zu schreiben. Und nun kam das zweite Problem: bei den verfügbaren Modulen auf dem vServer waren die ip6tables-Module nicht dabei und mein Provider will sie nicht installieren, bevor er mir eine native IPv6-Anbindung gibt (sie sagen irgendwann dieses Jahr)...
Und so kann ich die Firewall vergessen. Nach einer Woche, in der ich eine alternative Lösung gesucht habe, habe ich entschieden, selber eine alternative Lösung zu schreiben. Ein E-Mail-Tausch mit dem Autor von TB-TUN hat mir bestätigt, dass sein Programm unter GPL2 verbreitet ist, also darf ich es für meine Zwecke anpassen.
Da alle IPv6-Pakete über dem Tunnel laufen, sollte es möglich sein, eine Filtrierung zu implementieren, so habe ich gedacht.
Die Sache war leider etwas komplexer als ich dachte, aber mit einigen Hilfen von Newsgroup und Wikipedia habe ich es geschafft! Selbstverständlich ist mein System hier unter GPL2 verbreitet und besteht aus drei Programmen:
ustun
für die Verwaltung der Tunnel, us6tables
um die Firewall einzurichten (mit der gleichen Syntax von
ip6tables) und usctrl
um Informationen über das System im laufendem Betrieb sehen zu können. Alle diese Programme
nutzen SharedMemory um miteinander zu kommunizieren.Das ganze wird mit einem pre-up Skript in
/etc/network/interfaces
(auf Debian/Ubuntu) gestartet und funktioniert einwandfrei!Das einzige Problem ist, dass Virtuozzo diese Datei bei jedem Reboot des vServer neuschreibt, und alle Änderungen gehen verloren.
Laut Dokumentation, sollte ich das ganze in
/etc/network/interfaces.template
schreiben, aber ein Test mit Reboot hat mir den vServer
blockiert und ich musste ihn im Rettungsmodus neustarten.Am Ende habe ich ein kleines Skript in
/etc/rc.local
geschrieben, so dass bei dem Boot die Datei /etc/network/interfaces
automatisch generiert wird.Das Skript sieht so aus:
/bin/cat /etc/network/interfaces /etc/network/myinterfaces > /etc/network/interfaces.1 && \ /bin/mv /etc/network/interfaces.1 /etc/network/interfaces /sbin/ifup he-ip6Die Konfiguration der IPv6-Schnittstelle ist wie folgendermaßen:
auto he-ip6 iface he-ip6 inet6 static # Hauptadresse address xxxx:yyyy:zzzz:kkkk::1 netmask 64 pre-up /usr/local/sbin/ustun -n he-ip6 -r <IP des Tunnelbetreibers> -l <IP des vServers> -m tunnelbroker # Eventuelle andere IPs post-up /sbin/ip -6 addr add xxxx:yyyy:zzzz:kkkk::2/64 dev he-ip6 pre-down /sbin/ip -6 addr del xxxx:yyyy:zzzz:kkkk::2/64 dev he-ip6 # Routes post-up /sbin/ip route add ::/0 dev he-ip6 post-up /etc/rc.ipv6 post-down /usr/local/sbin/usctrl -q mtu 1480Wenn man
sudo usctrl -i
startet, bekommt man diese Informationen:
TUN name is he-ip6 TUN mode is tunnelbroker IPv4 SOCK_RAW created: 5 Bind local IPv4 address: <IP des vServers> Using remote IPv4: <IP des Tunnelbetreibers> Verbose level set to 0Ein Beispiel für eine Firewall ist:
/usr/local/sbin/us6tables -P INPUT ACCEPT /usr/local/sbin/us6tables -F INPUT /usr/local/sbin/us6tables -F OUTPUT /usr/local/sbin/us6tables -A INPUT -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT /usr/local/sbin/us6tables -A INPUT -p ipv6-icmp --icmpv6-type 128 -j ACCEPT -m comment --comment "PING-Anfragen erlauben" /usr/local/sbin/us6tables -A INPUT -p ipv6-icmp --icmpv6-type 129 -j ACCEPT -m comment --comment "PING-Antworten erlauben" /usr/local/sbin/us6tables -A INPUT -p tcp -m multiport --dports smtp,smtps,submission -m comment --comment "SMTP+SMTPs und Submission erlauben" -j ACCEPT /usr/local/sbin/us6tables -A INPUT -p tcp -m multiport --dports www,https -m comment --comment "HTTP+HTTPs erlauben" -j ACCEPT /usr/local/sbin/us6tables -A INPUT -p tcp -m multiport --dports pop3,pop3s -m comment --comment "POP3+POP3s erlauben" -j ACCEPT /usr/local/sbin/us6tables -A INPUT -p tcp --dport domain -m comment --comment "DNS erlauben" -j ACCEPT /usr/local/sbin/us6tables -A INPUT -p udp --dport domain -m comment --comment "DNS erlauben" -j ACCEPT /usr/local/sbin/us6tables -A INPUT -s xyzk:zkxy:kyzx::/48 -m comment --comment "Alles von meinem Hausnetz erlauben" -j ACCEPT /usr/local/sbin/us6tables -A INPUT -j LOG --log-prefix IPv6 --log-level 7 -m comment --comment "Der Rest wird auf syslog geloggt" /usr/local/sbin/us6tables -P INPUT DROPUnd nun ist auch lucabert.de für den world IPv6 day am nächsten 8. Juni vorbereitet...