我尝试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 设备(当它们返回时,需要进行逆转)?