为什么虚拟接口上的 IP 会响应 eth0 上的 ARP 请求

为什么虚拟接口上的 IP 会响应 eth0 上的 ARP 请求

我在我的(Ubuntu 15.10)笔记本电脑上启动了一个虚拟接口,其 IP 地址为 10.0.3.144,网络掩码为 255.255.255.255

我有一个 USB -> 以太网适配器。插入后,配置为提供“eth0”接口,该接口通过 DHCP 获取其 IP 地址,范围为 10.0.3.2 - 10.0.3.10(网络掩码 255.255.255.0)

我注意到,当 eth0 启动时(例如在 10.0.3.2 上),其他机器可以达到 10.0.3.144 - 这是期望的行为,但是我不明白为什么会发生这种情况。 我没有设置任何类型的桥接,所以我认为机器不会应答虚拟接口。

我可以在笔记本电脑的 eth 接口上看到 arp 请求和回复 -

tcpdump -n -i eth0 arp tcpdump:抑制详细输出,使用 -v 或 -vv 进行完整协议解码,在 eth0 上监听,链路类型 EN10MB(以太网),捕获大小 262144 字节

tcpdump -n -i eth0 arp
14:01:31.948781 ARP, Request who-has 10.0.3.144 tell 10.0.3.254, length 48
14:01:31.948842 ARP, Reply 10.0.3.144 is-at 00:23:55:9c:52:31, length 28

如果我删除 10.0.3.254 上的 ARP 条目(碰巧也是运行 Linux 的路由器),此行为会重复发生

有人能建议我是否可以依赖这种行为吗?(以及为什么计算机会在未绑定到它的 IP 地址的接口上回答 - 以及相关地 - 在某些情况下,这是否有可能在不同子网上有多个接口并且数据包应该被迫穿越防火墙的情况下堵塞路由?)。

答案1

为什么计算机会在接口上应答未绑定到它的 IP 地址

在 Linux 主机上情况不一定如此。
默认情况下,IP 地址属于 Linux 主机,而不是接口。
请参阅Linux 认为 IP 地址属于主机,而不是接口

Linux 的这个“特性”有时被称为“ARP 通量问题”,在地址解析协议 (ARP)

在 Linux 中,有几种方法可以改变这种行为。我过去曾修补过内核来消除它。其他方法干扰较少,如LVS 操作指南
如果你什么都不做,那么这个 ARP 行为应该是一致的。

答案2

其他设备认为 10.0.3.144 是网络的一部分。255.255.255.255 子网掩码(又名 /24)指定 256 个地址的网络大小。按照子网的布局方式,包含 10.0.3.2-10.0.3.10 的 256 个地址子网是从 10.0.3.0 到 10.0.3.255 的子网。因此,当其他设备尝试与 10.0.3.144 通信时,该地址似乎属于同一子网。因此,其他设备将尝试使用第 2 层(ARP、以太网/WiFi)进行通信,而不是第 3 层(使用 IPv4/IPv6 进行路由)。

接收第 2 层流量的计算机将 10.0.3.144 识别为其使用的子网的一部分。因此,计算机会注意发往计算机的流量。也许在稍后,计算机甚至可能意识到 10.0.3.144 是另一个 NIC 上的 IP 地址。由于网络是通过不同的软件组件实现的,旨在处理 OSI 模型的一个或多个“层”,因此将 10.0.3.144 识别为第 3 层 IP 地址的组件完全有可能不是确定 ARP 地址可接受的同一组指令/代码/程序。

了解计算机通常没有系统范围的 IP 地址。网络端口有 IP 地址。因此每个网卡通常都有自己的 IP 地址。

如果您不希望第二张网卡接收流量,您可能需要执行以下一项或多项操作:

  • 将 IP 地址设置为不同子网的一部分。(查看可变长度子网掩码(“VLSM”)图表可能有助于直观地了解哪些地址属于哪些子网。常用图表通常只关注最后一个八位字节,使图表最容易理解 /24 - /32 网络(其中 IPv4 子网掩码的前 3 个八位字节为(“255.255.255”)。
  • 禁用转发可能会有所帮助。我认为,对于同一系统上到不同 NIC 的流量是否被视为“转发”,不同的计算机可能会采取不同的行动。如果启用了转发,那么流量到达另一个 NIC 就更不奇怪了。
  • 防火墙可能有助于阻止某些类型的流量。(请注意,某些防火墙可能受到限制。例如,我碰巧知道在 OpenBSD 中,DHCP 客户端使用不会被 IP 防火墙阻止的 BPF。)

回答另一个问题:桥接通常可以被认为是“第 2 层转发”。即使您不使用第 2 层桥接,第 3 层转发也可能导致流量跨越到另一个 NIC。

关于您是否可以依赖该行为:我相信可以。但您应该理解它,并提出问题,直到您理解为止。一旦您了解了事情应该如何运作,您就可以验证事情是否就是这样运作的;如果是这样,它应该是相当可靠的。如果仍然有谜团,那么可能会有惊喜,所以一定要继续询问任何仍不清楚的事情。

相关内容