Ubuntu Linux 中的 ARP 请求被发送到不同的子网

Ubuntu Linux 中的 ARP 请求被发送到不同的子网

这个问题与这个问题非常相似:

Linux 正在向其他子网中的主机发送 ARP 请求?

主要问题 - Ubuntu Linux 服务器正在发送 ARP 请求,询问不同子网上主机的 MAC 地址。

一台路由器物理连接了四个不同的 C 类网络。没有 VLAN 或任何其他隔离。

路由器在四个 C 类子网中各有一个 IP 地址。这允许在四个子网之间进行路由。

Ubuntu Linux 服务器的 IP 地址为 xx250.2。

当对其中一个子网 (xx249.x) 执行 ping 操作时,某些请求成功,而其他请求则失败。对于那些失败的请求,Wireshark(在 Ubuntu Linux 服务器中运行的数据包嗅探器)显示它正在发送 ARP 数据包(“谁拥有 IP xx249.x?”)

为什么会发生这种情况?服务器不应发送任何 ARP 数据包,这些数据包的目的地址不在同一子网上。

服务器上的网络配置为 xx250.2。子网掩码为 255.255.255.0。网关为 xx250.1。静态设置。

路由表尚未修改,只是默认的:

    Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         x.x.250.1   0.0.0.0         UG    0      0        0 eth0
x.x.250.0   0.0.0.0         255.255.255.0 U     0      0        0 eth0

Linux 服务器上的 arp 缓存显示 xx249.x 和 xx250.x 网络中系统的许多 MAC 地址。同样,这种情况不应该发生。

现在 - 使用 Windows XP 计算机进行测试。将其放入与 Linux 服务器相同的子网中。它可以 ping 通 Linux 服务器无法 ping 通的 xx249.x 子网中的地址。

Ubuntu/Linux 的 TCP 堆栈中肯定存在某种潜在错误。不应该发生向其他网络/子网发送 ARP 数据包的情况。

答案1

这个问题已经解决了。

Linux 显然不像 Windows 机器那样完全遵循 TCP 堆栈的常规规则。

我重启了 Linux 服务器。对有问题的 IP 地址 (xx249.76) 执行了 ping 操作。

从路由器 (xx250.1) 收到 ICMP 重定向,内容是“嘿,您可以直接与 xx249.76 通话,无需通过我”。收到该信息后,ping 响应立即超时并退出。

该路由器是 MicroTik 路由器,我敢打赌它也是基于 Linux 的。

由于这四个子网都在同一个路由器上,因此 MikroTik 设备想法它不需要中继信息。错了。

解决方案是更新 /etc/sysctl.d/10-network-security.conf 文件并添加以下几行:

net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.all.accept_redirects = 0
net.ipv6.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv6.conf.default.accept_redirects = 0

这告诉我的 Linux 服务器完全忽略任何 ICMP 重定向。

服务器已重启。开始 ping xx249.76,仍然收到重定向通知,但被忽略,服务器继续成功 ping 该 IP 地址。

相关内容