ACL和RouteMap的permit和deny規則在路由重分配時的動作

 
 
A –--- B 兩臺路由器通過E1/1接口直聯,運行OSPF。

A路由器配置3條靜態路由:
ip route 7.0.0.0 255.0.0.0 Ethernet1/1
ip route 8.0.0.0 255.0.0.0 Ethernet1/1
ip route 9.0.0.0 255.0.0.0 Ethernet1/1

A路由器ospf的配置如下:
router ospf 1
log-adjacency-changes
redistribute static route-map test
network 0.0.0.0 255.255.255.255 area 1


1)
在A路由器上,不配置任何ACL,只配置RouteMap,配置如下:
route-map test permit 10
match ip address 1
此時ACL 1是一張空表。
配置完成之後過幾秒鐘,在B路由器上查看OSPF的路由表,如下:
Link ID          ADV Router       Age          Seq#           Checksum Tag
7.0.0.0          192.168.1.1       52              0x80000001 0x0073BA 0
8.0.0.0          192.168.1.1       1207          0x80000001 0x0066C6 0
9.0.0.0          192.168.1.1       1207          0x80000001 0x0059D2 0
A路由器上的三條靜態路由都成功的重分配進OSPF,並傳給了B路由器。
單步總結:當RouteMap引用的ACL是一張空表時,對應的規則是permit any。


2)
在A上配置ACL 1,只有一個permit規則,此時ACL和RouteMap的配置如下:
access-list 1 permit 7.0.0.0 0.255.255.255
!
route-map test permit 10
match ip address 1
此時,在B路由器上,就只能看到7.0.0.0這條路由,如下:
Link ID          ADV Router       Age          Seq#           Checksum Tag
7.0.0.0          192.168.1.1       140          0x80000001 0x0073BA 0
A路由器只重分配了7.0.0.0這條路有進OSPF,另外兩條就被過濾掉了。
單步總結:當RouteMap引用的ACL是非空表時,ACL規則開始生效,如上例子,ACL 1允許(permit)了7.0.0.0這條路由,並且deny掉了其它的路由(每條ACL最後都有一個隱藏的deny any)。


3)
在A路由器上,修改ACL的配置,RouteMap配置不變,如下:
access-list 1 deny    7.0.0.0 0.255.255.255
!
route-map test permit 10
match ip address 1
上一步的ACL 1是permit 7.0.0.0這條路由,這一步僅僅是將permit修改成deny。
配置完成過一會兒,查看B路由器OSPF的路由表,A路由器上的三條靜態路由,B路由器一條都沒有。
單步總結:這一步得到的結論跟第2步的結論一樣,ACL 1顯示的deny掉了7.0.0.0這條路由,然後用隱藏規則deny掉了其它兩條路由。


4)
爲了充分測試,搞清楚每一個細節,我們再將ACL的配置做一點修改,RouteMap的配置暫時保持不變,A路由器的配置如下:
access-list 1 deny    7.0.0.0 0.255.255.255
access-list 1 permit any
!
route-map test permit 10
match ip address 1
ACL 1 的配置增加了一條permit any。
過一會兒查看B路由器OSPF的路由表,如下:
Link ID          ADV Router       Age          Seq#           Checksum Tag
8.0.0.0          192.168.1.1       12              0x80000001 0x0066C6 0
9.0.0.0          192.168.1.1       12              0x80000001 0x0059D2 0
可以看到8.0.0.0 9.0.0.0這兩條路有豆成功的進行了重分配。
單步總結:ACL 1由於配置了permit any,這條規則在隱藏規則之前生效,因此8.0.0.0 9.0.0.0這兩條路由成功匹配並重分配。


5)
測試到這裏,可能大家會覺得這個規則已經很清楚了,其實不然阿!到目前爲止,RouteMap的配置一直沒有變化,下面,我們慢慢地將RouteMap的配置進行修改,進行進一步的分析。
在上一步的基礎上,我們修改一下配置,A路由器的配置如下:
access-list 1 permit 7.0.0.0 0.255.255.255
!
route-map test deny 10
match ip address 1
ACL 1僅僅允許7.0.0.0 這條路由,不過,此時RouteMap test 10已經變成了deny。讀到這裏,大家可以先自己想想會是一個什麼樣的結果。
此時B路由器上OSPF路由表爲空!
單步結論:雖然ACL 1允許了一條路由,但是RouteMap的deny的優先級更高(或者可以理解爲RouteMap的這個deny在後面執行),因此B路由器上沒有看到任何一個靜態路由。


