Linux下路由配置梳理

散盡浮華發表於2017-03-02

 

在日常運維作業中,經常會碰到路由表的操作。下面就linux運維中的路由操作做一梳理:
------------------------------------------------------------------------------
先說一些關於路由的基礎知識:
1)路由概念
路由:   跨越從源主機到目標主機的一個網際網路絡來轉發資料包的過程
路由器:能夠將資料包轉發到正確的目的地,並在轉發過程中選擇最佳路徑的裝置
路由表:在路由器中維護的路由條目,路由器根據路由表做路徑選擇
直連路由:當在路由器上配置了介面的IP地址,並且介面狀態為up的時候,路由表中就出現直連路由項
靜態路由:是由管理員手工配置的,是單向的。
預設路由:當路由器在路由表中找不到目標網路的路由條目時,路由器把請求轉發到預設路由介面 。

2)靜態路由和預設路由的特點
靜態路由特點:
路由表是手工設定的;
除非網路管理員干預,否則靜態路由不會發生變化;
路由表的形成不需要佔用網路資源;
適用環境:一般用於網路規模很小、拓撲結構固定的網路中。

預設路由特點:
在所有路由型別中,預設路由的優先順序最低
適用環境:一般應用在只有一個出口的末端網路中或作為其他路由的補充

浮動靜態路由:
路由表中存在相同目標網路的路由條目時,根據路由條目優先順序的高低,將請求轉發到相應埠;
鏈路冗餘的作用;

3)路由器轉發資料包時的封裝過程
源IP和目標IP不發生變化,在網路的每一段傳輸時,源和目標MAC發生變化,進行重新封裝,分別是每一段的源和目標地址

4)要完成對資料包的路由,一個路由器必須至少了解以下內容:
a)目的地址
b)相連路由器,並可以從哪裡獲得遠端網路的資訊
c)到所有遠端網路的可能路由
d)到達每個遠端網路的最佳路由
e)如何維護並驗證路由資訊
f)路由和交換的對比
路由工作在網路層
a)根據“路由表”轉發資料
b)路由選擇
c)路由轉發
交換工作在資料鏈路層
d)根據“MAC地址表”轉發資料
e)硬體轉發

------------------------------------------------------------------------------
接著說下linux運維中關於路由的一些操作
1)使用route -n命令檢視Linux核心路由表

[root@dev ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.1.17    0.0.0.0         255.255.255.255 UH    0      0        0 ppp0
10.1.32.14      0.0.0.0         255.255.255.255 UH    0      0        0 tun0
10.1.32.12      0.0.0.0         255.255.255.255 UH    0      0        0 tun0
10.4.8.2        192.168.9.254   255.255.255.255 UGH   0      0        0 eth0
10.4.9.0        0.0.0.0         255.255.255.0   U     0      0        0 tun0
192.168.9.0     0.0.0.0         255.255.255.0   U     1      0        0 eth0
10.2.0.0        0.0.0.0         255.255.0.0     U     0      0        0 tun0
10.0.0.0        0.0.0.0         255.255.0.0     U     0      0        0 tun0
10.1.0.0        0.0.0.0         255.255.0.0     U     0      0        0 tun0
192.168.0.0     0.0.0.0         255.255.0.0     U     0      0        0 tun0
0.0.0.0         192.168.9.254   0.0.0.0         UG    0      0        0 eth0

2)三種路由型別說明
    a)主機路由
主機路由是路由選擇表中指向單個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

    b)網路路由
網路路由是代表主機可以到達的網路。網路路由的Flags欄位為N。例如,在下面的示例中,本地主機將傳送到網路192.19.12的資料包轉發到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

    c)預設路由
當主機不能在路由表中查詢到目標主機的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

3)配置路由route的命令
設定和檢視路由表都可以用 route 命令,設定核心路由表的命令格式是:

route  [add|del] [-net|-host] target [netmask Nm] [gw Gw] [[dev] If]

引數解釋:
add           新增一條路由規則
del            刪除一條路由規則
-net          目的地址是一個網路
-host         目的地址是一個主機
target        目的網路或主機
netmask    目的地址的網路掩碼
gw            路由資料包通過的閘道器
dev           為路由指定的網路介面

4)route命令使用舉例

新增到主機的路由
# route add -host 192.168.1.2 dev eth0:0
# route add -host 10.20.30.148 gw 10.20.30.40
 
新增到網路的路由
# route add -net 10.20.30.40 netmask 255.255.255.248 eth0
# route add -net 10.20.30.48 netmask 255.255.255.248 gw 10.20.30.41
# route add -net 192.168.1.0/24 eth1
 
新增預設路由
# route add default gw 192.168.1.1
 
刪除路由
# route del -host 192.168.1.2 dev eth0:0
# route del -host 10.20.30.148 gw 10.20.30.40
# route del -net 10.20.30.40 netmask 255.255.255.248 eth0
# route del -net 10.20.30.48 netmask 255.255.255.248 gw 10.20.30.41
# route del -net 192.168.1.0/24 eth1
# route del default gw 192.168.1.1                  //route del default   刪除所有的預設路由

新增一條預設路由
# route add default gw 10.0.0.1      //預設只在記憶體中生效
開機自啟動可以追加到/etc/rc.local檔案裡
# echo "route add default gw 10.0.0.1" >>/etc/rc.local

