我想检查我对将同一子网中的 IP 分配给同一服务器中的多个 NIC 的理解。
我有一台带有 2 个 NIC(例如 NIC1 和 NIC2)的服务器。我的目标是,在将 IP1 设置为 NIC1,将 IP2 设置为 NIC2 后,让发往 IP1 的数据包转到 NIC1,发往 IP2 的数据包转到 NIC2。IP1 和 IP2 都位于同一子网中。我读到过这是个坏主意,事实上,我遇到了连接问题。
例如,所有流量似乎都流向 NIC1。当我在 NIC1 上执行 tcpdump 时,它正在接收 dest.ip = IP1 和 IP2 的数据包。但是,NIC2 似乎无法接收任何数据包。
我想我错误地认为在相应的接口上设置 IP 意味着该接口只会接收来自分配的 IP 的流量。
但是,我尝试在 NIC2 上设置来自另一个子网的 IP,但它也无法 ping 通属于同一(新)子网的另一个 IP。
我不确定我的 NIC2 出了什么问题——这不应该是硬件问题,因为我的其他服务器也有同样的问题,即 2 个 NIC,但只有 NIC1 能够发送/接收流量。
答案1
Linux 系统将默认应答属于以下地址的 IPv4 地址的 ARP 请求:任何接口,而不仅仅是接收请求的接口。
如果您在同一个子网中有两个接口,则发送主机将从两个接口接收针对同一 IP 地址的 ARP 回复,并且有一半的时间会学习到错误的 MAC 地址。
设置arp_ignore
sysctl 以避免这种情况:
/etc/sysctl.d/90-net.conf
net.ipv4.conf.all.arp_ignore = 1