ARP 在同一網路上具有多個介面的 Linux 伺服器上以單個 MAC 地址響應
Linux 伺服器有 2 個活動網路介面:
IF:eth1 IP:192.168.1.1/24 MAC:11:11:11:11:11:11 (1GbE) IF:eth2 IP:192.168.1.2/24 MAC:22:22:22:22:22:22 (10GbE)
這個想法是 10GbE 介面 (eth2) 是與網路上的主機通信的主要介面。我想保留第二個 1GbE 介面 (eth1) 作為故障保護。如果 10GbE 介面出現故障:我仍然可以輕鬆進入,可以更新 DNS,以便主機可以連接等。
在觀察介面統計資訊時,我注意到所有流量都在 eth1 而不是 eth2 上發送/接收,儘管網路上的所有主機都在定址這個介面。我確認 DNS A 記錄指向正確介面的 IP。此外,我確認通過 IP 而不是 FQDN 定址介面會產生相同的結果。
我清除了機器上的 ARP 記憶體,並通過 IP 地址 ping 了 eth1 介面。我檢查了我的 ARP 表並找到了 eth1 的 MAC 地址。我再次清除了 ARP 記憶體,並通過 IP 地址 ping 了 eth2 介面。再次,我檢查了我的 ARP 表並找到了 eth1(不是 eth2)的 MAC 地址。
如果我關閉 eth1、物理斷開介面或將其放在不同的邏輯網路上 - 我會得到預期的行為,流量會通過我的 eth2 介面。
我的問題:為什麼會發生這種情況?我看到一些證據表明,由於其“弱主機模型”,這是 linux 核心上的預期行為。
我怎樣才能在同一個網路上保持兩個介面正常執行,並讓它們以我期望的方式工作。
Linux 旨在響應任何介面上的 ARP 請求。假設主機擁有 IP 地址而不是特定介面。您所看到的稱為 ARP Flux。
您可以使用 sysctrl 更改此行為
arp_ignore - 整數
定義不同的模式來發送回復以響應接收到的解析本地目標 IP 地址的 ARP 請求:
0 -(預設):回復任何本地目標IP地址,在任何介面上配置
1 - 僅當目標 IP 地址是傳入介面上配置的本地地址時才回复
2 - 僅當目標 IP 地址是在傳入介面上配置的本地地址並且與發送者的 IP 地址都來自該介面上的同一子網時才回复
3 - 不回複使用範圍主機配置的本地地址,僅回復全域和連結地址的解析