路由和 arp

路由和 arp

如果我有

>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_ignorearp_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}

相关内容