Bei DS-Lite Anschluss (nur IPv6) einen VPN Wireguard Tunnel zum Handy herstellen

DS-Lite Anschluss mit VPN Wireguard Tunnel zum Handy

Bei heutigen Internetanschlüssen besteht nicht immer mehr die Möglichkeit, problemlos aus der Ferne auf das Hausnetzwerk zuzugreifen. Somit ist es nicht mehr so einfach, seine Hausautomation oder seine automatische Gartenbewässerung per Handy aus dem Urlaub zu steuern. Der Grund hierfür ist der groß angelegte Wechsel der Internetadressen, von IPv4 zu IPv6. Deshalb ist es notwendig bei dem DS-Lite Anschluss einen VPN Wireguard Tunnel zum Handy einzurichten.

Besonders wenn man seinen alten DSL Vertrag kündigt und zu einem neuen Anbieter wechselt, kann es passieren, das man nur noch eine IPv6 Internetadresse erhält. Somit kann man dann nicht mehr über eine IPv4 Adresse vom Handy per VPN tunnel auf sein Hausnetz zugreifen. Die Internetanbieter sind sehr daran interessiert, das IPv6-Protokoll in die neuen Anschlüsse zu bringen. Einige Anbieter, wie z. B. die Deutsche Telekom, statten den Anschluss mit je einer öffentlichen IPv6- und IPv4-Adresse aus. Ein solcher Anschluss wird auch als Dual Stack bezeichnet. Das Heimnetz ist somit von außen über das IPv4- und das IPv6-Protokoll erreichbar.  

Bei anderen Anbietern wie z.B. Kabelanbieter erhält man mit einem Neuvertrag einen sogenannten DS-Lite-Anschluss. DS-Lite bedeutet, dass der Provider keine öffentliche IPv4-Adresse mehr bereitstellt. Der Router im lokalen Netzwerk (z. B. hinter der Fritzbox) ist dann nur noch über seine IPv6-Adresse erreichbar. Damit die Server und Systeme im eigenen Netzwerk weiterhin IPv4-Adressen im Internet erreichen können, stellt der Provider einen sogenannten DS-Lite-Tunnel bereit. Dabei werden IPv4-Pakete durch das IPv6-Netz des Providers getunnelt und gelangen als IPv4 Adresse ins Internet. Leider funktioniert der der Weg vom Internet in das Hausnetzwerk über diesen Weg nicht. Also schauen wir uns die Konfiguration bei einem DS-Lite Anschluss mit VPN Wireguard Tunnel zum Handy an.

DS-Lite Anschluss mit VPN Wireguard Tunnel zum Handy

Schauen wir uns mein Heimnetzwerk an und wie es technisch realisiert ist. Von meinem Kabelanbieter Vodafone habe ich einen DS-Lite Anschluss nur mit einer öffentlichen IPv6 erhalten. In meinem Privaten Netz steht unter anderem ein Rock Pi 4c und meine Homematic IP CCU3 Zentrale.

DS-Lite Anschluss mit VPN Wireguard Tunnel zum Handy

Alle diese genannten Geräte sind in er Large über das IPv6 Protokoll zureden. Sie verfügen also neben dem IPv4 (z. B. 192.168.1.5) auch über eine IPv6 Adresse wie z. B. 2a02:908:2e30:9fe0:e0ce:d6ff:fe72:eac7.

Um beim DS-Lite Anschluss mit VPN Wireguard Tunnel vom Handy auf die CCU3 zuzugreifen, muss auf dem Rock Pi 4 Wiregurad Server installiert und der Port 51820 in der Fritzbox zur Weiterleitung eingerichtet werden. Dann steht dem Remote Zugriff nichts im Wege. Die einzelnen Schritte für die Installation und Konfiguration beschreibe ich jetzt. Dabei nutze ich in meiner Installation einen Rock PI 4c mit Armbian Betriebssystem. Dies ist vergleichbar zu einem Raspberry Pi. Weitere Informationen über die Links zu Rock PI 4c und dem Betriebssystem Armbian.

Voraussetzungen für IPv6 schaffen

Im ersten Schritt prüfen wir, ob unser Handy (Android) eine IPv6 Adresse vom Provider erhalten hat. Unter Einstellungen kann man nach „IP-Adresse“ suchen und erhält unter Telefon Einstellungen die Information zu den IP-Adresse. Dabei ist die Adresse wichtig, die z. B. mit 2a02:908:2e30:9fe0:e0ce:d6ff:fe72:efd5 startet. Die Adressen mit fe80: oder fd00: sind unique local address (ULA) oder Link-Lokale Adressen die für uns nicht wichtig sind.