6)
我們繼續修改RouteMap的配置,此時我們增加一條RouteMap的配置,A路由器的配置如下:
access-list 1 permit 7.0.0.0 0.255.255.255
!
route-map test deny 10
match ip address 1
!
route-map test permit 20
在上一步的基礎上,增加名稱爲test,序列號爲20的RouteMap,這條RouteMap配置下什麼都沒有。
此時查看B路由器上OSPF的路由表,如下:
Link ID          ADV Router       Age          Seq#           Checksum Tag
8.0.0.0          192.168.1.1       9             0x80000001 0x0066C6 0
9.0.0.0          192.168.1.1       9             0x80000001 0x0059D2 0
可以看出,8.0.0.0 9.0.0.0這兩條路由成功進行了重分配。
ACL 1只允許了7.0.0.0這條路由,由於RouteMap test 10 的deny動作,7.0.0.0這條路由沒有進行重分配。現在8.0.0.0 9.0.0.0這兩條路由進行了重分配,只有一個解釋,那就是ACL1對這兩條路由給出的deny(ACL 1的隱藏規則)並不是影響最終了重分配動作!ACL 1雖然deny了這兩條路由,但是在RouteMaptest 20裏面,將match everything(RouteMap下如果沒有配置任何match命令,則表示matcheverything)。
單步結論:ACL給出的deny不會影響最終的重分配動作,RouteMap如果後續還有配置,則將ACL deny的路由繼續向下傳遞並重新進行匹配。


7)
再A路由器上,進一步修改配置,如下:
access-list 1 deny    7.0.0.0 0.255.255.255
!
route-map test deny 10
match ip address 1
!
route-map test permit 20
我們把ACL 1修改爲deny動作,RouteMap的配置保持跟第6步一致。
配置完成之後查看B路由器的OSPF路由表,如下:
Link ID          ADV Router       Age          Seq#           Checksum Tag
7.0.0.0          192.168.1.1       1             0x80000001 0x0073BA 0
8.0.0.0          192.168.1.1       1             0x80000001 0x0066C6 0
9.0.0.0          192.168.1.1       1             0x80000001 0x0059D2 0
A路由器上的三條路由都成功進行了重分配。
第6步,我們得出一個結論,ACL給出的deny並不影響最終重分配動作,那麼在這一步測試進行分析,ACL是deny,RouteMap也是deny,但是所有的靜態路由都成功進行了重分配,因此,可以說明,ACL的deny就可以簡單的理解爲匹配失敗。(將這一步的ACL配置修改成access-list 1 deny any,B路由器上的結果還是一樣。有興趣的讀者可以自己進行測試。)
單步結論:ACL給出的deny就是匹配失敗,這時,RouteMap的動作並不重要,因此RouteMap的動作只有在匹配成功的時候才生效,ACL deny之後,將進入下一條RouteMap繼續進行匹配。


8)
最後,綜合測試一下,A路由器的配置如下:
access-list 1 permit 7.0.0.0 0.255.255.255
access-list 2 permit 8.0.0.0 0.255.255.255
access-list 3 deny    9.0.0.0 0.255.255.255
!
route-map test deny 10
match ip address 1
!
route-map test permit 20
match ip address 2
!
route-map test permit 30
match ip address 3
配置完成之後,查看B路由器上的OSPF路由表,如下:
Link ID          ADV Router       Age          Seq#           Checksum Tag
8.0.0.0          192.168.1.1       51              0x80000001 0x0066C6 0
前面7步得到的測試結論可以很好的解釋這一步的測試結果。


最終結論:
1,當RouteMap引用的ACL是一張空表時,表示permit any;
2,當RouteMap引用的ACL不是一張空表時,ACL的隱藏規則是要發揮作用的;
3,ACL中的比較給出的permit表示匹配成功,然後執行相應RouteMap的動作;
4,ACL中的比較給出的deny表示匹配失敗,不執行相應RouteMap的動作,但這並不是RouteMap的最終結果,後面還要根據RouteMap自身的規則進行。(即如果RouteMap後續還有序列號大的配置項,繼續進入後面的RouteMap配置進行比較;如果後面沒有任何RouteMap的配置了,則執行RouteMap的隱藏動作deny everything。)



也許可以這樣理解:
綁定一張空表等於沒有綁定。
發佈了9 篇原創文章 · 獲贊 13 · 訪問量 24萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章