我请求您的帮助,因为我遇到了 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 访问的家庭网络。
这是我已经尝试过的:
- 从 rapsberry#2 ping 和 traceroute 到我位于 192.168.1.0/24 的家用设备之一,没有返回任何结果
- 从 raspberry#2 到 10.13.13.1 执行 ping 和 traceroute 操作没有返回任何结果
- 从 raspberry#2 到 8.8.8.8 的 ping 和 traceroute 运行良好,我想这要归功于分割隧道模式
- 在 raspberry#2 和 raspberry#1(wireguard 服务器)上都运行“wg-quick down wg0”,然后在两者之间的端口 51820 上运行 netcat。raspberry#2 发送的消息在 raspberry#1 上得到了很好的接收
- 在 raspberry#2 配置中的允许 IP 中添加 10.13.13.0/24,不会改变任何内容。
- 尝试使用下面的命令启用日志,但文件夹不存在,而且似乎我没有正确的内核
# 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 解析器时)。