Linux / iptables - 重叠子网之间的 NAT

Linux / iptables - 重叠子网之间的 NAT

我正在尝试从一个 Wireguard 接口到另一个接口进行 NAT,同时保留私有子网。这是我的设置。这里的技巧是我在接口上有重叠的子网。

我的 VPN 服务器有三个接口。面向公众的ens3个人 Wireguard wg0(172.16.1.1/24) 和 VPN 服务 Wireguard wg1(172.28.112.173/12)

ens3是一个公共接口,具有可路由的公共 ipv4 地址,可以访问互联网

wg0是 172.16.1.0/24 网络上我所有设备的 Wireguard 接口。我的所有设备都连接到此接口并可以相互通信,并且目前已通过 NAT 进行使用ens3

wg1是通往 172.16.0.0/12 网络上 VPN 提供商的 Wireguard 隧道。 VPN 提供商分配一个 IP 地址,并且该通往公共互联网的接口的路由器位于 172.16.0.1。

当我将 iptables 设置为 NAT 时ens3,一切都按预期工作。 172.16.1.0/24 上的设备可以相互通信,也可以使用 的ens3公共接口访问互联网

当我将 iptables 设置为 NAT 时,设备无法使用的公共接口wg1访问互联网。wg1事实上,tcpdump 显示该盒子正在将来自路由器的数据包转发wg0到该路由器,而ens3该路由器显然无法正常工作。

我的最终目标是让客户端wg0通过 NAT 访问wg1.已启用wg0wg1无法重新分配或更改的子网。我有一种感觉,这可以通过基于策略的路由来完成,但是在花了几天时间并尝试了许多不同的配置之后,我仍然无法让它工作。如果有人能给我一些见解,我将不胜感激!


iptables 转储:

# Generated by xtables-save v1.8.2 on Sat Jun 19 03:43:54 2021
*nat
:PREROUTING ACCEPT [15677:1866069]
:INPUT ACCEPT [10279:816931]
:POSTROUTING ACCEPT [5314:492688]
:OUTPUT ACCEPT [4806:467393]
-A PREROUTING -i ens3 -p udp -m udp --dport 1701 -m comment --comment "Also allow 1701/udp for WireGuard" -j REDIRECT --to-ports 500
-A PREROUTING -i ens3 -p udp -m udp --dport 443 -m comment --comment "Also allow 443/udp for WireGuard" -j REDIRECT --to-ports 500
-A POSTROUTING -o ens3 -j MASQUERADE
COMMIT
# Completed on Sat Jun 19 03:43:54 2021
# Generated by xtables-save v1.8.2 on Sat Jun 19 03:43:54 2021
*filter
:INPUT DROP [2775:810347]
:FORWARD ACCEPT [1048627:1182856653]
:OUTPUT ACCEPT [14961117:11097488012]
-A INPUT -m state --state RELATED,ESTABLISHED -m comment --comment "Allow ALL RELATED, ESTABLISHED" -j ACCEPT
-A INPUT -i lo -m state --state NEW -m comment --comment "Allow ALL from lo" -j ACCEPT
-A INPUT -p icmp -m state --state NEW -m comment --comment "Allow ICMP" -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m multiport --dports 22 -m comment --comment "Allow SSH" -j ACCEPT
-A INPUT -i wg0 -m state --state NEW -m comment --comment "Allow ALL from wg0" -j ACCEPT
-A INPUT -p udp -m state --state NEW -m multiport --dports 500 -m comment --comment "Allow WireGuard" -j ACCEPT
-A FORWARD -p tcp -m tcp --tcp-flags SYN,RST SYN -m comment --comment "Clamp MSS to PMTU" -j TCPMSS --clamp-mss-to-pmtu
COMMIT
# Completed on Sat Jun 19 03:43:54 2021

路由表转储:

default via 161.129.xxx.xxx dev ens3
161.129.xxx.xxx/24 dev ens3 proto kernel scope link src 161.129.xxx.xxx
172.16.1.0/24 dev wg0 proto kernel scope link src 172.16.1.1

相关内容