CentOS 主机配备多个 NIC。所有 NIC 都绑定到同一子网(假设为 10.0.0.0/24)。它们的 IP 配置由 DHCP 服务器提供(作为预留)。
当尝试远程获取属于某个特定 NIC 的某个特定 IP 地址的 ARP 条目时(使用arp -a
Windows 主机),我总是得到相同的 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 - 多个 NIC,同一个 LAN...ARP 响应总是从单个 NIC 发出但是建议的答案对我的 CentOS 6.4 主机不起作用 - eth0 以上的适配器变得无法访问。
答案1
由于Linux内核对IPv4的默认实现是基于‘弱主机模型’的: http://en.wikipedia.org/wiki/Host_model
您可以设置多个路由表,每个路由表都有相应网关的单独默认值,以及告诉来自特定 IP 的流量使用适当路由的规则。
答案2
据我了解,您希望从获取请求的 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 请求仅在其到达的接口上得到响应