论剑BGP7
?上期問題:BGP路由經常數以萬計,如果有大量不同但是又非常相似的團隊屬性需要實施同樣的路由策略(比如:需要對攜帶團隊屬性“100:1、200:1、300:1、400:1、500:1…”的路由實施相同的策略),該如何簡化配置呢?
參照我們上回所說,如果需要對攜帶團隊屬性“100:1、200:1、300:1、400:1、500:1…”的路由實施相同的策略,我們必須配置多條團隊屬性過濾器:
ip community-filter 1 permit 100:1
ip community-filter 2 permit 200:1
ip community-filter 3 permit 300:1
ip community-filter 4 permit 400:1
ip community-filter 5 permit 500:1
這樣不免非常麻煩,這時我們可以用到高級團隊屬性過濾器。高級團隊屬性過濾器作用和普通團隊屬性過濾器一致,不同點就在于其過濾器的編號為100~199。高級團隊屬性過濾器可以使用正則表達式來制定團體,這一點在使用AA:NN格式的團隊屬性時非常有用。
如上面這個例子,如果我們使用高級團隊屬性過濾器,則只需要配置一條命令即可:
ip community-filter 101 permit .*:1
關于正則表達式,這里不多做介紹。在使用路由策略,尤其是使用AS_PATH和團隊屬性時,正則表達式是一個非常有用的工具,可以極大的降低我們的配置工作量,有興趣得小伙伴可以查找相關資料了解。
?
交換機一行人路上稍遇拖延,趕到網絡武林大會之時,各大門派都已然到了。交換機忙入場落座,環顧四周,中間一席,坐的正是那武林盟主IP長老。見參會者已到齊,IP長老起身,對著場下眾人擺擺手,道:“承蒙諸位趕來參會,老朽感激不盡,諸位匆匆趕來,想必還未曾互相認識,老朽忝居主位,就為大家介紹一下。這位便是×××掌門虛通長老。”說罷,一老者站起來向眾人致意,旁邊站著一明艷少女。
交換機定睛望去,不由吃了一驚,這正是那日在路上設陣相阻的老者,未想到竟是這×××一派之長。霎時間心頭涌起了一陣自得之意,手心中微微出汗。×××享譽江湖,自己居然曾戰勝過×××門下陣法,實是意外之喜。但見那虛通長老身旁的少女甚是眼熟,好似在哪里見過,卻一時想不起來。
正想間,IP長老已介紹完場上眾人,繼續說道:“這次邀諸位前來,實是有一事困擾江湖日久,想借諸位之智,看有無妙方可解。江湖上門派日多,路由表規模已10萬計,如此龐大的路由,管理之難,已日益嚴重,雖有BGP神功調配,也漸漸難以支撐,不知各位可有解決之道。”
路由問題,自首先由路由門下解決。眾人的目光一下投向交換機。交換機思考半晌,說道:“路由管理之難,其中一要因在于地址分配混亂,路由隨意發布。若以規范,使路由先聚合,而后發布,必可降低路由表大小,緩解路由管理之難。”
?
?題外話:由于BGP中自動聚合限制非常多,實際效果非常不理想,所以絕大部分情況下,我們會采用手動聚合的方式。手動聚合有兩種方式,下面就給小伙伴們介紹一下:
一:利用靜態路由進行聚合
這種方式是先在路由表中為聚合地址創建靜態表項,之后再利用network命令宣告該聚合地址,如下面這個例子:
?如圖,AS100中有192.168.1.0/24、192.168.2.0/24、192.168.3.0/24和192.168.4.0/24四個內部網絡,現在要將4個內部網絡的路由聚合成一條192.168.0.0/16這條路由。
R1的關鍵配置:
#
bgp 100
?peer 11.1.1.2 as-number 200
?#
?ipv4-family unicast
??undo synchronization
??network 192.168.0.0 255.255.0.0??/將聚合路由發布到BGP中
??peer 11.1.1.2 enable
#
ip route-static 192.168.0.0 255.255.0.0 NULL0??/配置一條指向NULL0的靜態聚合路由
#
由于聚合路由本身并不是合法的終端目的地址,因而靜態路由指向Null接口,該路由在R1的路由表中僅代表一條精確路由。如果數據包的目的地址屬于AS100的C類地址,那么AS100的外部路由器將撇配該聚合路由并轉發給R1,到了路由器R1之后,數據包將被匹配到更精確的地址,并被轉發到正確的內部下一跳路由器。如果因某種導致更精確的C類地址不在R1路由表中的話,將把該數據包轉發到Null接口并予以丟棄。我們查看R2的BGP路由表:
R2的路由表中只有一條聚合路由,其他明細路由均未進入R2的路由表。
?
二:通過aggregate命令手動聚合路由,并抑制明細路由
在上面這種簡單的場景下,通過靜態路由進行聚合的方式已經足夠了,但是對于拓撲結構或者路由策略稍微復雜一些的情況,通過靜態路由進行聚合的方式不建議被使用,我們可以使用aggregate命令進行手動聚合。下面我們具體說明下aggregate命令極其參數的作用。
先在上面那個簡單的例子中使用aggregate命令。
R1的關鍵配置:
#
bgp 100
?peer 11.1.1.2 as-number 200
?#
?ipv4-family unicast
??undo synchronization
??aggregate 192.168.0.0 255.255.0.0 detail-suppressed
??network 192.168.1.0
??network 192.168.2.0
??network 192.168.3.0
??network 192.168.4.0
??peer 11.1.1.2 enable
#
想要宣告由aggregate命令指定的聚合路由,必須通過重分布或者network命令使至少一個更精確的地址進入BGP路由表。這里我們查看R1和R2的BGP路由表:
?
可以看到,R1的BGP路由表中包含了所有精確路由,而R2的路由表中只有一條聚合路由,這是因為我們在aggregate命令中配置了detail-suppressed參數,使R1只會將聚合路由發送給R2。而R1的BGP路由表中,明細路由前面都有“s”的標志,代表這些路由已經被抑制。
?
三:同時發送聚合路由和明細路由
對于像上面這種簡單拓撲來說,確實不需要同時宣告聚合路由和明細路由。我們再看一下下面這個例子:
?如圖,AS100多歸屬到AS200,AS200需要從AS100接受全部路由以設置路由策略,但AS200僅能向AS300發送聚合路由。這個場景下,AS100就需要將全部路由發送給AS200。
這里一種簡單的解決方式是利用我們上一回中所說的團隊屬性。讓AS100發送給AS200的明細路由攜帶NO_EXPORT團隊屬性。配置以R1為例
R1的關鍵配置:
#
bgp 100
?peer 11.1.1.2 as-number 200
?#
?ipv4-family unicast
??undo synchronization
??aggregate 192.168.0.0 255.255.0.0??/路由聚合為192.168.0.0/16,并且不抑制明細路由
??network 192.168.1.0
??network 192.168.2.0
??network 192.168.3.0
??network 192.168.4.0
??peer 11.1.1.2 enable
??peer 11.1.1.2 route-policy COMMUNITY export??/對R2出方向使用路由策略COMMUNITY
??peer 11.1.1.2 advertise-community??/對R2發送攜帶團隊屬性的路由
#
route-policy COMMUNITY permit node 5??/配置路由策略COMMUNITY,對匹配前綴列表AGGREGATE的路由不設置團隊屬性
?if-match ip-prefix AGGREGATE??
?apply community none
#
route-policy COMMUNITY permit node 10??/未匹配上一個節點的路由,為其打上團隊屬性NO_EXPORT,這樣就實現了僅對明細路由打上NO_EXPORT屬性
?apply community no-export
#
ip ip-prefix AGGREGATE index 10 permit 192.168.0.0 16??/配置前綴列表AGGREGATE僅匹配192.168.0.0/16
#
我們通過命令display bgp routing-table 192.168.0.0查看R2上聚合路由的詳細信息:
可以看到,該路由已被并標明是一條聚合路由,并且在AS100進行聚合,始發路由器的ROUTER ID是11.1.1.1。該路由并未攜帶任何團隊屬性。我們再查看R5的BGP路由表:
R5上只存在聚合路由,明細路由由于攜帶NO_EXPORT團隊屬性,并未發送給R5。
轉載于:https://blog.51cto.com/hanjh8/1572027
總結
- 上一篇: Ubuntu 14.04 / 13.10
- 下一篇: javascript常用对象