首页 > 解决方案 > WireGuard:无法 ping 任何东西,握手成功时流量不通过

问题描述

我正在尝试在云虚拟服务器(Yandex 云)上设置 WireGuard VPN 服务器。

服务器配置:

[Interface]
Address = 10.128.0.19/24
MTU = 1500
SaveConfig = false
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE; ip6tables -A FORWARD -i wg0 -j ACCEPT; ip6tables -t >
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE; ip6tables -D FORWARD -i wg0 -j ACCEPT; ip6tables ->
ListenPort = 41820
PrivateKey = <cut>

[Peer]
PublicKey = 0fWTvnU+j4D4pXfv0hWtAJDatRj/DxgPH3zwrSbT7js=
AllowedIPs = 10.128.0.201/32

客户端配置:

[Interface]
PrivateKey = <cut>
Address = 10.128.0.200/32
DNS = 1.1.1.1, 1.0.0.1

[Peer]
PublicKey = g9HF8K1303CwDrYb0ga8/dBe8EY8tb3wlreO0lHA9iI=
AllowedIPs = 0.0.0.0/0
Endpoint = <cut>:41820
PersistentKeepalive = 25

我已经net.ipv4.ip_forward=1在服务器上启用了该选项。服务器位于公共云计算实例上。客户端是位于 NAT 后面的家庭网络中的 Android 设备。

当我打开隧道时,所有的通讯都停止了。我无法从设备 ping 任何东西。同时,我可以在 wg 输出中看到成功的握手:

interface: wg0
  public key: g9HF8K1303CwDrYb0ga8/dBe8EY8tb3wlreO0lHA9iI=
  private key: (hidden)
  listening port: 41820

peer: 0fWTvnU+j4D4pXfv0hWtAJDatRj/DxgPH3zwrSbT7js=
  endpoint: <cut>:38517
  allowed ips: 10.128.0.201/32
  latest handshake: 15 seconds ago
  transfer: 2.25 KiB received, 124 B sent

我无法 ping VPN 服务器内部 IP 地址 (10.128.0.19) 或任何公共 IP(如 1.1.1.1)。

服务器的ifconfig输出如下:

$ ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.128.0.19  netmask 255.255.255.0  broadcast 10.128.0.255
        inet6 fe80::d20d:1bff:fe98:a801  prefixlen 64  scopeid 0x20<link>
        ether d0:0d:1b:98:a8:01  txqueuelen 1000  (Ethernet)
        RX packets 16530  bytes 2016056 (2.0 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 12031  bytes 1483606 (1.4 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 177  bytes 14328 (14.3 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 177  bytes 14328 (14.3 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

wg0: flags=209<UP,POINTOPOINT,RUNNING,NOARP>  mtu 1500
        inet 10.128.0.19  netmask 255.255.255.0  destination 10.128.0.19
        unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  txqueuelen 1000  (UNSPEC)
        RX packets 145  bytes 16504 (16.5 KB)
        RX errors 54  dropped 0  overruns 0  frame 54
        TX packets 11  bytes 472 (472.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

服务器上的操作系统是 Ubuntu 20.04。

我尝试将客户端的 MTU 设置为 1500,但没有任何改变。

我做错了什么?

标签: wireguard

解决方案


问题出在服务器的接口 IP 地址中。正确的是

[Interface]
Address = 10.128.0.19/32

在我的情况下,子网部分应该是 32 而不是 24。

之后,连接工作良好。


推荐阅读