我有一台运行CentOS 6.4的Linux服务器,用作iSCSI目标。 该服务器具有两个NIC的多宿主,都在同一个子网上。 iSCSI多path负责负载平衡/故障转移,所以我需要的是每个NIC独立运行。 如何configuration此系统以避免与多宿主设置一起出现的所有奇怪的路由和ARP问题,例如在与源不同的接口上返回的stream量,或者接受发送到IP的stream量的一个接口其他。 绑定解决scheme不是一个选项,因为它与iSCSI连接有问题。
重要的东西:
我意识到我从来没有跟上这个问题。 在这里和这里使用一些优秀的互联网资源,我想出了以下configuration。 希望这可以帮助别人。
假设您有两个接口, eth0和eth1 ,IP地址分别为10.1.1.242和10.1.1.243。 这全部位于具有10.1.1.254的默认网关的22/22networking上。
首先创build两个路由表,每个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
这样可以防止stream量在内部穿越网卡,使您可以保留冗余或使用每个网卡来提供不同的function。
您正在寻找ip route并执行策略路由,每个接口都将拥有自己的路由表,并根据这些表做出路由决策(包括哪个接口发送stream量,从哪个地址)。
这是一个很好的网站,从一开始就解释了这些概念,但是如果你愿意的话,你可以直接跳入政策路线 。
您将需要查看arp_announce和arp_ignorevariables,以确保适配器按照您的预期进行响应。
我build议在这里查看文档。 该文档中的VIP值可能是合适的。
在/etc/sysctl.conf中:
net.ipv4.conf.eth0.arp_ignore = 1 net.ipv4.conf.eth0.arp_announce = 2