搭建wireguard服务时遇到了这个问题,中心节点和从节点之间均能ping通,但是从节点之间无法ping通。花了挺长时间才找到解决办法,特此记录一下。
首先看看中心节点的配置,我的如下
#/etc/wireguard/wg0
[Interface]
PrivateKey = <server_privatekey>
Address = 10.0.8.1
PostUp = iptables -I FORWARD -i wg0 -o wg0 -j ACCEPT
PostDown = iptables -D FORWARD -i wg0 -o wg0 -j ACCEPT
ListenPort = 14451
DNS = 8.8.8.8
MTU = 1280
[Peer]
PublicKey = <peer1_publickey>
AllowedIPs = 10.0.8.2/32
[peer]
PublicKey = <peer2_publickey>
AllowedIPs = 10.0.8.3/32
两个peer也配置好之后,peer之间无法ping通。
网上的说法是添加对应的PostUp的iptables脚本,这里添加了 iptables -I FORWARD -i wg0 -o wg0 -j ACCEPT
,但是实测没有效果。
后来在万能的 stackoverflow
上找到了解决方法:Can I make Wireguard VPN peers to talk to each other?
ping不通的原因是中心节点的 ip_forward
功能没有开启。
要开启也很简单,输入 nano /etc/sysctl.conf
,把 net.ipv4.ip_forward = 0
修改为 net.ipv4.ip_forward = 1
,如果被注释了就取消注释。
然后输入 sysctl -p /etc/sysctl.conf
,回车。现在从节点之间就可以互相ping通了。