Wenn unser Handy eine IPv6 Adresse hat, können wir nun uns auf den Rock Pi 4 anmelden und die IPv6 Einstellung prüfen.

Mit dem Befehl

ip -a -c addr show

lassen sich die IP Adressen vom Rock Pi 4 anzeigen. Dabei erhält man die folgende Ausgabe:

Aussage der IP Adresse von Befehl ip -a -c addr show

Sollte keine IPv6 angezeigt werden, sondern nur ein IPv4 mit der Aussage: inet 192.168.1.5/24 dann muss in der Firtzbox und/oder Raspberry Pi / Rock Pi 4 die Funktion IPv6 aktiviert werden. Dies findet ihr in der Fritzbox unter: Heimnetz => Netzwerk => Netzwerkeinstellungen => IPv6-Einstellungen

Für die Netzwerkkonfiguartion nutze ich im Rock Pi 4 die NetPlan Funktion, die mit dem Network Manager des Betriebsysstem zusammenspielt. Zum Netplan Netzwerk Thema findest Du hier weitere Infos.

Ziel ist es, das der Rock Pi 4 eine feste IPv6 erhält. Dies erreiche ich dadurch, das ich in der Fritzbox einstelle, der Rock Pi 4 soll immer die selbe IP erhält. In der Netplan Konfiguration wird DHCP für IPv4 und IPv6 aktiviere. Es kann natürlich dies auch direkt im Network Manager oder Networkd direkt Konfiguriert werden.

root@rockpi-4c:~# nano /etc/netplan/armbian-default.yaml
network:
  version: 2
  renderer: NetworkManager
  ethernets:
      eth0:
           dhcp4: true
           dhcp6: true
           nameservers:
               addresses:
                   - 192.168.1.1
                   - 1.1.1.1
                   - 8.8.8.8

Nachdem über “ sudo netplan apply “ die Konfiguration aktiviert ist müssen wir in der /etc/sysctl.conf noch ipv6 spezifische Einstellungen vornehmen.

root@rockpi-4c:~# nano /etc/sysctl.conf
# Uncomment the next line to enable packet forwarding for IPv4
net.ipv4.ip_forward=1     # <= ändern

# Uncomment the next line to enable packet forwarding for IPv6
#  Enabling this option disables Stateless Address Autoconfiguration
#  based on Router Advertisements for this host
net.ipv6.conf.all.forwarding=1     # <= ändern

.....
# Am Ende Einfügen:
net.ipv6.conf.all.use_tempaddr=0
net.ipv6.conf.default.use_tempaddr=0
net.ipv6.conf.default.addr_gen_mode = 0
net.ipv6.conf.eth0.addr_gen_mode = 0
net.ipv6.conf.eth0.use_tempaddr = 0

net.ipv6.conf.eth0.accept_ra=2

Nachdem wir nun die IPv6 fertig haben, gehen wir in die Fritzbox unter Internet => Freigabe und richten eine Freigabe für unseren Rock Pi 4 ein, damit dieser über Ping6 aus dem Internet erreichbar ist. Wenn der Rock Pi 4 eine richtige IPv6 Adresse hat, wird automatisch im Feld IPv6 Interface-ID die richtige Interface-ID angezeigt und das Feld PING6 freigeben läßt sich aktivieren. Ist das nicht der Fall, müssen die Einstellungen am Server un die IP Adresse nochmals geprüft werden.

Fritzbox die IPv6 Adresse vonm Rock Pi 4 freigeben zum Ping6

Wenn bis hierher alles geklappt hat, können wir unsere IPv6 Adresse nehmen und einen Test über die Webseite www.ipv6now.com.au starten. Dort erhalten wir die Information, ob der PING6 erfolgreich ist, also unserer Server aus dem Internet über IPv6 erreichbar. Am Ende des Tests erhalten wir die Information: “ 5 packets transmitted, 5 received, 0% packet loss “ . Somit ist dieser Test erfolgreich. Nach Abschluss des Projektes kann der Ping6 in der Fritzbox wieder ausgeschaltet werden.

Ping6 Test für die Hausautomation

Installation und Konfiguration von Wireguard VPN auf Rock Pi 4

