封包和ARP表中的MAC位址不同

封包和ARP表中的MAC位址不同

如果網路上的主機收到的 IP 封包的 MAC 來源位址與本機 ARP 表中該來源 IP 的 MAC 位址不同,會發生什麼情況?

此 IP 的 ARP 表條目過去和將來都會透過有效的 ARP 回應來填入。

現在我注意到接收主機(Ubuntu 18.04)不會發送回覆封包(ICMP 回顯回應或 TCP SYN/ACK ...等)。沒有回覆封包離開介面。

現在的問題是,主人這樣做的原因是什麼。 對封包 MAC 和 IP 位址、本機 arp 表和路由表等進行哪些檢查?

編輯:

為了明確場景:

在此輸入影像描述

如果主機Hb向10.2.0.5(主機Ha)發送ping請求,Ha會收到來源IP為10.1.0.3的ICMP封包,來源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

相關內容