2 个 NIC 2 个 IPS 同一子网

2 个 NIC 2 个 IPS 同一子网

我正在设置一个具有两个 NIC 的 SUSE 11 盒:

eth0 - 192.168.10.150/24 - 00.0C.29.DC.10.CA (MAC)
eth1 - 192.168.10.151/24 - 00.0C.29.DC.10.DE(MAC)

我需要将两者放在同一个子网中,因为它们将需要点对点连接到另一个设备(存储)。但我在安装过程中发现了一些问题;从工作站执行 ARP 时,我发现了以下行为

[root@workstation ~]# arp -n
地址 HWtype HWaddress 标志 掩码 Iface
192.168.10.151 以太 00:0C:29:DC:10:CA C eth0
192.168.10.150 以太 00:0C:29:DC:10:CA C eth0

如您所见,它好像eth0获取了所有请求。事实上,如果我断开电缆,eth1IP.151仍然可以 ping 通;这不是我想要的。如果我断开电缆,eth0所有 IP.150 - .151都无法 ping 通,但.151仍然可以访问。

为什么会发生这种情况?我eth0只需要绑定到和.150。似乎 eth0 拥有 IP。eth1.151

这不起作用:

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

这也并非

net.ipv4.conf.default.arp_filter=1
net.ipv4.conf.all.arp_filter=1

有什么建议么?

答案1

我同意 womble 的回答,但我会直接回答你的问题。

第一的
您提到的 2 个设置就是您想要的。

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

但是设置完这个之后你必须强制进行 ARP 更新。由于您刚刚启用这些设置,所有远程主机仍然缓存着旧的 ARP 条目,看起来就像它们没有做任何事情一样。

arping -U -c 2 -I eth0 192.168.10.150
arping -U -c 2 -I eth1 192.168.10.151

这将为每个 IP 发送一个 ARP 广播,更新所有邻居的缓存。

第二
您需要设置基于源的路由规则。
这会变得相当复杂,因为当您将接口联机时会自动设置路由规则。您需要覆盖这些规则。

ip route add 192.168.10.0/24 dev eth1 src 192.168.10.151 table 151
ip rule add from 192.168.10.151/32 lookup table 151 prio 10000
ip route del 192.168.10.0/24 dev eth1 src 192.168.10.151 table main

第一行创建了一条新的路由规则,用于将流量从 192.168.10.151 的正确接口路由出去。第二行告诉内核,如果源 IP 是 192.168.10.151,则使用此路由规则(由于我们为其prio分配了权限,因此此查找发生在“主”表之前)。第三行从“主”路由表中删除旧规则,以便从其他接口发出的流量不会意外使用它。

现在,您需要设置它,以便在您的接口联机时以某种方式运行。这是特定于发行版的,所以我无法告诉您如何完成这一部分。

第三
事物应该没有这个也可以工作,但是您可能还想将以下内容添加到 sysctl:

net.ipv4.conf.eth0.rp_filter=0
net.ipv4.conf.eth1.rp_filter=0

这将防止内核丢弃来自错误接口的任何流量。
(更新:请注意,这是rp_filter,而不是arp_filter。我认为这是您想说您已经尝试过的设置)

答案2

“我需要将两者都放在同一个子网中,因为它们将点对点连接到另一个设备(存储)。”

你的理由毫无意义。如果它们都在同一个子网中,那么根据定义,它就不能是点对点链接。如果你在两个不同的广播域上配置了相同的 IP 子网……那么你就完蛋了。解决这个问题,你所有的问题都会消失。

相关内容