
如果網路上的主機收到的 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
上停用它即可。另外,您應該編輯該文件以使此變更永久生效。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