从netstat -nr
我得到这个“废话”:
Destination Gateway Flags Netif Expire
192.168.2.12 dc:1b:a1:98:31:4f UHLWIi en0 1185
192.168.2.14 a0:e7:ae:62:3:3d UHLWIi en0 1187
192.168.2.15 50:2:91:28:12:f4 UHLWI en0 1196
192.168.2.23 14:91:38:b:c8:97 UHLWI en0 1191
192.168.2.25 14:c1:4e:3a:d4:79 UHLWIi en0 1187
192.168.2.27 60:55:f9:e1:81:9a UHLWI en0 1194
192.168.2.28 38:8b:59:70:6a:4d UHLWIi en0 1187
这些路由阻止了我与这些地址的连接,如果我删除它们,那么我最终就可以 ping 这些地址。
第一个问题为什么网关是MAC地址?
顺便说一句,这些 MAC 地址与分配了这些 IP 地址的设备上的网络适配器的 MAC 地址不对应。
第二个问题是从什么时候开始MAC地址可以用作网关地址?
我尝试添加这样的路由,但是路由命令拒绝任何非 IPv4/6 地址的内容。
答案1
该 netstat 输出完全正常,并不是导致连接问题的根本原因。
您的 Mac 的 en0 接口可能在 192.168.2.x 子网上有一个 IP 地址,因此它将这些地址视为本地地址,因此它使用 ARP 查找这些主机的 MAC 地址并通过 en0 所连接的 LAN 直接向它们发送数据包。通过在“网关”列中显示这些本地 LAN 主机的 MAC 地址,它只是让您不必使用arp -an
查看这些主机的 ARP 表数据。
如果这些 ARP 映射对您来说看起来不正确,那么您的网络一定存在其他问题。
在我看来,我会研究的一些事情可能包括:
- 也许您有两个独立的 LAN,它们都使用 192.168.2.x?比如您意外地在路由器的两侧拥有相同的子网,或者您有两个独立的 NAT 网关,每个网关都使用 192.168.2.x 子网作为 NAT 私有子网,而您的 Mac 的 en0 连接到“其他”NAT 网关私有/LAN 端?
- 也许您的 Mac 上(或者其他地方?)的 IP 地址或子网掩码配置错误,所以它会将这些 IP 地址视为本地地址,而您实际上希望它位于单独的子网上,并且必须使用路由器才能访问这些主机?
- 使用 IEEE OUI 查找工具查找这些 MAC 地址的供应商,看看您是否能找出哪些设备正在声明这些 IP 地址。我实际上刚刚为您做了这件事,看起来它们如下:
- .12 是英特尔设备(可能是 PC 中的英特尔 NIC 或 Wi-Fi 适配器)
- .14 是 Arris 设备(Arris 生产电缆调制解调器/网关和其他网络设备)
- .15 和 .27 都是“Espressif”。该公司为许多 IoT/智能家居设备制造芯片,因此这可能是智能插头或智能灯泡之类的东西。例如,我有一款“Fellow Stagg EKG Pro Electric Kettle Studio Edition”,其 Wi-Fi 接口上使用 Espressif OUI。
- .23 是亚马逊设备(Fire TV 棒?Echo?)
- .25 和 .28 是 Google 设备(Chromecast 棒?某种 Google Nest 设备?Google Wifi AP?)
这些似乎都是家庭网络上合理的设备,因此我认为没有发生任何 ARP 欺骗/中毒,并且我认为没有发生 MAC 地址隐私随机化,因为“本地管理”位(每个 MAC 地址第一个字节中的 2 的位置位)未为这些设置。
答案2
我不确定您的问题是否能够得到完全回答,因为它取决于您的网络,并纠正您对 TCP/IP 堆栈这一部分如何工作的理解。
MAC 地址绑定到接口。它们很容易被伪造,事实上有些操作系统理所当然地这样做是为了提高安全性 - 这也许可以解释您看到的一些 MAC 地址。
在此连接层,对网关或其他设备一无所知 - 网关将具有多个接口 - 每个接口可能具有不同的 MAC 地址。 IP 地址与 MAC 地址相关联,并且到达网关的方式与到达所有其他设备的方式相同。 唯一不同的是,其他设备的路由可以通过网关的 IP 进行定向 - 但关键的是,计算机仍然需要解析网关的 IP 地址才能使用“以太网协议”与其通信
这仍然留下了一个问题:为什么某些目标 IP 地址与当前不在您网络上的设备的 MAC 地址相关联。可以合理地推测 DHCP 服务器留出了一小部分 IP 地址并重复使用地址 - 如果是这种情况,您应该考虑增加 DHCP 服务器中的 IP 范围。另外,请检查连接到您网络的 Apple 设备是否未启用 MAC RANDOMIZATION - 因为这会导致 IP 地址更改并填满您的 DHCP 映射。
答案3
第一个问题为什么网关是MAC地址?
macOS 对路由和邻居(ARP)缓存使用相同的表,它之所以能做到这一点是因为(参见下一部分)。
第二个问题是从什么时候开始MAC地址可以用作网关地址?
从某种意义上说,自古以来。网关地址从未放在 IP 标头的任何地方;实际上唯一目的路由表中的网关地址随后将被转换为以太网头的某种 MAC 地址。
例如,当您有一条“通过 192.168.1.1”的路由时,这实际上意味着“对 192.168.1.1 进行 ARP 查询并发送到结果 MAC 地址”。本地子网路由(没有网关)几乎相同,意味着“对目的地本身进行 ARP 查询”。
考虑到这一点,macOS 将本地子网路由克隆¹为具有其解析的 MAC 地址的各个主机路由(而不是拥有完全独立的“ARP 缓存”表)的行为可能不寻常,但绝不奇怪。
¹(根据手册,W
这意味着克隆路由 - 这是 BSD 系统上的一种做法,用于根据更广泛的子网路由缓存更具体的路由。)