Anleitung: DS-Lite Anschluss mit Heimnetz-Zugriff über einen OpenVPN-Server

Dieser Beitrag wurde aus dem ehemaligen Internet-Auftritt unserer Bürgerinitiative Glasfaser für Hünstetten übernommen, da es an der zeit war, den Rest der WEB-Site einzumotten. Dieser Beitrag wurde ursprünglich von Oliver Keiper aus Hünstetten verfasst.

Die Deutsche Glasfaser verwendet für den Internetzugang DS-Lite, wie inzwischen viele andere Provider auch. Dabei bekommt der Anschluss nur eine interne IPv4 zugeordnet, die aus anderen öffentlichen IPv4 Netzen nicht erreichbar ist. Die eigentliche Kommunikation erfolgt über IPv6, daher muss der Zugang auf das eigene Heimnetz von außen darauf umgestellt werden. Bitte beachten Sie den Haftungsausschluss am Ende dieses Beitrages!

Der von vielen bisher genutzte integrierte VPN-Zugang der Fritzbox (IPSec) kann mit IPv6 nichts anfangen und funktioniert somit nicht mehr. Leider unterstützen derzeit auch noch nicht alle Mobilfunk-Netzbetreiber IPv6 (z.B. O2/Telefonica), ebenso wie die meisten öffentlichen Wifi-Hotspots und Firmennetze. Aus diesem Grund benötigt man in der Regel einen sogenannten IP-Portmapper, also einen “Übersetzer”, der die Kommunikation eines externen Gerätes von IPv4 auf IPv6 überträgt. Dazu kann man entweder den Portmapping-Dienst von feste-ip.net in Anspruch nehmen (Kosten für einen Portmapper ca. 5 Euro / Jahr), oder (für Fortgeschrittene mit Linux-Kenntnissen) auch einen virtuellen Linux-Server mit fester IPv4 bei einem Hoster anmieten (Kosten ca. 3-5 Euro / Monat).

Hat man im Heimnetz nur Geräte, die IPv6 unterstützen, kann man darauf von außerhalb mit einer Fritzbox-MyFritz Freigabe direkt zugreifen. Leider sind aber oft (noch) nicht alle Geräte im Heimnetz IPv6 fähig, ich kenne da aus eigener Erfahrung z.B. diverse Internet-Kameras und Alarmanlagen.

Für diesen Fall benötigt man dann im Heimnetz ein Gerät, welches von IPv6 auf IPv4 zurück übersetzt. Am einfachsten geht das mit einem OpenVPN-Server, der entweder auf einem vorhanden Gerät (z.B. auf einem Synology oder QNAP-NAS) installiert werden kann, oder alternativ auf einem Raspberry PI 3 oder 4 (beide mit Gigabit Ethernet, aber bei Raspberry Pi 3 auf ca. 300 MBit/s begrenzt, da der Ethernet Port über USB angebunden ist) betrieben wird. Dieser ist für ca. 70 Euro als Bausatz komplett mit Gehäuse, SD-Karte und Netzteil zu bekommen, braucht wenig Strom (kann also auch 24/7 betrieben werden) und bietet einen sicheren und verschlüsselten Zugang zu allen Geräten im Heimnetz. Ein weiterer Vorteil ist, dass mit einer einzigen Portfreigabe / Portmapper alle im Heimnetz betriebenen Geräte von außen über einen verschlüsselten Kanal angesprochen werden können. Es gibt entsprechende kostenfreie Client-Apps für alle Betriebssysteme (Android, IOS, Windows, Linux).

Zunächst muss also entschieden werden, welcher Zugang erforderlich ist:

  1. Zugriff von außen nur über IPv6 (Mobilfunknetz unterstützt IPv6, wie z.B. Telekom/Vodafone), alle internen Geräte unterstützen IPv6 – Portfreigabe über Fritzbox reicht aus
  2. Zugriff von außen über IPv4, alle internen Geräte unterstützen IPv6 – Portmapper (feste-ip.net) + Portfreigabe Fritzbox
  3. Zugriff von außen über IPv4 UND Geräte im Heimnetz, die nur IPv4 unterstützen – Portmapper (feste-IP.net) + OpenVPN-Server im Heimnetz + Portfreigabe über Fritzbox

