无法将 WireGuard 配置为使用辅助 IP 地址而不是服务器的主 IP 地址

无法将 WireGuard 配置为使用辅助 IP 地址而不是服务器的主 IP 地址

设置

我的服务器的主以太网接口是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在的配置下添加以下行/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路线或规则相关的内容。但以我目前的知识水平,互联网上的相关信息很难解析,尽管我花了两天时间研究这个问题,但我还是无法找到解决方案。

任何帮助都非常感谢。请尽量详细。谢谢你!

答案1

除非应用程序本身向系统指定其传出流量应通过哪个 IP 地址,否则服务器将使用默认(主)IP 地址 - 至少这是我的理解。

而且由于 WireGuard 中似乎没有设置告诉它使用特定的公共 IP 地址,因此我们需要依赖iptablesip route

IRC 频道上的一位好心人#wireguard帮助我解决了服务器配置中的值问题PostUp,从而满足了我的需要。PostDownwg0.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

相关内容