如何配置wireguard以轉發客戶端IP地址(帶網關)?
我正在嘗試將wireguard 配置為VPN 伺服器。主要問題是,網關僅將 VPN 伺服器 IP 轉發到其他伺服器,而不是我的客戶端 IP。
我的設置如下:
- server A (10.10.0.4) / CLIENT (10.10.1.3) -> wireguard server (10.10.1.2) -- (10.10.0.2) \ - server B (10.10.0.3)
Wireguard 伺服器執行在具有兩個介面的機器上:
- eth0 (10.10.0.2)
- wg0 (10.10.1.2)
建立 VPN 連接後,我可以連接到伺服器 A 和伺服器 B(通過 ssh)。問題是,wireguard 伺服器的 IP 地址被轉發(nat)到伺服器 A 和 B。通過 ssh 登錄每次都向我顯示,最後一個連接來自 10.10.0.2(在伺服器 A 和 B 上)。但是在wireguard伺服器上,最後登錄的IP是我的真實客戶端IP(10.10.1.3)。
我要做的是配置wireguard,以便我的IP(10.10.1.3)正確轉發到伺服器A和B。
這是我的客戶端wireguard 配置文件:
[Interface] PrivateKey = xxx Address = 10.10.1.3/24 DNS = 10.10.0.2, 8.8.8.8 [Peer] PublicKey = XXX AllowedIPs = 10.10.0.0/24 Endpoint = xxx.xxx.xxx.xxx:41194 PersistentKeepalive = 15
我的wireguard伺服器(wg0.conf)配置:
[Interface] Address = 10.10.1.2/24 ## My VPN server port ## ListenPort = 41194 PrivateKey = xxx # Internet Gateway config: nat wg1 out to the internet on ens10 PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE [Peer] ## Desktop/client VPN public key ## PublicKey = xxx AllowedIPs = 10.10.1.3/32
我猜是 iptables 配置錯誤,因為 nat / MASQUERADE,但我無法正確配置網關。
我感謝您的幫助。
更新
在伺服器 A 上執行(在 B 上相同)
ip -br link; ip -br address; ip route
返回(公共 IP 被屏蔽):
lo UNKNOWN 00:00:00:00:00:00 <LOOPBACK,UP,LOWER_UP> eth0 UP 96:00:01:29:d6:9b <BROADCAST,MULTICAST,UP,LOWER_UP> ens10 UP 86:00:00:08:9c:c5 <BROADCAST,MULTICAST,UP,LOWER_UP> lo UNKNOWN 127.0.0.1/8 ::1/128 eth0 UP 10.10.0.3/32 fe80::9400:1ff:fe29:d69b/64 ens10 UP 49.xxx.xxx.xxx/32 2a01:xxx:xxx:xxx::1/64 fe80::8400:ff:fe08:9cc5/64 default via 172.31.1.1 dev ens10 proto dhcp src 49.xxx.xxx.xxx metric 100 10.10.0.0/16 via 10.10.0.1 dev eth0 10.10.0.1 dev eth0 scope link 172.31.1.1 dev ens10 proto dhcp scope link src 49.xxx.xxx.xxx metric 100
NAT 是由配置完成的,因此您可以按要求獲得 NAT。為避免使用 NAT,您必須:
- 確保終端伺服器 A 和 B 具有返回客戶端的真實路由
如果不是這樣,至少
在 A 和 B 上添加這個(如果執行 Linux):
ip route add 10.10.1.3/32 via 10.10.0.2
更新:OP 的路由設置(在雲中)使 A 和 B 到 10.10.0.2(甚至彼此之間)的流量通過額外的路由器 10.10.0.1(云網路的一部分)。因此,必須在這部分添加路線,正如 OP 所確認的那樣。
- 刪除wireguard伺服器上的NAT
只需刪除
iptables
兩個 WireGuardPostUp
和PostUp
配置中的第二個命令,並確保沒有先前添加的條目,只執行這次:iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
- 可選:
AllowedIPs
客戶端更新如果客戶端想要使用其隧道端而不是 eth0 端的伺服器地址來訪問 Wireguard 伺服器,或者要確保接收到由 Wireguard 伺服器發回的 ICMP(例如:
traceroute
在沒有 的情況下訪問伺服器 A* * *
),10.10.1.2 也應該是AllowedIPs
為了滿足WireGuard 的加密密鑰路由。在客戶端替換:
AllowedIPs = 10.10.0.0/24
和:
AllowedIPs = 10.10.1.2,10.10.0.0/24