我们有一个带有 2 个网络接口的 Linux 面板。在此面板上运行一个软件,该软件需要与我们网络中的设备进行通信,并且需要可以从客户网络进行访问。一个接口连接到我们的机器网络,具有固定网络地址 (192.168.1.x),其中面板始终具有 IP 192.168.1.1 。另一个接口是与客户网络的连接。因为我们将机器交付到各地,所以客户网络具有各种配置。因此,我们的第二个网络端口也可能位于 192.168.1.x 网络中,也可能我们应该使用相同的 IP 192.168.1.1
这个配置可以吗?我如何在 Linux 中配置它?
答案1
不幸的是,这并不能很好地工作,不是因为 IP 位于两个接口上,而是因为子网位于。
如果您的设备需要与 192.168.1.2 通信,应在哪个接口上发送该流量?也许是客户的设备试图与您的设备通信,也许是您的设备试图与您的其他设备之一通信。内核不知道(没有一堆复杂的路由设置)。
为此,有几种方法:
从不常用的 RFC1918 空间中选择尽可能小的子网。这可以最大限度地减少冲突的机会,但不能消除它。
使内部网络空间可配置,以便客户(或您的支持人员)可以将其更改为不冲突的内容。
使用链路本地地址而不是 RFC1918 空间。 IPv4 和 IPv6 都有链路本地地址。
申请公共(可路由)IP 地址以用于此目的。您可以在所有设备上使用相同的一组它们,基本上您就像 RFC1918 空间一样使用它,只是您保证它不会发生冲突。 IPv4 很难做到(我们基本上已经用完了),如果可以使用 IPv6 应该会容易得多。
如果需要与客户设备通信的进程与需要与其他设备通信的进程完全分开,那么您可以将每个接口放在自己的网络命名空间中(请参阅 参考资料
ip netns
),然后每个命名空间只能看到 192.168. 1.0/24子网,所以不存在冲突。这将是复杂的路由设置中最简单的一个。