Die folgende Beschreibung / Anleitung gilt zunächst für Option 3 (größter Umfang). Für die anderen beiden Optionen sind einige Punkte nicht erforderlich und können übersprungen werden. Da die meisten eine Fritzbox als Router einsetzen, ist das auch die Basis für diese Anleitung. Prinzipiell sollte das aber auch auf andere Router übertragbar sein.

1. IPv6 in der Fritzbox aktivieren:

Internet – Zugangsdaten – IPv6:

Heimnetz – Heimnetzübersicht – Netzwerkeinstellungen – IPv6 Einstellungen:

2. OpenVPN-Server bereits vorhanden?

Wenn  bereits ein OpenVPN-Server im Heimnetz vorhanden ist (z.B. QNAP oder Synology-NAS), der auch IPv6 unterstützt, kann dieser genutzt werden. Wichtig ist hierbei in den Optionen folgendes zu aktivieren:

  • IPv6 über TCP (UDP wird von Portmappern wie feste-ip.net nicht unterstützt)
  • Clients den Server-LAN Zugriff erlauben

In diesem Fall kann Schritt 3 und 4 entfallen.

3. Aufsetzen eines Raspberry Pi mit OpenVPN-Server

Ansonsten kann dieser Dienst einfach auf einem Raspberry Pi 2/3/4 unter Raspbian installiert werden (Raspbian Buster lite bzw. Pi OS). Ein Raspi 2 wird aber von der Performance her nicht mit den von der DG gelieferten Bandbreite mithalten können (100 MBit/s Ethernet Port), von daher ist meine Empfehlung ein mindestens ein Raspi 3 einzusetzen.

Ein gewisses Maß an Experimentierfreude bzw. Linux-Grundkenntnisse (ssh, Dateien editieren) ist allerdings erforderlich. Dauer ca. 2-3 h.

  • Raspbian PI OS Lite runterladen: https://www.raspberrypi.org/downloads/raspberry-pi-os/
  • ISO auf dem PC entpacken, SD-Karte des Raspi in den PC stecken und das Image auf die SD-Karte schreiben, dazu z.B. das Tool Win32Imager (findet man im Internet) verwenden (es gibt auch Alternativen, die ebenfalls verwendet werden können):
  • Leere Datei mit dem Namen “ssh.” (Achtung: ohne Datei-Erweiterung wie z.B. .txt!!!) in die Boot-Partition der SD-Karte schreiben (Text-Editor öffnen, Speichern unter, alle Dateien, Dateiname “ssh.”)
  • SD-Karte in Raspi stecken, ans LAN anschließen und booten
  • In der Fritzbox/Heimnetz nachschauen, welche IPv4 Adresse der Raspi über DHCP bekommen hat
  • Mit dem Tool Putty (findet man im Internet) über ssh und der ermittelten IP anmelden (unter Window-Translation character set UTF-8 einstellen)

Open, anschließend die Warnung mit „Ja“ bestätigen

Am Systen anmelden mit User = pi, Password = raspberry

Passwort ändern für User pi:

passwd
altes und neues Passwort eintragen

sudo raspi-config
Network options – hostname = openVPN
Localisation options – change locale – de_DE.UTF-8 (dauert ein paar Minuten)
Localisation options – change time zone – Europe – Berlin
Beenden und speichern – Reboot

Nach dem Neustart wieder über ssh (putty) anmelden

sudo apt-get update
sudo apt-get upgrade

Damit die IPv6-Adresse mit der MAC-Adresse übereinstimmt, muss die Datei dhcpcd.conf im Linux Texteditor nano geändert werden:

sudo nano /etc/dhcpcd.conf
Die Zeile slacc suchen und folgendermaßen ändern:

