WireGuard:同一服务器上有 2 个客户端,具有 Internet 连接和端口转发

WireGuard:同一服务器上有 2 个客户端,具有 Internet 连接和端口转发

亲爱的 ServerFault 社区,

我最近买了一个家庭服务器。我不想在我的办公室 IP(1.1.1.1)上托管任何内容,因此我购买了一个具有 4 个 IP 的 OVH VPS,并创建了一个 WireGuard 隧道以使用 VPS 的 IP 作为家庭服务器 IP。

OVH VPS 还将所有端口转发到我的家庭服务器。

我目前正在使用 4 个 OVH VPS IP 中的 2 个(2.2.2.2)和(3.3.3.3)。

我在 VPS 的不同子网上创建了两个 WireGuard 隧道。一个在 10.0.0.0,一个在 10.1.0.0。

我的目标是实现一个配置,以便可以收听10.0.0.2 would resolve to 2.2.2.2和收听10.1.0.2 would resolve to 3.3.3.3

当单独运行时,这对第一条隧道和第二条隧道都有效AllowedIPs = 0.0.0.0/0

问题是,当在AllowedIPs = 0.0.0.0/0互联网上运行时,连接会停止。

我尝试将 WG1 的允许 IP 更改为,10.1.0.0/24但是 WG1 没有互联网连接。

这是我的配置文件:

服务器 WG0 (OVH VPS):

[Interface]
Address = 10.0.0.1/24
ListenPort = 51821
PrivateKey = {CENSORED}

### Client vpn
[Peer]
PublicKey = {CENSORED}
PresharedKey = {CENSORED}
AllowedIPs = 10.0.0.2/32

服务器 WG1 (OVH VPS):

[Interface]
Address = 10.1.0.1/24
ListenPort = 51822
PrivateKey = {CENSORED}

[Peer]
PublicKey = {CENSORED}
PresharedKey = {CENSORED}
AllowedIPs = 10.1.0.2/32

OVH VPS 的 IPTables 配置:

# Generated by iptables-save v1.8.7 on Tue May 31 15:25:37 2022
*filter
:INPUT ACCEPT [1698:235639]
:FORWARD ACCEPT [1053:163056]
:OUTPUT ACCEPT [1451:166474]
:f2b-sshd - [0:0]
COMMIT
# Completed on Tue May 31 15:25:37 2022
# Generated by iptables-save v1.8.7 on Tue May 31 15:25:37 2022
*nat
:PREROUTING ACCEPT [435:15811]
:INPUT ACCEPT [428:15399]
:OUTPUT ACCEPT [32:2255]
:POSTROUTING ACCEPT [119:6298]
-A PREROUTING -d 2.2.2.2/32 -p tcp -m tcp -m multiport --dports 1000:51820 -j DNAT --to-destination 10.0.0.2
-A PREROUTING -d 2.2.2.2/32 -p tcp -m tcp -m multiport --dports 51826:65534 -j DNAT --to-destination 10.0.0.2
-A PREROUTING -d 2.2.2.2/32 -p udp -m udp -m multiport --dports 1000:51820 -j DNAT --to-destination 10.0.0.2
-A PREROUTING -d 2.2.2.2/32 -p udp -m udp -m multiport --dports 51826:65534 -j DNAT --to-destination 10.0.0.2
-A PREROUTING -d 2.2.2.2/32 -p tcp -m tcp -m multiport --dports 21,22,80,25,995,110,443,465,993,143 -j DNAT --to-destination 10.0.0.2
-A PREROUTING -d 2.2.2.2/32 -p udp -m udp -m multiport --dports 21,22,80,25,995,110,443,465,993,143 -j DNAT --to-destination 10.0.0.2
-A PREROUTING -d 3.3.3.3/32 -p tcp -m tcp -m multiport --dports 1000:51820 -j DNAT --to-destination 10.1.0.2
-A PREROUTING -d 3.3.3.3/32 -p tcp -m tcp -m multiport --dports 51826:65534 -j DNAT --to-destination 10.1.0.2
-A PREROUTING -d 3.3.3.3/32 -p udp -m udp -m multiport --dports 1000:51820 -j DNAT --to-destination 10.1.0.2
-A PREROUTING -d 3.3.3.3/32 -p udp -m udp -m multiport --dports 51826:65534 -j DNAT --to-destination 10.1.0.2
-A PREROUTING -d 3.3.3.3/32 -p tcp -m tcp -m multiport --dports 21,22,80,25,995,110,443,465,993,143 -j DNAT --to-destination 10.1.0.2
-A PREROUTING -d 3.3.3.3/32 -p udp -m udp -m multiport --dports 21,22,80,25,995,110,443,465,993,143 -j DNAT --to-destination 10.1.0.2
-A POSTROUTING -s 10.0.0.2/32 -p tcp -m tcp -m multiport --sports 1000:51820 -j SNAT --to-source 2.2.2.2
-A POSTROUTING -s 10.0.0.2/32 -p tcp -m tcp -m multiport --sports 51826:65534 -j SNAT --to-source 2.2.2.2
-A POSTROUTING -s 10.0.0.2/32 -p tcp -m tcp -m multiport --sports 21,22,80,25,995,110,443,465,993,143 -j SNAT --to-source 2.2.2.2
-A POSTROUTING -s 10.0.0.2/32 -p udp -m udp -m multiport --sports 1000:51820 -j SNAT --to-source 2.2.2.2
-A POSTROUTING -s 10.0.0.2/32 -p udp -m udp -m multiport --sports 51826:65534 -j SNAT --to-source 2.2.2.2
-A POSTROUTING -s 10.0.0.2/32 -p udp -m udp -m multiport --sports 21,22,80,25,995,110,443,465,993,143 -j SNAT --to-source 2.2.2.2
-A POSTROUTING -s 10.1.0.2/32 -p tcp -m tcp -m multiport --sports 1000:51820 -j SNAT --to-source 3.3.3.3
-A POSTROUTING -s 10.1.0.2/32 -p tcp -m tcp -m multiport --sports 51826:65534 -j SNAT --to-source 3.3.3.3
-A POSTROUTING -s 10.1.0.2/32 -p tcp -m tcp -m multiport --sports 21,22,80,25,995,110,443,465,993,143 -j SNAT --to-source 3.3.3.3
-A POSTROUTING -s 10.1.0.2/32 -p udp -m udp -m multiport --sports 1000:51820 -j SNAT --to-source 3.3.3.3
-A POSTROUTING -s 10.1.0.2/32 -p udp -m udp -m multiport --sports 51826:65534 -j SNAT --to-source 3.3.3.3
-A POSTROUTING -s 10.1.0.2/32 -p udp -m udp -m multiport --sports 21,22,80,25,995,110,443,465,993,143 -j SNAT --to-source 3.3.3.3
COMMIT
# Completed on Tue May 31 15:25:37 2022

