【內核】Linux內核參數ignore_routes_with_link_down-忽略已斷開連接的路由

需解決的問題

在上圖的拓撲中,我們希望達到的效果是:

  1. 對於除了兩個網卡的ip所在網段的路由,全部作爲默認路由,以ECMP(等價多路徑)的方式,從兩張網卡發送出去;
  2. 當其中一張網卡link down時,忽略該網卡的路徑,流量只從link up的網口發出去; 

服務器的兩張網卡分別屬於兩個不同的三層網絡,分別是:

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group defau
lt qlen 1000
    link/ether a0:36:9f:ad:47:84 brd ff:ff:ff:ff:ff:ff
    inet 1.1.1.2/30 brd 1.1.1.3 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::a236:9fff:fead:4784/64 scope link 
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group defau
lt qlen 1000
    link/ether a0:36:9f:ad:47:86 brd ff:ff:ff:ff:ff:ff
    inet 1.1.2.2/30 brd 1.1.2.3 scope global eth1
       valid_lft forever preferred_lft forever
    inet6 fe80::a236:9fff:fead:4786/64 scope link 
       valid_lft forever preferred_lft forever

在此基礎上增加默認路由配置後,在服務器上查看路由,會有如下條目:

default
	nexthop via 1.1.1.1 dev eth0 weight 1 
	nexthop via 1.1.2.1 dev eth1 weight 1
1.1.1.0/30 dev eth0 proto kernel scope link src 1.1.1.2 
1.1.2.0/30 dev eth1 proto kernel scope link src 1.1.2.2 

當服務器的其中一張網卡eth0斷開後,查看路由條目,會發現跟上面的輸出沒有變化,這意味着默認路由仍然會從eth0,eth1兩個網卡以ECMP的方式發出,這將導致從eth0出去的流量丟失,從而發生網絡故障。

解決方法

配置linux內核參數ignore_routes_with_link_down可以忽略網卡斷開時的路由,具體方式如下:

# 默認忽略所有連接斷開的網卡上的路由
net.ipv4.conf.default.ignore_routes_with_linkdown = 0

# 對所有網卡設置,忽略該網卡斷開時本網卡上的路由
net.ipv4.conf.all.ignore_routes_with_linkdown = 0

# 對指定網卡eth0設置,忽略該網卡斷開時本網卡上的路由
net.ipv4.conf.eth0.ignore_routes_with_linkdown = 0

在配置瞭如上三條任意一條後,再查看服務器上的路由,會得到如下顯示:

default
	nexthop via 1.1.1.1 dev eth0 weight 1 dead linkdown
	nexthop via 1.1.2.1 dev eth1 weight 1
1.1.1.0/30 dev eth0 proto kernel scope link src 1.1.1.2 dead linkdown
1.1.2.0/30 dev eth1 proto kernel scope link src 1.1.2.2 

這時默認路由將會忽略從eth0發出的路由,所有默認流量將從eth1發出,從而不會引起網絡中斷。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章