如果我有
>ip ro
192.168.14.0/24 dev eth0
另一台主机可以获取我的 mac 地址。但如果我刷新路由信息:
>ip ro flush table main
arp 解析不起作用。广播数据包“谁有 192.168.14.149”到达 eth0,但操作系统 (Linux) 没有响应,尽管 eth0 的地址是 192.168.14.149。路由和 arp 解析之间存在什么联系?
答案1
在 Linux 上,当启动接口时,会自动为本地网络创建路由。
因此,如果您已将 IP 地址 192.168.14.12 分配给 eth0,则应该创建如下所示的路由。
192.168.14.0/24 dev eth0 proto kernel scope link src 192.168.14.12
如果该链接路由不存在,您将无法发送或接收数据包。
通过运行该命令,ip ro flush table main
您已从系统上的主路由表中删除了所有路由(包括链接路由)。从该 Linux 机器上,您可以通过简单地 ping 另一个 IP 地址来测试事情是否严重中断。您将收到一个Network is unreachable
错误。如果没有路由表,Linux 将无法在网络上执行任何操作。
您可以使用这样的命令来删除指定的路由,而不删除链接路由。
ip ro flush table main scope global
这种操纵链接路线的能力在你尝试做一些高级操作时非常有用,比如创建一个带有代理 arp 的伪网桥。
答案2
所描述的行为与启用的行为相匹配/proc/sys/net/ipv4/*/arp_ignore
。arp_filter
并且rp_filter
在某些情况下可能导致类似的行为。
arp_ignore - INTEGER
Define different modes for sending replies in response to
received ARP requests that resolve local target IP addresses:
0 - (default): reply for any local target IP address, configured
on any interface
1 - reply only if the target IP address is local address
configured on the incoming interface
2 - reply only if the target IP address is local address
configured on the incoming interface and both with the
sender's IP address are part from same subnet on this interface
3 - do not reply for local addresses configured with scope host,
only resolutions for global and link addresses are replied
4-7 - reserved
8 - do not reply for all local addresses
The max value from conf/{all,interface}/arp_ignore is used
when ARP request is received on the {interface}