Ich habe zwei weit voneinander entfernte Orte mit jeweils einer öffentlichen IP-Adresse und möchte das LAN-Netzwerk dieser Orte so einrichten, als wären sie ein einziges. Das heißt, die Maschinen an Ort A können mit den Maschinen an Ort B kommunizieren und die an Ort B mit denen an Ort A.
An Ort A (10.0.2.1) habe ich einen ASUS AC 1200g+ und einen Raspberry Pi (10.0.2.60) mit OpenVPN-Server. Neue Clients bleiben in der Schnittstelle tun0 (10.8.0.1). In diesem Moment kann der Client (Ort B) mit dem LAN von Ort A kommunizieren, nur Verkehr mit Ziel 10.0.1.0/24 wird auf die Serverseite umgeleitet.
Jetzt möchte ich, dass Maschinen an Ort A (Server) mit dem LAN von Ort B kommunizieren können. Ich platziere eine Route in meinem Router, sodass alle Zielanfragen mit 10.0.1.0/24 an den Raspberry Pi VPN-Server umgeleitet werden, aber der Server weiß nicht, was er mit diesem Datenverkehr tun soll.
An Stelle B (10.0.1.1) habe ich einen ASUS AC86U mit ASUS Merlin-Firmware und aktiviere den OpenVPN-Client mit der Aktivierungsoption „Inbound Firewall“.
Antwort1
Ich habe ein ähnliches Setup, bei dem der Raspberry Pi der Client ist, aber das sollte nicht so wichtig sein. Haftungsausschluss: Es ist nicht ganz einfach einzurichten.
Ich verwende diese /etc/iptables/iptables.rules
Datei, um den Datenverkehr von OpenVPN-Verbindungen (normalerweise tun0
, aber tun+
alle) per NAT in die lokalen Netzwerke umzuleiten:
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -j MASQUERADE
COMMIT
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A FORWARD -i eth+ -o tun+ -j ACCEPT
-A FORWARD -i tun+ -o eth+ -j ACCEPT
COMMIT
Die OpenVPN-Konfiguration erfordert einen sog.Client-zu-Client-KonfigurationDiese beiden Zeilen in der OpenVPN-Konfiguration des Servers aktivieren die Funktion:
# use ccd-folder (per host configs)
client-to-client
# routing to office lan:
client-config-dir ccd
Diese client-config-dir
müssen manuell unter dem -Pfad erstellt werden, /etc/openvpn/...
in dem sich Ihre Konfiguration befindet. In diesem Ordner können Sie dann Textdateien für jeden Host erstellen. Die Dateibenennung ist wichtig: Überprüfen Sie im Systemprotokoll, wie OpenVPN Ihren Client aufruft (z. B. mit journalctl -xef --unit openvpn-server@somehost
oder in der openvpn-status.txt
Datei). Der Inhalt der Datei ist einfach:
ifconfig-push 10.10.99.18 255.255.255.255
iroute 192.168.0.0 255.255.0.0
würde es so konfigurieren, dass es bei jeder Verbindung dieselbe IP erhält ( 10.10.99.18
) und den VPN-Server so konfigurieren, dass er den Verkehr intern an 192.168.0.0/16
den Client mit dem Namen dieser Datei und der IP-Adresse weiterleitet. Das macht verständlich, warum wir noch keine gültige Netzwerkverbindung haben: Das liegt daran, dass das Hostsystem des VPN-Servers nicht weiß, dass der VPN-Tunnel zum Weiterleiten des Verkehrs für dieses Netzwerk verwendet werden kann ( netstat -rn4
). Also müssen wir den VPN-Server erneut konfigurieren und anfügen:
route 192.168.0.0 255.255.0.0
push "route 192.168.0.0 255.255.0.0"
um dem Server mitzuteilen, wohin er den Verkehr umleiten soll, 192.168.0.0/16
und um alle mit dem Server verbundenen Clients ebenfalls über die Route zu informieren – die Route wird an die Clients gesendet.
Für mein Setup habe ich den obigen Link verwendet, aber beim Schreiben dieser Antwort habe ich zwei interessante Links zu diesem Thema gefunden:
- https://community.openvpn.net/openvpn/wiki/RoutedLans
- https://forums.openvpn.net/viewtopic.php?t=26839
viel Glück :)