设置
我的服务器的主以太网接口是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 地址,因此我们需要依赖iptables
或ip route
。
IRC 频道上的一位好心人#wireguard
帮助我解决了服务器配置中的值问题PostUp
,从而满足了我的需要。PostDown
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