Raspberry Pi VPN – Teil 13: IPv4 VPN mit (trotz) DS-Lite

Raspberry Pi VPN

Wiederholt wurde von Lesern gewünscht, einen VPN-Tunnel von einem IPv4-Client (Smartphone) in ein DS-Lite-Heimnetz aufbauen zu können. Ein verständlicher Wunsch, wenn man bedenkt, dass Heimnetzanbindungen (fast) nur noch als DS-Lite Version zu bekommen sind, aber umgekehrt, die Mobilfunknetze und WLAN-Hotspots noch häufig nur auf IPv4 setzen. Mit klassischen IP lässt sich ein VPN zwischen IPv4 und IPv6 nicht realisieren, aber Gastautor Stefan hat eine Möglichkeit der Übersetzung von IPv4 auf IPv6 gefunden, die mit socat auf einem gemietetem vServer eingerichtet werden kann. Gleichzeitig stellt Stefan mit WireGuard eine Alternative zu OpenVPN vor. Ich freue mich, Stefans Artikel hier in meinem Blog präsentieren zu können und bedanke mich gleichzeitig für die Mühe, die er sich damit gemacht hat.

Der nachfolgende Artikel stammt von Gastautor Stefan:

Ihr habt einen DS-Lite-Anschluss, euer VPN-Server läuft einwandfrei und ihr wollt lediglich wissen, wie ihr euer Heimnetzwerk für IPv4 erreichbar machen könnt? Dann könnt ihr direkt zum Abschnitt „Mit vServer und socat ins Heimnetzwerk“ springen.

Interessierst ihr euch hingegen für einen alternativen Weg zur Einrichtung eines VPN-Servers oder seid ihr auf der Suche nach zusätzlichen Denkanstößen? In jedem Fall wünsche ich viel Spaß beim Lesen und Ausprobieren.

WireGuard als Alternative zu OpenVPN

Um das Frustpotential möglichst gering zu halten habe ich versucht die nach meiner persönlichen Einschätzung bestehenden Voraussetzungen aufzulisten damit ihr etwaige Probleme besser eingrenzen könnt.

VORAUSSETZUNGEN:

  1. Raspberry Pi bootet einwandfrei
  2. Zugriff (lokal, vorzugsweise aber per SSH) ist vorhanden
  3. Privacy Extensions sind deaktiviert
  4. Raspberry Pi hat eine globale IPv6-Adresse
  5. Dynamische IPv6-IP-Adresse ist eingerichtet
  6. Raspberry Pi ist erreichbar und Port 1194/UDP ist geöffnet.

PRÜFE:

(1) und (2) gehören zur Grund-/Ersteinrichtung.
(3) cat /etc/dhcpcd.conf | grep slaac

cat /etc/dhcpcd.conf | grep slaac

„slaac private“ ist auskommentiert oder inexistent – „slaac hwaddr“ ist das was wir wollen.

(4) ifconfig

ifconfig
Eine globale IPv6-Adresse ist vorhanden.

(5) Verweist eure dynamische IP-Adresse auf die globale IPv6-Adresse?

Ipv6 Address
Siehe zwecks Abgleich Punkt (4)

(6) Ruft http://www.ipv6now.com.au/pingme.php und tragt (5) ein:

Pingtest

Gab es Probleme? Dann schaut euch nochmal https://blog.helmutkarger.de/raspberry-pi-vpn-teil-5-vorarbeiten-fuer-ein-vpn-unter-ipv6/ an oder fragt im Blog nach.

Wenn alles geklappt hat – super! Installiert Pi-hole mit dem Befehl

curl -sSL https://install.pi-hole.net | bash

Hierbei könnt ihr den Schritten aus https://blog.helmutkarger.de/raspberry-pi-vpn-teil-9-installation-pi-hole/ folgen bis zum Abschluss der Installation. Empfehlenswert ist die Änderung des Admin-Passwortes. Darüber hinaus sind keine weiteren Nacharbeiten notwendig!

Das liegt daran, dass wir jetzt PiVPN installieren – PiVPN erkennt das Vorhandensein von Pi-hole und bietet die Einbindung an. Bestätigt einfach immer die Vorgaben bis ihr zur Wahl des VPN kommt:

WireGuard

Selbstverständlich ist euch die Wahl überlassen aber probiert doch mal WireGuard statt OpenVPN aus. Die (vermeintlichen) Vorteile von WireGuard werden bereits in der Auswahlmaske angepriesen.

Hinzu kommt, dass ihr bei WireGuard keine händischen Nacharbeiten vornehmen müsst. Bei Interesse findet ihr weitere Infos zu WireGuard auf https://www.thomas-krenn.com/de/wiki/WireGuard_Grundlagen.

