如何通过特定硬件接口路由所有 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,那么您需要将调整命令添加到预先存在的脚本中,这可能需要额外的注意,具体取决于这些脚本的作用。

相关内容