![如何让 Linux 内核向具有重叠子网的多个网络接口发送 ARP 请求?](https://linux22.com/image/759477/%E5%A6%82%E4%BD%95%E8%AE%A9%20Linux%20%E5%86%85%E6%A0%B8%E5%90%91%E5%85%B7%E6%9C%89%E9%87%8D%E5%8F%A0%E5%AD%90%E7%BD%91%E7%9A%84%E5%A4%9A%E4%B8%AA%E7%BD%91%E7%BB%9C%E6%8E%A5%E5%8F%A3%E5%8F%91%E9%80%81%20ARP%20%E8%AF%B7%E6%B1%82%EF%BC%9F.png)
我有一台 Linux PC,具有以下物理网络接口:
- 用于大多数流量的主 LAN/以太网端口。
- 以太网(从外部设备)到 USB(进入我的 PC),用于连接到具有静态 IP 的单个外部设备。PC 的网络接口也被赋予静态 IP(因为外部设备没有 DHCP 服务器)。
之所以有第二个接口,是因为外部设备的 IP 地址是静态的,并且通常与 LAN 上运行的其他类似设备发生冲突。因此,我们使用这些以太网转 USB 适配器将这些外部设备隔离到各个 PC。
理想情况下,办公室 LAN 应该在与外部设备不同的子网上运行(我认为这可以缓解我遇到的问题),但不幸的是,这是不可行的。
在 Windows PC 上,如果有两个网络接口位于同一子网中,则运行起来似乎相对顺畅。特别是,当与外部设备(从 PC)通信时,我可以看到(使用 Wireshark)ARP 请求最初在主网络接口上发出,然后 Windows NT 移动到辅助接口,并在那里找到外部设备。
在我的 Linux PC 上,Linux 内核似乎不遵循将 ARP 请求发送到所有网络接口的相同行为。ARP 请求似乎只会发送到主网络接口。如果我使用以下命令:
ping -I secondaryNetInterface staticIPOfExternalDevice
...通讯按预期进行。
我的问题是:我能让 Linux 内核以与 Windows NT 类似的方式运行吗?
为了让事情更加清楚,这是我的 Linux PC 的路由表:
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default _gateway 0.0.0.0 UG 100 0 0 eno2
link-local 0.0.0.0 255.255.0.0 U 1000 0 0 eno2
192.168.0.0 0.0.0.0 255.255.255.0 U 100 0 0 eno2
192.168.0.0 0.0.0.0 255.255.255.0 U 101 0 0 eno3
...其中eno2
是主接口,eno3
是辅助接口。