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外部路由可能會出問題。