Linux 端口转发取决于接收 IP

Linux 端口转发取决于接收 IP

我有一个带有两个 NIC 的基于 Linux 的路由器。

Eth1 后面是一个有 5 个设备的网络,设备 1 的 IP 为 30.0.0.1,设备 2 的 IP 为 30.0.0.2 - 两者都是 modbus 设备,端口 502 开放,子网为 255.255.0.0

Eth0 有两个 IP 地址,192.168.0.1 和 192.168.0.2(Eth1 地址不能更改,但 Eth0 地址可以更改)

我想添加一个端口转发规则,因此: 192.168.0.1:502 <-> 30.0.0.1:502 192.168.0.2:502 <-> 30.0.0.2:502

这可能吗?

这样做的原因是,带有 5 个设备的单元是标准单元,因此所有内部设备都具有相同的 IP,并且它们可以相互通信。但是,可以将多个单元连接到单个外部显示器,显示器想要与单元 1 中的设备 1 和 2 以及单元 2 中的设备 1 和 2 通信,但我只能在显示器中设置 IP 地址,而不能设置端口 - 否则我将在 Eth0 端口上使用 1 个 IP 地址将两个不同的端口转发到两个设备。

提前致谢!

-编辑-

该“单元”是一个金属外壳。

里面有以下5个设备,连接到路由器Eth1(30.0.0.10):

  • 设备 1:30.0.0.1
  • 设备 2:30.0.0.2
  • 设备 3:30.0.0.3
  • 设备 4:30.0.0.4
  • 设备 5:30.0.0.5(这是一个显示设备 1、2、3、4 的 HMI)这些都是固定的,无法更改,它被构建为标准“单元”。

可以更改路由器上的Eth0端口,并在路由器上添加规则。

我们有多个这样的设备连接到站点网络,每个设备中都有一个需要连接到设备 1 和 2 的设备,但它只能通过 IP 地址连接,并且默认为 modbus 端口 502。如果可以更改端口,我将能够在路由器中使用端口转发,以便站点设备可以连接到单个 IP 和多个端口,但这是不可能的。

答案1

我对此有一个可行的解决方案,至少它似乎有效,但我不是网络人员,所以这实际上是一个谷歌答案......想知道这是否可以接受,是否过分,或者是否有更好的解决方案?

按照原来的例子,Eth0 的 IP 地址为 192.168.0.1,子网为 255.255.255.0,网关为 192.168.0.254(“站点”路由器)

ip address add 192.168.0.2/32 dev eth0


iptables -t nat -A POSTROUTING -o eth0 -s 30.0.0.1 -p tcp --dport 502 -j SNAT --to 192.168.0.1:502

iptables -t nat -A PREROUTING -i eth0 -d 192.168.0.1 -p tcp --dport 502 -j DNAT --to 30.0.0.1:502

iptables -t nat -A POSTROUTING -o eth0 -s 30.0.0.2 -p tcp --dport 502 -j SNAT --to 192.168.0.2:502
iptables -t nat -A PREROUTING -i eth0 -d 192.168.0.2 -p tcp --dport 502 -j DNAT --to 30.0.0.2:502


相关内容