使用 openvpn 分离两个 tun+ 设备之间的流量

使用 openvpn 分离两个 tun+ 设备之间的流量

我正在运行两个 OpenVPN 客户端,因此tun配置了两个接口。

每个tun接口都有不同的子网。假设其中一个接口tun1有一条默认路由,因此我的大部分流量都经过那里。

然而,我的tun0接口没有默认路由,因此只有发送到其子网的数据包才会通过此接口路由。

问题是应该通过tun0=>的数据包实际上eth0正在通过tun0=> tun1=> eth0。这确实有意义,因为tun1它被用作默认设备。

如何防止专用网络中的数据包通过两个 VPN 路由,并使其仅通过其中一个 VPN 路由?

更新:

这是我当前的路由表:

0.0.0.0/1 via 10.4.102.81 dev tun1 
default via 192.168.10.1 dev eth0  proto static 
10.4.0.1 via 10.4.102.81 dev tun1 
10.4.102.81 dev tun1  proto kernel  scope link  src 10.4.102.82 
10.176.128.0/18 via 172.29.2.77 dev tun0 
10.177.0.0/18 via 172.29.2.77 dev tun0 
10.177.128.0/18 via 172.29.2.77 dev tun0 
10.178.0.0/16 via 172.29.2.77 dev tun0 
10.179.0.0/16 via 172.29.2.77 dev tun0 
10.180.0.0/16 via 172.29.2.77 dev tun0 
10.181.0.0/16 via 172.29.2.77 dev tun0 
10.183.0.0/16 via 172.29.2.77 dev tun0 
46.165.208.65 via 192.168.10.1 dev eth0 
128.0.0.0/1 via 10.4.102.81 dev tun1 
172.29.0.0/22 via 172.29.2.77 dev tun0 
172.29.2.77 dev tun0  proto kernel  scope link  src 172.29.2.78 
172.31.0.0/22 via 172.29.2.77 dev tun0 
192.168.10.0/24 dev eth0  proto kernel  scope link  src 192.168.10.76  metric 1 

答案1

您应该为远程 VPN 服务器(tun0 的)添加一条路由:

ip add route $ip_of_the_vpn_server via 192.168.10.1 dev eth0

或者更一般地说:

ip add route $(ip route get $ip_of_the_vpn_server | head -n1)

在启动 VPN 之前。

这将确保发送到此 VPN 服务器的所有数据包都将通过您的非 VPN 默认路由发送。

相关内容