如何透過特定硬體介面路由所有 VPN 流量?

如何透過特定硬體介面路由所有 VPN 流量?

我有一台電腦,有兩個eth接口和一個wlan接口。它也連接到 VPN (openvpn),因此它也有一個 tun0 介面。現在,我想確保所有 VPN 流量都是使用 wlan 介面發送的,而不是透過乙太網路發送的。預設情況下,它會透過 eth1 發送,據我可以從運行中看到iftop。我的路由表如下。

$ 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

答案1

ip rule在 Linux 上,您可以使用和命令調整路由規則ip route。後一個命令是該route命令的更高級的等效命令。

在您的情況下,您可能會透過使用單獨的路由表來獲得所需的行為,其中wlan0介面上的預設網關是唯一(或首選)存在的預設網關,然後設定路由規則,聲明來自該tun0介面的所有流量都將使用這個單獨的路由表。

例如,可以透過以下兩個命令獲得:

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

要清除它們,請使用:

ip rule del iif tun0 table 100
ip route flush table 100

建立 VPN 後,您可以即時測試命令,並查看一切是否按預期運行。

然後,您可能希望在openvpn需要時執行這些命令(或對您的整體設定而言最好的等效命令)。為此,最簡單的方法是將這些命令(分別)放入兩個腳本中,然後透過 OpenVPNroute-uproute-pre-down鉤子呼叫它們。

根據您實際使用 OpenVPN 的方式,您需要從命令列執行openvpn指定--route-up script-that-adjusts-routing.sh--route-pre-down script-that-undoes-routing.sh(也可能還),或將這些設定新增至 隧道的--script-security 2OpenVPN 檔案。.conf

如果您已經有route-up腳本route-pre-down,那麼您需要將調整命令新增到預先存在的腳本中,這可能需要額外的注意,這取決於這些腳本的作用。

相關內容