Linux 命令(120)—— route 命令

1.命令簡介

route 命令用於顯示和操作 IP 路由表。

要實現兩個不同的子網之間的通信,需要一臺連接兩個網絡的路由器,或者同時位於兩個網絡的網關來實現。在 Linux 系統中,設置路由通常是爲了解決以下問題:該 Linux 系統在一個局域網中,局域網中有一個網關,能夠讓機器訪問 Internet,那麼就需要將這臺機器的 IP 地址設置爲 Linux 機器的默認路由。

要注意的是,直接在命令行下執行 route 命令來添加路由,不會永久保存,當網卡重啓或者機器重啓之後,該路由就失效了;可以在 /etc/rc.d/rc.local 中添加 route 命令,作爲開機啓動命令來保證該路由設置永久有效。

2.命令格式

route [-CFvnNee] [-A FAMILY |-4|-6]
route [-v]  [-A FAMILY | -4 | -6]  add  [-net|-host]  TARGET  [netmask  NM] [gw GW] [metric N] [mss M] [window W] [irtt I] [reject] [mod] [dyn] [reinstate] [[dev] IF]
route [-v] [-A FAMILY | -4 | -6] del [-net|-host] TARGET [gw GW] [netmask NM] [metric N] [[dev] IF]
route [-V] [--version] [-h] [--help]

第一行格式用於查看路由表;
第二行格式用於添加一條路由;
第三行格式用於刪除一條路由;
第四行格式用於查看版本與幫助信息。

3.選項說明

-A FAMILY
    指定的地址族。FAMILY 可取值 inet、inet6 等。-4 等同於 -A inet,-6 等同於 -A inet6
-C
	操作內核的路由緩存
-F
    操作內核的 FIB(Forwarding Information Base) 路由表。默認選項
-e
    用 netstat(8) 的格式來顯示路由表。-ee 將用路由表中的所有參數生成一個很長的行
-host
    路由目標爲主機
-n
    以數字地址代替主機或網絡名。此項對試圖檢測對域名服務器進行路由發生故障的原因非常有用
-net
    路由目標爲網絡
-v
	開啓冗餘模式
del
    刪除一條路由
add
    添加一條路由
TARGET
    指定目標網絡或主機。可以用點分十進制形式的 IP 地址或主機/網絡名
netmask NM
    爲添加的路由指定網絡掩碼
gw GW
    爲發往目標網絡/主機的任何分組指定網關。注意:指定的網關首先必須是可達的,也就是說必須爲該網關預先指定一條靜態路由。如果你爲本地接口之一指定這個網關地址的話,那麼此網關地址將用於決定此接口上的分組將如何進行路由。這是 BSD 風格所兼容的
metric M
    把選路表中的 metric 字段值設爲 M。metric 表示路由跳數
mss M
   設置最大傳輸單元 MTU
window W
    把基於此路由之上的連接的 TCP 窗口長度設爲 W 字節。這通常只用於 AX.25 網絡和不能處理背靠背幀的設備
irtt I
    把基於此路由之上的 TCP 連接的初始往返時間設爲 I 毫秒(1-12000)。這通常也只用於 AX.25 網絡。如果省略此選項,則使用 RFC1122 的缺省值 300ms
reject
    設置一條阻塞路由以使一條路由查找失敗。這用於在使用缺省路由前先屏蔽掉一些網絡。但這並不起到防火牆的作用
mod, dyn, reinstate
    設置一條動態或更改過的路由。這些標誌通常只由路由進程來設置。這隻用於診斷目的
dev IF
    強制使路由與指定的設備關聯,否則內核會自己決定使用相應的設備(通常檢查已存在的路由、設備說明和已加入路由的設備)。在多數正常的網絡上無需使用該選項。如果 dev IF 是命令行上最後一個選項,那麼可以省略關鍵字 dev

4.常用示例

(1)顯示當前路由表。

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         9.134.112.1     0.0.0.0         UG    0      0        0 eth1
9.0.0.0         9.134.112.1     255.0.0.0       UG    0      0        0 eth1
9.134.112.0     0.0.0.0         255.255.240.0   U     0      0        0 eth1
10.0.0.0        9.134.112.1     255.0.0.0       UG    0      0        0 eth1
100.64.0.0      9.134.112.1     255.192.0.0     UG    0      0        0 eth1
link-local      0.0.0.0         255.255.0.0     U     1002   0        0 eth1
172.16.0.0      9.134.112.1     255.240.0.0     UG    0      0        0 eth1
192.168.0.0     9.134.112.1     255.255.0.0     UG    0      0        0 eth1
192.168.10.0    0.0.0.0         255.255.255.0   U     0      0        0 docker0

上面的輸出中,有兩行值得注意:

