Networking

數據包和 ARP 表中的不同 MAC 地址

  • July 22, 2019

如果網路上的主機收到一個 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 收到源 IP 為 10.1.0.3 的 ICMP 數據包,源 MAC 地址為路由器的 MAC 地址。但是主機 Ha 的 ARP 表有一個條目:10.1.0.3 -> Hb MAC 地址。因此MAC地址不同!

這種行為是完全可以預料的,並且與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在主機上禁用。此外,您應該編輯該文件以使此更改永久生效。Ha``sysctl -w net.ipv4.conf.all.rp_filter=0``sysctl -w net.ipv4.conf.<iface-N2>.rp_filter=0``/etc/sysctl.conf
  • 只需將Hb主機上的路由添加到10.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

引用自:https://serverfault.com/questions/975991