我已经在我的 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 需要为:
- 比用于 wireguard 连接的同一主机上的以太网接口的 MTU 少 60(IPv4)/ 80(IPv6)字节(这里的 IP 协议版本指的是 使用的版本
Endpoint=
) - 小于或等于解封装数据包转发所通过的以太网接口的 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