我正在设置一个具有两个 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)
我需要在同一个子网中,因为它们将 ne 连接到另一个设备(存储)点对点。但是我在安装时发现了一些东西;从工作站做 ARPs 我发现下面的行为
[root@workstation ~]# arp -n 地址 HWtype HWaddress Flags 掩码接口 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
和eth1
只绑定到.151
. 似乎 eth0 拥有这些 IP。
这不起作用:
net.ipv4.conf.all.arp_ignore=1
net.ipv4.conf.all.arp_announce=2
Run Code Online (Sandbox Code Playgroud)
这也不是
net.ipv4.conf.default.arp_filter=1
net.ipv4.conf.all.arp_filter=1
Run Code Online (Sandbox Code Playgroud)
有什么建议?
我同意 womble 的回答,但我会直接回答你的问题。
首先
你提到的2个设置是你想要的。
net.ipv4.conf.all.arp_ignore=1
net.ipv4.conf.all.arp_announce=2
Run Code Online (Sandbox Code Playgroud)
但是,在设置之后,您必须强制进行 ARP 更新。由于您刚刚启用了这些设置,所有远程主机仍然缓存了旧的 ARP 条目,并且看起来好像它们没有做任何事情。
arping -U -c 2 -I eth0 192.168.10.150
arping -U -c 2 -I eth1 192.168.10.151
Run Code Online (Sandbox Code Playgroud)
这将为每个更新任何邻居的缓存的 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
Run Code Online (Sandbox Code Playgroud)
第一行创建一个新的路由规则,将流量路由到 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
Run Code Online (Sandbox Code Playgroud)
这将防止内核丢弃任何进入错误接口的流量。
(更新:注意这是rp_filter
,不是arp_filter
。我想这是你想说你已经尝试过的设置)
“我需要在同一个子网中,因为它们将 ne 连接到另一个设备(存储)点对点。”
你的理由毫无意义。如果它们都在同一个子网中,那么根据定义,它不能是点对点链接。如果您在两个不同的广播域上配置了相同的 IP 子网……那么,您就完蛋了。解决这个问题,你所有的问题都会消失。
归档时间: |
|
查看次数: |
4126 次 |
最近记录: |