Ich habe zwei isolierte Heimnetzwerke. Eines ist mit dem Internet verbunden und ein zweites für nicht verbundene IOT-Geräte.
Ich habe einen Ubuntu-Server mithilfe separater Netzwerkkarten mit beiden Netzwerken verbunden.
Ich habe überprüft, dass ich von diesem Server aus auf Daten von Geräten in beiden Netzwerken zugreifen kann (mithilfe der guten alten Methode curl
zum Abrufen von HTTP-Anfragen). Und ich kann von dort aus auch auf das Internet zugreifen.
Anschließend habe ich OpenVPN installiert und es gemäß den Anweisungen von eingerichtet.Serverplatz.
Im nächsten Schritt habe ich einen Client konfiguriert und konnte mich vom Internet aus mit diesem VPN-Server verbinden.
Wenn der Client verbunden ist, kann er auf das Internet und eines der internen Netzwerke zugreifen, nicht jedoch auf das andere.
vom VPN-Server route -n
erhalte ich bei der Ausführung Folgendes:
0.0.0.0 12.12.1.1 0.0.0.0 UG 100 0 0 eno1
0.0.0.0 13.13.0.1 0.0.0.0 UG 200 0 0 eno2
10.8.0.0 0.0.0.0 255.255.255.0 U 0 0 0 tun0
12.12.1.0 0.0.0.0 255.255.255.0 U 100 0 0 eno1
12.12.1.1 0.0.0.0 255.255.255.255 UH 100 0 0 eno1
13.13.0.0 0.0.0.0 255.255.255.0 U 200 0 0 eno2
13.13.0.1 0.0.0.0 255.255.255.255 UH 200 0 0 eno2
Der VPN-Client stellt eine Verbindung zum Netzwerk her 10.8.0.0
und ihm wird die IP-Adresse zugewiesen 10.8.0.2
.
Der verbundene VPN-Client:
- kann auf das Netzwerk zugreifen
12.12.1.0
- kann auf das Internet zugreifen.
- kann nicht auf irgendeine IP-Adresse von
13.13.0.0
... zugreifen
Was fehlt in meinen Konfigurationen, um den VPN-Clients den Zugriff auf dieses zweite Netzwerk zu ermöglichen?
Aktualisieren
Ich habe versucht, die NAT-Befehle aus dem Skript für eno2 (13.x) hinzuzufügen, aber es hat immer noch nicht funktioniert ... Ich habe die erstellte Datei /etc/iptables/add-openvpn-rules.sh
mit dem folgenden Inhalt geändert (der Teil vor dem Leerzeichen wurde automatisch vom Skript erstellt):
#!/bin/sh
iptables -t nat -I POSTROUTING 1 -s 10.8.0.0/24 -o eno1 -j MASQUERADE
iptables -I INPUT 1 -i tun0 -j ACCEPT
iptables -I FORWARD 1 -i eno1 -o tun0 -j ACCEPT
iptables -I FORWARD 1 -i tun0 -o eno1 -j ACCEPT
iptables -I INPUT 1 -i eno1 -p udp --dport 1194 -j ACCEPT
iptables -t nat -I POSTROUTING 1 -s 10.8.0.0/24 -o eno2 -j MASQUERADE
iptables -I FORWARD 1 -i eno2 -o tun0 -j ACCEPT
iptables -I FORWARD 1 -i tun0 -o eno2 -j ACCEPT
iptables -I INPUT 1 -i eno2 -p udp --dport 1194 -j ACCEPT
Beim Ausführen iptables -S
des Neustarts wurde mir folgendes angezeigt:
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A INPUT -i eno2 -p udp -m udp --dport 1194 -j ACCEPT
-A INPUT -i eno1 -p udp -m udp --dport 1194 -j ACCEPT
-A INPUT -i tun0 -j ACCEPT
-A FORWARD -i tun0 -o eno2 -j ACCEPT
-A FORWARD -i eno2 -o tun0 -j ACCEPT
-A FORWARD -i tun0 -o eno1 -j ACCEPT
-A FORWARD -i eno1 -o tun0 -j ACCEPT
Antwort1
Zunächst muss die Firewall auf dem VPN-Server (also die iptables-„FORWARD“-Kette) das Senden und Empfangen von Paketen zulassen.
Zweitens müssen alle Ihre Geräte Routen habenzurückan das VPN-Netzwerk, da sie sonst nur Pakete von den VPN-Clients empfangen, aber keine Möglichkeit haben, darauf zu antworten.
Beispielsweise würden die Geräte im Netzwerk 12.12.* (oder häufiger nicht die Geräte selbst, sondern das Gateway dieses Netzwerks) eine Route „10.8.0.0/24 über 12.12.1.1“ benötigen.
Wenn das nicht möglich ist, besteht Ihre Alternative darin, den VPN-Server SNAT (also Quelladressen-Maskierung) zwischen den beiden Netzwerken durchführen zu lassen. Mit SNAT werden alle Pakete von VPN-ClientsaussehenSie kommen tatsächlich vom VPN-Server selbst (also von 12.12.1.1) – der sich in Ihrem Fall im selben Netzwerk wie Ihre Geräte befindet und daher von den Geräten bereits erreicht werden kann.
Es scheint, dass das von Ihnen verwendete VPN-Installationsskript (daseine Mengeof things) fügt tatsächlich iptables SNAT-Regeln für eine Schnittstelle hinzu; Sie finden sie in /etc/iptables/add-openvpn-rules.sh
(Zeilen 963-977im Skript). Die entsprechenden Regeln sehen – unter Verwendung der iptables- MASQUERADE
Aktion – folgendermaßen aus:
iptables -t nat -I POSTROUTING 1 -s 10.8.0.0/24 -o $NIC -j MASQUERADE
und natürlich Regeln, die die Weiterleitung der Pakete grundsätzlich zulassen:
iptables -I FORWARD 1 -i $NIC -o tun0 -j ACCEPT
iptables -I FORWARD 1 -i tun0 -o $NIC -j ACCEPT
Da Sie zwei Netzwerke auf zwei Schnittstellen haben, müssen Sie diese Regeln duplizieren (oder auf andere Weise neu schreiben).