新增一條靜態路由
# route add -net 192.168.2.0/24 gw 192.168.2.254
要永久生效的話要這樣做:
# echo "any net 192.168.2.0/24 gw 192.168.2.254" >>/etc/sysconfig/static-routes

新增到一臺主機的靜態路由
# route add -host 192.168.2.2 gw 192.168.2.254
要永久生效的話要這樣做:
# echo "any  host 192.168.2.2 gw 192.168.2.254 " >>/etc/sysconfig/static-routes
注:Linux 預設沒有這個檔案 ,得手動建立一個

5)設定包轉發
在Linux中預設的核心配置已經包含了路由功能,但預設並沒有在系統啟動時啟用此功能;
開啟Linux的路由功能可以通過調整核心的網路引數來實現,方法如下:

  臨時開啟路由功能:
# echo 1 > /proc/sys/net/ipv4/ip_forward
或者
# sysctl -w net.ipv4.ip_forward=1
  永久開啟路由功能 
# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
# sysctl -p

6)靜態路由配置
新增靜態路由到路由表的語法如下:

ip route [destination_network] [mask] [next-hop_address] administrative_distance]

引數解析:
ip route         用於建立靜態路由的命令。
Destination_network        需要釋出到路由表中的網段。
Mask        在這一網路上使用的子網掩碼。
Next-hop_address        下一跳路由器的地址。
administrative_distance      預設時,靜態路由有一個取值為1 的管理性距離。在這個命令的尾部新增管理權來修改這個預設值。

例如

ip route 172.16.1.0 255.255.255.0 172.16.2.1

檢視路由表除了使用route -n命令外,還可以使用ip route

[root@dev ~]# ip route
192.168.1.17 dev ppp0  proto kernel  scope link  src 192.168.1.190 
10.1.32.14 dev tun0  scope link 
10.1.32.12 dev tun0  scope link 
10.4.8.2 via 192.168.9.254 dev eth0  src 192.168.9.200  mtu 1500 advmss 1460
10.4.9.0/24 dev tun0  scope link 
192.168.9.0/24 dev eth0  proto kernel  scope link  src 192.168.9.200  metric 1 
10.2.0.0/16 dev tun0  scope link 
10.0.0.0/16 dev tun0  scope link 
10.1.0.0/16 dev tun0  scope link 
192.168.0.0/16 dev tun0  scope link 
default via 192.168.9.254 dev eth0 

----------------------------------------例項1--------------------------------------------

如上圖所示,PC0機器和PC1機器之間經過兩個路由器,要想使這兩臺機器通訊,路由設定如下:
1)Route0路由器設定:

ip add 192.168.1.1 255.255.255.0
ip add 192.168.2.1 255.255.255.0
ip route 192.168.3.0 255.255.255.0 192.168.2.2

2)Route1路由器設定:

ip add 192.168.2.2 255.255.255.0
ip add 192.168.3.1 255.255.255.0
ip route 192.168.1.0 255.255.255.0 192.168.2.1

----------------------------------------例項2--------------------------------------------

如上圖所示,使用A主機192.168.1.2能夠ping通E主機192.168.4.2,這兩臺機能夠通訊。
操作思路:
1)在主機B上設定預設路由下一跳為192.168.2.2,並開啟路由轉發功能;
2)在主機C上設定2條靜態路由,分別去192.168.1.0/24網段的下一跳為192.168.2.1,去192.168.4.0/24網段的下一跳為192.168.3.2,並開啟路由轉發功能;
3)在主機D上設定預設路由下一跳為192.168.3.1,並開啟路由轉發功能。

操作記錄:

1)A主機上操作:ip為192.168.1.2,設定閘道器為192.168.1.1
# route add default gw 192.168.1.1

2)B主機上操作:第一塊網路卡為192.168.1.1,第二塊網路卡為192.168.2.1
# ifconfig eth0 192.168.1.1
# ifconfig eth1 192.168.2.1   //可以在一塊網路卡上設定兩個ip,比如是eth0,eth0:0

B主機設定預設路由,下一跳為192.168.2.2
# route add default gw 192.168.2.2

B主機開啟路由轉發功能
# echo 1 > /proc/sys/net/ipv4/ip_forward   //臨時轉發,可以在/etc/sysctl.conf裡設定永久轉發

3)C主機上操作:第一塊網路卡為192.168.2.2,第二塊網路卡為192.168.3.1
# ifconfig eth0 192.168.2.2
# ifconfig eth1 192.168.3.1   //如果就一塊網路卡,可以設定ifconfig eth0:0 192.168.3.1

C主機設定2條預設路由
# route add -net 192.168.1.0/24 gw 192.168.2.1
# route add -net 192.168.4.0/24 gw 192.168.3.2

C主機開啟路由轉發功能
# echo 1 > /proc/sys/net/ipv4/ip_forward

4)D主機上操作:第一塊網路卡為192.168.3.2,第二塊網路卡為192.168.4.1
# ifconfig eth0 192.168.3.2
# ifconfig eth1 192.168.4.1

D主機設定預設路由,下一跳為192.168.3.1
# route add default gw 192.168.3.1

D主機開啟路由轉發功能
# echo 1 > /proc/sys/net/ipv4/ip_forward 

5)E主機上操作:ip為192.168.4.2,設定閘道器為192.168.4.1
# route add default gw 192.168.4.1

相關文章