首页 > 解决方案 > Wireguard 连接后无法上网

问题描述

我知道这个具体问题有很多问题,但相信我,我已经尝试了我所掌握的一切。连接到 Wireguard 并建立成功的握手后,我没有互联网连接。我将描述到目前为止我尝试过的所有事情,但没有运气。

我正在使用 Google Cloud 中的虚拟机和物理 Windows 机器作为客户端。

这是我的服务器配置(Google Cloud VM)的样子:

[Interface]
Address = 10.100.100.1/24
SaveConfig = true
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
ListenPort = 51820
PrivateKey = PRIVATE_KEY

[Peer]
PublicKey = CLIENTS_PUBLIC_KEY
AllowedIPs = 10.100.100.2/32

这是我的客户端连接的样子:

[Interface]
PrivateKey = CLIENTS_PRIVATE_KEY
Address = 10.100.100.2/32

[Peer]
PublicKey = SERVER_PUBLIC_KEY
AllowedIPs = 0.0.0.0/0
Endpoint = BASTION_SERVER_PUBLIC_IP:51820

我在修改/etc/sysctl.conf文件并取消注释以下行的云 VM 中启用了 IPV4 转发:

net.ipv4.ip_forward=1

由于这是一个带有外部防火墙的云环境,所以我手动将规则添加到云防火墙的 51820 端口。之后我可以成功握手,但客户端没有互联网。

  1. 我检查了服务器本身是否可以访问互联网,确实如此。
  2. 在客户端禁用了我的整个防火墙,因为我认为它可能会干扰某些事情。
  3. 我在另一篇文章中读到有人建议明确添加 MTU 值。Google 使用的 MTU 值为 1460,这显然与 Wireguard 的默认值不同。我已经将它添加到客户端和服务器配置中,但没有运气。
  4. 明确说明客户端配置中的 DNS 记录。仍然没有运气。
  5. 启用 UFW 并明确放置 Wireguard - 51820 所需的端口。

关于这一切,我有什么遗漏吗?我已经尝试了所有我能得到的东西,但握手后仍然没有来自客户端的互联网连接。

先感谢您!

更新 1

我已按照建议启用了 IP 转发:

在此处输入图像描述

完成此配置后,我可以在服务器端看到握手成功:

peer: PUBLIC_KEY
  endpoint: CLIENT_IP:56507
  allowed ips: 10.100.100.2/32
  latest handshake: 4 minutes, 11 seconds ago
  transfer: 52.60 KiB received, 344 B sent

它还显示它接收到 52.60 KiB 的数据。这是以前不在这里的。

然而问题仍然存在。我仍然无法从客户端访问互联网。

标签: google-cloud-platformgoogle-compute-enginevpnwireguard

解决方案


默认情况下,Google Cloud 会对数据包执行严格的源和目标检查,以便:

  • VM 实例只能发送源设置为与其在网络中的接口的内部 IP 地址相匹配的数据包。
  • 只有当数据包的目的地与网络中实例接口的 IP 地址匹配时,数据包才会被传递到实例。

创建 VM 时,您必须启用IP 转发。这在创建 VM 后无法更改。

为实例启用 IP 转发


推荐阅读