Als Port schlage ich euch 1194 vor da ihr diesen Port vermutlich bereits für euer Raspberry Pi gemäß https://blog.helmutkarger.de/raspberry-pi-vpn-teil-5-vorarbeiten-fuer-ein-vpn-unter-ipv6/ geöffnet habt:

WireGuard Port

Wie bereits angekündigt erkennt das Setup Pi-hole:

Pi-Hole deected

Stimmt der Verwendung der DNS-Server zu und tragt anschließend eure dynamische IP-Adresse ein:

Public IP or DNS
DNS Name

Anschließend könnt ihr bis zum Abschluss der Installation die Vorgaben bestätigen. Führt den empfohlenen Neustart durch. Nach dem Neustart könnt ihr mit „pivpn -d“ prüfen, ob alles geklappt hat. Haltet Ausschau nach:

::::            Self check               ::::
:: [OK] IP forwarding is enabled
:: [OK] Iptables MASQUERADE rule set
:: [OK] WireGuard is running
:: [OK] WireGuard is enabled (it will automatically start on reboot)
:: [OK] WireGuard is listening on port 1194/udp

Was euch noch fehlt ist die Anlage eines Client-Profils:

pivpn add

Sucht euch einen passenden Namen aus. Das Client-Profil auf das Smartphone zu übertragen ist sehr simpel:

pivpn qrcode
WireGuard QR Code

In der WireGuard-App (F-Droid oder Google Play) kann man den QR-Code einscannen:

WireGuard App

Die Client-Profile werden unter /home/pi/configs/ abgelegt. Statt dem QR-Code kann die Übertragung auf das Smartphone natürlich auch auf konventionelle Weise vorgenommen werden.

Damit ist die Einrichtung des VPN-Servers abgeschlossen.

Mit vServer und socat ins Heimnetzwerk

Ihr möchtet euer Heimnetzwerk selbst ohne IPv6 erreichen obwohl ihr einen DS-Lite-Anschluss habt? Über einen Umweg lässt sich das realisieren. Es ist lediglich Root-Zugriff auf ein Linux mit IPv4-Adresse UND IPv6-Adresse notwendig, was auf nahezu alle Miet-Server / vServer zutrifft. Meinen vServer habe ich beispielsweise auf https://www.delta-networks.de/ gebucht.

Im Folgenden gehe ich von bestehenden Zugang zur Konsole aus.

Wir werden „socat“ benutzen um die gewünschte Weiterleitung durchzuführen:

sudo apt install socat

Auf https://medium.com/@copyconstruct/socat-29453e9fc8a6 hat der Autor eine gute Zusammenfassung geliefert:

So Cat

Ein einziger Befehl mit Root-Rechten reicht aus:

sudo socat UDP4-LISTEN:1194,fork,su=nobody UDP6:<DYNDNS>:1194

Bei der <DYNDNS> handelt es sich um eure dynamische IPv6-IP-Adresse – lautet diese raspi.dyndns.com wird daraus also:

sudo socat UDP4-LISTEN:1194,fork,su=nobody UDP6:raspi.dyndns.com:1194

Damit der Befehl dauerhaft im Hintergrund ausgeführt wird und zum Zwecke der Stabilität empfiehlt es sich entsprechende cronjobs anzulegen:

sudo crontab -e

Tragt mit einem Editor – ich kann nano empfehlen – folgende Zeilen ein und speichert ab:

@reboot	socat UDP4-LISTEN:1194,fork,su=nobody UDP6:<DYNDNS>:1194
0     5       *       *       *       /sbin/reboot
Crontab

Der tägliche Neustart um 05:00 Uhr erhöht meiner persönlichen Meinung nach die Stabilität – das bzw. die zweite Zeile ist jedoch kein Muss.

Startet den vServer neu (sudo reboot).

Jetzt ist lediglich das Client-Profil anzupassen. Hierfür müsst ihr die IPv4-Adresse eures Linux-Servers kennen. Mal angenommen das wäre 85.13.134.231 dann sieht das wie folgt aus:

OpenVPN:

Remote IPv4

WireGuard:

WireGuard Remote IPv4

Wo vorher eure dynamische IPv6-IP-Adresse stand tragt ihr jetzt die IPv4-Adresse des Servers auf dem socat läuft ein. Übertragt das geänderte Client-Profil auf euer Smartphone.

Damit habt ihr trotz DS-Lite-Anschluss Zugriff auf euer Heimnetzwerk:

Smartphone IPv4 => IPv4-Eingang-vServer-Ausgang-IPv6 => IPv6-Heimnetzwerk

Okay, es ist extrem stark vereinfacht und ein Schaubild wäre wohl eingängiger. Hauptsache es klappt…

Hinweis:
Sollte auf dem vServer eine Firewall laufen (empfehlenswert) muss der Port 1194 geöffnet werden. Bei „ufw“ geht das so:

sudo ufw allow 1194/udp
Firewall

Weitere Artikel in dieser Kategorie:

Schreiben Sie einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.