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。) 也許可以這樣理解: 綁定一張空表等於沒有綁定。 |
ACL和RouteMap的permit和deny規則在路由重分配時的動作
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.