wireguard 會握手,但 ping 不通
我有一個具有靜態 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 都會使評論提示永遠等待。有誰知道問題可能是什麼?
該問題似乎是客戶端和伺服器上缺少路由,而不是 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
設置,因為加密密鑰路由需要。