Aus der Reihe "ein Mann muss tun, was ein Mann tun muss", oder so.
Weihnachten ist seit Jahren eine gute Gelegenheit, endlich mal wieder so richtig zu Coden - mehrere Tage konzentriert mit dem selben Stück gammeligen Source-Code zu verbringen, bis das Teil endlich das tut, was es soll, statt - wie sonst - eher "ein bisschen dies, ein bisschen das, dann wieder ein Kunde am Telefon" event-driven zu arbeiten.
Dieses Jahr war das Opfer OpenVPN.
Nützliche Software, leider nur sehr rudimentär IPv6-fähig - und das ist sehr lästig, wenn man per OpenVPN versucht, auf Webserver in der Firma zuzugreifen, der Browser aber lieber aussen rum geht ("intra.space.net hat IPv6, ich hab' IPv6, also mach ich das mal" - aber mangels IPv6-Fähigkeit von OpenVPN im server-tun-Mode eben nicht durchs VPN...)
Der Source ist streckenweise wirklich elegant (grad der Routingtable-Kram in multi.c/mroute.c ist erstaunlich), und streckenweise ziemlich grottig (tonnenweise Code-Duplizierung für die eigentlich ähnlichen aber dann doch subtil unterschiedlichen 50 unterstützen BSD-Varianten, siehe tun.c/route.c), und streckenweise darf man dann auch erstmal Kernel-Code lesen, um rauszufinden, warum's nicht tut (OpenVPN-tun gegen NetBSD).
Kurz: es hat eigentlich grossen Spass gemacht
Der Patch ist ca. 2000 Zeilen lang (diff -u), und liegt hier (Patch + ChangeLog + Anleitung).
PS: Neko war nicht wirklich glücklich... zunehmend wachsende Nach-Weihnachts-Chaos-Berge im Haus, und vollkommen unzurechnungsfähiger Mann im Coding-Wahn
PS2: Solaris geht noch nicht, das steht für morgen auf dem Programm. Wenn sie mich lässt...
Sonntag, 3. Januar 2010
OpenVPN und IPv6
Kommentare
Ansicht der Kommentare:
(Linear | Verschachtelt)
Die Kommentarfunktion wurde vom Besitzer dieses Blogs in diesem Eintrag deaktiviert.
wird zeit das etwas derartiges im normalen openvpn paket verfügbar wird.
Könntest du bis es so weit ist,
deine gepatchten Testversionen zur Verfügung stellen
(für mich wäre im speziellen die MacOSX version interessant)
Viele Grüße
balu
unter http://www.greenie.net/ipv6/openvpn-macosx-105-bin.gz liegt ein gepatchtes Binary für MacOS X auf Intel.
Das funktioniert prima mit Tunnelblick - Tunnelblick installieren und konfigurieren, und danach vom Terminal aus das Binary in /Applications/Tunnelblick.app/Contents/Resources/openvpn gegen das von oben austauschen (vorher mit "gunzip" entpacken ).
Ein komplett fertig paketiertes Tunnelblick will ich eigentlich nicht bauen - das kostet Zeit, die ich lieber in weitere IPv6-Features investieren würde.
war genau das nach dem ich suchte
wie kann ich den Befehlt
sudo route add -inet6 default IPV6_IP_DES_GATEWAYS
vom Server zum Client Pushen ? (bzw. kann ich das )
push "route-ipv6 0::0/0"
oder (bei hinreichend verwirrten Linux-Versionen)
push "route-ipv6 2000::/3"
(erzeugt eine IPv6-Route zum VPN-Server)
Danke!
danke für den Hinweis. Ich hab' auf dem Server etwas aufgeräumt (und auch mal eine neuere Version von dem Binary gebaut).
Die MacOS-Version ist jetzt da: http://www.greenie.net/ipv6/macosx-105/openvpn-macosx-105-bin-20100307-1.gz
Eigentlich wärs toll, wenn ein Freiwilliger Kontakt mit den Entwicklern von Tunnelblick aufnehmen würde (mir fehlt die Zeit) und die das direkt in ihr Bundle integrieren würden (optional)...
Just want to say thank you for your patch:-)
Leider hab ich jetzt meine Infrastruktur schon auf IPv6 + Mobil IPv6 per OpenVPN mit zentralem Gateway umgestellt - nur mein Windows-Rechner fehlt noch... kann mir da niemand aus der Patsche helfen? Ich meine mit vorkompiliertem TAP und openvpn für WinXP 32bit? Wäre super, danke schon mal.
hat zwar etwas gedauert, aber auf der Seite liegt jetzt ein Windows-Binary mit Gui und Installer (dort verlinkt).
Die Gui ist eine frühe Version der "innendrin grundsanierten" openvpn-gui (nutzt jetzt das Admin-Interface zu openvpn), d.h. ein paar Sachen sind noch etwas wackelig - aber im Grunde funktioniert sie. Der Autor der Gui freut sich auch über Feedback
Das openvpn.exe ist ein aktueller Git-Checkout des "allmerged"-branch vom openvpn-devel.git, also mit allen bells & whistles...
Viel Spass damit
erstmal vielen dank dafür das du dir die Arbeit gemacht hast diesen patch zu basteln.
was mir jedoch aufgefallen ist: über server-ipv6 ist es nur möglich ein /64 zu konfigurieren. ist es geplant dies auf kleinere Netze auszubauen. ich z.b. habe auf meinem dedicated server, wohin ich den tunnel nutzen will, nativ eine ipv6 ip anliegen auf der mir vom serverprovider ein /112 gerouted wird.
aus diesem /112 möchte ich für den openvpn tunnel nur nen kleines /120 verwenden.
ich hab' angefangen, Support für andere Subnetzgrössen zu implementieren, aber gerade bei so mickrigen Netzen muss ich mir den IPv6-Pool nochmal genauer ansehen, ob der damit ordentlich zurechtkommt, wenn der Pool voll ist.
... ich nehm' natürlich auch gerne Patches gegen den aktuellen Stand entgegen
gert
der einzige weg momentan, wäre dann über client-connect scripte die tun-interfaces zu konfigurieren, oder überseh ich da was? Alles andere wäre denke ich zu dreckig ( für die tun devices auf den unique local bereich zurückgreifen und auf dem sever nen nat-pt von v6 zu v4 und das dann wieder in v6 tunneln. = jede menge overhead)
Ist es möglich einen vorab Patch zu bekommen. Das der pool voll sein wird, wird bei mir nicht vorkommen, da nur eine Handvoll Nutzern/Endgeräten dieses VPN zur Verfügung steht.
Grüße,
Kai
Wollte fragen ob es schon eine Lösung für kleinere Subnetze gibt? Egal was ich in 'ifconfig-ipv6' konfiguriere - das Tunneldevice erhält immer ein /64
lg,
das aktuelle openvpn-git (dieser Tage als 2.3_alpha2 released) hat den IPv6-Kram drin, mit überarbeitetem Ifconfig-Teil der jetzt auch bis /112 zulässt, und mit überarbeitetem Route-IPv6-Teil, der auch mit Tap-Interfaces auf Linux tut.
gert