Ich habe einen Computer mit zwei ETH-Schnittstellen und einer WLAN-Schnittstelle. Er ist außerdem mit einem VPN (OpenVPN) verbunden, hat also auch eine Tun0-Schnittstelle. Nun möchte ich sicherstellen, dass der gesamte VPN-Verkehr über die WLAN-Schnittstelle und nicht über Ethernet gesendet wird. Standardmäßig wird er über eth1 gesendet, soweit ich das beim Ausführen von sehen kann iftop
. Meine Routing-Tabelle finden Sie unten.
$ route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default Teltonika.lan 0.0.0.0 UG 100 0 0 eth1
default 192.168.222.1 0.0.0.0 UG 600 0 0 wlan0
link-local * 255.255.0.0 U 1000 0 0 eth0
172.89.0.0 * 255.255.255.0 U 0 0 0 tun0
192.0.2.1 192.168.222.1 255.255.255.255 UGH 600 0 0 wlan0
192.168.0.0 * 255.255.0.0 U 100 0 0 eth1
192.168.3.0 * 255.255.255.0 U 100 0 0 eth0
192.168.222.0 * 255.255.255.0 U 600 0 0 wlan0
Antwort1
ip rule
Unter Linux können Sie die Routing-Regeln mithilfe von und Befehlen anpassen ip route
. Letzterer ist ein erweitertes Äquivalent zum route
Befehl.
In Ihrem Fall können Sie das gewünschte Verhalten möglicherweise erreichen, indem Sie eine separate Routing-Tabelle erstellen, in der das Standard-Gateway auf wlan0
der Schnittstelle das einzige (oder jedenfalls bevorzugte) vorhandene Standard-Gateway ist, und dann eine Routing-Regel festlegen, die besagt, dass der gesamte von der tun0
Schnittstelle kommende Datenverkehr diese separate Routing-Tabelle verwenden soll.
Dies kann beispielsweise durch die folgenden beiden Befehle erreicht werden:
ip route add default via 192.168.222.1 table 100 # <-- 100 is an arbitrary number for the separate routing table
ip rule add iif tun0 table 100
Um sie zu löschen, verwenden Sie:
ip rule del iif tun0 table 100
ip route flush table 100
Sie können die Befehle nach der Einrichtung des VPN live testen und prüfen, ob alles wie vorgesehen funktioniert.
Dann möchten Sie diese Befehle (oder ihr bestes Äquivalent für Ihr Gesamt-Setup) möglicherweise bei openvpn
Bedarf ausführen lassen. Am einfachsten ist es, diese Befehle in zwei Skripte (jeweils) einzufügen und sie dann über OpenVPNs route-up
und route-pre-down
Hooks aufzurufen.
Je nachdem, wie Sie OpenVPN tatsächlich verwenden, müssen Sie es entweder openvpn
unter Angabe von --route-up script-that-adjusts-routing.sh
und --route-pre-down script-that-undoes-routing.sh
(und möglicherweise auch --script-security 2
) von der Befehlszeile aus ausführen oder diese Konfigurationen in die OpenVPN- .conf
Datei Ihres Tunnels einfügen.
Wenn Sie bereits route-up
über route-pre-down
Skripte verfügen, müssen Sie die Anpassungsbefehle stattdessen zu Ihren bereits vorhandenen Skripten hinzufügen. Je nachdem, was diese Skripte tun, ist dabei möglicherweise besondere Sorgfalt erforderlich.