郝 賢 云
(江西應用工程職業學院 計算機與信息工程系,江西 萍鄉 337042)
現實中的網絡是由多個路由域所構成的,每個路由域中的路由器則有可能同時運行著多種動態路由協議。常見的動態路由協議按照協議特征可劃分為距離矢量路由協議例如:路由信息協議(Routing Infomation Protocol,RIP)、鏈路狀態路由協議例如:開放最短路徑優先(Open Shortest Path First,OSP)、混合型路由協議例如:增強內部網關路由協議(Enhanced Interior Gatewar Routing Protocol,EIGRP)[1-3]。眾所周知,路由器無論運行哪種動態路由協議,都會產生路由更新,只是觸發路由更新的方式不同而已。通常RIP路由協議是定期進行路由更新(RIP路由器每隔30 s就會向與自己相鄰的路由器發送整張路由表),而EIGRP和OSPF協議只有在網絡結構發生改變時,才進行路由更新。顯而易見:一方面,網絡中這些動態路由協議的路由更新不僅會擠占用戶數據的網絡帶寬,而且還會降低路由器的工作性能;另一方面,有的時候為了避免路由環路或次優路由的存在,相關路由器不能對所有路由條目進行通告,只能對特定的幾條路由條目進行通告(例如在多點雙向重分布時,如果自治系統邊界路由器對所有路由都進行通告,極易造成路由環路的產生)。因此,為了保證網絡能夠安全穩定的運行,網絡技術人員有必要對網絡中的路由更新進行合理的規劃控制。
路由映射表[4]與常見的訪問控制列表相比較為復雜,它由一條或多條可編輯route-map語句所構成,并且每條route-map語句均存在序列號(如果不為其設置序列號,路由器將會認為操作者準備編輯第1條語句或者準備寫入一條序列號為10的語句)。這些語句的執行順序與訪問控制列表極為相似,也是按照從上至下的順序進行,并執行與路由匹配的第1條語句。其可實現的功能主要有以下幾點:① 可用于在兩個不同路由域之間重分布時過濾路由,并設置路由度量值。② 可用于實現策略路由。策略路由的出現可使專業技術人員更加靈活的定義相關路由策略,它可以定義基于源地址、目的地址、報文長度、協議類型以及端口號的路由,且路由優先級為最高。③ 可用于網絡地址轉換(Network Address Translation, NAT)。在進行NAT地址轉換時,應用路由映射表可以使專業技術人員有選擇性的將私有IP地址轉換為公有IP地址。④ 可用于實現邊界網關協議(Border Gateway Protocol, BGP)策略。將路由映射表應用在BGP中,既可以對進入或離開BGP的路由進行控制,又可以對BGP的路徑屬性進行控制。
專業技術人員使用分發列表[5-6]同樣可以實現對路由更新的控制,相對于路由映射表,分發列表的配置過程并不復雜(主要依靠訪問控制列表來實現),只是在配置的時候需要在相關路由進程下進行。通常情況下,它不僅可以部署在路由器的出接口和入接口而且還可以部署在路由重分布的過程中。配置分發列表的主要步驟如下:① 創建一個基于需要過濾的路由的訪問控制列表。② 需要確定是從路由器的入站接口或出站接口過濾路由還是過濾重分布而來的路由。③ 使用Distribute-list命令配置分發列表。另外,在使用分發列表的過程中有以下兩點需要特別注意:首先,分發列表更適合部署在距離矢量路由協議中,它對出站或入站的路由都可以進行正常過濾。如果將其部署在鏈路狀態路由協議如OSPF中,它只能過濾自治系統邊界路由器始發的外部1類或2類路由,而無法過濾區域內路由和區域間路由(部署在OSPF進程的IN方向只對本地路由表有效,部署在OSPF進程的OUT方向則不起任何作用)。這是由于分發列表無法過濾鏈路狀態信息(Link-State Advertisement, LSA),只能過濾路由信息。通常OSPF路由器是通過傳播LSA來構建鏈路狀態數據庫(Link-State Data Base,LSDB)(相同區域內OSPF路由器的LSDB必定是一致的),并在此基礎上通過SPF算法來計算出最優路由的。其次,分發列表并不適合在冗余網絡環境中部署使用,這是因為分發列表很可能將備用路徑的路由更新也過濾掉。
前綴列表和分發列表以及路由映射表一樣,也可用于控制路由更新。通常前綴列表具有以下優點:① 前綴列表支持對其包含的條目進行增量修改。在前綴列表中,專業技術人員對其包含的條目可單獨的進行增加或刪除,而不必刪除整個列表(每個條目均自動生成自己的序列號,并根據序列號進行排序)。② 前綴列表在路由查找以及列表加載方面有著更明顯的優勢。③ 前綴列表的配置過程簡單且配置界面也更為友好。④ 前綴列表可使專業技術人員對路由更新的控制更為靈活。現實中在使用前綴列表時,路由器會從前綴列表的第1條語句開始查看是否與路由前綴相匹配。如匹配,則前綴列表的其他語句將不再被路由器查看;如路由前綴與前綴列表中的語句沒有一條是相匹配的,那么這條路由將被路由器所拒絕;如路由前綴與多條前綴列表中的語句相匹配,那么路由器則認為路由前綴只與前綴列表中序列號最小的條目相匹配。需要特別注意的是:當前綴列表為空時,將允許所有路由前綴通過。
2.1.1 在單點雙向路由重分布中過濾路由[7-9]
網絡中的3臺路由器組成了兩個不同的路由域,路由器R1、R2組成RIP路由域,路由器R2、R3組成OSPF路由域。為了滿足業務正常運行的需要,計劃在兩個路由域之間做路由重分布,這樣以來不僅RIP路由域中的路由可以在OSPF路由域中傳播,而且OSPF路由域中的路由也可以在RIP路由域中傳播。RIP路由域包括192.168.8.0/24、192.168.9.0/24、192.168.10.0/24 3個網段,其中需要將192.168.8.0/24與192.168.10.0/24兩個網段重分布到OSPF路由域中。OSPF路由域包括172.20.0.0/24、172.20.1.0/24、172.20.2.0/24 3個網段,其中需要將172.20.0.0/24、172.20.2.0/24兩個網段重分布到RIP路由域中。網絡結構如圖1所示。在這里給出在邊界路由器R2中,對路由進行過濾的詳細配置過程。

