请耐心听我说。这涉及这个 Stack Overflow 问题。
我的 Linux 设备(实际上是 BeagleBoard)有两个接口,eth0 和 eth1。它需要连接到 eth0 上的客户端网络(地址范围未知,可能是 DHCP,可能是 192.168.0.x)。我的软件还需要通过私有链接连接到 eth1 上的另一个设备(即设备到设备)。我希望将私有网络完全独立 - 它不应该在主网络上可见。只有 Beagle 上的我自己的代码会与 eth1 上的设备通信。
我已经弄清楚了如何让我的 C 代码将套接字绑定到特定接口以及 IP 地址。我还可以将私有链接放在主网络的单独子网上,这样一切都很顺利。
但是,鉴于我不知道主网络的地址范围,并且我想为我的私有链接使用固定 IP 地址(为简单起见),我该如何确保地址范围不会发生冲突?我尝试将私有设备放在与主网络上的某个设备相同的 IP 地址上(用于测试),这导致了路由问题。
是否可以设置路由,以便重复的 IP 地址(在主网络和我的专用网络上)可以工作(假设我可以指定接口和 IP 地址)?或者这是疯话?我不需要在网络之间实际“路由”任何东西,我的专用设备也不需要看到主网络。我只需要它即使 IP 地址恰好相同也能正常工作。
或者,我可以在私人网络上使用保留的 IP 地址范围之一,以便我知道它不会与主网络冲突吗?
我一直在寻找这个问题的答案,但这似乎是一件不寻常的事情,而且所有的答案都假设两个以太网接口将连接到不同的子网。
有什么想法吗?包括用其他方法...谢谢!
答案1
两个部分;首先是 Linux 的具体方面:
创建您的接口时要非常小心,确保您的内部接口不会影响 Linux 路由表。网络状态和知识产权命令应该是您分析路线信息的好朋友。
一旦您的接口不是全局可路由的,那么请在创建套接字后使用 setsockopt 绑定到该接口。以下是您可能需要的两个选项:
SO_BINDTODEVICE
SO_DONTROUTE
另请参阅linux/if.h。
比较简单但不能完整地回答你的问题;使用 IPv6。