如何代理 | 转发 | nat 伪装所有来自某个 IP 的流量到其他地方的另一个 IP

如何代理 | 转发 | nat 伪装所有来自某个 IP 的流量到其他地方的另一个 IP

我正在设置一个新的公共网络 IP/24。迟早我的旧子网公共网络 IP/24 会被删除。同时,我想创建一个代理,将所有流量移至旧子网到新子网。我正在考虑通过互联网进行 1:1 NAT。

因此,当有人访问旧 IP 时,我希望它被代理到新 IP。

XXX.XXX.XXX.9  ->  YYY.YYY.YYY.9
XXX.XXX.XXX.10 ->  YYY.YYY.YYY.10
XXX.XXX.XXX.11 ->  YYY.YYY.YYY.11
XXX.XXX.XXX.12 ->  YYY.YYY.YYY.12

等等。

我尝试设置一个代理服务器,但是在互联网上找不到很好的参考来为防火墙 cmd/iptable 编写正确的设置。我所做的是:首先,我向代理服务器添加了一个名为 XXX.XXX.XXX.99 的新虚拟 IP,然后我配置了代理解析:

# enable IP forwarding
echo "1" > /proc/sys/net/ipv4/ip_forward

# enable Masquerade
firewall-cmd --permanent --zone=public --add-masquerade

# create routing rule:
firewall-cmd --direct --add-rule ipv4 nat PREROUTING 0 -d XXX.XXX.XXX.99 -j SNAT --to-source YYY.YYY.YYY.99

但我明白:

Error: COMMAND_FAILED: '/usr/sbin/iptables-restore -w -n' failed: iptables-restore v1.8.8 (nf_tables):
line 3: RULE_INSERT failed (Invalid argument): rule in chain PREROUTING

似乎每个参考资料都说了不同的东西,并且不清楚我是否应该为此目的使用 SNAT、MASQUERADING 或 DNAT。

欢迎一切帮助。

答案1

我认为这不可能按照你的想法实现。

即使你能在原有网络上设置 NAT,问题还是出在回程流量上。所有来自 YYY.YYY.YYY.0/24 网络的 IP 数据包都需要转发回 XXX.XXX.XXX.0/24 网络。然后 XXX.XXX.XXX.0/24 的机器就可以将数据包的源 IP 地址替换为 XXX.XXX.XXX.0/24。

具体例子:

  1. 客户端发送数据包:源 IP 192.0.2.1,目标 IP XXX.XXX.XXX.0/24。
  2. NAT 网关将目标地址更改为 YYY.YYY.YYY.0/24。数据包源 IP 为 192.0.2.1,目标 IP 为 YYY.YYY.YYY.0/24。
  3. YYY.YYY.YYY.0/24 向 192.0.2.1 发送响应数据包。源 IP YYY.YYY.YYY.0/24,目标 IP 为 192.0.2.1。
  4. 现在,如果 YYY.YYY.YYY.0/24 具有正常路由,它会直接将数据包发送给客户端。客户端接收源 IP 为 YYY.YYY.YYY.0/24、目标 IP 为 192.0.2.1 的数据包。客户端不希望从此源地址收到数据包,因此会丢弃该数据包。

为了实现正确的操作,您需要在 YYY.YYY.YYY.0/24 的机器上设置到 XXX.XXX.XXX.0/24 的默​​认路由。但是,设置默认路由意味着 YYY.YYY.YYY.0/24 不能直接从互联网访问 - 您需要始终通过 XXX.XXX.XXX.0/24 访问它。

您需要回顾一下您正在尝试解决的实际问题并思考其他的事情。

相关内容