圖1 在單點雙向路由重分布中過濾路由
(1) 路由器R2的相關配置
R2(config)#access-list 22 permit 192.168.9.0 0.0.0.255 //建立訪問控制列表22
R2(config)#access-list 23 permit 172.20.1.0 0.0.0.255 //建立訪問控制列表23
R2(config)#router rip //啟動RIP進程
R2(config-router)#ver 2
R2(config-router)#network 192.168.10.0
R2(config-router)#redist ospf 12 route-map ospf-rip metic 11 //將允許的OSPF路由重分布到RIP路由域中
R2(config)#route-map ospf-rip deny 10 //定義路由映射表ospf-rip
R2(config-route-map)#match ip address 23
R2(config)#route-map ospf-rip permit 20
R2(config)#router ospf 12 //啟動OSPF進程
R2(config-router)#network 172.20.2.0 0.0.0.255 area 0
R2(config-router)#redist rip route-map chenbo subnets //將允許的RIP路由重分布到OSPF路由域中
R2(config)#route-map chenbo deny 10 //定義路由映射表chenbo
R2(config-route-map)#match ip address 22
R2(config)#route-map chenbo permit 20
R2(config-route-map)#set metric 400
上述配置完成后,使用sh ip route命令分別查看路由器R1、R3的路由表,如圖2、3所示。從中可以清楚的看到:在路由器R1的路由表中存在兩條路由標識符為“R”,且度量值為11的路由條目(以上路由條目既為重分布到RIP路由域中的OPSF路由條目172.20.0.0/24與172.20.2.0/24);在路由器R3的路由表中存在兩條路由標識符為“O E2”,且度量值為400的外部路由條目(以上路由條目既為重分布到OSPF路由域中的RIP路由條目192.168.8.0/24與192.168.10.0/24)。這足以充分說明在路由器R2中進行的路由過濾是成功的。

圖2 路由器R1的路由表

