Netzwerk-Neuling. Ich habe zwei Schnittstellen auf dem Host: eth0
und tun0
von meinem OpenVPN-Client. Die IP-Adressen sind:
eth0 192.168.1.22
tun0 10.1.0.8
Frage 1
FürausgehendDatenverkehr, indem Sie die Zieladresse in die von ändern. tun0
Wird dadurch die Verwendung des VPN gezwungen?
Nein, aber die Verwendung der Gateway-Adresse für tun0 funktioniert. Getestet mit Folgendem:
iptables -t nat -N VPN
iptables -t nat -I OUTPUT -j VPN
iptables -t nat -A VPN -p tcp -j DNAT --to-destination 10.1.0.170
Wo 10.1.0.170
war die Gateway-Adresse für VPN (gefunden mit ip route
).
- Das obige Beispiel erstellt eine NEW (
-N
)-Kette für die NAT-Tabelle (-t
). - Der Sprung zur VPN-Kette erfolgt von
OUT
(direkt nach der lokalen App). Verwenden Sie insert (-I
), um andere Regeln in OUT zu ersetzen. - Dies bedeutet, dass für Datenverkehr von einer beliebigen Quelle das Ziel zum Gateway des
tun0
Geräts geändert wird.
Frage 2a
Ist die Zieladresse für ausgehenden Datenverkehr die IP-Adresse der Schnittstelle eth0
oder die Gateway-Adresse? Angenommen, eth0
es handelt sich um die Standardschnittstelle/das Standardgateway.
Frage 2 b)
Was ist die Quelladresse für den von der lokalen App generierten Datenverkehr?
Frage 3
Kann dies allein durch iptables gelöst werden oder muss ich die Routing-Tabelle ändern? Da sich beide Schnittstellen auf demselben Host befinden (also auf derselben Debian-Box).
Zusätzliche Information
Ich versuche, die Prinzipien zu verstehen, damit ich sie auf meinen Fall anwenden kann. Es gibt insgesamt drei Subnetze, die ich adressiere, das dritte liegt im Bereich 172.17.42.1/16 und ist mit einer anderen virtuellen Schnittstelle verknüpft docker0
.
Im Wesentlichen möchte ich den Verkehr vonNur172.17.42.8 über das VPN.
Antwort1
In erster Linie ist die hervorragende Abbildung, auf die von der iptables-Seite des ArchLinux-Wikis verwiesen wird, hilfreich bei der Identifizierung des Paketflusses durch die verschiedenen iptables
Ketten (am Ende der Antwort).
Sicherung
iptables-save > back.up.file
Suchen Sie nach Ihrer Variante der Linux-Distribution. Ich musste es hinzufügen, sudo
da ich kein Root war.
Zu Frage 2a und b
Zur Ermittlung von Quell- und Zieladressen habe ich die Funktionen LOG
und TRACE
sehr hilfreich gefunden:
iptables -t filter -I OUTPUT -m limit --limit 5/m --limit-burst 10 -j LOG --log-prefix "ABC-LOG-PREFIX "
Die Standardtabelle ist, filter
aber ich habe sie explizit angegeben, damit Sie die Syntax sehen können, insbesondere wenn Sie andere Tabellen usw. untersuchen möchten. Ich habe die Regel eingefügt mangle
, weil ich wollte, dass Pakete protokolliert werden, bevor andere Regeln angewendet werden. Ich habe eine Ratenbegrenzung hinzugefügt, damit die Protokolldatei nicht überlastet wird . Schließlich wurde ein Präfix hinzugefügt, damit die Protokolldatei leicht durchsucht werden kann . Zum Beispiel unter Linux Mint:nat
-I
-m limit --limit 5/m --limit-burst 10
--log-prefix
cat /var/log/kern.log | grep "ABC-LOG-PREFIX"
TRACE
Zweitens verfolgt der Befehl zum Debuggen ein Paket durch den gesamten Prozess:
IPTABLES -t raw -A PREROUTING -p tcp -j TRACE
Achtung, dies wirdalleTCP-Pakete, weitere Informationen finden Sie unterAdmin Berlin
Frage 3
Da sich beide Schnittstellen ( eth0
und tun0
) auf demselben Host befanden, können Sie aus dem Paketfilterdiagramm unten erkennen, dass sie für ausgehenden Datenverkehr am selben Punkt beginnen. Welche Route ein Paket nimmt, wird durch das Standard-Gateway und die zugehörige Schnittstelle bestimmt. Dies lässt sich iproute2
durch Ausführen von folgendem Befehl ermitteln:
ip route
Hier wird das Standard-Gateway angezeigt und welche Schnittstellen für welche Adressbereiche verwendet werden.
Paketflussdiagramm
Antwort2
So wie ich das sehe, sprechen Sie von Split-Tunneling (oder eher von dem Versuch, es zu deaktivieren).
Sehen Sie sich die Redirect-Gateway-Direktive in OpenVPN an:https://openvpn.net/index.php/open-source/documentation/howto.html#redirect
Antwort3
In den folgenden Beispielen ist der VPN-Gerätename tun0 (OpenVPN) und das VPN-Gateway ist 172.21.23.172
#1 – Installieren Sie VPN auf Ihrem Linux-Router (ich verwende IPvanish mit OpenVPN)
#2 - Leiten Sie den Datenverkehr mit iptables weiter
sudo iptables -t nat -A POSTROUTING -o [VPN dev] -j MASQUERADE
Beispiel:
sudo iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
#3 - Routing-Tabellen konfigurieren (um sicherzustellen, dass der gesamte Datenverkehr über das VPN geleitet wird)
sudo ip route add default via [VPN ipv4 address] dev [VPN dev]
Beispiel:
sudo ip route add default via 172.21.23.172 dev tun0
#4 – Überprüfen Sie, ob die Geräte im Netzwerk tatsächlich über das VPN geroutet werden, indem Sie diese Befehle ausführen:
Windows: tracert 1.1.1.1
Linux:traceroute 1.1.1.1
Sie sind fertig!