在单个路由器上分别访问具有工厂 IP 的多个设备。根据端口强制IP?

网络工程 路由器
2022-03-03 19:39:39

因此,我对访问具有相同 IP 的设备进行了很多研究,但未能找到太多答案,但我想有一些解决方案,而且这个问题有些普遍。

我经常发现自己需要配置一堆具有工厂 IP 的硬件设备。传统的方法是单独连接它们并配置它们,然后将它们从网络中取出以部署到其他地方。

我厌倦了这种重复,所以我创建了一个节点 JS 应用程序来为我做这件事,问题是它们仍然都在同一个 IP 上,所以我仍然必须一次做一个。我设想的是一些路由器配置,其中每个物理端口都有一个预定的 IP 地址。我需要配置这些端口以将流量转发到硬件的工厂 IP,但是一旦完成,我可以将它们全部连接到路由器,然后让我的节点应用程序使用端口分配的 IP 同时配置它们地址而不是工厂 IP。

任何信息,甚至是朝着正确方向的轻推,将不胜感激!

我看到了这篇文章:Assign an IP address based on switch port

它似乎非常接近我的需要,只是它看起来需要将设备设置为 DHCP。对于带有静态 IP 作为出厂默认设置的硬件,这不是一个选项。

4个回答

即使每台设备都有相同的 IP,它也有另一个对每台设备来说都是唯一的地址:Media Access Control (MAC)地址。

因此,您必须找到一种方法来访问具有此 MAC 地址的设备。

IP 到 MAC 地址的绑定是通过Address Resolution Protocol (ARP). 通常会执行 arp 解析以关联它们,但您可以使用管理站上的静态 ARP 条目手动执行此操作。

您可以尝试:

  • 收集设备的所有 MAC 地址,将它们放在一个文件中
  • 将您的所有设备和管理站连接到交换机(无需路由器)
  • 让您的应用程序读取 MAC 列表文件,为第一个设备设置静态 arp 条目,对其进行配置,将静态 ARP 条目更改为第二个设备,等等...

这可能需要您的软件在工作站上以管理权限运行,才能允许设置静态 ARP 条目。

这可以使用 Linux 机器来完成。可能也可以使用思科之类的一些高端路由器来完成,但我没有这些经验。

Linux 支持所谓的“网络名称空间”。每个“网络命名空间”都是网络堆栈的一个单独的逻辑实例。

安装大量网络控制器或连接支持 VLAN 的交换机,将连接到 Linux 机器的端口设置为中继,并为每个 VLAN 创建一个虚拟接口。

然后将用于连接设备的每个网络接口移动到它自己的网络命名空间。使用虚拟以太网 (veth) 设备将辅助网络命名空间连接回主网络命名空间。

现在在每个辅助网络命名空间中实施 NAT。您可能希望同时更改源 IP 和目标 IP。

问题是每个路由器接口必须在不同的网络中;路由器在网络之间路由,而不是从一个网络返回到同一个网络。在同一网络中具有多个接口的路由器将不知道使用哪个接口。

第 2 层方法:

使用映射到您当前要与之通话的设备的静态 ARP 条目。如果它们在路由器后面,则需要在路由器上配置静态 ARP。

(简单)第 3 层方法:

将每台设备放在自己的路由器后面。配置您的本地路由以使用您当前要与之通话的设备前面的路由器。

使用 NAT 的第 3 层方法:

将每台设备放在自己的路由器后面。在路由器上,配置目标NAT/端口转发/虚拟IP,将需要的端口(例如80)转发到它后面的设备。相反,与路由器交谈,您就拥有了它背后的设备。这使您可以同时与多个设备通话。

当您需要强制路由通过特定接口时,由于依赖于(简单)路由的端口转发,使用单个路由器实现最后一种方法通常会失败。如果您找到能够做到这一点的路由器,那就是您所需要的。此外,您需要使用入口 IP 池或单个 IP 上的多个端口来分隔端口转发。使用一堆简单的 SOHO 路由器可能会便宜得多。