我有一台電腦,有兩個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-up
和route-pre-down
鉤子呼叫它們。
根據您實際使用 OpenVPN 的方式,您需要從命令列執行openvpn
指定--route-up script-that-adjusts-routing.sh
和--route-pre-down script-that-undoes-routing.sh
(也可能還),或將這些設定新增至 隧道的--script-security 2
OpenVPN 檔案。.conf
如果您已經有route-up
腳本route-pre-down
,那麼您需要將調整命令新增到預先存在的腳本中,這可能需要額外的注意,這取決於這些腳本的作用。