1. 程式人生 > >Linux下路由配置梳理

Linux下路由配置梳理

梳理 冗余 work 系統啟動 local 網絡接口 分別是 自啟動 bsp

在日常運維作業中,經常會碰到路由表的操作。下面就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

Linux下路由配置梳理