net-tools工具route命令

Linux系統的route命令用於顯示和操作IP路由表(show / manipulate the IP routing table)。要實現兩個不同的子網之間的通信,需要一臺連接兩個網絡的路由器,或者同時位於兩個網絡的網關來實現。在Linux系統中,設置路由通常是爲了解決以下問題:該Linux系統在一個局域網中,局域網中有一個網關,能夠讓機器訪問Internet,那麼就需要將這臺機器的IP地址設置爲Linux機器的默認路由。要注意的是,直接在命令行下執行route命令來添加路由,不會永久保存,當網卡重啓或者機器重啓之後,該路由就失效了;可以在/etc/rc.local中添加route命令來保證該路由設置永久有效。
CentOS7,Ubnutu16.04,Debian9,openSUSE15等以後版本系統已經默認不再集成這個命令,需要安裝相應的軟件net-tools

默認網關就是數據包不匹配任何設定的路由規則,最後流經的地址關口!網關按字面意思就是網絡的關口,就相當於我們家裏房子的門一樣,如果外出就要經過房門,數據包也是一樣。

概念:

網關:大家都知道,從一個房間走到另一個房間,必然要經過一扇門。同樣,從一個網絡向另一個網絡發送信息,也必須經過一道“關口”,這道關口就是網關。顧名思義,網關(Gateway)就是一個網絡連接到另一個網絡的“關口”。也就是網絡關卡。 由於歷史的原因,許多有關TCP/IP的文獻曾經把網絡層使用的路由器稱爲網關,在今天很多局域網採用都是路由來接入網絡,因此通常指的網關就是路由器的一個接口的IP地址!需要這個路由器進行轉發的主機就需要與這個接口相連,同時相連的兩個接口需要配置成同一網段的iP地址,也就是可以二層互通。一個路由器可以有多個接口因此可以給多個主機提供網關。

路由:是指路由器從一個接口上收到數據包,根據數據包的目的地址進行定向並轉發到另一個接口的過程。路由通常與橋接來對比,在粗心的人看來,它們似乎完成的是同樣的事。它們的主要區別在於橋接發生在OSI參考模型的第二層(數據鏈路層),而路由發生在第三層(網絡層)。這一區別使二者在傳遞信息的過程中使用不同的信息,從而以不同的方式來完成其任務。

默認網關就是數據包不匹配任何設定的路由規則,最後流經的地址關口!注意,一臺主機只能有一個默認網關。

一、命令格式格式如下:

route [查看參數]

route add [-net|-host] [網域或主機] netmask [mask] [gw|dev]
route del [-net|-host] [網域或主機] netmask [mask] [gw|dev]

查看參數:
-n      :以數字的方式顯示路由表中的主機
-e     :使用netstat的輸出格式顯示路由表
-ee         :顯示路由表的所有參數


增加 (add) 與刪除 (del) 路由的相關參數:
-net      :表示後面接的路由爲一個網段;
-host      :表示後面接的爲連接到單臺主機的路由;
netmask     :與網段有關,可以設定 netmask 決定網段的大小;
gw           :gateway 的簡寫,後續接的是 IP 的數值喔,與 dev 不同;
dev      :如果只是要指定由那一塊網路卡連線出去,則使用這個設定,後面接 eth0 等

二、舉例:
1、查看主機路由信息
-------------------------------------------------------------------------------------
[root@CentOS ~]# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.1.0 * 255.255.255.0 U 0 0 0 eth0
10.10.10.0 * 255.255.255.0 U 0 0 0 eth1
link-local * 255.255.0.0 U 1002 0 0 eth0
link-local * 255.255.0.0 U 1003 0 0 eth1
default 192.168.1.1 0.0.0.0 UG 0 0 0 eth0

[root@CentOS ~]# route -n    #以數字的形式顯示
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.1.0 255.255.255.0 U 0 0 0 eth0
10.10.10.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 1003 0 0 eth1
0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 eth0

[root@CentOS ~]# route -ee
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface MSS Window irtt
192.168.1.0 * 255.255.255.0 U 0 0 0 eth0 0 0 0
10.10.10.0 * 255.255.255.0 U 0 0 0 eth1 0 0 0
link-local * 255.255.0.0 U 1002 0 0 eth0 0 0 0
link-local * 255.255.0.0 U 1003 0 0 eth1 0 0 0
default 192.168.1.1 0.0.0.0 UG 0 0 0 eth0 0 0 0
[root@CentOS ~]#
-------------------------------------------------------------------------------------
上面的每一行就是一條路由信息,路由信息也被稱爲一個路由項或一個路由條目,數據包的轉發就是由這些路由條目決定的,下面對每一行的名稱進行解釋:

Destination    #目標網絡或目標主機,0.0.0.0表示默認網關

Gateway     #網關地址,’*’表示沒有設置,如果顯示爲0.0.0.0(-n選項的顯示)表示該路由是直連路由,所謂直連路由就是指該路由對應的接口就在這個網絡中,可以直接與這個網絡中的設備進行二次互通

Genmask      #目標網絡的網絡掩碼(也被稱作子網掩碼)

Flags
可能的flag值有
U,路由已經起來
H,目標是一臺主機,而非一個網段
G,使用網關
R,用於動態路由的恢復路由
D,由守護進程動態安裝或重定向
M,從路由守護進程或重定向中修改
A,由addrconf安裝
C,緩存項
!,拒絕路由

