1. 程式人生 > >BGP - 5,BGP屬性

BGP - 5,BGP屬性

研究 link send 進程 就是 5.0 router conf 選路

metric,自己決定去哪個EBGP鄰居 local-pre,影響AS內部IBGP鄰居的路由決策 med,影響AS外部EBGP鄰居的路由決策 1,BGP屬性 公認傳遞(well-known mandatory ):必須支持,而且必須包含,包括as-path,next-hop,origin 公認非傳遞(well-known discretionary):必須支持,但是可以不包含,包括local-preference 可選傳遞(optional transitive ):可以不支持,但是必須往下傳,包括community 可選非傳遞(optional nontransitive ):可以不支持,也可以不往下傳,包括med,weight(思科私有) 2,Origin屬性 查看路由的origin屬性,可以用show ip bgp,在最後一列的path列中。 明確了路由的來源,有三種: IGP:i,通過BGP network命令得來,即起源於IGP,因為BGP network必須是路由表中有的 EGP:e,由老的EGP協議重發布來,現在沒了 incomplete:?,從其他渠道學來,重發布路由都是這個標記 IGP>EGP>incomplete 可以將origin改成E,用route-map做,eg: (config)# ip prefix-list 10 permit 192.168.1.0/24 (config)# route-map ABC permit 10 (config-route-map)# match ip address prefix-list 10 (config-route-map)# set orign egp 30 /改成egp,AS號30 (config)# route-map ABC permit 20 (config)# router bgp 20 (config-router)# neighbor x.x.x.x route-map ABC in 備註:BGP中要改屬性的值,基本都要用到route-map,route-map可以用prefix-list或者ACL,需要考慮"方向",是不是要打"空語句" 3,AS_PATH 經過的AS號,防環。 僅當路由被發往其他AS時(EBGP peer),BGP路由器才會將AS號追加至AS_PATH中。也就是說,如果想修改AS_PATH屬性,必須在AS邊界路由器上執行,對IBGP鄰居執行修改AS_PATH是無效的。 1)AS_PATH路徑屬性的四種類型 AS_SEQUENCE:有序AS號集合 AS_SET:無序AS號集合 AS_CONFED_SEQUENCE:聯邦有序AS號集合 AS_CONFED_SET:聯邦無序AS號集合 2)AS_SEQUENCE 途徑AS號的集合,例如300,100。即去往該目的地址需要途徑300、100。 技術分享圖片

3)AS_SET 為了防環,加入了明細路由AS號的集合,但是明細AS號集合是無序的。 例如300,{200,100},R3匯總時使用了AS_SET命令繼承了明細路由的AS_PATH 技術分享圖片

4)使用route-map修改AS_PATH 技術分享圖片

通過更改AS_PATH影響選路。R2做如下變更:

(config)# ip prefix-list 10 1.1.1.0/24 (config)# route-map ABC permit 10 (config-route-map)# match ip add pre 10 (config-route-map)# set as-path prepend 666 (config)# neighbor 3.3.3.3 route-map ABC out /對鄰居R3出方向掛route-map ABC,影響的是控制層面 備註: R3收到的路由AS-PATH是200,666,i。如果是R3的in方向掛route-map ABC,則是666,200,i。 插入不存在的AS號有風險,萬一真的遇到AS666會被拒收,所以可以插入自己的AS號,即200。 5)AS_PATH的幾個命令 neighbor 路由來源鄰居 allowas-in 幾個我的as號 /允許接收包含自己AS號的路由 bgp bestpath as-path ignore /讓思科路由器決策過程中忽略AS-path屬性 4,NEXT-HOP next-hop結合同步,決定了路由能否打上大於號,即最優。該地址要能訪問。 1)來自EBGP鄰居R1的路由,自己是R2 R1(AS100)--------R2(AS200) next-hop即為EBGP鄰居R1的更新源地址 2)來自IBGP鄰居R2的路由,並且是AS外的路由,自己是R3 R1(AS100)--------R2(AS200)--------R3(AS200) next-hop還是EBGP鄰居R1的更新源地址,不會發生改變 3)來自IBGP鄰居R2的路由,並由AS內BGP路由器引入 如果通過aggregate-address引入,則next-hop等於執行匯總路由器的更新源地址 如果通過network或者重發布引入,那麽註入前的IGP下一跳稱為BGP的next-hop 如果本地BGP宣告者成了下一跳地址,那麽在本地BGP RIB表中下一跳字段就是0.0.0.0。(備註:這段話的意思應該是如果本地產生的即本地network或者aggregate的,那麽下一跳就是0.0.0.0,選路原則第三條就是優選本地產生的。但是李桃梅視頻中不是很理解這一條,稱:優選next-hop為0.0.0.0的路由,實際上不會遇到?因為本地產生又從其他地方傳來,意味著環路?) 4)通過next-hop-self可以更改next-hop屬性 5)MA網絡上的next-hop,如果R1、R2、R3是EBGP鄰居關系,來自三個不同的AS,但是他們是連到同一MA網絡,則R1傳R2,R2傳R3後,next-hop仍然為R1。 6)NBMA網絡上的next-hop,同MA網絡,所以需要註意R3至R1的PVC是通的。 5,LOCAL-PREFERENCE 優先選擇local-preference值大的。默認值:100。 local-preference只在AS內部IBGP鄰居間傳遞,影響出AS流量。用來通告給IBGP鄰居,怎麽離開本AS。 去往同一目的地可以經過不同AS時,由2條路由的local-preference決定。 如果EBGP peer間收到的路由路徑屬性中攜帶local-preference,會觸發notification報文,造成會話中斷。 收到EBGP peer發來的路由更新時,local-preference的值是空的,會賦上默認值100。 本地network的路由、重發布的路由,默認local-preference值也是100。 舉例 技術分享圖片

