Networking

如何配置wireguard以轉發客戶端IP地址(帶網關)?

  • March 25, 2022

我正在嘗試將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兩個 WireGuard PostUpPostUp配置中的第二個命令,並確保沒有先前添加的條目,只執行這次:

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

引用自:https://serverfault.com/questions/1096994