distribute-list

Distribute-list(分發列表)用來過濾路由信息
Distribute-list使用方法:
Out方向distribute分發列表

Route(config-router)#distribute-list {access-list-number|name} out [interface-name|routing-process[routing-process parameter]]

in方向distribute分發列表

Route(config-router)#distribute-list {access-list-number|name} in [interface-name|routing-process[routing-process parameter]]

Distribute-list對距離矢量路由協議(RIPv1&RIPv2&EIGRP)在in和out方向都可以很好的工作,但是對於鏈路狀態路由協議(OSPFv2&OSPFv3&IS-IS)在使用的時候要多加註意
環境一:
distribute-list
需求:R3路由器關於R1路由器三個Loopback接口路由信息,只能學習Loopback0的
上邊全網運行RIPv2協議,R2可以在e0/1使用out方向來過濾路由信息
R2上配置:

R2(config)#access-list 10 deny 172.16.2.0
R2(config)#access-list 10 deny 172.16.3.0
R2(config)#access-list 10 permit any
R2(config)#router rip 
R2(config-router)#distribute-list 10 out e0/1

R3上查看路由表只有R1路由器Loopback0路由信息
distribute-list
R4上查看路由表發現關於R1路由器三個Loopback接口路由都是存在的
這是因爲R2在做distribute-list的時候out方向關聯了e0/1接口只針對了R3路由器,沒有針對R4路由器。
如果希望對R4路由器也生效,R2路由器可以在RIP進程中補一條命令
R2(config-router)#distribute-list 10 out e0/2
R2在做distribute-list時候out後邊也可以不關聯任何接口信息,如果不關聯任何接口信息代表針對所有接口都生效
distribute-list
Distribute-list對鏈狀態路由協議:
Distibute-list對於鏈路狀態路由協議的out方向如果路由不是本地始發的,將不能起到任何效果
只有一種場合下out方向的distribute-list才能去部署,要去過濾到本地始發的外部路由。就是說比如R1上的Loopback是採用redistribute的方式注入OSPF,那麼這個時候就叫本地始發的路由。這種情況如果在R1上去部署out方向distribute那麼就可以起到過濾作用,因爲對於redistribute來講,redistribute這個外部路由進OSPF其實是以路由方式進來的,所以這個時候在本地做out方向Distribute-list就可以起到過濾作用。
distribute-list
環境二:
R1通過redistribute方式將三個Loopback接口宣告進OSPF進程,同時在R1上做out方向的distribute,過濾掉Loopback1和Loopback2兩個接口路由信息
R1上配置:

R1(config)#access-list 10 deny 172.16.2.0
R1(config)#access-list 10 deny 172.16.3.0
R1(config)#access-list 10 permit any
R1(config)# router ospf 100
R1(config-router)#redistribute connected subnets
R1(config-router)#distribute-list 10 out

OSPF在做distracted out方向時候不可以關聯任何接口
R2上查看路由表及OSPF database
cisco路由器查看OSPF LSDB 5類LSA命令:Router#show ip ospf database external
distribute-list
distribute-list
R3上查看路由表及OSPF database
distribute-list
distribute-list
R4 上查看路由表及OSPF database
distribute-list
distribute-list
通過觀察R2、R3、R4三臺路由器路由表及OSPF database可以看出R1路由器成功將自身Loopback1和Loopback2兩條路由過濾掉並且連LSA信息都沒有傳遞給鄰居路由器
環境三:
distribute-list
R1上將環境二拓撲圖中的redistribute給刪掉,將三個Loopback接口通過network方式引入到OSPF進程,再次使用distribute out方向看下還會不會生效
R1上配置:

R1(config)#access-list 10 deny 172.16.2.0
R1(config)#access-list 10 deny 172.16.3.0
R1(config)#access-list 10 permit any
R1(config)#router ospf 100
R1(config-router)#no redistribute connected subnets
R1(config-router)#network 172.16.1.1 0.0.0.0 area 0
R1(config-router)#network 172.16.2.1 0.0.0.0 area 0
R1(config-router)#network 172.16.3.1 0.0.0.0 area 0
R1(config-router)#distribute-list 10 out

R2上查看路由表
distribute-list
R3上查看路由表
distribute-list
R4上查看路由表
distribute-list
通過觀察R2、R3、R4三臺路由器的路由表發現R1通過network命令將自身Loopback接口引入OSPF進程時,再次使用distribute out方向時並沒有起到任何效果
環境四:
需求:R2上使用in方向distribute 觀察R2、R3、R4三臺路由器路由表
在R2上過濾掉R1路由器Loopback1和Loopback2路由信息,使用in方向
distribute-list
R1上配置:刪掉network方式引入路由方式,通過redistribute方式引入R1自身Loopback信息

R1(config)#router ospf 100
R1(config-router)#no network 172.16.1.1 0.0.0.0 area 0
R1(config-router)#no network 172.16.2.1 0.0.0.0 area 0
R1(config-router)#no network 172.16.3.1 0.0.0.0 area 0
R1(config-router)#no distribute-list 10 out
R1(config-router)#redistribute connected subnets

R2上配置:

R2(config)#access-list 10 deny 172.16.2.0
R2(config)#access-list 10 deny 172.16.3.0
R2(config)#access-list 10 permit any
R2(config)#router ospf 100
R2(config-router)#distribute-list 10 in ethernet 0/0