Die Installation von Wireguard auf dem Rock Pi 4 mit Armbian Betriebssystem ist sehr einfach. Bei einem Raspberry Pi gibt es umfangreiche Beschreibungen zu der Installation mit den Informationen zu den zusätzlichen Tools für die Konfiguration wie z. B. „wg-quick“

root@rockpi-4c:~# sudo apt-get install wireguard

Nach der Installation von Wireguard, generiere ich zuerst Public und Private Keys. Die Speicherung erfolgt im Verzeichnis von Wireguard.

root@rockpi-4c:~# cd /etc/wireguard
root@rockpi-4c:~# umask 077
root@rockpi-4c:~# wg genkey | sudo tee /etc/wireguard/server-privatekey
root@rockpi-4c:~# cat /etc/wireguard/server-privatekey | wg pubkey | sudo tee /etc/wireguard/server-publickey

Somit erhalten wir ein Pärchen von Keys für den Wireguard Server bestehend aus einem privaten und einem öffentlichen Schlüssel. Beide Schlüssel brauchen wir später für die Konfiguration und lassen sich jederzeit auslesen über:

root@rockpi-4c:~# cat /etc/wireguard/server-privatekey
root@rockpi-4c:~# cat /etc/wireguard/server-publickey

Zusätzlich zu dem Server Key Pärchen benötigen wir für jedes Handy das mit dem Wireguard kommunizieren soll, ebenfalls ein Pärchen von Keys. Somit führen wir dies für Handy1 nochmals durch:

root@rockpi-4c:~# wg genkey | sudo tee /etc/wireguard/handy1-privatekey
root@rockpi-4c:~# cat /etc/wireguard/handy1-privatekey | wg pubkey | sudo tee /etc/wireguard/handy1-publickey

Im nächsten Schritt legen wir nun die Konfigurationsdateien für den Wireguard Server an. Wir legen die Datei wg0.conf an. In ihr befinden sich nun die der erzeugen Keys, den Listen Port von Wireguard 51820 und das Tunnel Netzwerk auf Basis von IPv4 Adressen. Hierbei können beliebige IPv4 Adressen nutzen. Ich habe in meiner Konfiguration mit 10.0.0.1/24 gearbeitet. Die /32 Netz IP Adressen der Clients werden dann hochgezählt. In der Datei habe ich Platzhalter für die Keys mit <> gekennzeichnet sowie das Beispiel für die Nutzung von 2 Handys vorgenommen:

root@rockpi-4c:~# nano /etc/wireguard/wg0.conf
[Interface]
Address = 10.0.0.1/24    # Server Tunnel Adressbereich
PrivateKey = <server-privatekey>
ListenPort = 51820

#Handy1
[Peer]
PublicKey = <handy1-publickey>
AllowedIPs = 10.0.0.2/32  # Client1 Tunnel Adresse

#Handy2
[Peer]
PublicKey = <handy2-publickey>
AllowedIPs = 10.0.0.3/32  # Client2 Tunnel Adresse

In dem Bereich Interface wird normalerweise noch eine Zeile für die IP Tables eingetragen. Leider hat der Network Manager es bei mir nicht erlaubt, somit ist diese Zeile in die Datei rc.local gekommen. Damit wird das Routing und Natting des 10.0.0.0/24 Netzes bei Neustart des Server eingerichtet. Bitte darauf achten das ihr auch das Interface eth0 verwendet

root@rockpi-4c:~# nano /etc/rc.local

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

sudo iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o eth0 -j MASQUERADE
exit 0

Durch das rebooten des servers sind die IP Tables aktiviert und wir können die wg0.conf in den Network Manager laden. Solltet ihr Systemd / networkd verwenden, schaut bitte nach, wie dort die Konfigurationen aktiviert werden. Für den Network Manager werden die folgenden Zeilen ausgeführt:

root@rockpi-4c:~# CONF_FILE="wg0.conf"
root@rockpi-4c:~# nmcli connection import type wireguard file "$CONF_FILE"

root@rockpi-4c:~# nmcli --show-secrets --ask connection up wg0

Wenn Änderungen an der wg0.conf vorgenommen wurden, ist es wichtig, die wg0 Verbindung zu löschen und mit den 3 Kommandos neu zu importieren. Das löschen erfolgt über:

root@rockpi-4c:~# nmcli connection delete wg0

Somit ist nun die Server Konfiguration erstellt. Damit nun mit dem Handy zugegriffen werden kann, tragen wir in der Fritzbox die Portweiterleitung für den Port 51820 über das Protokoll UDP ein. Der Eintrag sieht dann wie folgt aus:

