我有 CentOS 7.6 版本,并且安装了测试 Wireguard VPN 服务器。整个安装和配置非常简单,至少根据文档是这样,所以我做了什么,我安装了wireguard-tools、wireguard-dkms和linux-headers
下一步是,我生成服务器的私钥和公钥,并将服务器的配置编写为:
[Interface]
Address = 10.7.0.1/24
ListenPort = 34777
PrivateKey = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
[Peer]
PublicKey = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
AllowedIPs = 10.7.0.2/32
[Peer]
PublicKey = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
AllowedIPs = 10.7.0.3/32
[Peer]
PublicKey = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
AllowedIPs = 10.7.0.4/32
[Peer]
PublicKey = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
AllowedIPs = 10.7.0.5/32
从服务器端,我在防火墙上打开端口 34777 udp,并设置 sysctl -w net.ipv4.ip_forward (以启用转发),因为该服务器应该将流量从客户端转发到 VPN 服务器子网中的其他服务器。现在假设该服务器的公共IP是11.11.11.11/23
在客户端,配置如下所示:
[Interface]
Address = 10.7.0.4/24
PrivateKey = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
[Peer]
PublicKey = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
AllowedIPs = 10.7.0.1/32,11.11.11.0/23 (for having route to 11.11.11.0/23 subnet) or 0.0.0.0/0
Endpoint = 11.11.11.11:34777
现在0.0.0.0/0意味着我将把所有流量转发到我的VPN(这不是强制性的),它可以是一个分割隧道....我不明白,当我连接时,我可以ping通服务器的接口10.7.0.1,但我无法从网络 11.11.11.0/23 ping 任何内容。由于网络 11.11.11.0/23 是公共网络,因此没有 NAT。另外值得一提的是,在 CentOS 上我使用 firewalld 而不是 iptables。
我如何以及为什么看不到隧道接口后面的内部网络?
PS 在图中,在主机 A 和 Wireguard 服务器之间,还有另一个 linux 路由器(主路由器),所以请记住这一点。
答案1
经过如此多的尝试和失败以及与wireguard IRC chanel人员的集思广益之后,显然我忘记了为wireguard后面的每个服务器添加10.7.0.0/24的静态路由。 Ping 发送到服务器,但不会返回,因为服务器不知道将该回显回复发送到哪里:
ip route add 10.7.0.0/24 via 11.11.11.11 dev eth0 (main device for communication)
对我来说,问题解决了;-)
答案2
我遇到了同样的问题 - 我的服务器又名“Wireguard SRV”在图表中(= Centos8,带有 iptables 和 ferm)不路由流量。
问题:我忘记了sysctl -w net.ipv4.ip_forward=1
。
但这不是唯一的问题——ip route add ...
不是解决方案。
/etc/wireguard/wg0.conf
所以我将这些行添加到我的wireguard-config中(根据您的地址位于):
[Interface]
// ...
PreUp = iptables -A POSTROUTING -s 10.7.0.0/24 -o eth0 -j SNAT --to-source 11.11.11.11 -t nat
PreDown = iptables -D POSTROUTING -s 10.7.0.0/24 -o eth0 -j SNAT --to-source 11.11.11.11 -t nat
答案3
需要像wg0一样启用wg intf自转发
iptables -I FORWARD -i wg0 -o wg0 -j ACCEPT