通过 VPN 路由所有 eth1 流量

通过 VPN 路由所有 eth1 流量

我的系统中有 3 个网卡:eth0 (192.168.1.54)、eth1(192.168.1.55)、wg0 (VPN、192.168.99.1)

我正在寻找一种通过 wg0 (Wireguard VPN) 路由所有 eth1 流量(tcp 和 udp)的方法。

我想要实现的是,在我的手机/平板电脑/苹果电视等上,我将 eth1 地址设置为路由器,因此所有流量都应通过 VPN 重定向。

在远程端(它是一个 VPS),我有 eth0(主互联网)和 wg0(192.168.99.2)。

我目前所做的就是成功地在两侧设置了 Wireguard 接口(我可以互相 ping 通)。

路由表:

default via 192.168.1.1 dev eth0 onlink 
192.168.1.0/24 dev eth0  proto kernel  scope link  src 192.168.1.54 
192.168.1.0/24 dev eth1  proto kernel  scope link  src 192.168.1.55 
192.168.99.0/24 dev wg0  proto kernel  scope link  src 192.168.99.1 

答案1

您不需要两个以太网接口。定义一条通往192.168.1.1VPN 服务器公共 IP 的主机路由,并将默认路由指向隧道的远程端 ( 192.168.99.2)。使 LAN 上其他设备上的默认路由指向192.168.1.54。请记住在您的 PC 上启用数据包转发 ( sysctl net.ipv4.ip_forward net.ipv4.ip_forward = 1)。

编辑:您无法使用 IPv4 经典路由实现您正在寻找的解决方案,因为经典路由只关心数据包的去向,而不关心其历史记录,例如在哪个接口上接收到的数据包或源地址。您必须使用策略路由才能根据接收数据包的接口对数据包进行分类。根据此分类,您可以使用备用路由表进行路由,例如定义通过 VPN 隧道的默认路由。

要使用策略路由,您应该将条目 (vpn) 添加到/etc/iproute2/rt_tables

#
# reserved values
#
255     local
254     main
253     default
0       unspec
#
# local
#
1       vpn

vpn这为 1 号路由表提供了名称。

接下来,添加以下策略规则:

ip rule add unicast iif eth1 table vpn

该规则有效地表示“如果数据包进入接口eth1,则使用路由表vpn”。

您可以通过以下方式检查规则ip rule show

ip rule show
0:      from all lookup local 
32765:  from all iif eth1 lookup vpn 
32766:  from all lookup main 
32767:  from all lookup default

规则按升序应用,直到规则匹配。如果在 interfave 上收到数据包eth1,则规则 32765 匹配,否则尝试下一个规则。

您现在可以将路由添加到vpn路由表中。例如,要将默认路由添加到隧道:

ip route add default dev wg0 via 192.168.99.2 table vpn

要打印vpn路由表,请使用

ip route show table vpn

现在,我还无法实际测试这一点,因此可能存在错误或缺少一些细节。有关策略路由的更多信息,请参阅https://www.policyrouting.org或者https://linux-ip.net

相关内容