wireguard - 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,但没有任何改变。
我做错了什么?
解决方案
问题出在服务器的接口 IP 地址中。正确的是
[Interface]
Address = 10.128.0.19/32
在我的情况下,子网部分应该是 32 而不是 24。
之后,连接工作良好。
推荐阅读
- gnuplot - 使用 gnuplot 连接来自不同文件的点
- java - 为什么在 Spring 中的 MultipartFile 对象上忽略 @Valid 注释?
- spring-boot - Liberty中的Spring Boot应用程序部署抛出Class cast异常
- laravel - 无法使用来自 iOS 的 Guzzle/Http 或 Curl 向 oauth/token 发送请求
- javascript - 流式图像
- eclipse - Eclipse 微配置文件指标 @Timed 确实测量时间,始终为 0
- jmeter - Jmeter:即使在参数化后也收到无效的令牌响应
- xml - 如何在 Linux 中解析相同命名的 XML 元素内容?
- javascript - 多个布尔值的 JavaScript 验证
- velo - wixcode:如何从桌面终端管理会员的数据集?