这个问题在超级用户中被标记为非主题,所以我认为这里是一个更适合我的问题的社区。
问题
自从我在 Google VPS 上设置了 Wireguard 后,所有客户端与任何 Google 网站(搜索引擎、YouTube 等)的 HTTPS 连接都会在 TLS 握手时超时。ping、curl 都没有问题http://google.com或其他网站上的 HTTPS。此问题可能是什么原因造成的?我该如何解决?
例子
$ curl -v https://google.com
* Trying 172.217.23.110:443...
* TCP_NODELAY set
* Connected to google.com (172.217.23.110) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
* CAfile: /etc/ssl/certs/ca-certificates.crt
CApath: none
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* OpenSSL SSL_connect: Connection reset by peer in connection to google.com:443
* Closing connection 0
curl: (35) OpenSSL SSL_connect: Connection reset by peer in connection to google.com:443
服务器配置:
[Interface]
Address = 192.168.3.1/32
ListenPort = 51820
PrivateKey = <server private key>
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o ens4 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
[Peer]
PublicKey = <client public key>
AllowedIPs = 192.168.3.2/32
客户端配置
[Interface]
Address = 192.168.3.2
PrivateKey = <client private key>
DNS = 1.1.1.1
[Peer]
PublicKey = <server public key>
AllowedIPs = 0.0.0.0/0, ::/0
Endpoint = <server address>:51820
答案1
已证实@iXerK在评论部分,该问题与 GCP 无关,而是由于接口 MTU 较低导致的:
由于某种原因,
wg-quick
设置了一个具有非常低 MTU 的接口。自从我在 WireGuard 的配置中更改了它之后,一切似乎都正常了。
答案2
我遇到了同样的问题。有些网站无法在浏览器中打开,并且命令wget
出现如下错误:
Unable to establish SSL connection.
按照以下步骤操作后,问题得到解决:
ip a
运行命令WireGuard 服务器并注意MTU 大小为了WireGuard 接口(wg0
在此示例中):[...] 8: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1380 qdisc [...] [...]
在客户端上编辑
/etc/wireguard/wg0.conf
文件并在部分下添加如下配置行[Interface]
:MTU = 1380
此处的数字
1380
应与第一步获得的数字相同(或更低)。在客户端重启界面:
wg-quick down wg0 ; wg-quick up wg0
答案3
我有一个类似的设置:
- 从公司网络到 Google Cloud 的站点到站点 wireguard
- 在 Google Cloud 中,我们有一个运行 wireguard 和firewalld 的小型 Linux VM
- 我们仅使用此 wireguard 连接来访问 Google Cloud 中的服务
- 我们添加了路由,以便通过 wireguard 服务器转发 Google 网络内的私有 IP
连接正常,但如果不调整 MTU 并在 Google 云端的 wireguard 设置中添加 iptables 规则,TLS 就无法正常工作:
[Interface]
Address = ...
PostUp = iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
PostDown = iptables -D FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
PrivateKey = ...
MTU = 1200
此 MTU 小于推荐值 1280,但我们遇到了一些流量问题,即使 TLS 使用 1280。
我们(目前)还未通过此连接路由 IPv6。IPv6 可能需要更大的 MTU。
我不明白为什么我们需要这么低的 MTU。使用其他 wireguard 隧道(远程工作人员到公司网络),我们没有遇到任何问题。