我正在使用客户端库 ( https://github.com/Beckhoff/ADS ) 通过 TCP 从 Linux 机器连接到 PLC。但是,该库只能在 PLC 的源 IP 和目标 IP 地址之间执行单个连接。我的目标是连接到具有多个客户端的远程IP/PLC,即远程PLC必须能够根据客户端的(不同)IP地址来区分客户端连接。
我希望通过一些巧妙的iptables规则来实现这一点;或者,也许 Linux 网络命名空间也可以工作。
对于iptables路由(双关语?),我的计划是将多个 IP 地址分配给 Linux 计算机上的同一个 NIC。由于远程服务侦听单个端口(48898),我不能简单地在iptables规则中使用不同的目标端口。因此,我在想这样的事情:
远程 PLC:192.168.1.10/24
Linux PC:192.168.1.20/24 (ip addr add 192.168.1.20/24 dev enp2s0)
Linux PC:192.168.1.21/24 (ip addr add 192.168.1.21/24 dev enp2s0)
通过为远程 PLC 使用“虚拟”IP 地址,我希望能够区分 TCP 连接,这样我就知道哪些数据包源自客户端 A,哪些数据包源自客户端 B。现在我需要做一些iptables魔术:
传出:如果目标 IP 地址 == 192.168.1.11 1.1 -> 重写为目标 IP …