Wireguard 的对等连接问题

Wireguard 的对等连接问题

我请求您的帮助,因为我遇到了 Wireguard 对等连接问题。我不知道为什么。我的情况是这样的,我在 docker 上的 raspberry pi#1(家庭)上安装了 Wireguard 服务器。我配置了 2 个对等。1 个用于我的手机,1 个用于完全不同网络(不同位置)中的 raspberry#2。Wireguard VPN 在我的手机上运行良好。但在 raspberry#2 上,我无法访问我的家庭网络。

Wireguard 服务器端的配置:

[Interface]
Address = 10.13.13.1
ListenPort = 51820
PrivateKey = server_private_key
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth+ -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth+ -j MASQUERADE

[Peer] (myphone)
PublicKey = myPhone_public_key
PresharedKey = myphone_preshared_key
AllowedIPs = 10.13.13.2/32

[Peer] (raspberry#2)
PublicKey = raspberry#2_public_key
PresharedKey = raspberry#2_preshared_key
AllowedIPs = 10.13.13.3/32 

手机端配置

[Interface]
Address = 10.13.13.2
PrivateKey = myPhone_private_key
ListenPort = 51820
DNS = 1.1.1.1

[Peer]
PublicKey = server_public_key
PresharedKey = myphone_preshared_key
Endpoint = [public_IP]:51820
AllowedIPs = [public_IP], 192.168.1.0/24

raspberry#2端的配置

[Interface]
Address = 10.13.13.3
PrivateKey = raspberry#2_private_key
ListenPort = 51820
DNS = 1.1.1.1

[Peer]
PublicKey = server_public_key
PresharedKey = raspberry#2_preshared_key
Endpoint = [public_IP]:51820
AllowedIPs = [public_IP], 192.168.1.0/24, 10.13.13.0/24

树莓派#2 上的 ip 路由

default via 192.168.0.254 dev wlan0 proto dhcp src 192.168.0.140 metric 600
10.13.13.0/24 dev wg0 scope link
[public_IP] dev wg0 scope link
192.168.0.0/24 dev wlan0 proto kernel scope link src 192.168.0.140 metric 600
192.168.1.0/24 dev wg0 scope link

wg0 是 Wireguard 接口(已启动并正在运行)

wlan0 是互联网接入接口(已启动并正在运行)

192.168.1.0/24 是我想要通过 VPN 访问的家庭网络。

这是我已经尝试过的:

  1. 从 rapsberry#2 ping 和 traceroute 到我位于 192.168.1.0/24 的家用设备之一,没有返回任何结果
  2. 从 raspberry#2 到 10.13.13.1 执行 ping 和 traceroute 操作没有返回任何结果
  3. 从 raspberry#2 到 8.8.8.8 的 ping 和 traceroute 运行良好,我想这要归功于分割隧道模式
  4. 在 raspberry#2 和 raspberry#1(wireguard 服务器)上都运行“wg-quick down wg0”,然后在两者之间的端口 51820 上运行 netcat。raspberry#2 发送的消息在 raspberry#1 上得到了很好的接收
  5. 在 raspberry#2 配置中的允许 IP 中添加 10.13.13.0/24,不会改变任何内容。
  6. 尝试使用下面的命令启用日志,但文件夹不存在,而且似乎我没有正确的内核
# modprobe wireguard 
# echo module wireguard +p > /sys/kernel/debug/dynamic_debug/control

由于它在我的手机上运行良好,我倾向于认为问题出在 raspberry#2 端。由于 netcat 运行良好,我猜流量没有在 ISP 路由器防火墙级别被阻止,对吗?

现在我一头雾水。非常感谢您提供帮助。谢谢

根据@Cpt.Whale的评论进行更新:

服务器端的 tcpdump:

  • 当我用手机测试 VPN 时,我可以看到端口 51280 上有 UDP 包。
  • 当我使用 raspberry#2 进行测试时curl https://[home_asset_ip]:[port],我没有看到任何与 vpn 包相关的内容。

从客户端(raspberry#2)进行 tcpdump:

  • 我可以看到这个经常出现的请求: 10.13.13.3.51820 > fvbn-ghf1-1-284-225.w85-125.abo.wanadoo.fr.51820: [bad udp cksum 0x8057 -> 0x1324!] UDP, length 148

  • 当我尝试通过 curl 访问我的家庭资产时,我可以看到以下内容: 10.13.13.3.41874 > [home_asset_IP].[port]: Flags [S], cksum 0xd8f9 (incorrect -> 0xbdc6), seq 2392338409, win 64860, options [mss 1380,sackOK,TS val 811208298 ecr 0,nop,wscale 7], length 0

“fvbn-ghf1-1-284-225.w85-125.abo.wanadoo.fr”(我出于隐私原因更改了它)解析为我的公共 IP。因此它似乎尝试正确访问我的 VPN 服务器。但我该如何解释错误的 UDP 校验和?

更新:问题已解决

这是解决我的问题的 raspberry#2 配置:

[Interface]
Address = 10.13.13.3
PrivateKey = raspberry#2_private_key
ListenPort = 51820
DNS = 1.1.1.1

[Peer]
PublicKey = server_public_key
PresharedKey = raspberry#2_preshared_key
Endpoint = [public_IP]:51820
AllowedIPs = 192.168.1.0/24, 10.13.13.0/24

感谢@Cpt.Whale 抽出时间,并感谢@Justin Ludwig 提供解决方案。

答案1

不要将端点 IP 地址放在AllowedIPs设置中。AllowedIPs是您想要通过 WireGuard 隧道访问的 IP 地址/网络;如果将端点 IP 地址放在此列表中,则最终会出现路由循环。

你的 raspberry#2 的设置AllowedIPs应该是这样的:

AllowedIPs = 192.168.1.0/24, 10.13.13.0/24

此外,您不需要DNS在 WireGuard 配置中进行设置;只有当您想在 WireGuard 接口启动时和关闭时使用不同的 DNS 配置时才需要此设置(例如,当您想要使用只能通过 WireGuard 隧道本身访问的自定义 DNS 解析器时)。

相关内容