圖3 路由器R3的路由表
2.1.2 在多點雙向路由重分布中過濾路由[10-11]
網絡由4臺路由器R1~R4所組成,其中路由器R1~R3組成了一個RIP路由域,該路由域包括以下3個網段192.168.4.0/24、192.168.5.0/24和192.168.6.0/24。另外,路由器R2~R4組成了一個EIGRP路由域,該路由域包括以下3個網段192.168.16.0/24、192.168.17.0/24和192.168.18.0/24。網絡結構如圖4所示。為了滿足業務需要,使全網能夠互聯互通,分別在兩個路由域的邊界路由器R2、R3中做路由重分布。但是這樣一來很容易出現路由反饋的情況。舉例來說:當一條RIP路由條目通過邊界路由器R2重分布到EIGRP路由域中后,該路由就會在EIGRP路由域中傳播,最終會傳播到邊界路由器R3。如果屆時在路由器R3中做路由重分布,將EIGRP路由域中的路由(包括從RIP路由域中重分發而來的那條路由)重分布到RIP路由域中,這樣就造成了路由反饋。因此,有必要在邊界路由器R2、R3中進行路由過濾,避免路由反饋的發生。篇幅有限,在這里只給出在邊界路由器R2中,使用路由映射表進行路由過濾的詳細配置過程。

圖4 在多點雙向路由重分布中過濾路由
路由器R2的相關配置。
R2(config)#access-list 50 permit 192.168.4.0 0.0.3.255 //建立編號為50的訪問控制列表
R2(config)#access-list 60 permit 192.168.16.0 0.0.3.255
R2(config)#router rip
R2(config-router)#ver 2 //設置為版本2
R2(config-router)#no auto-summary //禁止自動匯總
R2(config-router)#passive-interface e1/2 //設置為被動接口
R2(config-router)#network 192.168.4.0
R2(config-router)#network 192.168.5.0
R2(config-router)#network 192.168.6.0
R2(config-router)#redist eigrp 10 route-map eigrp-rip metic 10
R2(config)#route-map eigrp-rip deny 11 //定義路由映射表eigrp-rip
R2(config-route-map)#match ip address 50
R2(config)#route-map eigrp-rip permit 12
R2(config)#router eigrp 10 啟動EIGRP進程
R2(config-router)#no auto-summary
R2(config-router)#network 192.168.16.0
R2(config-router)#network 192.168.17.0
R2(config-router)#network 192.168.18.0
R2(config-router)#redist rip route-map eigrp-rip metic 1200 150 255 1 1400
R2(config)#route-map rip-eigrp deny 10 //定義路由映射表rip-eigrp
R2(config-route-map)#match ip address 60
R2(config)#route-map rip-eigrp permit 11
2.2.1 在距離矢量路由協議RIP中部署
網絡由3臺路由器R1~R3所構成,它們之間均運行RIP路由協議。為了滿足業務的需求,只允許路由器R2學習到路由器R1中的全部路由條目,禁止路由器R3學習到路由器R1中的路由192.168.16.0/24與192.168.17.0/24。網絡結構如圖5所示。篇幅有限,在這里只給出路由器R2詳細配置過程。

圖5 使用分發列表在RIP網絡中過濾路由
路由器R2的相關配置。
R2(config)#access-list 5 deny 192.168.16.0 0.0.0255 //建立編號為5的訪問控制列表
R2(config)#access-list 5 deny 192.168.17.0 0.0.0.255
R2(config)#access-list 5 per any
R2(config)#router rip
R2(config-router)#ver 2 //設置為版本2
R2(config-router)#no auto-summary //禁止自動匯總
R2(config-router)#network 192.168.16.0
R2(config-router)#network 192.168.17.0
R2(config-router)#distribute-list 5 out s2/1 //使用分發類表在出站接口過濾路由
上述配置完成后,我們使用sh ip route命令分別查看路由器R2、R3的路由表,如圖6、7所示。從中不難發現:在路由器R2的出站接口部署分發列表后,路由器R2仍舊可以學習到路由器R1的全部路由,而路由器R3無法學習到去往192.168.16.0、24與192.168.17.0/24這兩個網段的路由。這足以充分說明分發列表已部署成功。有一點需要注意的是:如果將分發列表部署在路由器R3的入站接口處,同樣可以實現當前的效果(相關配置命令與當前配置命令相似,故不再闡述)。

圖6 路由器R2的路由表

