Ziel ist, über einen eigenen OpenVPN-Server, der auf einem dedizierten Server betrieben wird, Zugriff auf das lokale Netzwerk Zuhause (Heimnetz) zu erlangen. Es soll möglich sein, sich von überall mit dem VPN zu verbinden (z.B. über ein Smartphone) und dann auf das Heimnetzwerk zuzugreifen.
Als Gateway zwischen dem VPN und dem Heimnetz verwenden wir einen Raspberry Pi.
Im Folgenden wird davon ausgegangen, dass bereits ein OpenVPN Server eingerichtet ist und sich mehrere Clients mit diesem verbinden können. Die Einrichtung ist in einem anderen Beitrag ausführlich beschrieben.
Im Beispiel verwendete IP-Bereiche und Adressen:
- 10.8.0.0/24 VPN
- 10.8.0.50 Raspberry Pi VPN-Gateway
- 192.168.1.0/24 Heimnetz
- 192.168.1.1 Router mit DNS-Server
- 192.168.1.50 Raspberry Pi VPN-Gateway
Wichtig
Es muss immer sichergestellt sein, dass alle Netze, die miteinander verbunden werden sollen, jeweils einen eigenen IP-Bereich haben. Ansonsten wird es zu Problemen beim Routing kommen und es ist kein Zugriff auf das jeweils andere Netz möglich.
Das Client-Zertifikat ist bereits als pi-vpn-gw
ausgestellt und die Client-Config liegt auf dem Raspberry Pi im Home-Verzeichnis als ~/pi-vpn-gw.ovpn
vor.
Einrichtung auf dem Raspberry Pi
Zuerst installieren wir OpenVPN und kopieren die Client-Config, wobei wir die Dateiendung auf .conf
ändern.
1 | sudo apt install openvpn |
Anschließend aktivieren wir das IP-Forwarding und die NAT-Regeln.
1 | sudo sysctl -w net/ipv4/ip_forward=1 |
Damit dies in Zukunft automatisch beim Systemstart passiert, erstellen wir dazu kurzes Skript /usr/local/sbin/openvpn-gateway-init.sh
sowie einen SystemD-Service /etc/systemd/system/openvpn-gateway-init.service
:
1 |
|
1 | [Unit] |
Anschließend machen wir das Skript noch ausführbar und aktivieren den SystemD-Service:
1 | sudo chmod +x /usr/local/sbin/openvpn-gateway-init.sh |
Nun erstellen wir noch einen Symlink für den OpenVPN SystemD-Service und starten diesen:
1 | sudo ln -s /lib/systemd/system/openvpn@.service /etc/systemd/system/openvpn@pi-vpn-gw.service |
Damit läuft der OpenVPN-Client nun permanent im Hintergrund und stellt die VPN-Verbindung wieder her falls diese abbrechen sollte.
Anpassung auf dem OpenVPN Server
Bei dem OpenVPN Server fügen wir der Server-Config die folgenden Einträge hinzu, sofern noch nicht vorhanden:
1 | # Verzeichnis für die Client-Configs |
Die Route zum Heimnetz in Zeile 5 ist optional und sollte nur aktiviert werden, wenn man von dem Host-System des OpenVPN Servers direkten Zugriff auf das Heimnetz benötigt, oder in der Config des OpenVPN Servers die Anweisung client-to-client
nicht enthalten ist.
Als 1. DNS-Server wird die IP des Routers im Heimnetz verwendet, wodurch es möglich wird über das VPN auch die Hostnamen der Geräte im Heimnetz zu verwenden. Als 2. und 3. DNS-Server nehmen wir die Cloudflare-DNS-Server, für den Fall dass der 1. DNS-Server mal nicht erreichbar ist.
Weiterhin legen wir eine Client-spezifische Config für unseren Client unter /etc/openvpn/ccd/pi-vpn-gw
auf dem Server an beziehungsweise ergänzen diese:
1 | # Feste IP für den Client (Client-IP Subnet) |
Abschließend noch ein Neustart des OpenVPN Servers.
1 | sudo systemctl restart openvpn |
Fertig!
Nachdem sich unser Raspberry Pi VPN Gateway nun mit dem OpenVPN Server verbunden hat, sollte es von jedem VPN-Client aus möglich sein jedes Gerät im Heimnetz zu erreichen.
Zum Testen kann man beispielsweise versuchen von einem Smartphone (mit ausgeschaltetem WLAN und aktivierten VPN) den Raspberry Pi (192.168.1.50) oder den Router im eigenen Heimnetz (192.168.1.1) zu erreichen.