? Linux主板多网络的优先级设置--技术天地

Linux主板多網絡的優先級設置

 2017/11/16    

  支持多網絡是英創工控主板的特色之一,英創公司推出的ESMARC系列核心板,都帶有1路或者2路10M/100M以太網口網口,同時還可以支持wi-fi以及3G/4G模塊,而且ESM3354和ESM6802這兩款核心板還可以通過ISA總線擴展以太網口。在多種網口同時存在的情況下,如何設置路由規則以及網關也就成為了應用方案重要的一部分。


  在linux系統中,使用ifconfig命令給網口配置ip,系統會自動生成這個網卡的相關路由信息,可以使用命令route –n查看系統所有的路由信息,參數-n是不進行地址解析,如果不添加-n選項,route命令會根據/etc/resolv文件中配置的DNS服務器進行地址解析,所以返回時間跟DNS服務器的響應時間有關系:


英創Linux主板多網絡優先級設置.gif

系統自動生成eth0的路由信息


  可以看到系統自動生成了201網段的路由信息,凡是201這個網段的數據包都會通過eth0這個網口。但是目前還沒有網關的信息,如果要通過eth0訪問外網,還需要添加默認網關,linux系統中可以通過命令ip route命令添加默認網關,命令格式為ip route add default via <gateway> dev <interface>:


英創Linux主板多網絡優先級設置.gif

eth0的路由信息


  添加默認網關后的路由信息如上圖,其中Destination和Genmask為0.0.0.0的記錄表明這是系統默認網關,默認網關的意思是當要發送數據包的目標網絡地址不在系統的路由記錄中時,系統會將該數據包通過默認網關對應的接口(網卡)發送出去,如果允許使用dhcp的話,還可以直接使用udhcpc命令,該命令會自動獲取ip并設置默認網關:


英創Linux主板多網絡優先級設置.gif

使用udhcpc獲取ip和設置默認網關


  在多網絡的情況下,比如以太網和wi-fi以及3G網絡同時存在的時候,就會有多個路由信息多個默認網關。下圖是核心板的以太網和wi-fi同時存在時的路由信息:


英創Linux主板多網絡優先級設置.gif

多網絡路由信息


  可以看到以太網eth0和wi-fi網絡wlan0的路由信息都自動生成了,而且存在兩個默認網關。如果訪問外網,系統會根據路由緩存信息和速度最優的原則,通過速度更快的網關進行訪問。Linux系統支持對默認網關的優先級進行設置,這時需要用到mteric這個參數,metric為躍點數,當系統中有多個默認網關時,數據包會通過metric更低的接口傳輸,通常情況下,默認的metric都為0,所以優先級是相同的。還是可以通過linux的命令ip route命令設置metric,命令格式為ip route add default via <gateway> dev <interface> metric <val>,下面我們就為eth0和wlan0設置優先級:


英創Linux主板多網絡優先級設置.gif

路由信息的優先級


  如圖所示我們為eth0設置的metric為100,wlan0的metric為101,這樣以太網eth0的優先級就高于wlan0,數據包就會有先通過eth0通訊,如果以太網eth0關閉,則相關路由信息也會被清除掉,這時metric為101的默認網關優先級變為最高,數據包會自動改為通過wlan0通訊。通過traceroute命令可以驗證這一點:


英創Linux主板多網絡優先級設置.gif

數據包通訊信息


  可以看到數據包默認是通過優先級更高的網關通訊,當eth0關閉之后,數據就改為通過wi-fi網絡的網關了。同時為了方便客戶使用和參考,我們提供了一個管理路由信息的例程,讓程序在后臺運行,會檢查有沒有新的默認網關,如果有新的默認網關,則按照以太網>wi-fi>3G/4G網絡的優先級順序自動設置metic的值,如果需要更改則可以通過參數來設置三種網絡的metric值:route_manager [metric for eth] [metric for wlan] [metric for ppp]


英創Linux主板多網絡優先級設置.gif

測試效果


  路由信息在板卡重啟之后會消失,板卡上自帶以太網可以通過英創公司提供的userinfo.txt配置文件來設置以太網的ip和默認網關,或者設置為dhcp的方式。如果有擴展的wi-fi模塊則可以通過腳本或自己保存一個配置文件來實現加載網口后自動進行設置ip和網關。3G/4G網絡是使用的ppp撥號,ppp會自動生成默認網關。


  感興趣的客戶可以聯系英創的工程師,我們會提供相應的例程代碼。