ACL與route-policy中permit/deny的關係

一、回顧路由策略原理


ACL與route-policy中permit/deny的關係

一個路由策略中包含1個至多個節點。路由進入路由策略後,按節點序號從小到大依次檢查各個節點是否匹配。匹配條件由If-match子句定義,涉及路由信息的屬性和路由策略的6種過濾器。

當路由與該節點的所有If-match子句都匹配成功後,進入匹配模式選擇,不再匹配其他節點。匹配模式分permitdeny兩種:

· permit:路由將被允許通過,並且執行該節點的Apply子句對路由信息的一些屬性進行設置。

· deny:路由將被拒絕通過。

當路由與該節點的任意一個If-match子句匹配失敗後,進入下一節點。如果和所有節點都匹配失敗,路由信息將被拒絕通過。

——引用華為文檔


二、實驗分析


ACL與route-policy中permit/deny的關係

R3和R4運行在OSPF骨幹區域中,且R4上的迴環口以重發步的方式導入OSPF域中。根據這個環境,我們來看看策略路由的permit/deny與ACL的permit/deny關係。

[R4]ospf 1

[R4-ospf-1]import-route direct route-policy gok //重發布時,調用策略gok


情況一:不設置ACL,Route-policy設置permit模式並調用。

[R4]route-policy gok permit node 10

[R4-route-policy]if-match acl 2000

現象:

ACL與route-policy中permit/deny的關係

總結:不創建ACL以及相關規則,此時的ACL表為一張空白表。當實現route-policy時,會調用ACL表。實驗現象表明可以學到這三條條目,因ACL表為空表,所以可以確定在缺省情況下默認允許所有。


情況二,在R4上設置一條ACL permit規則,route-policy設置permit並再調用。

[R4]acl 2000

[R4-acl-basic-2000]rule permit source 192.168.1.0 0.0.0.255

[R4]route-policy gok permit node 10

[R4-route-policy]if-match acl 2000

查看現象

ACL與route-policy中permit/deny的關係

總結:當R4上設置了ACL一條關於192.168.1.0 路由信息permit的規則,並通過route-policy調用,查看現象發現R3上只留下了192.168.1.0這個網段的路由信息。這是因為R4在重發布之前會對192.168.1.0、192.168.2.0、192.168.3.0進行規則匹配,對於為匹配中的不做任何處理,對於配置中的路由信息根據設定的acl permit進行下一步的重發布。192.168.2.0和192.168.3.0之所以沒有配置中是因為在第一個node沒有匹配中後,會往下繼續查看下一個node,直到最後一個node,而route-policy在匹配末尾缺省一條deny ,會把192.168.2.0和192.168.3.0給拒絕掉,從而不能正常重發步在OSPF域中。


情況三:在R4上設置一條ACL deny規則,並route-policy設置permit。

[R4]acl 2000

[R4-acl-basic-2000]rule 5 deny source 192.168.1.0 0.0.0.255

[R4]route-policy gok permit node 10

[R4-route-policy]if-match acl 2000

現象

ACL與route-policy中permit/deny的關係

總結:此時設置一條對192.168.1.0 路由信息deny的規則,並通過route-policy調用,在R3上查看路由表發現都沒有學習到條目。之所如此,是因為R4在重發步之前會對設置的ACL進行規則匹配,而192.168.1.0在匹配過程中在node 5 中被拒絕,對於192.168.2.0和192.168.3.0沒有匹配到而不做處理,此時,會將這三條路由信息進行下一節點的匹配。因為route-policy在末尾缺省一條deny,所以這三條都不能被重發步到OSPF域中。

以上都是關於route-policy節點permit與ACL中permit/deny的關係探討,相對簡單。


情況五:在R4上設置一個ACL permit的規則,並配置route-policy 且將節點設置成deny,最後重發步調用route-policy。

[R4]acl 2000

[R4-acl-basic-2000]rule 5 permit source 192.168.1.0 0.0.0.255

[R4]route-policy gok deny node 10

[R4-route-policy]if-match acl 2000

查看現象

ACL與route-policy中permit/deny的關係

總結:此時將route-policy節點設置成deny,三條進行acl匹配,發現只有192.168.1.0匹配中,另外兩個沒有匹配中不做處理。這時192.168.1.0會繼續向下一個節點匹配,發現是deny,而被攔截,不在繼續向下匹配。而192.168.2.0和192.168.3.0能夠繼續下去,直到最後,而最後route-policy是缺省拒絕,所以這三條都無法正常重發步到OSPF域中。

情況六:

在R4上設置一個ACL permit的規則,並配置route-policy 且將節點設置成deny,再設置一個節點為permit,最後重發布調用route-policy。

[R4]acl 2000

[R4-acl-basic-2000]rule 5 permit source 192.168.1.0 0.0.0.255

[R4]route-policy gok deny node 10

[R4-route-policy]if-match acl 2000

[R4]route-policy gok permit node 20

現象

ACL與route-policy中permit/deny的關係

總結:此時將route-policy節點設置成deny並多添加一個節點為permit,三條進行acl匹配,發現只有192.168.1.0匹配中,另外兩個沒有匹配中不做處理。這時192.168.1.0會繼續向下一個節點匹配,發現是deny,而被攔截,不在繼續向下匹配。而192.168.2.0和192.168.3.0能夠繼續匹配下一個節點note 20 雖然是空的,該空節點表示為匹配所有,不做任何動作。192.168.2.0和192.168.3.0被note匹配中,而該節點為permit,從而能夠正常重發步進OSPF域中。

情況七:在R4上設置一個ACL deny的規則,並配置route-policy 且將節點設置成deny,再設置一個節點為permit,最後重發布調用route-policy。

[R4]acl 2000

[R4-acl-basic-2000]rule 5 deny source 192.168.1.0 0.0.0.255

[R4]route-policy gok deny node 10

[R4-route-policy]if-match acl 2000

[R4]route-policy gok permit node 20

查看現象

ACL與route-policy中permit/deny的關係

總結:首先在R4上對ACL 設置deny ,R4上會將這三條進行匹配,從而拒絕192.168.1.0信息,其他兩條不做任何處理。雖然192.168.1.0先被ACL 拒絕了,但發現該節點也是deny,192.168.1.0在該節點不允許通過Route Policy,但是會進行下一個節點的匹配。這時候三條路由信息均可繼續向下匹配節點note 20,而note 20 是一個空表匹配所有,且為permit。所以在note 20 中允許了這三條路由信息進行重發步進OSPF域中。

擴展:

①:在route-policy的deny和ACL的deny中,route-policy的deny優先級高,當匹配中route-policy的deny後將不能繼續向下匹配。若匹配中acl的deny後,而route-policy為permit的情況下依舊可以繼續向下匹配。

②:對於route-policy是deny,且acl 也是deny情況下,可以理解為雙重否定為肯定。

總結:

當route-policy調用ACL不是一張空白時,這時候ACL裡面的規則就會生效。

ACL與route-policy中permit/deny的關係


分享到:


相關文章: