我正在设置一个具有两个 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
获取了所有请求。事实上,如果我断开电缆,eth1
IP.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 子网……那么你就完蛋了。解决这个问题,你所有的问题都会消失。