客户端数据包未到达 wireguard 服务器

客户端数据包未到达 wireguard 服务器

这是我的 wireguard 客户端配置:

[Interface]
Address = 9.0.0.2/32
PrivateKey = <private>

[Peer]
PublicKey = <server-pubkey>
Endpoint = <server-ip>:50123
PersistentKeepalive = 25
AllowedIPs = 9.0.0.0/24

我在 wireshark 中看到握手启动并且源地址和目标地址都是正确的,但我没有收到来自服务器的响应。

但是当我在服务器上运行 tcpdump -n -X -i ens160 udp port 50123 时,什么也没看到。我以为是防火墙出了问题,但事实并非如此。我尝试通过 socat 发送一些内容 socat udp:<server-ip>:50123 -,它成功了(tcpdump 打印了结果)。

但是服务器仍然无法接收来自 wireguard 客户端的数据包(数据报)。

我尝试使用 socat 作为中继来解决问题:

socat udp-listen:50123  udp:<server-ip>:50123 

Endpoint = <server-ip>:50123改为Endpoint = 127.0.0.1:50123

然后它就开始工作了。但是为什么它通过 socat 工作而不是使用直接连接呢?

我有以下版本:
客户端:wireguard-tools 1.0.20210914-1(archlinux)
服务器:wireguard-tools 1.0.20200513-1~20.04.2(Ubuntu 20.04 LTS)

附言:我在 android 上尝试了相同的客户端设置,并且成功了,archlinux 版本肯定存在一些问题。Dmesg 给出了以下信息(在 achlinux 上):

[12592.005135] wireguard: wg0: No peer has allowed IPs matching 239.255.255.250
[12595.005999] wireguard: wg0: No peer has allowed IPs matching 224.0.0.251
[12595.006217] wireguard: wg0: No peer has allowed IPs matching 224.0.0.251
[12595.014611] wireguard: wg0: No peer has allowed IPs matching 224.0.0.22
[12595.777939] wireguard: wg0: No peer has allowed IPs matching 224.0.0.22
[12596.007290] wireguard: wg0: No peer has allowed IPs matching 224.0.0.251
[12596.007428] wireguard: wg0: No peer has allowed IPs matching 224.0.0.251
[12596.817910] wireguard: wg0: Handshake for peer 43 (<server-ip>:50123) did not complete after 5 seconds, retrying (try 2)
[12596.817942] wireguard: wg0: Sending handshake initiation to peer 43 (<server-ip>:50123)

服务器的 IP 在哪里,<server-ip>但我必须对 IP 保密,所以我用这个关键字替换了它。

答案1

我认为您的问题出在客户端地址中的 /32。这样接口只能到达自身。请尝试以下方法:

[Interface]
Address = 10.0.0.2/24
PrivateKey = <private>

[Peer]
PublicKey = <server-pubkey>
Endpoint = <server-ip>:50123
PersistentKeepalive = 25
AllowedIPs = 10.0.0.0/24

相关内容