You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WireGuard树莓派客户端无法访问家庭服务器网络的问题排查求助及解决方案

WireGuard树莓派客户端无法访问家庭服务器网络的问题排查求助及解决方案

大家好,我现在遇到了WireGuard客户端连接的棘手问题,实在摸不着头绪,来求助各位大佬!情况是这样的:我在家庭的树莓派#1上用Docker部署了WireGuard服务器,配置了两个Peer节点——一个是我的手机,另一个是放在异地网络里的树莓派#2。手机端的VPN用起来完全正常,但树莓派#2就是没法访问我家里的局域网,想请大家帮忙找找问题出在哪。

各设备配置信息

WireGuard服务器(树莓派#1)配置

[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

树莓派#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 route得到的输出:

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是树莓派#2的上网接口(正常运行),192.168.1.0/24是我想通过VPN访问的家庭局域网段

已尝试的排查步骤

  • 从树莓派#2 ping/traceroute家庭网络里的设备(192.168.1.0/24段),完全没有响应
  • ping/traceroute WireGuard服务器的VPN地址10.13.13.1也没反应
  • ping 8.8.8.8正常,应该是分流模式起作用了
  • 两边都执行wg-quick down wg0关闭VPN后,用netcat在51820端口通信,树莓派#2发的消息能被服务器正常接收,说明ISP防火墙没拦截这个端口
  • 在树莓派#2的AllowedIPs里添加了10.13.13.0/24,还是没用
  • 想开启WireGuard日志,执行了下面的命令,但目录不存在,应该是内核不支持:
    modprobe wireguard
    echo module wireguard +p > /sys/kernel/debug/dynamic_debug/control
    

因为手机端完全正常,我倾向于问题出在树莓派#2这边,而且netcat能通,应该不是ISP防火墙的问题?现在实在没思路了,求大佬帮忙!


抓包排查更新(感谢@Cpt.Whale的提示)

服务器端tcpdump结果

  • 用手机连接VPN时,能看到UDP包正常打到51820端口;
  • 用树莓派#2尝试curl家里设备的IP和端口时,完全看不到任何相关的VPN包。

树莓派#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

(注:这个域名是我替换后的隐私版,实际解析到我的公网IP)

  • 当尝试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

看起来是能正确指向VPN服务器的,但这个UDP校验错误是什么情况呢?


问题解决!

最后找到了可行的树莓派#2配置,只需要调整AllowedIPs字段,去掉对[public_IP]的单独指定,修改后的配置如下:

[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给出的解决方案!

备注:内容来源于stack exchange,提问作者rasphomie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 09:02:58