假设我有一个支持以太网的设备,其中有一个硬编码的 IP 地址。我有适用于该设备的软件,可以将其配置为使用该设备的几乎任何 IP 地址,但如前所述,该设备始终具有相同的固定地址。
现在问题来了:假设我想在我的网络中使用多个这些设备。举两个例子就足以说明问题了。显然存在直接的 IP 冲突。我可以运行该软件的两个实例,但无法明确哪个软件实例应该关联到哪个设备。
我认为可能有用的方法是使用支持第 3 层的设备来进行网络地址转换,但我不需要像大多数商品路由器那样设计整个 LAN 的 NAT。我真正想做的是在每个端口的基础上应用静态 NAT。我想告诉路由器(?),“你看到这个设备插入端口 2,认为它是 10.1.1.1?让它看起来像 192.168.1.2,另一个插入端口 3,它也认为它是10.1.1.1 - 使它看起来像 192.168.1.3" .. 等等。(当然假设我局域网的其余部分是 192.168.1/24)
我曾使用过一个执行 VLAN 和路由域的“交换机”,但似乎没有能力在 VLAN 之间转换地址。空间和成本限制排除了将整个支持 NAT 的路由器专用于每个设备的可能性。
那么这种事情可能吗?如果是这样,需要什么样的设备才能获得它?哎呀,也许我正在使用的开关可以做到这一点,我只是不知道要寻找什么并且没有认出它!但如果它根本没有完成,我也想知道为什么不这样做,找出我的想法中的缺陷在哪里。不过,似乎并非不可能。
由于这些设备都具有相同的真实 IP,因此您需要进行某种屏蔽或静态 NAT。
一种解决方案是将每个设备(交换机端口)放在一个单独的 VLAN 上,并在网络之间进行路由。交换机需要能够在每个端口的基础上执行静态 nat。
另一种解决方案可能是在所有 VLAN 的一个端口成员上制作一台 linux 机器,并利用虚拟 IP 并在 linux 中执行路由/nat 部分。iptables 可以做 NAT。
可以办到。其实我去年自己做过。
3个带有LAN监控的Airco单元,每个单元都坚持为10.0.0.2,并期望默认网关为10.0.0.1,子网为255.0.0.0。它可以更改,但只能由不再经营的制造商更改。
购买新的不是一个选择:工业单位大约每件 100.000 美元。
最糟糕的事情:通信必须是双向的:远程访问设备中的网络界面,并且它需要能够自己发送系统日志消息。
诀窍是您需要多个 NAT-ting 路由器才能完成这项工作。单个路由器根本无法处理具有相同 IP 子网的下游 LAN。(至少没有我见过的任何设备......)
我所做的是购买 3 个便宜的货架路由器 (D-Link DIR-615)。将每个单元放在它自己的路由器后面。在 LAN 端将每个路由器设置为 10.0.0.1,并将 HTTP 端口转发到 10.0.0.2 地址。每个路由器的 WAN 端都在常规 LAN 上,每个路由器都有自己的正常 IP 地址。
要连接到一个单元,我只需将网络浏览器指向其路由器的 WAN-ip,剩下的由端口转发完成。设备的 Syslog 消息(传出)经过 NAT 转换后似乎来自 3 个路由器。
唯一的缺点是要重新配置 D-Link,我需要将 PC 连接到每个 D-Link 的 LAN 端,这样我才能进入路由器的基于 Web 的管理界面。(D-link 实际上可以在 WAN 端运行它的管理界面,但据我所知,它只能在端口 80 上运行,这会干扰端口转发。)
如果固定 IP 地址与您网段上的有效主机不重叠,我会简单地将它们插入并在运行管理软件的主机上为它们设置假地址。只需将静态 arp 条目添加到特定设备的 mac 地址,现在您就可以将它们都放在“使用”不同地址的网段上。
我会认为这是一个 hack,但由于你暗示了其他原因,为什么你不能直接解决这个问题,这可能适合。
我相信这里提出的解决方案要简单得多。
要求:您的设备,1 台交换机(能够进行 VLAN 中继和访问,为简单起见,我假设是 cisco),1 台 linux PC。我假设到达这些设备的 IP 地址无关紧要(如果是这样,这将变得更加“有趣”)。
我假设目标设备都在静态 10.0.0.2、网关 10.0.0.1、掩码 255.255.255.0上运行(请参阅此处的另一个答案)。
在交换机上将端口 1 连接到第一台设备:
在交换机上将端口 2 连接到第二个设备:
在交换机上,将端口 3 连接到将控制的 PC:
现在我们已经有了链路层分离,遗憾的是这还不止于此。
在您的 Linux PC 上,设置 2 个虚拟接口。下面进一步包含执行此操作的确切命令。
eth0.10 网络地址 10.0.10.1 255.255.255.0 eth0.20 网络地址 10.0.20.1 255.255.255.0
现在乐趣来了,非常有趣。虚拟 NIC、VRF、iptables 和许多路由!
现在真正有趣的是 ip 表!
就是这样!我认为。我已经用 wireshark 验证了它是有效的......
命令给出:telnet 10.0.10.2
Wireshark 输出:ARP:谁有 10.0.0.2?告诉 10.0.10.1
再次:telnet 10.0.20.2
Wireshark 输出:ARP:谁有 10.0.0.2?告诉 10.0.20.2
这是一项相当大的努力,如果其中任何一项对您有帮助,请告诉我并为答案投票。我们实际上不需要很多昂贵的路由器,VRF 可以解决大部分问题,尤其是与虚拟接口结合使用!有趣的是,这一切现在都可以在 Linux 中运行,很酷的东西