Wireguard 不會將流量從客戶端路由到網路上的其他伺服器
我有 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路由器(主路由器),所以請記住這一點。
經過多次嘗試和失敗並與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)
對我來說,問題解決了;-)
我遇到了同樣的問題——我的伺服器又名“Wireguard SRV”在 rhe 圖中(=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