在R1或者R4上做,告訴R3怎麽離開本AS去往AS2 方法1:改所有 (config-router)# bgp default local-preference 111 備註:比另一個大就行,改動後show ip bgp有些能顯示/有些不能顯示,在進程中做不用指定鄰居。看不到local preference的可以"show ip bgp 地址/掩碼"看到是否起效。 擴展,該命令對下列獲取的路由是否起效:a,network;b,EBGP:起效; c,IBGP;d,聚合的路由 方法2:改部分路由 要求R3訪問某些網段從R1走,同weight,用map,在R1上做 ip prefix-list 101 permit 2.2.2.0/24 route-map ABC permit 10 match ip add prefix-list 101 set local-preference 111 route-map ABC permit 20 neighbor 3.3.3.3 route-map ABC out 6,COMMUNITY 1)基本概念 可選:路由器有可能不識別該屬性 默認不認識,需要打一條命令:neighbor X.X.X.X send-community(讓對方認識) 傳遞性:社團屬性只在neighbor的鄰居有效,不會繼續往下傳,要繼續往下傳還是通過上面的命令 2)route-map中設置屬性值 主要包括: no-advertise:攜帶此屬性的路由不會通告給任何BGP鄰居 no-export:攜帶此屬性的路由不會傳出大AS(聯邦之間仍然會傳遞,聯邦內部也會傳遞) local-AS:攜帶此屬性的路由不會傳出小AS(聯邦之間也不會傳遞,聯邦內部也會傳遞,沒有聯邦即只在本AS傳遞) 備註:沒有做聯邦的話no-export和local-as效果是一樣的 配置實例: ip prefix-list 11 permit 11.11.11.0/24 route-map test permit 10 match ip add prefix-list 11 set community 100:11 router bgp 100 network 11.11.11.0 mask 255.255.255.0 neighbor 2.2.2.2 remote-as as 200 neighbor 2.2.2.2 send-community neighbor 2.2.2.2 route-map test out 3)使用ip community-list匹配community值 4)在community-list中刪除特定的community值 5)COST community 參考紅茶三杯筆記 7,MED MED值越小越優先,思科默認MED為0。 用於AS之間影響路由,兩條路由來自同一相鄰AS才會比較,即AS_SEQUENCE中的第一個AS號相同才會比較。不會跨AS傳遞。 技術分享圖片

