问题描述

在已存在的EC2上新添加网卡后发现,凡是和eth0在同一个网段的只能通过eth0访问,不能通过eth1。同样的,在eth1网段的只能通过eth1访问,不能通过eth0访问。 如果既不在eth0也不再eth0 默认走eth0(在没有修改路由表的前提下,默认路由是eth0)

问题分析

之所以出现您列出的网络访问现象,是因为目前的实例当中有两块网卡,而发生故障的时候,路由的走向是从网卡2进来的数据包从网卡1发送出去,或者从网卡1进来的数据包从网卡2发送出去,AWS底层会把这样的数据包丢弃。

因此需要手动定义策略路由,在响应网卡1进来的数据包时通过网卡1发送,响应网卡2进来的数据包时通过网卡2发送。

解决方案

关于这个现象和解决方案,可以参考这遍文档:

http://www.linuxjournal.com/article/7291

该文档较长,这里介绍一个配置路由策略的事例,可以按照此事例的方法结合具体网络环境进行配置:

1、首先为网卡1和2创建各自的路由表:

ip route add [子网1网段] via [您子网的网关IP] dev eth0 tab 1

ip route add [子网2网段] via [您子网的网关IP] dev eth1 tab 2

可以通过ip route show table 1和ip route show table 2查看您刚刚完成的配置是否正确
2、然后创建策略路由

ip rule add from [eth0的IP]/32 tab 1 priority 500

ip rule add from [eth1的IP]/32 tab 2 priority 600

这个配置的意思是,将原地址为eth0的IP的包按照路由表1发送,将原地址为eth1的IP的包按照路由表2发送

3、查看并刷新

可以通过 ip rule命令查看已经配置的路由策略。一个示例的策略如下:


$  ip rule

0:  from all lookup local

500:    from 172.31.30.238 lookup 1

600:    from 172.31.22.112 lookup 2

32766:  from all lookup main

32767:  from all lookup default

最后刷新路由策略的cache,之后您可以继续测试。


ip route flush cache

如果希望实例重启后ip route 和 ip rule所配置的规则还在,需要按照以下方式进行配置


echo “[子网1网段] via [您子网的网关IP] dev eth0 table 1″ > /etc/sysconfig/network-scripts/route-eth0

echo “[子网2网段] via [您子网的网关IP] dev eth1 table 2″ > /etc/sysconfig/network-scripts/route-eth1

echo “from [eth0的IP]/32 table 1″ > /etc/sysconfig/network-scripts/rule-eth0

echo “from [eth1的IP]/32 table 2″ > /etc/sysconfig/network-scripts/rule-eth1

最后重启network service


service network restart

需要注意的是,如果在重启服务的时候不成功,可以尝试关闭Network Manager。这个服务和默认的网络服务启动脚本经常有冲突,导致配置无法应用。


chkconfig NetworkManger off