我有一台电脑,有两个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
,那么您需要将调整命令添加到预先存在的脚本中,这可能需要额外的注意,具体取决于这些脚本的作用。