Website-Icon Sugar Camp

OpenVPN und IPv6 – Ein harter Kampf!

openvpn

OpenVPN und IPv6 – Der Kampf beginnt!

Da IPv6 immer mehr Gewicht gewinnt, wollte ich mich bereits für die Zukunft vorbereiten und meine Seiten unter IPv6 erreichbar machen. Kann ja nicht so schlimm werden, dachte ich, IPv6 ist ja nun wirklich nichts neues mehr und nachdem ich S4U gänzlich den Rücken gekehrt habe, habe ich jetzt auch viel mehr Möglichkeiten 😉 

Also war meine erste Frage – Wo fange ich an? Wieso? Wenn ich eins umstelle dann muss ich auch den Rest umstellen da MySQL, Webserver Monitoring, API’s Proxy usw. dann alle IPv6 können müssen damit es auch alles funktioniert.

Aber ich schweife ab. Wir waren bei OpenVPN und IPv6. Damit habe ich auch angefangen, gestern…. (Eigentlich begann ich mit Proxmox aber das kommt später 😉 , da ich weiß dass mein Kollege von Layers Gedanken damit gerade viel Anfangen kann 🙂 )

Mein OpenVPN Setup mit IPv6

Ich wollte unbedingt ein privates IPv6 Subnetz haben für die ganzen OpenVPN Geschichten da ich so zum einen von außen nicht überall erreichbar bin und ich wenig Lust hatte 18 Millionen IPv6 Adressen manuell zu erstellen und ein geroutetes Subnetz gibt es nur gegen Aufpreis. Außerdem ist so ein wenig mehr Kontrolle gegeben und man kann mit den netten iptables Regeln nicht ganz so schnell durcheinander kommen.

Also habe ich mir das fd8b:75bb:54e8:9a87::/64 ausgesucht. Das ist für private Zwecke Analog den 192.168.0.0/24er Netzen. Der OpenVPN Server hat ein 64er public Subnetz wo er für den VPN Dienst eine Public IPv6 nutzt. 

Ich gehe hier also davon aus, dass mindestens eine public IPv6 auf dem Server bereits konfiguriert ist und einer Netzwerkkarte zugeordnet ist und das OpenVPN bereits mit einer IPv4 Konfiguration läuft (Falls nicht ist hier eine Anleitung) und der Kernel natürlich IPv6 kann.

 

Beginnen wir also.

Die OpenVPN server.conf anpassen

Hier muss gar nicht so viel angepasst werden.

Fügt einfach diese Zeilen hinzu und ersetzt ggf. mit eurem Subnetz 🙂

Die Datei liegt Default unter /etc/openvpn

[su_note note_color=“#c1c1b6″]

server-ipv6 fd8b:75bb:54e8:9a87::/64 # Das IPv6 Subnetz
push "route-ipv6 fd8b:75bb:54e8:9a87::/64" # Route vom OpenVPN Subnetz
push "dhcp6-option DNS fd8b:75bb:54e8:9a87::1" # OpenVPN private IP und gleichzeitig der DNS
tun-ipv6 # gehört eigentlich an den Anfang der OpenVPN config
proto udp6 # gehört auch an den Anfang
client-config-dir ccd # falls nicht vorhanden bislang 

[/su_note]

So blöd es klingt. In der server.conf war es das bereits 🙂

 

Als Nächstes aktivieren wir das IPv6 forwarding

[su_note note_color=“#c1c1b6″]

sysctl -w net.ipv6.conf.all.forwarding=1

[/su_note]

Dauerhaft sollte man in der /etc/sysctl.conf folgendes eintragen

[su_note note_color=“#c1c1b6″]

net.ipv6.conf.all.forwarding=1

[/su_note]

 

Ein paar iPtables Regeln wären auch cool fürs Maskieren

[su_note note_color=“#c1c1b6″]

ip6tables -A INPUT -i eth0 -m state --state NEW -p udp --dport 1194 -j ACCEPT
ip6tables -A INPUT -i tun+ -j ACCEPT 
ip6tables -A FORWARD -i tun+ -j ACCEPT
ip6tables -A FORWARD -i tun+ -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
ip6tables -A FORWARD -i eth0 -o tun+ -m state --state RELATED,ESTABLISHED -j ACCEPT
ip6tables -t nat -A POSTROUTING -s fd8b:75bb:54e8:9a87::/64 -o eth0 -j MASQUERADE

[/su_note]

Müssen natürlich an eure Ports, Netzwerkkarten und euer Subnetz angepasst werden. Eh klar 🙂

Wie man diese Regeln permanent macht sollte jeder wissen. Falls nicht würde ich an dieser Stelle ernsthaft überlegen den Server zu kündigen. Ihr könnt aber auch gern nachfragen.

Ein Hinweis aber am Rande, solltet Ihr einen virtuellen Server haben der auf Openvz Basis läuft dann könnt Ihr euch das sparen denn der Kernel der aktuell bei OpenVZ eingesetzt wird ist zu alt für IPv6 NAT. Ihr braucht entweder einen richtigen dedicated Root, KVM oder LXC (Alles was den Kernel 3.2 und höher benutzt funktioniert)

Sollte euer IPv6 Netz public sein dann braucht Ihr natürlich keinerlei NAT

Die Client config

Klar, die sollte nicht fehlen.

Fügt folgende Zeilen in eure Client config ein

[su_note note_color=“#c1c1b6″]

tun-ipv6
proto udp6
remote 2a05:8b81:1000:14e::d7b9 1194 # Hier sollte unbedingt eure public IPv6 stehen

[/su_note]

Das war es auch schon fast. Sollte man auf einem Windows Client den gesamten IPv4 und IPv6 durch den Tunnel jagen wollen, so muss nur die „redirect-gateway mit dem IPv6 Flag erweitert werden

[su_note note_color=“#c1c1b6″]

redirect-gateway ipv6

[/su_note]

Wichtig, wirklich nur das IPv6 ergänzen und nicht die Zeile zusätzlich einfügen, da der String  „redirect-gateway“ nur einmal vorkommen darf.

Statische IP vergeben da keine automatische Vergabe stattfindet

Eine Kleinigkeit die unbedingt gemacht werden muss. In eurem „ccd“ Verzeichnis, welches in der server conf angegeben wird, muss für jeden Client, der eine IPv6 erhalten soll, noch zusätzlich folgender Eintrag hinterlegt werden:

[su_note note_color=“#c1c1b6″]

ifconfig-ipv6-push fd8b:75bb:54e8:9a87::2/64 fd8b:75bb:54e8:9a87::1/64

[/su_note]

Die erste IPv6 ist dabei eine statische IPv6 für den Client und die zweite IPv6 das Gateway.

Einen Nachteil hat das ganze. Man muss alle Routen mittels up Script selbst anlegen. OpenVPN kann das bei IPv6 leider noch nicht.

Windows Clients müssen, zum Zeitpunkt des Beitrags, mindestens den OpenVPN-2.4-alpha2 Client haben damit es überhaupt funktioniert.

Download OpenVPN Client 64 2.4 Alpha2 64 Bit

Download OpenVPN Client 64 2.4 Alpha2 32 Bit

Das sind derzeit die aktuellsten Versionen. Updates können hier runtergeladen werden.

 

Und nun Willkommen in der IPv6 Welt!

Wenn man sich das alles mühsam zusammensuchen muss und nichts irgendwo richtig dokumentiert ist, kann man damit ohne Probleme eine ganze Nacht und den folgenden Vormittag verbringen. Nicht zu vergessen der Abend zuvor 🙂 

Hoffentlich spart Ihr euch ein paar Stunden!

Share it!
Die mobile Version verlassen