我的系统中有 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.1
VPN 服务器公共 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。