如何与使用同一 IP 地址的多个设备进行通信?

如何与使用同一 IP 地址的多个设备进行通信?

我在制造环境中工作,需要从一台 (Windows) 计算机与最多 50 台设备进行通信,这些设备都位于 192.168.0.2。假设我无法更改这些设备上的 IP 地址。

我目前有几个解决方案。其中一个我已确认是可行的,另一个几乎可行。我基本上是在探索其他人做了什么,或者是否有更好的方法,或者是否有办法修复我几乎可行方法。

两者的硬件设置相同,与问题。我有一台连接到托管交换机的 Windows PC。托管交换机的设置是,每个端口都划分到其自己的未标记 VLAN 中,并且所有这些 VLAN 都在连接到 PC 的端口上进行了标记。

选项 A(几乎可行的选项)

我在 Windows PC 上运行了一台运行最新 Ubuntu Server 版本的 Linux VM,并运行以下命令

# eth1 connects to the managed switch.
# eth2 connects to the Windows PC (Windows PC is at 192.168.1.50).

# This handles the initial setup and the first device
sudo ifconfig eth2 192.168.1.51/24
sudo vconfig add eth1 101
sudo ifconfig eth1.101 192.168.0.1
sudo ip route del 192.168.0.0/24
sudo ip addr add 192.168.1.61/24 dev eth2
sudo ip rule add fwmark 101 table 101
sudo ip route add 192.168.0.0/24 dev eth1.101 table 101
sudo ip route add 192.168.1.0/24 dev eth2 table 101
sudo iptables -t mangle -A PREROUTING -i eth2 -d 192.168.1.61 -j MARK --set-mark 101
sudo iptables -t nat -A PREROUTING -m mark --mark 101 -j DNAT --to-destination 192.168.0.2

#this handles a second device and is modified for each additional device
sudo vconfig add eth1 102
sudo ip addr add 192.168.1.62/24 dev eth2
sudo ifconfig eth1.102 192.168.0.1/24
sudo iptables -t mangle -A PREROUTING -i eth2 -d 192.168.1.62 -j MARK --set-mark 102
sudo iptables -t nat -A PREROUTING -m mark --mark 102 -j DNAT --to-destination 192.168.0.2
sudo ip rule add fwmark 102 table 102
sudo ip route del 192.168.0.0/24
sudo ip route add 192.168.0.0/24 dev eth1.102 table 102

基本上,我在面向 Windows PC 的 NIC 上有多个虚拟 IP 地址,每个虚拟 IP 使用 IPTables 和路由规则将其映射并转发到代表 vlan 的特定虚拟 NIC。现在,根据我通过 TCPDump 看到的输出,我认为 ARP 表中出现了问题(很多时候,没有任何东西响应来自设备的 ARP 请求)。如果我删除 ip 路由规则并有一个到 192.168.0.0/24 的“全局”ip 路由,我可以让它工作,但显然它不适用于多个设备。

**选项 B(效果很好,但有点傻)

我在运行最新版本的DSL Linux。每个虚拟机基本上处理单个设备的路由。命令如下。

# eth1 connects to the managed switch.
# eth2 connects to the Windows PC
ifconfig eth1 up
vconfig add eth1 101
ifconfig eth1.101 192.168.0.1
ip addr add 192.168.56.2/24 dev eth2
iptables -t nat -A PREROUTING -i eth2 -d 192.168.56.2 -j DNAT --to-destination 192.168.0.2

尽管在一台台式电脑上启动 50 台虚拟机有些愚蠢,但它确实有效,并且效果很好。

如果可以的话,我很乐意选择选项 A,但我想我已经遇到了瓶颈。如果无法让它工作,选项 B 是我最后的努力。如果必须这样做,我可能会将所有这些虚拟机放在单独的硬件上。所以我想问超级用户的问题是:我可以让选项 A 工作吗?还有其他什么解决方案?是否有硬件路由器/NAT 可以满足我的要求?

相关内容