Networking

無法將 WireGuard 配置為使用輔助 IP 地址而不是伺服器的主 IP 地址

  • April 25, 2020

設置

我的伺服器的主要乙太網介面是enp8s0,有一個公共 IP 地址( -伺服器116.202.221.254的主 IP 地址),下面是它的設置方式。

# ip addr show enp8s0

2: enp8s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
   link/ether a8:a1:59:06:e6:6c brd ff:ff:ff:ff:ff:ff
   inet 116.202.221.254/26 brd 116.202.221.255 scope global enp8s0
      valid_lft forever preferred_lft forever
   inet6 2a01:4f8:241:55c1::2/64 scope global 
      valid_lft forever preferred_lft forever
   inet6 fe80::aaa1:59ff:fe06:e66c/64 scope link 
      valid_lft forever preferred_lft forever

路線:

# ip route show

default via 116.202.221.193 dev enp8s0 onlink 
10.103.213.2 dev wg0 scope link 
116.202.221.192/26 via 116.202.221.193 dev enp8s0 
116.202.221.192/26 dev enp8s0 proto kernel scope link src 116.202.221.254 

文件內容:/etc/network/interfaces

auto lo
iface lo inet loopback
iface lo inet6 loopback

auto enp8s0
iface enp8s0 inet static
 address 116.202.221.254
 netmask 255.255.255.192
 gateway 116.202.221.193
 # route 116.202.221.192/26 via 116.202.221.193
 up route add -net 116.202.221.192 netmask 255.255.255.192 gw 116.202.221.193 dev enp8s0

iface enp8s0 inet6 static
 address 2a01:4f8:241:55c1::2
 netmask 64
 gateway fe80::1

然後我為我的伺服器請求了一個額外的公共 IP 地址 ( 116.202.221.202),這就是我的配置方式。

將附加 IP 地址添加到主介面/設備enp8s0

# ip address add 116.202.221.202/32 dev enp8s0

enp8s0在 in的配置下添加這些行/etc/network/interfaces

up ip address add 116.202.221.202/32 dev enp8s0
down ip address del 116.202.221.202/32 dev enp8s0

立即應用更改:

# ip address flush enp8s0 && systemctl restart networking

問題

從伺服器傳出的所有網際網路流量似乎都通過主 IP 地址傳出116.202.221.254。例如,如果我通過伺服器瀏覽網際網路,我的 IP 地址將被視為116.202.221.254.

因此,即使我將我的工具配置為使用附加/輔助 IP 地址116.202.221.202,它們似乎是從116.202.221.254.

如何配置我的伺服器,以便單獨處理兩個 IP 地址(不像現在那樣連結)並具有單獨的路由?

語境

我在伺服器上有一個使用主 IP 地址的網站116.202.221.254

我正在嘗試在伺服器上設置WireGuard VPN(以保護我的身份並克服審查)以使用輔助 IP 地址116.202.221.202,但一旦配置和設置後,我仍然以116.202.221.254.

如何配置我的伺服器以便使用我的 VPN 116.202.221.202


我的 WireGuard VPN 配置

(有關更多上下文。我遵循了本教程:https ://www.linode.com/docs/networking/vpn/set-up-wireguard-vpn-on-debian/ )

WireGuard 伺服器配置:/etc/wireguard/wg0.conf

[Interface]
PrivateKey = SERVER_PRIVATE_KEY
Address = 10.103.213.1/32
ListenPort = 51208
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o enp8s0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o enp8s0 -j MASQUERADE
SaveConfig = false

# Macbook Pro
[Peer]
PublicKey = CLIENT_PUBLIC_KEY
AllowedIPs = 10.103.213.2/32

WireGuard 客戶端配置:/etc/wireguard/wg0.conf

[Interface]
PrivateKey = CLIENT_PRIVATE_KEY
Address = 10.103.213.2/32
ListenPort = 51208
DNS = 8.8.8.8, 8.8.4.4, 1.1.1.1

[Peer]
PublicKey = SERVER_PUBLIC_KEY
Endpoint = 116.202.221.202:51208
AllowedIPs = 0.0.0.0/0

我錯過了什麼?我該如何解決?

我盡我所能理解每一步,但仍然很多,我知道我缺少與iptables路線或規則相關的東西。但是鑑於我目前的知識,網際網路上的相關資訊很難解析,儘管為此工作了 2 天,我還是無法找到解決方案。

*任何幫助表示讚賞。請盡量詳細。*謝謝!

除非應用程序本身向系統指定其傳出流量應通過哪個 IP 地址,否則伺服器將使用預設(主)IP 地址——至少這是我的理解。

而且由於 WireGuard 中似乎沒有設置來告訴它使用特定的公共 IP 地址,我們需要依賴iptablesor ip route

IRC 頻道上的一個#wireguard好心人幫助我解決了伺服器配置中的PostUpPostDown值,wg0.conf這將完成我所需要的。

PostUp = iptables -t nat -A POSTROUTING -m mark --mark 0xCA6C/0xFFFFFFFF -j SNAT --to-source 116.202.221.202; iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -s 10.103.213.0/24 -o enp8s0 -j SNAT --to-source 116.202.221.202

Post Down = iptables -t nat -D POSTROUTING -m mark --mark 0xCA6C/0xFFFFFFFF -j SNAT --to-source 116.202.221.202; iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -s 10.103.213.0/24 -o enp8s0 -j SNAT --to-source 116.202.221.202

這也有效,但不是理想的,我被告知(--mark上面的命令能夠針對特定於 WG 的流量,而這些是特定於源 IP 的——至少我是這麼理解的):

PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -s 10.103.213.0/24 -o enp8s0 -j SNAT --to-source 116.202.221.202; iptables -A FORWARD -o wg0 -j ACCEPT

PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -s 10.103.213.0/24 -o enp8s0 -j SNAT --to-source 116.202.221.202; iptables -D FORWARD -o wg0 -j ACCEPT

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