如何将一个 IP 地址/接口上的所有端口转发到另一个接口上的另一个 IP 地址

如何将一个 IP 地址/接口上的所有端口转发到另一个接口上的另一个 IP 地址

我尝试iptables在网上查阅了几页信息,但它们似乎都缺少了我需要做的事情的关键信息。

背景:

我在一家工厂工作,正在尝试为物联网设备 (NanoPi R2S) 添加网关(恐怕这个词不太准确)功能。我的设备有 2 个网络接口:

  • eth0 连接到工厂网络(10.4.42.210)
  • eth0 的别名 IP 地址为 10.4.42.211(在 eth0:0 上)
  • eth1 连接到 PLC 网络(192.168.100.211)
  • 机器网络上有一台 PLC,其 IP 地址为 192.168.100.42
  • PLC 有一个默认网关预设(未指向我的设备)并且无法更改。

我的最终目标是将 eth0:0 上针对 10.4.42.211 的所有端口重定向到 eth1 上的 192.168.100.42

我只需要与 PLC 建立入站连接以及 PLC 的响应。PLC 不会发起连接。

/etc/sysctl.conf我已经通过设置启用了内核中的转发net.ipv4.ip_forward=1

我在互联网上尝试了几个示例,但仍无法理解如何诊断或测试这些规则,以便弄清楚需要做什么才能使其工作。

iptables更新:仔细阅读和的手册页后nat,我得出了以下几乎可行的规则:

这会将发往 PLC 的数据包转发到 PLC 的内部地址:

iptables -t nat -A PREROUTING -d 10.4.42.211 -j DNAT --to 192.168.100.42

我相信这是有效的,因为我的 ping 消失了,并且计数器显示它们符合这条规则。

这会改变来自 PLC 的任何数据的发件人地址

iptables -t nat -A POSTROUTING -s 192.168.100.42 -j SNAT --to 10.4.42.211

不幸的是,来自 PLC 的任何内容都会被发送到网关进行解析。我的 IOT 设备不是 PLC 中设置的网关,我可以看到无法更改网关的情况。我尝试通过更改发件人地址以匹配我的 IOT 设备来解决这个问题,但这会产生错误:

iptables -t nat -A PREROUTING -d 10.4.42.211 -j SNAT --to 192.168.100.211
Error: x_tables: ip_tables: SNAT target: used from hooks PREROUTING, but only usable from INPUT/POSTROUTING

有没有办法改变发送到 PLC 的数据包的发件人地址,以便它们返回到 IOT 设备(当它们返回时,需要进行逆转)?

相关内容