在平常運維做業中,常常會碰到路由表的操做。下面就linux運維中的路由操做作一梳理:
------------------------------------------------------------------------------
先說一些關於路由的基礎知識:
1)路由概念
路由: 跨越從源主機到目標主機的一個互聯網絡來轉發數據包的過程
路由器:可以將數據包轉發到正確的目的地,並在轉發過程當中選擇最佳路徑的設備
路由表:在路由器中維護的路由條目,路由器根據路由表作路徑選擇
直連路由:當在路由器上配置了接口的IP地址,而且接口狀態爲up的時候,路由表中就出現直連路由項
靜態路由:是由管理員手工配置的,是單向的。
默認路由:當路由器在路由表中找不到目標網絡的路由條目時,路由器把請求轉發到默認路由接口 。linux
2)靜態路由和默認路由的特色
靜態路由特色:
路由表是手工設置的;
除非網絡管理員干預,不然靜態路由不會發生變化;
路由表的造成不須要佔用網絡資源;
適用環境:通常用於網絡規模很小、拓撲結構固定的網絡中。vim
默認路由特色:
在全部路由類型中,默認路由的優先級最低
適用環境:通常應用在只有一個出口的末端網絡中或做爲其餘路由的補充網絡
浮動靜態路由:
路由表中存在相同目標網絡的路由條目時,根據路由條目優先級的高低,將請求轉發到相應端口;
鏈路冗餘的做用;運維
3)路由器轉發數據包時的封裝過程
源IP和目標IP不發生變化,在網絡的每一段傳輸時,源和目標MAC發生變化,進行從新封裝,分別是每一段的源和目標地址linux運維
4)要完成對數據包的路由,一個路由器必須至少了解如下內容:
a)目的地址
b)相連路由器,並能夠從哪裏得到遠程網絡的信息
c)到全部遠程網絡的可能路由
d)到達每一個遠程網絡的最佳路由
e)如何維護並驗證路由信息
f)路由和交換的對比
路由工做在網絡層
a)根據「路由表」轉發數據
b)路由選擇
c)路由轉發
交換工做在數據鏈路層
d)根據「MAC地址表」轉發數據
e)硬件轉發spa
------------------------------------------------------------------------------
接着說下linux運維中關於路由的一些操做
1)使用route -n命令查看Linux內核路由表blog
[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的路由器。ip
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