我有一台运行 CentOS 6.4 的 Linux 服务器,用作 iSCSI 目标。该服务器是多宿主的,有两个 NIC,都位于同一子网上。iSCSI 多路径负责负载平衡/故障转移,因此我只需要让每个 NIC 独立运行。如何配置此系统以避免多宿主设置中总是出现的所有奇怪的路由和 ARP 问题,例如流量从源返回到不同的接口,或者一个接口接受发送到另一个接口的 IP 的流量。绑定解决方案不是一种选择,因为它存在 iSCSI 连接问题。
重要的事情:
- eth0:IP 10.1.1.242 / 序列号 255.255.252.0 / 网关 10.1.1.254
- eth1:IP 10.1.1.243 / 序列号 255.255.252.0 / 网关 10.1.1.254
答案1
我意识到我从来没有跟进过这个问题。使用一些优秀的互联网资源这里和这里,我得出了以下配置。希望这能帮助到别人。
假设您有两个接口eth0
和eth1
,其 IP 地址分别为 10.1.1.242 和 10.1.1.243。它们都位于 /22 网络上,默认网关为 10.1.1.254。
首先创建两个路由表,每个 NIC 一个:
echo "1 lan1" >> /etc/iproute2/rt_tables` echo "2 lan2" >> /etc/iproute2/rt_tables`
接下来,将每个接口的路由添加到适当的表中:
ip route add 10.1.0.0/22 dev eth0 src 10.1.1.242 table lan1 ip route add default via 10.1.1.254 dev eth0 table lan1 ip route add 10.1.0.0/22 dev eth1 src 10.1.1.243 table lan2 ip route add default via 10.1.1.254 dev eth1 table lan2
最后,添加规则来确定使用哪个表:
ip rule add from 10.1.1.242/32 table lan1 ip rule add to 10.1.1.242/32 table lan1 ip rule add from 10.1.1.243/32 table lan2 ip rule add to 10.1.1.243/32 table lan2
这应该可以防止流量在内部穿过 NIC,从而允许您保留冗余或将每个 NIC 用于不同的功能。
答案2
答案3
您需要查看 arp_announce 和 arp_ignore 变量以确保适配器按照您预期的方式响应。
我建议你看一下文档这里。该文档中针对 VIP 的价值观可能比较合适。
在 /etc/sysctl.conf 中:
net.ipv4.conf.eth0.arp_ignore = 1
net.ipv4.conf.eth0.arp_announce = 2