当数据包被路由到机器本身的 IP 时,它会到达哪个网络接口?

当数据包被路由到机器本身的 IP 时,它会到达哪个网络接口?

我像这样配置了我的机器:

eth0 - 192.168.70.128/24, default gw 192.168.70.128

例如,当尝试发送 ICMP 请求以便通过默认网关路由时,我收到 ICMP 无法访问主机错误:

From 192.168.70.128 icmp_seq=1 Destination Host Unreachable

这是有道理的。

查看流量捕获,我可以看到环回接口上的 ICMP 不可达数据包:

5   3.072955110 192.168.70.128  192.168.70.128  ICMP    128 Destination unreachable (Host unreachable)

当然,ICMP 不可达消息包含无法发送到目的地的数据包:

Internet Protocol Version 4, Src: 192.168.70.128, Dst: 8.8.8.8
    0100 .... = Version: 4
    .... 0101 = Header Length: 20 bytes (5)
    Differentiated Services Field: 0x00 (DSCP: CS0, ECN: Not-ECT)
    Total Length: 84
    Identification: 0x3b84 (15236)
    Flags: 0x40, Don't fragment
    ...0 0000 0000 0000 = Fragment Offset: 0
    Time to Live: 64
    Protocol: ICMP (1)
    Header Checksum: 0xe7ec [validation disabled]
    [Header checksum status: Unverified]
    Source Address: 192.168.70.128
    Destination Address: 8.8.8.8
Internet Control Message Protocol
    Type: 8 (Echo (ping) request)
    Code: 0
    Checksum: 0x7a29 [unverified] [in ICMP error packet]
    [Checksum Status: Unverified]
    Identifier (BE): 25938 (0x6552)
    Identifier (LE): 21093 (0x5265)
    Sequence Number (BE): 1 (0x0001)
    Sequence Number (LE): 256 (0x0100)
    Timestamp from icmp data: May  5, 2022 12:15:36.000000000 EDT
    [Timestamp from icmp data (relative): 3.291527300 seconds]
    Data (48 bytes)

我缺少的是原始数据包 - 它没有在我的机器上的任何接口上捕获,那么它去哪里了?我如何才能捕获它?

答案1

指定自己作为网关,意味着创建一个链接上路由,就像没有指定网关一样。(这在 Linux 上并不常见,但我认为这是来自 BSD。)

换句话说,你的0.0.0.0/0 via 192.168.70.128作品就像0.0.0.0/0 dev eth0,并表明全部的0.0.0.0/0 是一个“本地子网”,其中目标 IP 地址必须通过 ARP 进行解析,并且数据包直接发送到目标主机的 MAC 地址(而不是像普通“网关”路由那样发送到网关的 MAC)。

因此,您没有在 eth0 上看到传出的 ICMP 数据包的原因是它们无法发送然而,直到操作系统知道将它们发送到哪个下一跳 MAC 地址——它必须先成功进行 ARP 查找。在这种情况下,Linux 将8.8.8.8在 eth0 接口上发送 ARP 查询。(常规“网关”路由也是如此,只是对于它们来说,网关 IP 地址需要通过 ARP 进行解析。)

错误“目标主持人“不可达”意味着最终主机没有收到 ARP 回复,这与您尝试 ping 子网内不存在的 IP 地址完全相同。


(但总体来说这并不是不合理的配置——至少在过去,一些网络习惯配置所有主机以假设整个 0.0.0.0/0 是本地的,网关将代表每个主机做出响应,即“代理 ARP”。这有几个目的 - 主机不需要知道网关的地址,并且可以有多个网关处理不同的目的地,而主机不需要知道确切的路由。)

相关内容