问题

问题

这个问题在超级用户中被标记为非主题,所以我认为这里是一个更适合我的问题的社区。

问题

自从我在 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.

按照以下步骤操作后,问题得到解决:

  1. ip a运行命令WireGuard 服务器并注意MTU 大小为了WireGuard 接口wg0在此示例中):

     [...]
     8: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1380 qdisc [...]
     [...]
    
  2. 在客户端上编辑/etc/wireguard/wg0.conf文件并在部分下添加如下配置行[Interface]

     MTU = 1380
    

    此处的数字1380应与第一步获得的数字相同(或更低)。

  3. 在客户端重启界面:

     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 隧道(远程工作人员到公司网络),我们没有遇到任何问题。

相关内容