1. 背景
在生活中的會經常遇見一台PC同時連接多個網絡的場景.最典型的,一台筆記本可以同時連接一個無線網(手機熱點)和一個有線網(以太網).linux和window操作系統在默認情況都會使用最早連接的網絡進行互聯網訪問.如果我們想切換到另一個網絡進行互聯網訪問,最粗暴的方法就是斷開最先連接的網絡,則操作系統會自動切換到另一個網絡.對於PC只有兩個網絡連接這個粗暴的方案的是可行的,可是如果網絡連接數大於2,並且我們想切換到其中任意一個網絡進行互聯網訪問.總不能依次斷開其它所有的連接吧,未免太繁瑣.
下面我們介紹如何使用route命令來設置網絡的優先級,從而使用我們想要的網絡來進行互聯網訪問.
2. route簡單介紹
route命令用於顯示和操作IP路由表。要實現兩個不同的子網之間的通信,需要一台連接兩個網絡的路由器,或者同時位於兩個網絡的網關來實現。在Linux系統中,設置路由通常是為了解決以下問題:該Linux系統在一個局域網中,局域網中有一個網關,能夠讓機器訪問Internet,那么就需要將這台機器的IP地址設置為 Linux機器的默認路由。要注意的是,直接在命令行下執行route命令來添加路由,不會永久保存,當網卡重啟或者機器重啟之后,該路由就失效了;要想永久保存,可以保存到配置文件。
2.1 常見命令格式
1) 添加和刪除路由
1 route {add | del } [-net|-host] [網域或主機] netmask [mask] [gw|dev] 2 3 增加 (add) 與刪除 (del) 路由的相關參數: 4 (a) -net :表示后面接的路由為一個網域。 5 (b) -host :表示后面接的為連接到單部主機的路由。 6 (c) netmask :與網域有關,可以設定 netmask 決定網域的大小。 7 (d) gw :gateway 的簡寫,后續接的是 IP 的數值,與 dev 不同。 8 (e) dev :如果只是要指定由那一塊網路卡連線出去,則使用這個設定,后面接 eth0 等
(2) 查詢路由信息
route -nee (a) -n:不要使用通訊協定或主機名稱,直接使用 IP 或 port number。 (b) -ee:使用更詳細的資訊來顯示。
(3) 添加/刪除默認網關路由
route {add | del } default gw {IP-ADDRESS} {INTERFACE-NAME} (a) IP-ADDRESS:用於指定路由器(網關)的IP地址。 (b) INTERFACE-NAME:用於指定接口名稱,如eth0。 例1:route add default gw 192.168.1.1 eth0 例2:route del default gw 192.168.1.1 eth0
(4) 添加/刪除到指定網絡的路由規則
route {add | del } -net {NETWORK-ADDRESS} netmask {NETMASK} dev {INTERFACE-NAME} (a) NETWORK-ADDRESS:用於指定網絡地址。 (b) NETMASK:用於指定子網掩碼。 (c) INTERFACE-NAME:用於指定接口名稱,如eth0。 例1:route add -net 192.168.1.0 netmask 255.255.255.0 dev eth0 例2:route del -net 192.168.1.0 netmask 255.255.255.0 dev eth0
(5) 添加/刪除路由到指定網絡為不可達
設置到指定網絡為不可達,避免在連接到這個網絡的地址時程序過長時間的等待,直接就知道該網絡不可達。 route {add | del } -net {NETWORK-ADDRESS} netmask {NETMASK} reject (a) NETWORK-ADDRESS:用於指定網絡地址。 (b) NETMASK:用於指定子網掩碼。 例1:route add -net 10.0.0.0 netmask 255.0.0.0 reject 例2:route del -net 10.0.0.0 netmask 255.0.0.0 reject
3. 使用route命令來修改默認路由的優先級
在多個網絡連接的情況下,比如以太網和WIFI同時存在的時候,路由表中就會存在多個默認網關。我們在本機上進行測試結果如下(手機熱點和實驗室有線網絡):
可以看到以太網enp4s0f1和WIFI網絡wlp3s0的路由信息都自動生成了,而且存在兩個默認網關。如果訪問外網,系統會根據路由緩存信息和速度最優的原則,通過速度更快的網關進行訪問。Linux系統支持對默認網關的優先級進行設置,這時需要用到mteric這個參數,metric為躍點數,當系統中有多個默認網關時,數據包會通過metric更低的接口傳輸。在上述截圖中我們看到有線網enp4s0f1的優先級更高.下面我們就為enp4s0f1和wlp3s0設置優先級:
上述截圖的操作是依次刪除兩個默認路由然后再重新添加這兩條默認路由,在重新添加的時候制定兩條路由的metric屬性.以太網enp4s0f1的metric是100不變,我們將無線網wlp3s0的metric由600改成了99.這樣無線網的metric就比有線網的低,相應的優先級就比有線網的高. (上述指令執行完畢我們就可以看到網絡連接的圖標由 變成了
)
這樣我們就通過修改路由表中的默認網關條目實現了調整多個網絡連接的優先級.
4. 結束語
本來是打算解決PC有多個網絡連接情況下如何指定訪問某個特定網站(如github)的網絡連接.因為在實驗室經常出現github使用手機熱點的網絡連接特別快,有線網則是龜速,就想着能不能只在訪問github的時候使用手機熱點,其它情況依舊使用有線網.
本來以為是一個很簡單的問題,可是后面調研發現並沒有可行的解決方案(也許是自己沒找到),時間不允許繼續在這個問題上糾結,只能退而求其次解決多個網絡連接的優先級切換問題.
個人覺得多網絡連接情況下指定訪問某個特定網站(如github)的網絡連接還是很有實際需求的,后面有時間還會繼續探索這個問題.