Metric      #到目標的“距離”(通常以跳爲單位)。它不被最近的內核使用,但可能需要路由守護進程。

Ref        #引用此路由的次數。(不在Linux內核中使用。)

Use      #查找路線的數量。根據-F和-C的使用情況,這將是路由緩存丟失(-F)或命中(-C)。

Iface          #此路由的數據包將從該接口發送出去。

MSS        #此路由上TCP連接的默認最大分段大小

Window    #此路由上TCP連接的默認窗口大小

irtt       #初始RTT(往返時間)。內核使用它來猜測最佳的TCP協議參數,而無需等待(可能是緩慢的)答案。

HH      #引用緩存路由的硬件頭緩存的ARP條目和緩存路由的數量。如果緩存路由的接口不需要硬件地址(例如lo),則爲-1。

Arp      #緩存路由的硬件地址是否最新。


2、設置默認網關(如果已經存在默認網關就不要添加了)
------------------------------------------------------
route add default gw 192.168.0.1
------------------------------------------------------
表示設置默認路由,通過eth0網卡,將數據包發送給192.168.0.1那臺路由器

3、添加到指定網絡的路由規則(兩種方式)
------------------------------------------------------
route add -net 192.56.76.0 netmask 255.255.255.0 dev eth0
------------------------------------------------------
這條路由的意思是訪問192.56.76.0的網段(子網掩碼255.255.255.0),數據包從"eth0"這個接口出去

------------------------------------------------------
route add -net 192.56.76.0 netmask 255.255.255.0 gw 192.168.1.1
------------------------------------------------------
這條路由的意思是訪問192.56.76.0的網段(子網掩碼255.255.255.0),數據包從這個網關出去,這個網關就是與主機相連的對端路由器接口的IP地址

其實上面的兩種作用是相同的,因爲路由器與eth0連接的接口的IP地址就是192.168.1.1,也就是eth0的IP地址與路由器的接口直接連接在同一個網段,這個必須條件
如果你的數據包都不能通過二層到達路由器,路由器怎麼幫你轉發。這倆條的最終目的是一樣的要去往192.56.76.0網段,就得先找到去這個網段的路由器,到了以後路由器再幫我轉發。

4、設置到指定網絡爲不可達,避免在連接到這個網絡的地址時程序過長時間的等待,直接就知道該網絡不可達
------------------------------------------------------
route add -net 10.10.0.0 netmask 255.255.0.0 reject
------------------------------------------------------

5、刪除指定網絡的路由
------------------------------------------------------
route del -net 192.56.76.0 netmask 255.255.255.0 gw 192.168.1.1
------------------------------------------------------
如果路由條目裏面有Gateway設置就用上面的命令,沒有就用下面這個,下面的也可以刪除帶Gateway的只是這個網段如果有多個路由信息s時就會從上往下順序刪除,不精確。
------------------------------------------------------
route del -net 192.56.76.0 netmask 255.255.255.0 dev eth0
------------------------------------------------------

上面這個動作可以刪除掉 1192.56.76.0/24 這個網段!請注意,在刪除的時候,需要將路由表上面出現的參數都寫上,包括netmask , dev 等等參數喔!注意注意

6、刪除默認網關
------------------------------------------------------
route del default gw 192.168.0.1
------------------------------------------------------

三、設置永久路由的方法(CentOS系統下,沒有驗證):

1.在/etc/rc.local裏添加
------------------------------------------------------
route add -net 192.168.3.0/24 dev eth0

route add -net 192.168.2.0/24 gw 192.168.2.254
------------------------------------------------------

2.在/etc/sysconfig/network裏添加到末尾
------------------------------------------------------
GATEWAY=gw-ip
或者
GATEWAY=gw-dev


3./etc/sysconfig/static-routes     :#默認不存在此文件
------------------------------------------------------
any net 192.168.3.0/24 gw 192.168.3.254

any net 10.250.228.128 netmask 255.255.255.192 gw 10.250.228.129
------------------------------------------------------

如果在rc.local中添加路由會造成NFS無法自動掛載問題,所以使用static-routes的方法是最好的。無論重啓系統和service network restart 都會生效。

解決NFS問題的描述:按照linux啓動的順序,rc.local裏面的內容是在linux所有服務都啓動完畢,最後才被執行的,也就是說,這裏面的內容是在netfs之後才被執行的,那也就是說在netfs啓動的時候,服務器上的靜態路由是沒有被添加的,所以netfs掛載不能成功。

4、在/etc/sysconfig/network-script/route-interface下添加路由(每個接口一個文件,如果沒有就創建一個,只能添加針對該接口的路由)

格式如下:
------------------------------------------------------
network/prefix via gateway dev intf
------------------------------------------------------

例如給eth0添加一個默認網關:
------------------------------------------------------
vim /etc/sysconfig/network-scripts/route-eth0
------------------------------------------------------

#添加如下內容(可以省略dev eth0)
------------------------------------------------------
0.0.0.0/0 via 172.16.10.2 dev eth0
------------------------------------------------------
ps:注意這裏的掩碼是0而不是32,因爲這裏是網段而不是路由。

保存退出後,service network restart。

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