Linux

Linux 主機上具有來自同一網路的 IP 的多個 NIC 響應單個 MAC

  • August 20, 2013

CentOS 主機配備多個 NIC。所有 NIC 都綁定到同一個子網(假設為 10.0.0.0/24)。它們的 IP 配置由 DHCP 伺服器提供(作為保留)。

在嘗試為屬於某個特定 NIC(arp -a來自 Windows 主機)的某個特定 IP 地址遠端獲取 ARP 條目時,我總是得到相同的 MAC 地址,它等於主機的第一個介面 MAC 地址(eth0),而不管真實的適配器的 MAC。例子:

adapter, ip, mac, arpcache entry:

eth0, 10.0.0.1, aa:aa:aa:aa:aa:00, aa-aa-aa-aa-aa-00

eth1, 10.0.0.2, aa:aa:aa:aa:aa:11, aa-aa-aa-aa-aa-00

eth2, 10.0.0.3, aa:aa:aa:aa:aa:22, aa-aa-aa-aa-aa-00

…

對於類似配置的 Windows 主機,我為不同的適配器獲取不同的 MAC(根據適配器的配置)。

為什麼 Linux 主機以單個 MAC 響應?為什麼 Windows 主機的行為相反?這種行為的原因是什麼?

如何配置目前主要的 Linux 發行版以響應不同的 MAC?我已經閱讀了類似的主題Ubuntu Linux - multiple NICs, same LAN… ARP 響應總是發出單個 NIC,但建議的答案不適用於我的 CentOS 6.4 主機 - eth0 以上的適配器無法訪問。

因為 IPv4 的 Linux 核心預設實現基於“弱主機模型”: http ://en.wikipedia.org/wiki/Host_model

您可以設置多個路由表,每個路由表都為適當的網關設置單獨的預設值,並設置規則來告訴來自某些 ips 的流量使用適當的路由。

據我了解,您希望從獲取請求的 NIC 傳輸 arp 回复?

將以下內容放入您的 /etc/sysctl.conf

net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2

然後執行

sysctl -p

這些規則確保 arp 請求僅在它們到達的介面上得到響應

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