圖7 路由器R3的路由表
2.2.2 在動態路由協議OSPF中部署[14-16]
網絡由3臺路由器R1~R3所構成,它們之間均運行OSPF路由協議。為了滿足業務的需求,只允許路由器R3學習到路由器R1中的全部路由條目,禁止路由器R2學習到路由器R1中的路由192.168.4.1/24與192.168.5.1/24。網絡拓撲如圖8所示。有限于篇幅,在這里只給出路由器R2詳細配置過程。

圖8 使用分發列表在OSPF網絡中過濾路由
路由器R2的相關配置。
R2(config)#access-list 8 deny 192.168.4.0 0.0.0.255 //建立編號為8的訪問控制列表
R2(config)#access-list 8 deny 192.168.5.0 0.0.0.255
R2(config)#access-list 8 permit any
R2(config)#router ospf 33 啟動OSPF進程
R2(config-router)#router-id 33.33.33.33
R2(config-router)#network 192.168.18.0 0.0.0.255 area 0 //通告網絡
R2(config-router)#network 192.168.19.0 0.0.0.255 area 0
R2(config-router)# distribute-list 8 in s2/0 //使用分發類表在入站接口過濾路由
上述配置完成后,使用sh ip route命令分別查看路由器R2、R3的路由表,如圖9、10所示。從中不難發現:在路由器R2的人站接口部署分發列表后,在其路由表里只有去往192.168.18.0/24與192.168.19.0/24兩個網段的路由,成功過濾掉了去往192.168.4.1/24與192.168.5.1/24兩個地址的路由,但是這并不妨礙路由器R2將已過濾網段的相關LSA繼續傳遞給路由器R3。因此,在路由器R3的路由表中可以看到去往全網的路由。另外,需要注意的一點是:在OSPF網絡中,out方向的分發列表只能對本地始發的外部路由起作用,也就是說如果在out方向上部署分發列表,只能將其部署在ASBR上。

圖9 路由器R2的路由表

圖10 路由器R3的路由表
網絡中的2臺路由器R1、R2組成OSPF路由域,二者間通過雙鏈路互相連接(既R1的e1/0接口與R2的e1/0接口相連接,簡稱為S1鏈路;R1的e1/1接口與R2的e1/1接口相連接,簡稱為S2鏈路)。為了滿足業務的需求,需要在兩條鏈路上實現分流,當路由器R1訪問目的地址192.168.0.1/32時,數據包走S1鏈路;當路由器R1訪問目的地址192.168.1.1/32時,數據包走S2鏈路;網絡結構如圖11所示。有限于篇幅,在這里只給出路由器R1詳細配置過程。

圖11使用前綴列表實現鏈路分流
路由器R1的相關配置。
R1(config)#router ospf 77//啟動OSPF進程
R1(config-router)#router-id 11.11.11.11
R1(config-router)#network 192.168.10.0 0.0.0.255 area 0 //通告網絡
R1(config-router)#network 192.168.9.0 0.0.0.255 area 0
R1(config-router)#distribute-list prefix s1 in e1/0
R1(config-router)#distribute-list prefix s2 in e1/1
R1(config)#ip prefix-list s1 seq 5 deny 192.168.1.1/32 //設置前綴列表S1
R1(config)#ip prefix-list s1 seq 10 permit 0.0.0.0/0 le 32 //匹配所有路由
R1(config)# ip prefix-list s2 seq 5 deny 192.168.0.1/32 //設置前綴列表S2
R1(config)#ip prefix-list s2 seq 10 permit 0.0.0.0/0 le 32
上述配置完成后,使用sh ip route命令分別查看路由器R1的路由表,如圖12所示。從中不難發現:在路由器R1的兩個入站接口部署前綴列表后,兩條鏈路已成功的實現了數據分流。當路由器R1訪問目的地址192.168.0.1/32時,下一跳的地址為192.168.10.2,此時數據包走S1鏈路;當路由器R1訪問目的地址192.168.1.1/32時,下一跳的地址為192.168.9.2,此時數據包走S2鏈路。

圖12 路由器R1的路由表
網絡技術人員在使用路由映射表、分發列表、前綴列表等技術,對網絡中的路由進行過濾時,一定要考慮到具體的應用環境。這是因為在距離矢量路由協議中過濾路由與在鏈路狀態路由協議中過濾路由,所產生的效果是有所不同的。