route
命令用來顯示並設置Linux內核中的網絡路由表,route
命令設置的路由主要是靜態路由。要實現兩個不同的子網之間的通信,需要一臺連接兩個網絡的路由器,或者同時位於兩個網絡的網關來實現。
在Linux系統中設置路由通常是爲了解決以下問題:該Linux系統在一個局域網中,局域網中有一個網關,能夠讓機器訪問Internet,那麼就需要將這臺機器的ip地址設置爲Linux機器的默認路由。要注意的是,直接在命令行下執行route命令來添加路由,不會永久保存,當網卡重啓或者機器重啓之後,該路由就失效了;可以在/etc/rc.local中添加route命令來保證該路由設置永久有效。
route的語法
route [opt]
- route的選項
選項 | 含義 |
---|---|
-A | 設置地址類型 |
-C | 打印將Linux核心的路由緩存 |
-v | 詳細信息模式 |
-n | 不執行DNS反向查找,直接顯示數字形式的IP地址 |
-e | netstat格式顯示路由表 |
-net | 到一個網絡的路由表 |
-host | 到一個主機的路由表 |
- route的參數
參數 | 含義 |
---|---|
Add | 增加指定的路由記錄 |
Del | 刪除指定的路由記錄 |
Target | 目的網絡或目的主機 |
gw | 設置默認網關 |
mss | 設置TCP的最大區塊長度(MSS),單位MB |
window | 指定通過路由表的TCP連接的TCP窗口大小 |
dev | 路由記錄所表示的網絡接口 |
route的實例
- 顯示當前路由
使用命令:route
顯示當前的路由信息。
上述數據中表頭的含義說明:
字段名 | 含義 |
---|---|
Destination | 目標網絡或目標主機 |
Gateway | 網關地址,如果沒有就顯示星號 |
Genmask | 網絡掩碼 |
Flags | 總共有多個旗標 |
Metric | 距離、跳數。暫無用 |
Ref | 不用管,恆爲0 |
Use | 該路由被使用的次數,可以粗略估計通向指定網絡地址的網絡流量 |
Iface | 接口,即eth0,eth0等網絡接口名 |
其中Flags爲路由標誌,標記當前網絡節點的狀態,Flags標誌說明:
標識 | 含義 |
---|---|
U | Up表示此路由當前爲啓動狀態。 |
H | Host,表示此網關爲一主機。 |
G | Gateway,表示此網關爲一路由器。 |
R | Reinstate Route,使用動態路由重新初始化的路由。 |
D | Dynamically,此路由是動態性地寫入。 |
M | Modified,此路由是由路由守護程序或導向器動態修改。 |
! | 表示此路由當前爲關閉狀態。 |
上圖中,從上到下依次是路由排列順序(忽略中間的docker路由),依次是大域網到小域網。數據的傳遞根據這個路由表來判斷傳遞到哪邊。
例如:
若有一個數據包需要傳遞到172.20.x.x
的包,找到172.20.0.0
這個路由的時候就會直接從網口ens33
傳遞出去。
若有一個互聯網上的包14.215.177.38
,找到第2,3個172.17.0.0
和172.20.0.0
時,均沒有路由能夠匹配,就傳遞到了0.0.0.0
上的路由表上,然後傳遞出去。
- 添加路由
增加一條到達13.1.1.0、24
這個網段的路由,從網卡eth0
出去
route add -net 13.1.1.0 netmask 255.255.255.0 dev eth0
- 刪除路由
刪除剛纔添加的路由
route del -net 13.1.1.0 netmask 255.255.255.0 dev eth0
- 增加一個默認網關
設置一個默認網關,需要保證gateway(gw)的IP和eth0(本機IP)在同一個網段內。下面的172.20.36.0
和網卡對應的地址172.20.35.40
在同一網段,添加成功。
route add default gw 172.20.36.0
若網關地址和本機地址不在一個網段則會提示SIOCADDRT: 網絡不可達
,我們嘗試添加一個網段爲12.1.1.13
的網關時: