数据包和 ARP 表中的 MAC 地址不同

数据包和 ARP 表中的 MAC 地址不同

如果网络上的主机收到一个 IP 数据包,该数据包的 MAC 源地址与该源 IP 的本地 ARP 表中的 MAC 地址不同,会发生什么情况?

该 IP 的 ARP 表条目已经并将通过有效的 ARP 响应填充。

现在我注意到接收主机(Ubuntu 18.04)没有发送回复数据包(ICMP 回应响应或 TCP SYN/ACK 等)。没有回复数据包离开接口。

现在的问题是,主持人出于什么原因采取这样的行为。 对数据包的 MAC 和 IP 地址、本地 arp 表和路由表等进行了哪些检查?

编辑:

为了澄清场景:

在此处输入图片描述

如果主机 Hb 向 10.2.0.5(主机 Ha)发送 ping 请求,Ha 会收到一个 ICMP 数据包,源 IP 为 10.1.0.3,源 MAC 地址是路由器的 MAC 地址。但主机 Ha 的 ARP 表中有一个条目:10.1.0.3 -> Hb MAC 地址。因此 MAC 地址不同!

答案1

此行为完全符合预期,与主机的路由配置有关Hb,主机可能只有通过路由器的默认路由。因此,如果您尚未设置附加路由,则发送到网络N2( 10.2.0.0/24) 的数据包将通过默认路由发送。

因此,该问题是由主机上启用的反向路径过滤器引起的Ha,该过滤器通过限制源地址来丢弃传入的数据包。

要解决此问题,您应该检查主机上下一个命令的输出Ha

  • ip netconf show dev <iface-N2>- 检查rp_filter值。很可能是strict
  • ip route get 10.2.0.5 from 10.1.0.3 iif <iface-N2>- 可能会显示类似的内容invalid cross-device link
  • nstat -az TcpExtIPReversePathFilter- 很可能它具有非零值。

有三种解决这个问题的方法:

  • 只需使用 sysctl (和) 在主机rp_filter上禁用 即可。此外,您还应编辑该文件以使此更改永久生效。Hasysctl -w net.ipv4.conf.all.rp_filter=0sysctl -w net.ipv4.conf.<iface-N2>.rp_filter=0/etc/sysctl.conf

  • 只需在主机上添加路由Hb10.2.0.5直通10.1.0.5地址(对于 Linux ip route add 10.2.0.5 via 10.1.0.5,为 Windows,为命令route add 10.2.0.5 mask 255.255.255.255 10.1.0.5

  • 在路由器上配置源地址转换 (NAT),将地址重写Hb为路由器地址。执行此操作的 iptables 规则:

iptables -t nat -A POSTROUTING -o <iface-N2> --src 10.1.0.3 --dst 10.2.0.5 -j MASQUERADE

相关内容