1)MED值設置方法 IGP引入BGP時關聯route-map進行設置 對BGP peer應用in/out方向的route-map進行設置 非route-map(自動)方式:使用network或者redistribute引入IGP時,MED繼承IGP的metric;使用aggregate方式引入時,MED為空。 2)MED值的傳遞 MED值在IBGP之間傳遞沒有問題。 MED值在EBGP之間傳遞要看路由是否起源自己,如果起源自己則傳遞,不是起源自己不傳遞。 3)MED繼承IGP的metric network本地IGP,MED繼承該IGP的metric network本地直連網段,network本地靜態路由,MED值都是0 redistribute本地IGP,MED繼承該IGP的metric redistribute本地直連網段,redistribute本地靜態路由,MED值都是0 4)其他配置命令 bgp always-compared-med:默認只比較來自同一AS的MED,如果想對所有路徑都比較,則開啟此命令,要做建議整個AS都做,避免環路。 bgp bestpath med missing-as-worst:默認收到MED屬性丟失的配置為0,配此命令則配置為最大值。 set metric-type internal bgp bestpath med confed bgp deterministic-med default metric x 5)舉例 技術分享圖片 R1和R4都把8.8.8.0/24通告給了R2,不做任何策略的話,會比較到第十條,優選routerID較小的R1。 要控制AS2怎麽進入AS1訪問8.8.8.0/24時,通過修改R1/R4向R2通告路由的MED值。 方法一:所有路由設置med,可控的只有AS1,AS2是看不到的。(待實驗,貌似沒有方法二?) 1)寫MAP: route-map MED set metric X 2)調用:neighbor 12.1.1.2 route-map MED out 驗證方法:帶源地址的ping,debug ip bgp updates 8,Atomic_Aggregate及aggregator Atomic_Aggregate是公認自決屬性;aggregator是可選可傳遞。 用於提示做了匯總路由的始發AS和始發路由器。 如果加上了as_set則路由已經包含明細路由的AS號,這2個屬性就沒有了。 9,Originator_ID和Cluster_list 是RR使用的可選非傳遞屬性,用來防止環路。 Originator_ID:本AS中路由發起方的IBGP RouterID。 Cliuster_list:RR在反射路由的時候會創建或更新Cluster_list,下面幾種情況,RR不會創建該屬性:RR始發的路由;向EBGP鄰居發送路由時清除該屬性;從EBGP鄰居收到反射給client/非client時不會創建。 1)取值示例 技術分享圖片 註意,originator_id是R2,cluster_list是R3 2)cluster_id可以影響BGP選路,優選經過cluster_id少的路徑。 10,Weight 思科私有,作用範圍是本路由器(不傳遞),不會被包含在update消息中,不會傳遞給任何BGP鄰居。 1)weight的值 weight值越大越優先。 從其他鄰居學來的默認為0 本地network的是32768 本地重發布直連、重發布靜態的是32768 本地匯總的BGP路由是32768 總結:從鄰居學來0,自己的32768 2)舉例   技術分享圖片 如上圖,R2上有路由,傳播至R3,在R3做,設置路由的weight值,決定是通過R1/R4訪問R2 方法一:改所有 (config-router)# neighbor 地址A weight X /這裏地址A是R1或R3的更新源地址嗎?待確認 方法二:改部分路由 要求R3訪問某些網段從R1走,用map(ACL,prefix-list) eg: ip prefix-list 2 permit 2.2.2.0/24 route-map ABC permit 10 match ip address prefix-list 2 set weight 3 route-map ABC permit 20 neighbor 1.1.1.1 route-map ABC in /提供了weight值,優先從R1走 11,BGP選路原則 前提條件:1)同步,2)下一跳。即有2條最優路(大於號)時才會涉及到選路。此外如果被入方向BGP策略拒絕+soft reset,或者damped,也不會涉及選路。 研究BGP屬性需要著重分析點:傳播範圍,默認值,越大越好/越小越好 11.1,概述 BGP路由信息庫RIB,包含三個部分: Adj-RIBs-IN:來自對端的,未經處理的消息 Loc-RIB:經過本地策略後使用的路由 Adj-RIBs-OUT:傳遞給對端的路由 BGP的決策過程,即對Adj-RIBs-IN中的路由使用本地策略,並將選定或修改的路由放到Loc-RIB和Adj-RIBs-out中。 11.2,選路原則 1)weight(越大越好):本路由器上的路由優先級 2)local-preference(越大越好):發給IBGP鄰居,怎麽離開本AS 3)起源於本地(如network或aggregate的,即下一跳是0.0.0.0,以下依次遞減:default-originate,default-information-originate,network,redistribute,aggregate-address) 4)AS-PATH(越短越好) 5)origin屬性(i>e>?) 6)MED(相當於IGP的metric,越小越好):告知EBGP鄰居,怎麽進入本AS 7)EBGP鄰居優於IBGP鄰居(聯邦中也是) 這條指的是同一條路由從BGP學到,可以是IBGP也可以是EBGP,不會根據AD值優選EBGP,而是要根據選路原則逐條判斷,比到這一步時還會優選EBGP。 AD值只用於同時從不同協議,IGP和BGP比。 8)優選最近的IBGP鄰居 9)基本用不到(優選最老EBGP鄰居傳來的路由) 10)比較route-id(越小越好) 特殊情況: 11)有RR時,優選Cluster-id最短的 12)如果還是比較不出 ,即同一個鄰居建了多條鏈路,優選ip地址最小的 常用的只有weight,local-preference,med這3個屬性。 11.3,BGP的負載均衡 1)等價負載均衡 如果選路原則1~8相同,並且在BGP進程下面配置了maximum-paths {ibgp} n,n取2~6,可以配置對EBGP鄰居、IBGP鄰居執行負載均衡。 BGP表中只會優選一條,但放入路由表有2條。 EBGP等價負載均衡只有對來自對一AS的不同EBGP鄰居的路由才有效,來自不同EBGP鄰居的路由無效。 2)非等價負載均衡(待修訂補充) neighbor 2.2.2.2 dmzlink-bw send-community 12,BGP選路環路問題案例 技術分享圖片

1267屬於AS123,345屬於AS456,23和56分別建立EBGP鄰居關系,26向AS456註入默認路由,R4向AS123宣告一條4.4.4.4的路由,26分別執行雙向重分布,且ospf外部路由也重分布到BGP,正常情況下: R2的BGP表:最後比到第7條,EBGP鄰居優於IBGP鄰居 技術分享圖片 R6的BGP表:最後比到第7條,EBGP鄰居優於IBGP鄰居 技術分享圖片 工作正常 R2和R3之間的鏈路斷開後 R2從EBGP鄰居學不到該路由了,但R6的BGP學到了該路由,然後重發布到OSPF 技術分享圖片 R6從OSPF學到該路由,優選了該路由? 技術分享圖片

又重發布回OSPF....

R2又變為

技術分享圖片

R6又變為:

技術分享圖片

最後路由出現了環路,造成R1 trace R4的報文在R2和R6之間環路,所以重發布時帶上OSPF外部路由可能會出問題。

BGP - 5,BGP屬性