default         9.134.112.1     0.0.0.0         UG    0      0        0 eth1
	表示數據傳送目的是訪問 Internet,則由接口 eth1 將數據包發送到網關 9.134.112.1
9.134.112.0     0.0.0.0         255.255.240.0   U     0      0        0 eth1
	表示主機所在網絡的地址爲 9.134.112.0,若數據傳送目標是在本局域網內通信,則可直接通過 eth1 轉發數據包

Destination 表示目標網絡或主機地址;
Gateway 表示網關地址,如果是 * 表示未設置;
Genmask 表示目標網絡的網絡掩碼;目標是主機對應 255.255.255.255,默認路由對應 0.0.0.0;
Flags 爲路由狀態標誌,含義如下:

U 路由當前爲啓動狀態(Up )
H 目標爲主機(Host)
G 使用網關(Gateway)路由
R 恢復(Reinstate )動態路由的路由
D 由守護進程或導向器動態(Dynamically)安裝
M 由路由守護程序或導向器動態修改(Modified)
A 由 addrconf 安裝
C 緩存(Cache)項
! 路由當前爲關閉狀態

Metric 表示與目標的距離,通常以跳數計算;
Ref 表示此路由的引用數(Linux 內核中不使用);
Use 表示查找路由的計數。根據 -F 和 -C 的使用,這將是路由緩存未命中(-F)或命中(-C);
Iface 表示將此路由的數據包發送到的接口。

(2)以數字地址代替主機或網絡名。

route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         9.134.112.1     0.0.0.0         UG    0      0        0 eth1
9.0.0.0         9.134.112.1     255.0.0.0       UG    0      0        0 eth1
9.134.112.0     0.0.0.0         255.255.240.0   U     0      0        0 eth1
10.0.0.0        9.134.112.1     255.0.0.0       UG    0      0        0 eth1
100.64.0.0      9.134.112.1     255.192.0.0     UG    0      0        0 eth1
169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 eth1
172.16.0.0      9.134.112.1     255.240.0.0     UG    0      0        0 eth1
192.168.0.0     9.134.112.1     255.255.0.0     UG    0      0        0 eth1
192.168.10.0    0.0.0.0         255.255.255.0   U     0      0        0 docker0

(3)添加一條路由。

route add -net 127.0.0.0 netmask 255.0.0.0 dev lo

# 查看設置後的結果
route -n | grep lo
127.0.0.0       0.0.0.0         255.0.0.0       U     0      0        0 lo

使用 netmask 255.0.0.0 添加與 lo 設備相關聯的迴環路由項。

(4)屏蔽一條路由。

route add -net 224.0.0.0 netmask 240.0.0.0 reject

# 查看設置後的結果
route | grep 224.0.0.0
224.0.0.0       -               240.0.0.0       !     0      -        0 -

(5)刪除一條路由。

route del -net 224.0.0.0 netmask 240.0.0.0 reject

(6)添加默認網關。

route add default gw 9.134.112.2

# 查看設置後的結果
route | grep 9.134.112.2
default         9.134.112.2     0.0.0.0         UG    0      0        0 eth1

(7)刪除默認網關。

route del default gw 9.134.112.2

5.拓展知識

5.1 路由類型

5.1.1 主機路由

主機路由是路由選擇表中指向單個 IP 地址或主機名的路由記錄。主機路由的 Flags 字段爲 H。例如,在下面的示例中,本地主機通過 IP 地址 192.168.1.1 的網關到達 IP地址爲 10.0.0.10 的主機。

Destination	Gateway		Genmask			Flags	Metric	Ref	Use	Iface
10.0.0.10	192.168.1.1	255.255.255.255	UH		0		0   0	eth0

5.1.2 網絡路由

網絡路由是代表主機可以到達的網絡。網絡路由的 Flags 字段爲 N。例如,在下面的示例中,本地主機將發送到網絡 192.19.12.0 的數據包轉發到 IP 地址爲 192.168.1.1 的路由器。

Destination   Gateway		Genmask 		Flags	Metric	Ref	Use	Iface
192.19.12     192.168.1.1   255.255.255.0   UN		0       0	0	eth0

5.1.3 默認路由

當主機不能在路由表中查找到目標主機的 IP 地址或網絡路由時,數據包就被髮送到默認路由(默認網關)上。默認路由的 Flags 字段爲 G。例如,在下面的示例中,默認路由是 IP 地址爲 192.168.1.1 的路由器。

Destination	Gateway			Genmask		Flags	Metric	Ref	Use	Iface
default		192.168.1.1		0.0.0.0		UG		0       0	0   eth0

參考文獻

[1] route(1) manual
[2] 博客園.每天一個linux命令(53):route命令
[3] CSDN.【Linux】一步一步學Linux——route命令(169)
[4] CSDN.linux 路由表設置 之 route 指令詳解

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