You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

基于接收IP的Linux路由器端口转发配置可行性问询

基于接收IP的Linux路由器端口转发配置可行性问询

当然可以实现!这种基于目标IP地址的端口转发正好匹配你的需求——毕竟外部设备只能指定IP和固定的502 Modbus端口,没法改端口来区分设备。在Linux路由器上用iptables就能轻松搞定,下面是具体的配置步骤:

前提:开启IP转发

首先要确保路由器允许IP转发,这是NAT转发的基础:

  • 临时生效(重启后失效):
    echo 1 > /proc/sys/net/ipv4/ip_forward
    
  • 永久生效(重启后依然有效):
    编辑/etc/sysctl.conf文件,找到net.ipv4.ip_forward这一行,把注释去掉并设为1:
    net.ipv4.ip_forward=1
    
    然后执行命令让配置生效:
    sysctl -p
    

配置DNAT(目标地址转换)规则

这一步是把外部发往Eth0特定IP的502端口请求,转发到Eth1侧的对应内部设备:

  • 转发192.168.0.1:50230.0.0.1:502
    iptables -t nat -A PREROUTING -d 192.168.0.1 -p tcp --dport 502 -j DNAT --to-destination 30.0.0.1:502
    
  • 转发192.168.0.2:50230.0.0.2:502
    iptables -t nat -A PREROUTING -d 192.168.0.2 -p tcp --dport 502 -j DNAT --to-destination 30.0.0.2:502
    

配置SNAT(源地址转换)规则

这一步是让内部设备的响应能正确回传给外部设备——因为内部设备的网关是路由器的Eth1接口(30.0.0.10),需要把响应的源地址替换成路由器对应的Eth0 IP,这样外部设备才能识别:

  • 30.0.0.1的响应源地址替换为192.168.0.1
    iptables -t nat -A POSTROUTING -s 30.0.0.1 -p tcp --sport 502 -j SNAT --to-source 192.168.0.1
    
  • 30.0.0.2的响应源地址替换为192.168.0.2
    iptables -t nat -A POSTROUTING -s 30.0.0.2 -p tcp --sport 502 -j SNAT --to-source 192.168.0.2
    

规则持久化(可选)

如果希望路由器重启后这些规则依然生效,可以保存iptables配置:

  • Debian/Ubuntu系统:
    iptables-save > /etc/iptables/rules.v4
    
  • CentOS/RHEL系统:
    service iptables save
    

适配多单元场景

针对你提到的多个相同配置的单元,只需要给每个单元的路由器Eth0分配一组不重复的IP(比如单元2用192.168.0.3192.168.0.4),然后复制上述配置替换对应IP即可。外部设备就能通过不同的IP访问每个单元的Device 1和Device 2了。

备注:内容来源于stack exchange,提问作者Scoobler

火山引擎 最新活动