OSPF在使用distribute in方向時可以關聯接口,關聯接口和不關聯接口區別
如果關聯某一個接口代表只是對關聯的接口收到的路由信息做過濾,如果不關聯某一個接口代表對自身所有接口生效
R2上路由表及OSPF database
distribute-list
distribute-list
R3上路由表及OSPF database
distribute-list
distribute-list
R4上路由表及OSPF database
distribute-list
distribute-list
通過查看R2、R3、R4三臺路由器的路由表及OSPF LSDB 5類LSA信息可以發現
R2在in方向使用distribute只對自己的路由表生效,但是R2的OSPF LSDB中還是存在R1路由器三個Loopback接口5類LSA信息
R3、R4路由器的路由表及OSPF LSDB並沒有受到任何影響,從這裏也就可以總結出OSPF在使用distribute in方向時影響的是自身路由表,對鄰居R2、R3並沒有什麼影響。

總結:OSPF在使用distribute時,in方向影響的是自己的路由表,out方向只有在過濾本地始發的路由才生效(例如本地通過redistribute方式引入路由時,因爲重發布的時候這個動作引入的剛好是路由信息而不是LSA)。OSPF在in方向的時候實際上是在OSPF計算LSA生成路由表的時候過濾掉路由,所以distribute在in方向雖然路由表消失了路由條目,但是LSA依然存在OSPF database中的

環境五:
Distribute還可以在out方向後邊關聯特定的協議,distribute在in方向是不可以關聯協議的
distribute-list
R2上配置:

R2(config)#access-list 10 deny 4.4.4.0
R2(config)#router eigrp 100
R2(config-router)#redistribute rip metric 10000 1000 1 1 1
R2(config-router)#redistribute ospf 100 metric 10000 1000 1 1 1

R2 show rip database 是有從R1學習到1.1.1.0/24路由信息
distribute-list
R2 show ospf database 可以看到也有從R4學習到1.1.1.0/24路由信息
distribute-list
R2上查看路由表發現關於1.1.1.0/24是“O”標記,此時是正常的,RIP AD值120 OSPF AD值110
distribute-list
R3上查看路由表同樣學習到了1.1.1.0/24路由信息
distribute-list
如果不做distribute過濾,R1和R4任意一臺路由器down掉,R2和R3都可以訪問1.1.1.0/24目的地
下邊在R2上做distribute,只針對從RIP路由協議過來的1.1.1.0/24做過濾,其他方式學習到的一律放行
R2上配置:

R2(config)#access-list 10 deny 4.4.4.0
R2(config)#router eigrp 100
R2(config-router)#redistribute rip metric 10000 1000 1 1 1
R2(config-router)#redistribute ospf 100 metric 10000 1000 1 1 1
R2(config-router)#distribute-list 10 out rip

R3上查看路由表,還是有關於1.1.1.0/24路由信息,說明R2上配置是生效的
distribute-list
可以進一步驗證R2的配置,將R2連接R4的ethernet 0/2 shutdown掉

R2(config)#interface ethernet 0/0
R2(config-if)#shutdown

R3上查看路由表,發現沒有1.1.1.0/24路由條目
distribute-list
環境六:
使用distribute還可以解決雙點雙向redistribute次優路徑及環路問題
看下圖,R4將自身Loopback0接口宣告進RIP進程,R2和R3都互相學習到該路由信息
此時R2先做RIP到OSPF的redistribute動作,R4 Loopback0路由到了R1,R1傳遞給R3路由器。此時R3路由器因爲先前從RIP進程R4鄰居學習到了該路由條目,此時從兩個鄰居不同路由協議學習到去往相同目的地的路由信息,R3先比較AD值,結果發現OSPF的110 AD值要小於RIP的120 AD值,R3自然而然的選擇從R1到4.4.4.0/24目的地。
此時是很奇怪的,R3產生了次優路徑問題,明明可以從R4直接到目的地,爲什麼要從R1繞了一圈到目的地。
最關鍵的是,R3在想做RIP到OSPF的redistribute動作是失敗的,因爲R3關於4.4.4.0/24路由是“OE2”的而不是“R”的
在下邊我們使用distribute來解決這個次優路徑問題。
distribute-list
IP編制規則:10.xy.xy.x/24,其中x是較小的路由器,y爲較大的路由器。例如:R2和R4的編制:R2e0/1:10.24.24.2/24R4e/1:10.24.24.4/24
R2上配置:

R2(config)#router ospf 100
R2(config-router)#redistribute rip subnets

查看R3上路由表關於4.4.4.0/24路由是“OE2的”
distribute-list
R3上配置:

R3(config)#access-list 10 deny 4.4.4.0
R3(config)#access-list 10 permit any
R3(config-router)#distribute-list 10 in

查看R3上路由表關於4.4.4.0/24的路由變成了“R”的,此時R3在做RIP到OSPF的redistribute是完全沒有問題的
distribute-list
R2上也要做和R3相同的動作,具體原因自己好好琢磨,哈哈

R2(config)#access-list 10 deny 4.4.4.0
R2(config)#access-list 10 permit any
R2(config-router)#distribute-list 10 in

總結:其實使用distribute來解決雙點雙向redistribute次有路徑問題並不太適合,distribute是直接把路由過濾掉了,假設R3和R4相連接的鏈路故障了,那麼R3就沒有備用路徑可以走了,下邊可以試驗下,我們把R3的ethernet0/0口shutdown掉

R3(config)#interface ethernet 0/0
R3(config-if)#shutdown

查看R3的路由表可以看出,R3是丟失了4.4.4.0/24路由信息的
distribute-list

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章