路由策略入門指南
對(duì)于網(wǎng)絡(luò)工程師來(lái)說(shuō),路由策略的部署隨處可見,無(wú)論在運(yùn)營(yíng)商IP網(wǎng)絡(luò)還是在企業(yè)網(wǎng)中,路由策略的應(yīng)用都是非常普遍的。同時(shí),在網(wǎng)絡(luò)規(guī)劃中,路由策略的規(guī)劃也是一個(gè)核心的內(nèi)容。今天,我們來(lái)認(rèn)識(shí)一下路由策略的廬山真面目。
什么是路由策略?
路由策略是通過(guò)一系列工具或方法對(duì)路由進(jìn)行各種控制的“策略”。這種策略能夠影響到路由產(chǎn)生、發(fā)布、選擇等,進(jìn)而影響報(bào)文的轉(zhuǎn)發(fā)路徑。這些工具包括ACL、route-policy、ip-prefix、filter-policy等,這些方法包括對(duì)路由進(jìn)行過(guò)濾,設(shè)置路由的屬性等。
很多人會(huì)把路由策略等同于route-policy,也有人會(huì)可能會(huì)說(shuō)filter-policy也屬于路由策略的范疇,其實(shí)這些理解都有點(diǎn)不太準(zhǔn)確。實(shí)際上,路由策略不是一個(gè)特定的技術(shù),也不是一個(gè)特定的特性。
路由策略各工具之間的調(diào)用關(guān)系
如上圖所示,我們把所有的工具劃分成三類:
- 條件工具:用于把需要的路由“抓取”出來(lái)。
- 策略工具:用于把“抓取”出來(lái)的路由執(zhí)行某個(gè)動(dòng)作,比如允許、拒絕、修改屬性值等。
- 調(diào)用工具:用于將路由策略應(yīng)用到某個(gè)具體的路由協(xié)議里面,使其生效。
調(diào)用工具中的filter-policy和peer又自帶策略工具的功能,因此這兩個(gè)東西又可以直接調(diào)用條件工具。其他的調(diào)用工具都必須通過(guò)route-policy來(lái)間接的調(diào)用條件工具。
注意peer不能調(diào)用ACL,可以調(diào)用其他的所有條件工具。
路由策略有什么用?
在IP網(wǎng)絡(luò)中,路由策略的用途主要包括兩個(gè)方面:
- 對(duì)路由信息進(jìn)行過(guò)濾。
- 修改路由的屬性
1. 通過(guò)路由策略對(duì)路由信息進(jìn)行過(guò)濾
圖1 通過(guò)路由策略對(duì)路由信息進(jìn)行過(guò)濾
如圖1所示,SwitchA屬于雙上行的組網(wǎng)結(jié)構(gòu),SwitchA會(huì)從SwitchB和SwitchC那里分別接收到路由。如果SwitchA僅希望接收來(lái)自SwitchB的路由,而不希望接收來(lái)自SwitchC的路由,此時(shí)應(yīng)該怎么辦呢?這種情況下就可以考慮在SwitchA上配置路由策略,允許來(lái)自SwitchB的路由,拒絕來(lái)自SwitchC的路由。
2. 通過(guò)路由策略修改路由的屬性
圖2 通過(guò)路由策略修改路由的屬性
如圖2所示,SwitchA也是雙上行的網(wǎng)絡(luò)結(jié)構(gòu),但是,由于SwitchB這邊的鏈路穩(wěn)定性更好一點(diǎn),帶寬更大一點(diǎn),因此用戶想用SwitchB這邊的鏈路作為主用鏈路,SwitchC這邊的鏈路作為備用鏈路,當(dāng)主用鏈路故障的時(shí)候流量自動(dòng)切換至備用鏈路。這種場(chǎng)景下,可以使用路由策略,將來(lái)自SwitchB這邊的路由開銷值調(diào)小,將來(lái)自SwitchC這邊的路由開銷值調(diào)大,這樣流量就會(huì)自動(dòng)選取SwitchB這邊的鏈路作為主用鏈路,SwitchC這邊的鏈路作為備用鏈路,實(shí)現(xiàn)路由的主備份。
路由策略和策略路由的區(qū)別
1. 路由策略
路由策略的操作對(duì)象是路由信息。路由策略主要實(shí)現(xiàn)了路由過(guò)濾和路由屬性設(shè)置等功能,它通過(guò)改變路由屬性(包括可達(dá)性)來(lái)改變網(wǎng)絡(luò)流量所經(jīng)過(guò)的路徑。
2. 策略路由
策略路由的操作對(duì)象是數(shù)據(jù)包,在路由表已經(jīng)產(chǎn)生的情況下,不按照路由表進(jìn)行轉(zhuǎn)發(fā),而是根據(jù)需要,依照某種策略改變數(shù)據(jù)包轉(zhuǎn)發(fā)路徑。
所以這樣可以看出,策略路由是在路由表之前起作用,如果報(bào)文匹配了策略路由,那么這個(gè)報(bào)文就不會(huì)再去查路由表了,而是直接按照策略路由的“指引”進(jìn)行轉(zhuǎn)發(fā)。所以策略路由是一個(gè)不太按照套路出牌的“家伙”,也正因?yàn)檫@樣,策略路由的應(yīng)用會(huì)更加靈活一點(diǎn)。
路由策略和策略路由對(duì)比分析
為了更加具體的對(duì)比路由策略和策略路由,我們通過(guò)下表對(duì)兩者進(jìn)行一個(gè)全方位的對(duì)比。
路由策略牛刀小試
如上圖所示,運(yùn)行OSPF協(xié)議的網(wǎng)絡(luò)中,SwitchA從Internet網(wǎng)絡(luò)接收路由,并為OSPF網(wǎng)絡(luò)提供了Internet路由, 現(xiàn)在用戶希望OSPF網(wǎng)絡(luò)僅接收172.16.16.0/24、172.16.17.0/24和172.16.18.0/24這三條外部路由,其他的外部路由都不接收。
上述用戶需求可以通過(guò)多種方式去實(shí)現(xiàn),接下來(lái)我們給出兩個(gè)比較常見的實(shí)現(xiàn)方式供各位參考。
下面的實(shí)驗(yàn)中我們通過(guò)在SwitchA中配置黑洞路由做為測(cè)試路由,在OSPF中引入靜態(tài)路由來(lái)模擬從Internet網(wǎng)絡(luò)接收路由。SwitchA上的關(guān)鍵配置如下:
- #
- ospf 1
- import-route static
- area 0.0.0.0
- network 192.168.1.0 0.0.0.255
- #
- ip route-static 172.16.16.0 255.255.255.0 NULL0
- ip route-static 172.16.17.0 255.255.255.0 NULL0
- ip route-static 172.16.18.0 255.255.255.0 NULL0
- ip route-static 172.16.19.0 255.255.255.0 NULL0
- ip route-static 172.16.20.0 255.255.255.0 NULL0
- #
1. 通過(guò)ACL+route-policy實(shí)現(xiàn)路由過(guò)濾
(1) 定義一個(gè)ACL 2000,用于匹配需要放行的路由。
- [SwitchA] acl 2000
- [SwitchA-acl-basic-2000] rule 5 permit source 172.16.16.0 0
- [SwitchA-acl-basic-2000] rule 10 permit source 172.16.17.0 0
- [SwitchA-acl-basic-2000] rule 15 permit source 172.16.18.0 0
- [SwitchA-acl-basic-2000] quit
(2) 創(chuàng)建一個(gè)route-policy,名字叫RP,同時(shí)配置一個(gè)編號(hào)為10的節(jié)點(diǎn),調(diào)用ACL2000。
- [SwitchA] route-policy RP permit node 10
- [SwitchA -route-policy] if-match acl 2000
(3) 在OSPF引入靜態(tài)路由的時(shí)候調(diào)用這個(gè)route-policy
- [SwitchA] ospf 1
- [SwitchA-ospf-1] import-route static route-policy RP
- [SwitchA-ospf-1] quit
由于route-policy默認(rèn)隱含deny節(jié)點(diǎn),因此172.16.19.0及172.16.20.0路由由于沒有滿足if-match語(yǔ)句,從而不被引入到OSPF中。
配置完上述路由策略以后SwitchB的路由表如下:
- [SwitchB]display ip routing-table
- Route Flags: R - relay, D - download to fib
- -----------------------------------------------------------------------------
- Routing Tables: Public
- Destinations : 7 Routes : 7
- Destination/Mask Proto Pre Cost Flags NextHop Interface
- 127.0.0.0/8 Direct 0 0 D 127.0.0.1 InLoopBack0
- 127.0.0.1/32 Direct 0 0 D 127.0.0.1 InLoopBack0
- 172.16.16.0/24 O_ASE 150 1 D 192.168.1.1 Vlanif10
- 172.16.17.0/24 O_ASE 150 1 D 192.168.1.1 Vlanif10
- 172.16.18.0/24 O_ASE 150 1 D 192.168.1.1 Vlanif10
- 192.168.1.0/24 Direct 0 0 D 192.168.1.2 Vlanif10
- 192.168.1.2/32 Direct 0 0 D 127.0.0.1 Vlanif10
可以看到在SwitchA上配置完路由策略以后,SwitchB的IP路由表里面只有172.16.16.0/24、172.16.17.0/24和172.16.18.0/24這三條外部路由,其他的外部路由都沒有了。
2. 通過(guò)ip-prefix+filter-policy實(shí)現(xiàn)路由過(guò)濾
(1) 定義一個(gè)地址前綴列表,用于匹配需要放行的路由。
- [SwitchA] ip ip-prefix huawei index 10 permit 172.16.16.0 24
- [SwitchA] ip ip-prefix huawei index 20 permit 172.16.17.0 24
- [SwitchA] ip ip-prefix huawei index 30 permit 172.16.18.0 24
(2) 在SwitchA的OSPF視圖中,通過(guò)filter-policy對(duì)發(fā)布的路由進(jìn)行過(guò)濾。
- [SwitchA] ospf 1
- [SwitchA -ospf-1] filter-policy ip-prefix huawei export
- [SwitchA-ospf-1] quit
由于ip-prefix默認(rèn)隱含deny節(jié)點(diǎn),因此172.16.19.0及172.16.20.0路由由于不在ip-prefix允許的范圍內(nèi),所以在SwitchA向SwitchB發(fā)布路由的時(shí)候,僅發(fā)布在ip-prefix允許的范圍內(nèi)的路由,其他的所有路由都不發(fā)布。
配置完上述配置以后SwitchB的路由表如下:
- [SwitchB] display ip routing-table
- Route Flags: R - relay, D - download to fib
- -----------------------------------------------------------------------------
- Routing Tables: Public
- Destinations : 7 Routes : 7
- Destination/Mask Proto Pre Cost Flags NextHop Interface
- 127.0.0.0/8 Direct 0 0 D 127.0.0.1 InLoopBack0
- 127.0.0.1/32 Direct 0 0 D 127.0.0.1 InLoopBack0
- 172.16.16.0/24 O_ASE 150 1 D 192.168.1.1 Vlanif10
- 172.16.17.0/24 O_ASE 150 1 D 192.168.1.1 Vlanif10
- 172.16.18.0/24 O_ASE 150 1 D 192.168.1.1 Vlanif10
- 192.168.1.0/24 Direct 0 0 D 192.168.1.2 Vlanif10
- 192.168.1.2/32 Direct 0 0 D 127.0.0.1 Vlanif10
可以看到在SwitchA上配置完路由filter-policy以后,SwitchB的IP路由表里面只有172.16.16.0/24、172.16.17.0/24和172.16.18.0/24這三條外部路由,其他的外部路由都沒有了。