Linux VM 作为 Wireguard 路由器的路由问题

Linux VM 作为 Wireguard 路由器的路由问题

我有一台 Ubuntu 22.04 VM,我想将其用作 LAN 上设备的 Wireguard“路由器”。也就是说,家里的设备应该能够将 VM 设置为默认网关并通过 VPN 浏览互联网。我的家庭 LAN 是 10.0.0.0/22,VM 是 10.0.3.1。Wireguard 已在客户端模式下设置并正常工作,如果我在 VM 上使用 links2 浏览 whatismyip.com,我会获得 VPN 端点的正确 IP。我还在 VM 中启用了 ipv4 转发。

但是,如果我将虚拟机设置为家中另一台机器的默认网关,它就不起作用了。我可以从那台机器 ping 虚拟机,所以我假设这是虚拟机中的某种路由问题?

编辑:ip route报告以下内容,但 links2 仍然使用 VPN。路由表表明默认路由是通过我的家庭 LAN,但 links2 仍然通过 VPN 连接。怎么回事?缺少路由是我无法将 VM 设置为网关的原因吗?

% ip route                                                                                         
~ wireguard-client
default via 10.0.0.1 dev enp1s0 proto dhcp src 10.0.3.1 metric 100 
10.0.0.0/22 dev enp1s0 proto kernel scope link src 10.0.3.1 metric 100 
10.0.0.1 dev enp1s0 proto dhcp scope link src 10.0.3.1 metric 100 
10.0.0.2 dev enp1s0 proto dhcp scope link src 10.0.3.1 metric 100 

ip a

2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 52:54:00:f9:11:61 brd ff:ff:ff:ff:ff:ff
inet 10.0.3.1/22 metric 100 brd 10.0.3.255 scope global dynamic enp1s0
   valid_lft 85716sec preferred_lft 85716sec
inet6 fe80::5054:ff:fef9:1161/64 scope link 
   valid_lft forever preferred_lft forever
3: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000
link/none 
inet 10.49.0.2/32 scope global wg0
   valid_lft forever preferred_lft forever

traceroute 1.1.1.1

traceroute to 1.1.1.1 (1.1.1.1), 30 hops max, 60 byte packets
 1  10.49.0.1 (10.49.0.1)  148.011 ms  148.012 ms  147.992 ms <- VPN!
 2  * * *

当默认路由是通过 10.0.0.1 时,traceroute 怎么会通过 vpn 进行?!

答案1

这是路由问题。您可以执行以下操作之一:

  1. 远程工作组节点( 10.49.0.1) 添加通过另一 WireGuard 端到 LAN 的路由 ( 10.0.0.0/22 via 10.49.0.2)。还需要将其设置为允许整个 LAN 通过 WireGuard(例如,此对等端必须具有AllowedIPs = 10.49.0.2/32, 10.0.0.0/22)并允许对整个范围进行 NAT。

  2. 本地工作组节点10.49.0.2)添加 NAT iptables -t nat -A POSTROUTING -o wg0 -j MASQUERADE。它将把所有 LAN 请求映射到此节点的 WG IP,因此远程节点将不知道其对等节点后面有一个整个 LAN。

第一种方法总体上比较简洁,因为所有复杂性都集中在 VPN 网关(远程)上,并且系统中只有一个 NAT;本地节点将只执行隧道和路由。但是,第二种方法可能看起来更容易实现,因为它需要考虑的因素较少。

要检查(转储)当前防火墙配置,您可能只需运行iptables-save并检查输出。

最后,tcpdump它是您解决网络问题的好帮手。如果您无法弄清楚某些东西为什么会起作用,请开始捕获相关接口上的流量,看看它是否符合预期。例如,您可以查看 LAN 流量是否出现在远程 WG 节点上;我怀疑目前没有。或者您可以检查它是否按预期进行转换。

相关内容