#slacc private (in dieser Zeile das # hinzufügen)
slacc hwaddr (in dieser Zeile das # entfernen)

Strg-x (Nano beenden) – Ja – Dateiname übernehmen und überschreiben

sudo reboot

Nach dem Neustart erneut über ssh anmelden und überprüfen, dass die korrekte globale IPv6-Adresse vergeben wurde (inet6: die ersten 4 Blöcke / Präfix der IP-Adresse sollten vom Router über DHCP weitergegeben worden sein, der erste Block sollte bei Deutsche Glasfaser 2a00: sein. Die letzen 3 Bytes sollten nun mit der Ethernet-MAC übereinstimmen.

ifconfig

4. OpenVPN-Server installieren und ovpn-Profil erzeugen

PiVPN (https://github.com/pivpn/pivpn) bietet einen Installationsassistenten, der alle erforderlichen Einstellungen abfragt und den Server-Dienst automatisch entsprechend konfiguriert:

cd ~
curl -L https://install.pivpn.io > pivpn.sh
sudo bash pivpn.sh

Die Abfragen des Installationsassisten mit den folgenden Daten füllen:
Dynamische IP bestätigen
Chose local user: pi
Installation mode : OpenVPN
Protocol : TCP
Default OpenVPN port : 1194
DNS-Provider : Google
Custom Search Domain : no
Public IP or DNS: DNS-Entry, use a public DNS
Public DNS Name of this Server: eigener_name.feste-ip.net (Portmapper Adresse)
Enable Eliptic Curves: yes
ECDSA certificate size: 256 bit
Unattended updates: no
Reboot: no

Abschließend muss der Server noch auf IPv6 umgestellt werden. Dazu wird die Konfigurationsdatei “server.conf” editiert:

sudo nano /etc/openvpn/server.conf
Die Zeile suchen, die mit “proto” beginnt, und folgendermaßen abändern:
proto tcp6-server

Strg-x (Nano beenden) – Ja – Dateiname übernehmen und überschreiben

sudo reboot

Nach dem Reboot sollte der OpenVPN-Server laufen. Das kann folgendermaßen kontrolliert werden:

service openvpn status

Strg-c (beenden)

Jetzt muss nur noch ein Profil für den Client angelegt werden. Dazu wird eine Profildatei (*.ovpn) erzeugt, die auf den Clients importiert wird:

pivpn add

Enter a name for the client: Name_des_Clients (frei wählbar)
How many days should the certificate last: 3650
Password:  geheim (frei wählbar)

Das neu erzeugte OpenVPN-Profil (Name_des_Clients.ovpn) wird im Homeverzeichnis des Users pi ( ~/ovpns) abgelegt und kann mit dem Tool „WinSCP“ auf den PC kopiert werden. Dieses Profil wird vom VPN-Client benötigt um die Verbindung zum Server herzustellen. Für jeden Nutzer kann ein eigenes Profil mit Passwort angelegt werden.

5. Fritzbox “MyFritz”-Freigabe aktivieren

Nun wird eine neue Freigabe erstellt unter Internet – Freigaben – Gerät für Freigaben hinzufügen. Als Gerät wird der Raspi mit Hostnamen “openVPN” und der entsprechenden IP-Adresse ausgewählt. Bei der MyFritz-Freigabe “andere Anwendung” auswählen und den Port 1194 eintragen.

Anschließend sollte der Port 1194 für IPv4 und IPv6 freigegeben sein (grüne Ampel):

Nochmal auf Freigabe bearbeiten klicken, um die MyFritz-Adresse anzuzeigen und kopieren zu können:

6. Portmapper auf feste-ip.net konfigurieren

Account anlegen und “universelle Portmapper” auswählen, URL aus Fritzbox-Freigabe einfügen mit Port 1194 für OpenVPN. Hier können auch noch weitere Ports eingetragen werden, die im Heimnetz auf dem OpenVPN-Server (Raspi) erreichbar sein sollen, wie z.B. ein eigener Webserver oder eine Cloudanwendung.

Es können auch mehrere Portmapper angelegt werden um auf weitere Geräte im Heimnetz zugreifen zu können. (Achtung, 1 Portmapper für ein Gerät kostet ca. 5 Euro / Jahr)

Verbindung zu Fritzbox testen:

7. OpenVPN Profildatei (*.ovpn) mit Texteditor öffnen und Portmapper-Adresse eintragen

Wichtig ist hierbei, dass die Mapping-Adresse und der Port von feste-ip.net übernommen wird (Achtung: Leerzeichen / kein Doppelpunkt zwischen Adresse und Port!)

Speichern und an die Geräte / Clients verteilen.
OpenVPN App aus dem Playstore herunterladen und Profildatei (*.ovpn) importieren. Zur Verbindung muss das beim Erzeugen des Benutzerprofils angegebene Passwort eingegeben werden.

Eigener IPv6 tunnel über einen vServer (Alternative zu feste-ip.net)

Wie oben beschrieben kostet jeder Portmapper bei feste-ip.net ca. 5 Euro / Jahr. Wenn man mehrere Geräte direkt freigeben möchte (ohne sich erst über OpenVPN einwählen zu müssen) oder man die zufällig gewählten Portnummern vermeiden möchte, kann man auch einen kleinen Linux vServer anmieten und über die dazugehörige IPv4-Adresse einen eigenen Portmapper erstellen. Vorteil wäre hier auch, dass man seinen eigenen Domainnamen zuordnen kann und auch weitere Dienste auf dem Server nutzen kann.

  • Zunächst bei einem entsprechenden Anbieter einen vServer auswählen, und z.B. Ubuntu 18 LTS installieren lassen
  • Firewall konfigurieren und Port 1194 TCP freigeben
  • Im Heimnetz OpenVPN Server für TCP Port 1194 einrichten wie oben beschrieben
  • Im ovpn-Profil den Domainnamen des vServers eintragen:

remote mein-name.mein-host.de 1194

  • Auf dem vServer 6tunnel installieren

sudo apt-get install 6tunnel
sudo 6tunnel 1194 openvpn.fritzfreigabecode.myfritz.net 1194

Anzeige der 6Tunnel:

ps –ef |grep 6tunnel

Löschen der 6Tunnel:

killall 6tunnel

Weitere Tunnel können eingerichtet werden, z.B. zum Zugriff auf Geräte, die IPv6 nativ unterstützen. Alle anderen können auch über den OpenVPN erreicht werden. Damit das automatisch z.B. nach einem Reboot funktioniert, kann man das Ganze als Shell-Skript verpacken und mittels cron ausführen lassen.

nano tunnels.sh

#!/bin/sh
# Da das Skript direkt nach dem (Re)Boot ausgefuehrt wird,
# erst einen Moment warten und ggf. vorhandene 6tunnel-Instanzen beenden
killall 6tunnel
# Pause
sleep 10s
# 6tunnel starten
# FritzBox Fernzugriff
6tunnel 443 <Ziel-IPv6-Adresse_oder_Hostname> 443
# OpenVPN
6tunnel 1194 <Ziel-IPv6-Adresse_oder_Hostname> 1194

Strg-x (Nano beenden) – Ja – Dateiname übernehmen

Das Skript ausführbar machen mittels:

chmod +x tunnels.sh

Dieses Shell-Skript muss zwingend mit root-Rechten ausgeführt werden. Daher es im crontab des root-Benutzers eintragen:

sudo crontab –e

Falls noch nicht erfolgt, nano als Editor auswählen und folgende Zeile hinzufügen:

@reboot /home/username/tunnels.sh

Strg-x (Nano beenden) – Ja – Dateiname übernehmen und überschreiben

Haftungsausschluss:
Sowohl der Autor dieser Anleitung, als auch der Seitenbetreiber übernehmen keinerlei Haftung bezüglich der Datensicherheit des VPN-Tunnels oder für Schäden, die aus der Verwendung dieser Anleitung entstehen. Für die Sicherheits-Einstellungen von OpenVPN und die physikalische Sicherheit der Endgeräte (z.B. Abhandenkommen eines Smartphone oder Notebooks) ist jeder selbst verantwortlich!
Im letzteren Fall ist beispielsweise das verlorene / entwendete Endgerät zu Sperren / das Zertifikat zurück zu ziehen.

Verstanden und zurück zum Anfang des Beitrages.