前文我們聊了下通過修改BGP路由屬性來影響路由,從而達到控制BGP路由的目的;回顧請參考https://www.cnblogs.com/qiuhom-1874/p/15495585.html;今天我們來聊一聊BGP路由過濾和AS-Path-filter過濾器的使用;
BGP路由過濾
BGP路由過濾是指對特定的路由通過策略或者過濾器在出方向或入方向做允許或拒絕,從而來達到控制路由的收發;
示例:通過ip 字首列表匹配要拒絕的路由,然後使用過濾工具過濾掉滿足條件的路由
[R5-bgp]dis bg r BGP Local router ID is 5.5.5.5 Status codes: * - valid, > - best, d - damped, h - history, i - internal, s - suppressed, S - Stale Origin : i - IGP, e - EGP, ? - incomplete Total Number of Routes: 3 Network NextHop MED LocPrf PrefVal Path/Ogn *> 1.1.1.1/32 45.0.0.4 0 234 11i *> 7.7.7.7/32 45.0.0.4 0 234 11i *> 8.8.8.8/32 45.0.0.4 0 234 11i [R5-bgp]dis ip ip-prefix Prefix-list 1.1.1.1 Permitted 2 Denied 4 index: 10 deny 1.1.1.1/32 index: 20 permit 0.0.0.0/0 le 32 [R5-bgp]filter-policy ip-prefix 1.1.1.1 import [R5-bgp]d th [V200R003C00] # bgp 55 router-id 5.5.5.5 peer 45.0.0.4 as-number 234 # ipv4-family unicast undo synchronization filter-policy ip-prefix 1.1.1.1 import peer 45.0.0.4 enable # return [R5-bgp]dis bg r BGP Local router ID is 5.5.5.5 Status codes: * - valid, > - best, d - damped, h - history, i - internal, s - suppressed, S - Stale Origin : i - IGP, e - EGP, ? - incomplete Total Number of Routes: 2 Network NextHop MED LocPrf PrefVal Path/Ogn *> 7.7.7.7/32 45.0.0.4 0 234 11i *> 8.8.8.8/32 45.0.0.4 0 234 11i [R5-bgp]
提示:ip字首列表、filter-policy工具使用請參考https://www.cnblogs.com/qiuhom-1874/p/15316188.html;這裡我們需要注意一點就是ip字首列表的預設規則是拒絕,所以對於沒有被ip字首列表匹配的路由,我們應該放行;所以字首列表裡最後要新增放行其他所有路由;所以我們在BGP路由表中能夠看到7.7.7.7和8.8.8.8的路由;
示例:使用filter-policy 對某個鄰居的出方向拒絕1.1.1.1的路由
在R2上未使用filter-policy對傳送給R4的路由做過濾,對應R4上bgp路由表情況
提示:可以看到對應在R4上能夠學習到1.1.1.1 /32的路由,對應下一跳分別有兩個;
在R2的出方向對傳送給R4的路由中,過濾掉1.1.1.1/32的路由,對應其他路由做放行操作
驗證:在R4上檢視BGP路由表,看看R2傳送給R4的路由,對應1.1.1.1/32的路由是否被過濾掉了?
提示:可以看到R4上對於1.1.1.1/32的路由只有R3為下一跳,R2傳送給R4的其他路由R4上正常可以學習到;
示例:使用字首列表直接對某個鄰居傳送的路由進行過濾
在R4上使用字首列表對R3傳送到8.8.8.8/32的路由進行入方向過濾,其他路由不做過濾
[R4]dis ip ip-prefix Prefix-list 8.8.8.8 Permitted 0 Denied 0 index: 10 deny 8.8.8.8/32 index: 20 permit 0.0.0.0/0 le 32 [R4]bgp 234 [R4-bgp]peer 3.3.3.3 ip-prefix 8.8.8.8 imp [R4-bgp]peer 3.3.3.3 ip-prefix 8.8.8.8 import [R4-bgp]d th [V200R003C00] # bgp 234 router-id 4.4.4.4 peer 2.2.2.2 as-number 234 peer 2.2.2.2 connect-interface LoopBack4 peer 3.3.3.3 as-number 234 peer 3.3.3.3 connect-interface LoopBack4 peer 45.0.0.5 as-number 55 # ipv4-family unicast undo synchronization peer 2.2.2.2 enable peer 3.3.3.3 enable peer 3.3.3.3 ip-prefix 8.8.8.8 import peer 45.0.0.5 enable # return [R4-bgp]dis bg r BGP Local router ID is 4.4.4.4 Status codes: * - valid, > - best, d - damped, h - history, i - internal, s - suppressed, S - Stale Origin : i - IGP, e - EGP, ? - incomplete Total Number of Routes: 4 Network NextHop MED LocPrf PrefVal Path/Ogn *>i 1.1.1.1/32 13.0.0.1 0 100 0 11i *>i 7.7.7.7/32 12.0.0.1 0 100 0 11i * i 13.0.0.1 0 100 0 11i *>i 8.8.8.8/32 12.0.0.1 0 100 0 11i [R4-bgp]
提示:可以看到此時R4上對於8.8.8.8/32的路由只有R2傳送的可以正常學習到;因為R3傳送的8.8.8.8/32的路由在入方向就被過濾掉了;
示例:在R1上使用路由策略對7.7.7.7/32的路由在出方向過濾
提示:路由策略中如果條件中是允許操作,則路由的去留取決route-policy的模式,deny就是拒絕,permit就是允許;如果條件中是拒絕操作,則路由的去留取決route-policy的預設規則;如上所示,在條件中允許7.7.7.7/32,在模式中拒絕,最終7.7.7.7/32的路由去留看模式;對於條件中沒有明確允許或拒絕其他路由,最終條件的預設規則是拒絕,所以對於其他沒有被條件匹配的路由,最終的去留取決於route-policy預設模式;所以我們在route-policy後面新增一條允許所有路由,則放行其他未被字首列表匹配到的路由;所以我們配置沒有問題的話,在R2上就學習不到7.7.7.7/32的路由,其他路由可以正常學習到;
驗證:在R2上檢視BGP路由表,看看對應的7.7.7.7的路由它是否能夠學習到?
提示:可以看到此時R2的bgp路由表中就沒有7.7.7.7/32的路由,原因是R1並沒有把7.7.7.7/32的路由傳送給R2;
總結:通過上述實驗可以看到BGP路由過濾主要是通過過濾器,字首列表,路由策略等工具來進行的;都是在本地的出或入方向做過濾,最終是影響路由的收發;如果上述工具都在bgp裡都使用了,則首先全域性filter-policy進行過濾,然後再單個鄰居使用filter-policy過濾,然後再單個鄰居字首列表,然後在路由策略的順序進行過濾;
BGP AS-Path過濾器
AS-Path-Filter:從名字上就能知道該過濾器主要用於通過匹配AS-Path屬性來進行路由過濾;對於滿足過濾器的條件我們就做某種操作即可;對於as-path過濾器來說,它是通過正規表示式來匹配對應as-path;工作原理就是把對應路由的as-path當作字串處理,滿足正規表示式的路由進行拒絕或允許操作;
常用正規表示式符號作用
特殊正規表示式含義
提示:對於本地始發地路由,對應as-path屬性是空,即匹配條件就是空,正規表示式就為^$; .*表示匹配所有路由,.*是表示匹配任意字元0次或多次,即任意字元可有可無,即任意as-path都能匹配,即所有路由的as-path都能滿足該正規表示式;_10_表示匹配通過as10的路由,因為as-path只要通過一個as就會記錄對應as號,所以只要as-path裡包含10,則該路由一定是通過as 10的路由;如果是以10結尾的as-path,則一定是始發as10的路由;如果以10開頭的,則一定是相鄰鄰居的as一定是10,即接受相鄰as10的路由;
示例:匹配以12開頭中間任意字元最後以74結尾的as-path的路由
提示:即滿足上述as-path的路由都會被允許放行;
示例:匹配有23或43的as號的路由
提示:並不是3或4,而是23或43;
示例:匹配具有具有14,17,24,27,34,37的as號
提示:【1-3】表示連續的數字,即1、2、3;【47】表示4或7,即數字4或者數字7;組合其他就是14、17、24、27、34、37;
示例:匹配始發as170,且as34512和as170相鄰且通過as34512的路由;
示例:匹配始發as170,並通過as621的路由
示例:使用as-path過濾器過濾掉本地始發as55路由
新建as-path過濾器
[R1]ip as [R1]ip as-path-filter 1 d [R1]ip as-path-filter 1 deny 55$ [R1]dis ip as As path filter number: 1 deny 55$ [R1]
提示:as-path-filter 後面的1我們可以理解為是as-path過濾器的匹配次序;多條as path是與的關係,即都要滿足才能被匹配;
在BGP裡呼叫as-path過濾器
提示:as-path過濾器也是有預設規則的,預設規則是拒絕操作,即沒有被正則匹配到的路由,統統都是拒絕操作;所以我們看到的BGP路由表中,對應始發234的路由也一併被過濾掉;
在as-path裡允許其他所有路由通過
再次檢視BGP路由表,看看對應始發234的路由是否恢復?
提示:可以看到始發as55的路由被過濾掉了,始發234的路由恢復正常;這是因為我們只拒絕了始發as55的路由,允許了其他沒有被始發as55的路由;