Wireguard Windows 客户端无法运行,而 Android 客户端运行正常

Wireguard Windows 客户端无法运行,而 Android 客户端运行正常

我已经在我的 VPS 上配置了 wireguard 服务器:

[Interface]
PrivateKey = <hidden>
Address = 10.8.0.1/24
ListenPort = 51820

[Peer]
PublicKey = <hidden>
PresharedKey = <hidden>
AllowedIPs = 10.8.0.2/32

[Peer]
PublicKey = <hidden>
PresharedKey = <hidden>
AllowedIPs = 10.8.0.3/32

猫/etc/sysctl.conf

net.ipv4.ip_forward=1

iptables -S

-P INPUT DROP
-P FORWARD DROP
-P OUTPUT ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -i wg0 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p udp -m udp --dport 51820 -j ACCEPT
-A FORWARD -i eth0 -o wg0 -j ACCEPT
-A FORWARD -i wg0 -o eth0 -j ACCEPT

iptables -S -t nat

-P PREROUTING ACCEPT
-P INPUT ACCEPT
-P OUTPUT ACCEPT
-P POSTROUTING ACCEPT
-A POSTROUTING -o eth0 -j MASQUERADE

下面是我的客户端配置,它在 Android 上运行良好:

[Interface]
PrivateKey = <hidden>
Address = 10.8.0.3/24
DNS = 94.140.14.14, 94.140.15.15

[Peer]
PublicKey = <hidden>
PresharedKey = <hidden>
Endpoint = <hidden>:51820
PersistentKeepalive = 25
AllowedIPs = 0.0.0.0/0

在 Windows 上,我只能 ping 服务器 (10.8.0.1),但没有互联网。我错过了什么?

更新型多巴胺。术语“无互联网”是指端口 80 和 443 上的 TCP 连接。Windows 客户端发送数据包,但未收到响应。使用另一个 wg 配置的同一客户端也运行正常。所以现在我认为这是 VPS 提供商的一些奇怪限制。那么,为什么 Android 客户端可以正常使用,而 Windows 却在同一时间失败了呢?

已解决(有点)。事实证明,添加MTU = 1280到客户端配置中可以解决问题。仍然需要详细解释发生了什么,因为这是我第一次遇到额外的 wg 设置。

UPD2。VPN 上传速度还有一个问题 - 速度极慢,大约 1-2 mbit。服务器上的上传速度还可以,大约 200 mbit。仍然不知道该服务器出了什么问题。在启用 VPN 的客户端上测量速度:

./speedtest

   Speedtest by Ookla

     Server: ORANGE FRANCE - Paris (id = 24215)
        ISP: OVH SAS
    Latency:    95.26 ms   (4.92 ms jitter)
   Download:    77.74 Mbps (data used: 107.6 MB)
     Upload:     3.09 Mbps (data used: 3.3 MB)
Packet Loss:    69.4% 

答案1

https://lists.zx2c4.com/pipermail/wireguard/2017-December/002201.html

据我所知,wireguard 接口上设置的 MTU 需要为:

  1. 比用于 wireguard 连接的同一主机上的以太网接口的 MTU 少 60(IPv4)/ 80(IPv6)字节(这里的 IP 协议版本指的是 使用的版本Endpoint=
  2. 小于或等于解封装数据包转发所通过的以太网接口的 MTU。

我不清楚它是否需要小于或等于另一台主机上的 wireguard 接口的 MTU,或者用于 wireguard 连接的该主机上的以太网接口的 MTU(如果它与上面的 2 不同)。

顺便说一句,您可能能够在使用 Linux 中的 iptables / nftables 进行(重新)封装之前将数据包分解成片段。据我所知,Wireguard 本身目前不提供此类功能。

答案2

降低 MTU 解决了我的 wireguard 问题。

我的 wireguard 问题是:我可以连接到 wirguard 服务器,并且可以 ping URL,但尝试浏览时,我只收到超时错误。网站的部分内容很少会显示出来,但无法完全加载。我只在 Windows 10 上遇到过这种情况。同一网络上的 Android 设备运行良好。降低 MTU 后,上传带宽没有问题 - 它与没有 VPN 时的情况类似 - 可能少了 5% - 可能是由协议开销造成的。

我尝试了两个商业 VPN 提供商,两个客户端(IVPN 和 Proton)都遇到了同样的问题。Proton 会测试 wireguard 并拒绝使用它,因为“网络不支持 wireguard”。IVPN 客户端将建立连接,但随后无法浏览 - 除非您像这样手动降低 MTU:

netsh interface ipv4 set subinterface ivpn mtu=1340 store=persistent

(可能 store=persistent 无论如何都无济于事)

要了解您的 MTU 大小:

Ping  yahoo.com -f -l 1492

它将以“数据包需要分段”进行响应,降低数字“1492”直到没有分段 - 在我的情况下 1340 有效。

要查看配置的 MTU:

netsh interface ipv4 show subinterface

相关内容