iptables leitet den Verkehr über VPN um

iptables leitet den Verkehr über VPN um

Netzwerk-Neuling. Ich habe zwei Schnittstellen auf dem Host: eth0und tun0von 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. tun0Wird 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.170war die Gateway-Adresse für VPN (gefunden mit ip route).

  1. Das obige Beispiel erstellt eine NEW ( -N)-Kette für die NAT-Tabelle ( -t).
  2. Der Sprung zur VPN-Kette erfolgt von OUT(direkt nach der lokalen App). Verwenden Sie insert ( -I), um andere Regeln in OUT zu ersetzen.
  3. Dies bedeutet, dass für Datenverkehr von einer beliebigen Quelle das Ziel zum Gateway des tun0Geräts geändert wird.

Frage 2a

Ist die Zieladresse für ausgehenden Datenverkehr die IP-Adresse der Schnittstelle eth0oder die Gateway-Adresse? Angenommen, eth0es 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 iptablesKetten (am Ende der Antwort).

Sicherung

iptables-save > back.up.file

Suchen Sie nach Ihrer Variante der Linux-Distribution. Ich musste es hinzufügen, sudoda ich kein Root war.

Zu Frage 2a und b

Zur Ermittlung von Quell- und Zieladressen habe ich die Funktionen LOGund TRACEsehr 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, filteraber 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"

TRACEZweitens 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 ( eth0und 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 iproute2durch Ausführen von folgendem Befehl ermitteln:

ip route

Hier wird das Standard-Gateway angezeigt und welche Schnittstellen für welche Adressbereiche verwendet werden.

Paketflussdiagramm

iptables 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.1Linux:traceroute 1.1.1.1

Sie sind fertig!

verwandte Informationen