Portfreigabe für Wireguard bei IPv6

Um das Handy mit der richtigen Wireguard Konfiguration auszustatten, benötigen wir je Handy eine eigene handy1-wg0.conf Datei. In dieser Datei sind neben dem Netzwerk IP Adressen und Keys auch ein Endpoint enthalten. Bei diesem Endpoint handelt es sich um eine DynV6 Domain, die ich angelegt habe. Weiter unten beschreibe ich dies im Detail. Im ersten Schritt kann man als Endpoint auch die eigene IPv6 eintragen um einen ersten Test vorzunehmen. In der Konfigurationsdatei habe ich beide Möglichkeiten aufgenommen.

root@rockpi-4c:~# nano /etc/wireguard/handy1-wg0.conf
root@rockpi-4c:~# chmod 600 /etc/wireguard/handy1-wg0.conf

Nach anlegen der Datei bitte die Berechtigung mit chmod setzen. Der Inhalt der Datei handy1-wg0.conf sieht dann folgendermaßen aus:

[Interface]
PrivateKey = <handy1-privatekey>
# Netzwerk aus wg0.conf für handy1 eintragen
Address = 10.0.0.2/32   

[Peer]
PublicKey = <server-publickey>
# dies ist der Adressbereich meines lokalen Netzwerkes 
AllowedIPs = 192.168.1.0/24 
       
# Endpoint mit einer eigenen DynV6 Domain
Endpoint = wireguard-endpoint.dynv6.net:51820

# oder mit mit der public IPv6 zum Testen
#Endpoint = [2a02:908:2e30:9fe0:e0ce:d6ff:fe72:eac7]:51820

Für das Zweite Handy wird eine eigene handy2-wg0.conf erstellt und die ensprechenden Informationen im Bereich [Interface] eintragen. Der Bereich [Peer] braucht nicht geändert zu werden.

Der DSL Provider kann den Präfix der IP Adresse in regelmäßigen Abständen ändern. Somit verändert sich auch die IPv6 Adresse von unserem Wireguard Server. Deshalb ist es von Vorteil eine eigene Domain zu verwenden. Ich habe mir die Domain wireguard-endpoint.dynv6.net angelegt, dies wird später noch beschrieben.

Wireguard App installieren und konfigurieren

Nachdem wir nun den Wireguard Server installiert und konfiguriert haben, schauen wir uns jetzt die Wireguard App auf Androide Handy an. Im Google Play Store kann die App vom Wireguard Development Team direkt heruntergeladen werden.

Wireguard App auf Android Handy herunterladen

Wenn Du die Wireguard App gestartet hast, müssen wir die Konfiguration des Client übertragen. Hierzu kann auf dem Server eine QR-Code mit der Handy1 Konfiguration angezeigt werden, das vom dazugehörigen Handy eingescannt wird.

Mit den folgenden Kommandos lässt sich der QR-Code auf dem Wireguard Server erzeugen:

root@rockpi-4c:~# sudo apt install qrencode
root@rockpi-4c:~# qrencode -t ansiutf8 -r /etc/wireguard/handy1-wg0.conf
Wireguard QR Code für Transfer der Konfiguration auf das Handy

Eine Prüfung der Konfiguration und Syntax erfolgt beim Einscannen mit dem Handy. Anschließend kann man einen Tunnel Namen vergeben. Wenn wir bei dieser Konfiguration den Endpoint “ Endpoint = [2a02:908:2e30:9fe0:e0ce:d6ff:fe72:eac7]:51820 “ mit der Public IP verwendet haben, können wir den Tunnel aktivieren und die Verbindung wir hergestellt. In der App als auch auf dem Server mit dem Kommand # sudo wg wird die Verbindung und der Datentransfer angezeigt. Außerdem erscheint in der App ein Schlüssel Symbol in der Benachrichtigungszeile.

Wireguard Tunnel ist up and running

Damit haben wir einen aktiven Tunnel zwischen dem Handy und dem Hausnetzwerk. Somit können wir auf unsere Hausautomation von Homematic IP CCU3 über den Browser im Handy direkt aufrufen.

Dynv6 Domain für Wireguard Endpoint einrichten

Da sich ja auch die IPv6 Addressen in regelmäßigen Abständen durch den Provider veränder, müssen wir hier mit einer Domain arbeiten. Der DSL Provider ändert in bestimmten Zyklen den Präfix der IPv6. Somit sieht nach der Änderung unsere IPv6 Adresse anders aus und unser Wireguard Endpunkt hat somit eine neue Adresse.

