問題描述
在已存在的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 1ip 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 500ip rule add from [eth1的IP]/32 tab 2 priority 600
這個配置的意思是,將原地址為eth0的IP的包按照路由表1發送,將原地址為eth1的IP的包按照路由表2發送
3、查看并刷新
可以通過 ip rule命令查看已經配置的路由策略。一個示例的策略如下:
$ ip rule0: from all lookup local500: from 172.31.30.238 lookup 1600: from 172.31.22.112 lookup 232766: from all lookup main32767: 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-eth0echo “[子網2網段] via [您子網的網關IP] dev eth1 table 2″ > /etc/sysconfig/network-scripts/route-eth1echo “from [eth0的IP]/32 table 1″ > /etc/sysconfig/network-scripts/rule-eth0echo “from [eth1的IP]/32 table 2″ > /etc/sysconfig/network-scripts/rule-eth1
最后重啟network service
service network restart
需要注意的是,如果在重啟服務的時候不成功,可以嘗試關閉Network Manager。這個服務和默認的網絡服務啟動腳本經常有沖突,導致配置無法應用。
chkconfig NetworkManger off