家庭服务器 WG0 配置:

[Interface]
PrivateKey = {CENSORED}
Address = 10.0.0.2/32

[Peer]
PublicKey = {CENSORED}
PresharedKey = {CENSORED}
Endpoint = 2.2.2.2:51821
AllowedIPs = 0.0.0.0/0
#AllowedIPs = 10.0.0.0/24

家庭服务器 WG1 配置:

[Interface]
PrivateKey = {CENSORED}
Address = 10.1.0.2/32

[Peer]
PublicKey = {CENSORED}
PresharedKey = {CENSORED}
Endpoint = 3.3.3.3:51822
AllowedIPs = 10.1.0.0/24

使用我当前的 (粘贴在这里) 配置我可以将(例如 Apache2)绑定到 10.0.0.2,并且它可以正确解析并允许人们从 2.2.2.2 访问服务器,但是当我绑定到 10.1.0.2 时,IP 地址 3.3.3.3 无法从任何端口从互联网访问,并且接口 WG1 没有互联网连接(例如,当尝试时curl --interface wg1 ifconfig.co)。

提前感谢您的时间和帮助!

答案1

最简单的做法是将伪装添加到您的 VPS 的 iptables 规则中——这将重写转发到您的 Homeserver 的数据包的源地址,以使用转发数据包的 VPS 的 WireGuard 接口的 IP 地址(10.0.0.1对于wg0,和10.1.0.1对于wg1)。这允许您的 Homeserver 使用 wg-quick 在您的默认路由表中设置的路由,通过正确的接口将流量发送回去。

为此,请将以下POSTROUTING规则添加到 VPS 的 iptables 配置末尾:

-A POSTROUTING -o wg0 -j MASQUERADE
-A POSTROUTING -o wg1 -j MASQUERADE

然后对于你的 Homeserver wg0.conf,将其用于 VPS 对等体:

AllowedIPs = 10.0.0.0/24

对于你的 Homeserver wg1.conf,请使用以下命令作为 VPS 对等体:

AllowedIPs = 10.1.0.0/24

但是,如果您需要保留外部数据包的原始源 IP 地址(例如用于家庭服务器上的日志记录或身份验证等),伪装对您不起作用。相反,您需要在家庭服务器上为自定义路由表添加一些自定义策略路由规则,这些规则将从绑定到 的服务发送数据包到10.0.0.2wg010.1.0.2通过wg1

为此,请将您的 Homeserver 更改wg0.conf为如下形式:

[Interface]
PrivateKey = {CENSORED}
Address = 10.0.0.2/32
Table = 100
PreUp = ip rule add from 10.0.0.2 table 100 priority 123
PostDown = ip rule del from 10.0.0.2 table 100 priority 123

[Peer]
PublicKey = {CENSORED}
PresharedKey = {CENSORED}
Endpoint = 2.2.2.2:51821
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25

您的家庭服务器wg1.conf如下:

[Interface]
PrivateKey = {CENSORED}
Address = 10.1.0.2/32
Table = 101
PreUp = ip rule add from 10.1.0.2 table 101 priority 124
PostDown = ip rule del from 10.1.0.2 table 101 priority 124

[Peer]
PublicKey = {CENSORED}
PresharedKey = {CENSORED}
Endpoint = 3.3.3.3:51822
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25

相关内容