Der Service von Dynv6.com ist für das Anlegen einer Domain kostenlos. Nachdem Du dich registriert hast kannst Du eine neue Zone erstellen. Dabei wählst Du dir eine Domain aus und trägst nur die IPv6 des Wireguard Endpunktes ohne Port Nummer ein. Die erstellte Domain muss dann in die Handy1-wg0.conf Datei eingetragen werden.

dynv6 Domain einrichten für den Zugriff bei einem DS-Lite Anschluss mit VPN Wireguard Tunnel zum Handy

Nun müssen wir der Domain regelmäßig mitteilen, wenn sich die IP Adresse von unserem Wireguard Server geändert hat. Sieht man sich die Domain unter „Status“ an, steht im Bereich „Instructions“ alle notwendigen Infos um den API Call zusammenzustellen, um die IPv6 Adresse zu aktualisieren. Zum einen findet sich dort das Snippet:

protocol=dyndns2
server=dynv6.com
login=none
password='zB5AQeUr9xKvZsExDXqyABM4xxuURDX'
wireguard-endpoint.dynv6.net

sowie die Update URL, wobei der <username> dem oben genannten password entspricht:

http://dynv6.com/api/update?hostname=<domain>&token=<username>&ipv6=<ip6addr>

# Für meine Domain
http://dynv6.com/api/update?hostname=wireguard-endpoint.dynv6.net&token=zB5AQeUr9xKvZsExDXqyABM4xxuURDX&ipv6=2a02:908:2e30:9fe0:e0ce:d6ff:fe72:eac7

Wenn Du Deine URL zusammengebaut hast, kannst Du diese in jedem Browser testen. Hast Du diesen String dort eingibst erhältst du die Information „addresses updated“ wenn die URL richtig ist.

Über ein bash Script und als Cron Job eingebunden erfolgt die Aktualisierung und Übertragung der IPv6 an die Domain alle 5 Minuten. Die aktuelle IPv6 vom Wireguard Server kann mit dem curl Kommando ausgelesen werden:

root@rockpi-4c:~# curl -s v6.ident.me

Für die Erstellung des bash Scripts die folgenden Befehle ausführen und anschließend die Rechtevergabe ausführen. Folgender Code in die Datei dynv6-update.sh einfügen:

root@rockpi-4c:~# nano /usr/local/bin/dynv6-update.sh
root@rockpi-4c:~# sudo chmod +x /usr/local/bin/dynv6-update.sh

#!/bin/bash
####################################################################################
# script zum update von dynv6
#
# protocol=dyndns2
# server=dynv6.com
# login=none
# password='zB5AQeUr9xKvZsExDXqyABM4xxuURDX'
# wireguard-endpoint.dynv6.net
# ------------------------------------------
# URL:
# http://dynv6.com/api/update?hostname=<domain>&token=<username>&ipv6=<ip6addr>
#
# IP vom Rock4 server:  2a02:908:2e30:9fe0:e0ce:d6ff:fe72:eac7
# Datum: 15.03.2023  www.Meine-Gartenbewaesserung.de
####################################################################################
#configure
Domain="wireguard-endpoint.dynv6.net"
MyToken="zB5AQeUr9xKvZsExDXqyABM4xxuURDX"

MeineIpV6=$(curl -s v6.ident.me)
# echo $MeineIpV6

# send addresses to dynv6
curl "http://dynv6.com/api/update?hostname=$Domain&ipv6=$MeineIpV6&token=$MyToken"

# echo "script ausgeführt"

Der Cron Job wird erstellt und alle 5 Minuten ausgefürt:

root@rockpi-4c:~#  crontab -e
# folgende Zeile einfügen:
*/5  * * * *  /usr/local/bin/dynv6-update.sh

Nun ist die Gesamte Installation des Wireguard VPN Tunnel abgeschlossen und die Hausautomation von Überall per Handy erreichbar.

In meinem Blog findest Du weitere Informationen für den Aufbau meiner automatischen Gartenbewässerung

Auf meinem YouTube Channel findest Du weitere Informationen.

Du befindest Dich auf meinem Blog: Bei DS-Lite Anschluss (nur IPv6) einen VPN Wireguard Tunnel zum Handy herstelle

Die folgenden Themen können Dich auch interessieren:

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert