WireGuard 处于路由模式而非 NAT 模式(AWS)

WireGuard 处于路由模式而非 NAT 模式(AWS)

我一直试图让这个工作正常运作,并最终决定加入 serverfault,希望有人能在我失去理智之前提供帮助。

当前设置:

用户通过我设置的 WireGuard VPN 服务器连接到 AWS 网络。该服务器配置为 NAT 模式,这意味着所有用户都隐藏在 WireGuard 服务器 IP 地址后面。他们可以使用主机名或 IP 地址通过 SSH 连接到计算机,也可以连接到互联网。他们的 WireGuard 客户端配置设置为通过 VPN 路由所有流量,因为如果他们在咖啡店工作,这会增加一层保护。

所需设置:

我想更改配置,使 WireGuard 在路由模式而不是 NAT 模式下运行。这样,用户将获得一个唯一的 IP 地址,我将能够使用 AWS 安全组来阻止某些用户访问某些服务器。增加了一层额外的安全保护,这很好。

我已经走了多远:

我可以让路由模式“正常工作”,这样用户就可以获得一个唯一的 IP 地址,他们仍然能够使用主机名或 IP 地址通过 SSH 连接到计算机。我面临的问题是他们失去了互联网连接!所以我解决了一个问题,但又产生了另一个问题。我尝试 ping 8.8.8.8 以排除 DNS 是问题所在。

服务器配置(NAT模式注释掉):

[Interface]
Address = 10.0.0.162
SaveConfig = false
PrivateKey = abcdefg
ListenPort = 51820

#NAT mode:
#PostUp   = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE;
#PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE;

#Routing Mode attempt 1:
#Machines in AWS show connections from the actual client IP which is good. No internet access though.
PostUp   = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT;
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT;

[Peer] #My_Laptop
PublicKey = abcdefg
PresharedKey = abcdefg
AllowedIPs = 192.168.1.2/32

客户端配置:

[Interface]
PrivateKey = abcdefg
Address = 192.168.1.2/32
DNS = 10.0.0.162

[Peer]
PublicKey = abcdefg
PresharedKey = abcdefg
AllowedIPs = 0.0.0.0/0
Endpoint = x.x.x.x:51820
PersistentKeepalive = 25

希望以上信息足以说明我所尝试过的方法。请注意,我在与 WireGuard 相同的计算机上运行 BIND。BIND 只是将所有 DNS 查询转发到 AWS Route53。

我感觉它很快就能起作用了但是我已经在这一点上停滞了好几个月。

答案1

我找到了解决方案。这全都与 Linux 中的 iptables 有关。

WireGuard 配置中需要以下内容:

PostUp = iptables -t nat -A POSTROUTING ! -d 10.0.0.0/16 -o eth0 -j MASQUERADE;
PostDown = iptables -t nat -D POSTROUTING ! -d 10.0.0.0/16 -o eth0 -j MASQUERADE;

当流量流向本地 AWS 网络时,这样做不会伪装。这样,每个用户都会获得自己的 IP 地址,然后我可以在防火墙规则中使用该地址来阻止他们访问某些机器。对于所有其他流量,都会进行伪装,这意味着用户可以访问互联网。

相关内容