Wie leitet man den gesamten VPN-Verkehr über eine bestimmte Hardwareschnittstelle weiter?

Wie leitet man den gesamten VPN-Verkehr über eine bestimmte Hardwareschnittstelle weiter?

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 ruleUnter Linux können Sie die Routing-Regeln mithilfe von und Befehlen anpassen ip route. Letzterer ist ein erweitertes Äquivalent zum routeBefehl.

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 wlan0der Schnittstelle das einzige (oder jedenfalls bevorzugte) vorhandene Standard-Gateway ist, und dann eine Routing-Regel festlegen, die besagt, dass der gesamte von der tun0Schnittstelle 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 openvpnBedarf ausführen lassen. Am einfachsten ist es, diese Befehle in zwei Skripte (jeweils) einzufügen und sie dann über OpenVPNs route-upund route-pre-downHooks aufzurufen.

Je nachdem, wie Sie OpenVPN tatsächlich verwenden, müssen Sie es entweder openvpnunter Angabe von --route-up script-that-adjusts-routing.shund --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-downSkripte 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.

verwandte Informationen