我有一个具有静态 IP 的服务器和一个位于我家本地网络中的客户端。我想要实现的是这两者之间的 VPN 连接(不过稍后可能会添加更多客户端)。我不需要能够通过 VPN 服务器连接到互联网,只需直接连接即可。
服务器运行的是Ubuntu 18.04 LTS,但我无法使用wireguard内核模块,因为该服务器是OpenVZ虚拟服务器,因此不允许修改内核。所以我在服务器上使用wireguard-go。看我之前的帖子以便就此事进行讨论。
服务器配置为
[Interface]
PrivateKey = ...
ListenPort = 51944
[Peer]
PublicKey = ...
AllowedIPs = 192.168.177.5/32
和
sudo ip addr add 192.168.177.4/32 dev wg0
设置其IP地址。
客户端(也是 Ubuntu 18.04 LTS)配置为
[Interface]
PrivateKey = ...
Address = 192.168.177.5/32
[Peer]
PublicKey = ...
AllowedIPs = 192.168.177.4/32
Endpoint = [static IP of my server]:51944
PersistentKeepalive = 25
并开始于
sudo wg-quick up wg0
在服务器和客户端的输出中sudo wg
,我可以看到握手有效。但尝试以任何一种方式 ping 都会导致评论提示永远等待。
有谁知道我可能有什么问题吗?
答案1
该问题似乎是客户端和服务器上的路由丢失,而不是 WireGuard 问题。
当服务器指定为 192.168.177.4/32 时,没有提供到 192.168.177.5/32 的路由。对于标准路由部分,如有疑问,请运行命令询问内核路由的去向。例如关于服务器:
ip route get 192.168.177.5
如果答案中没有给出 WireGuard 接口,则意味着路由不会使用它(并且隧道中不会有任何流量)。
可能的选择包括:
添加缺少的路线
sudo ip route add 192.168.177.5/32 dev wg0
以不同方式添加地址,以便包含自动路由并将由内核添加
具有对等地址
sudo ip address add 192.168.177.4 peer 192.168.177.5/32 dev wg0
或者至少是 /31(以便将 192.168.177.5 包含在路由中)。 /24 也可以
sudo ip address add 192.168.177.4/31 dev wg0
或者简单地将地址添加到配置中,例如 /31,因为它是最简单的,或者任何更大的地址,例如 /24。服务器和客户端具有相同的角色,没有理由使用不同的方法配置它们的地址。
Address = 192.168.177.4/31
同样,更正客户端配置:
Address = 192.168.177.5/31
标准路由和WireGuard 的加密密钥路由(使用 进行选择AllowedIPs
,对于此处的此设置是正确的)对于工作结果必须是正确的。如果添加更多对等点,您可能必须使用更宽的路由,但保留更严格的AllowedIPs
设置,因为加密密钥路由需要。