IGP會影響路徑最常見的是改Metric,EIGRP改Metric跟頻寬(B)和延遲(D)有關係,OSPF影響Metric最重要的是頻寬(B)。
BGP可以通過很多的屬性來控制路徑:
一. 選路屬性:進行路由選路控制二. 路由控制屬性:用來決定路由能不能被誰接收、被誰發送
官方的標準
BGP路徑屬性一. 公認
1. 公認必遵 (well-known mandatory)
BGP的路由必需要攜帶公認必遵屬性。
2. 公認自決 (well-known discretionary)
可選擇BGP的路由是否攜帶,一但攜帶的話公認自決屬性就要被所有廠商所識別。
二. 可選
1. 可選傳遞
(optional transitive)可選被識別也可不被識別。
2. 可選非傳遞 (optional non-transitive)
我能識別但是不傳遞。
公認屬性
公認屬性是一種所有BGP實施都必需能識別的屬性;這些屬性被傳輸給BGP鄰居。
要點:
1. 公認必決屬性必需出現在路由描述中。2. 公認自決屬性不是必需出現在路由描述中。
任選屬性
任選屬性不要求所有BGP的實施都必需支持;它可能是一個私有屬性。
要點:
1. 如果任選屬性被支持的話,就可以將它傳輸給BGP鄰居。2. 任選非傳遞屬性必需被不支持此屬性的路由器刪除。
BGP屬性分類 08:00
一. 公認必決:AS-path、Next-hop、Origin
二. 公認自決:
Local preference、Atomic aggregate
三. 任選可傳遞:
Aggregator、Comm
四. 任選非傳遞:
Multi-exit discriminator (MED)
AS-path:AS-PATH意思是每經過一個AS,都會把他的AS號放在AS-PATH這個屬性裡面,然後協帶路由表一起轉發。
Next-hop: *>
Origin叫起源屬性:用來標示這個路由是通過怎樣的方式放進BGP的。第一可以用network放進去,第二為重分佈放進路由第三為AGG(聚合命令aggregate)
Comm叫社團屬性:做路由控制
(MED) :就像IGP的metric
BGP路由選擇的決策過程 19:50
思考:選路原則的前提是什麼?
要先解決路由的優化問題
1. 優選最大權重 (Weight)
2. 優選最高本地優先級 (Local Preference)3. 優選本路由器起源的路由 (Next-hop=0.0.0.0)
4. 優選最短AS-Path
5. 優選最小的起源代碼 (IGP<EGP<incomplete) →重分佈
6. 優選最小的MED
7. eBGP路徑優於iBGP路徑 (20的AD優於200的AD)
8. 優選最短IGP鄰居的路徑
9. 優選eBGP路徑中最老的路由
10. 優選最小鄰居BGP Router ID的路徑
11. 優選最小鄰居IP地址的路徑
選路原則
傳播範圍
|
默認值
|
越大越好?
|
|
Weight
|
本地有效
|
0/32768
|
大
|
Local preference
|
一個AS內
|
100
|
大
|
起源本地
|
XXX
|
Next-hop 0.0.0.0
|
XXX
|
AS-Path
|
所有的AS
|
越短越好
|
|
Origin
|
所有的AS
|
i > e > ?
|
|
MED
|
所有的AS
|
0
|
|
eBGP優於iBGP
|
XXX
|
20/200(eBGP/iBGP)
|
選路原則的前提是什麼?
要先解決路由的優化問題,才考慮BGP的選路。
實驗拓樸
R1(config-if)# ip address 11.1.1.1 255.255.255.0
R1(config)# interface eth 0/0
R1(config-if)# ip address 12.1.1.1 255.255.255.0
R1(config-if)# no shut
R1(config)# interface s 1/0
R1(config-if)# ip address 13.1.1.1 255.255.255.0
R1(config-if)# no shut
R2(config)# interface loopback
0
R2(config-if)# ip address 22.1.1.1
255.255.255.0R2(config)# interface eth 0/0
R2(config-if)# ip address 12.1.1.2 255.255.255.0
R2(config-if)# no shut
R2(config)# interface eth 1/0
R2(config-if)# ip address 23.1.1.2 255.255.255.0
R2(config-if)# no shut
R3(config)# interface loopback
0
R3(config-if)# ip address
33.1.1.1 255.255.255.0R3(config)# interface eth 0/0
R3(config-if)# ip address 23.1.1.3 255.255.255.0
R3(config-if)# no shut
R3(config)# interface s 1/0
R3(config-if)# ip address 13.1.1.3 255.255.255.0
R3(config-if)# no shut
IGP
R2(config)# router ospf 1
R2(config-router)# network
22.1.1.1 0.0.0.0 area 0R2(config-router)# network 23.1.1.0 0.0.0.255 area 0
R3(config)# router ospf 1
R3(config-router)# network
33.1.1.1 0.0.0.0 area 0R3(config-router)# network 23.1.1.0 0.0.0.255 area 0
BGP
R1(config)# router bgp 1
R1(config-router)# neighbor
12.1.1.2 remote-as 23R1(config-router)# neighbor 13.1.1.3 remote-as 23
R2(config)# router bgp 23
R2(config-router)# neighbor
12.1.1.1 remote-as 1R2(config-router)# neighbor 33.1.1.1 remote-as 23
R2(config-router)# neighbor 33.1.1.1 update-source loopback 0
R3(config)# router bgp 23
R3(config-router)# neighbor
13.1.1.1 remote-as 1R3(config-router)# neighbor 22.1.1.1 remote-as 23
R3(config-router)# neighbor 22.1.1.1 update-source loopback 0
R3# show ip bgp summary
R1# show ip bgp summary
R2# show ip bgp summary
放路由進去
R1# show ip router
R1# show ip router
R1(config)# router bgp 1
R1(config-router)# network
11.1.1.0 mask 255.255.255.0
R1# show ip bgp
R1可以通過這條路由傳給R2和R3。
R1可以通過這條路由傳給R2,R2在通過iBGP傳給R3。R3可以通過兩個方向學到同一條路由(R1→R2→R3;R1→R3)。
R3是要通過誰來傳給R3呢?這就叫選路。
先把R1到R3給down掉
R1(config)# interface s 1/0R1(config-if)# shut
R1# clear ip bgp * so
因為R1把路由傳給R2的時候,R2所偕帶的下一跳是R1(12.1.1.1),R2在把路由傳給R3的時候,就沒有在R2上對R3說next-hop-self,所以路由傳給R3在R3看到這條路由的下一跳還是12.1.1.1,在R3上就沒有路由可逹到12.1.1.1這個網段,不優的話就不可能看到 *>。
解決路由優化問題
R2(config)# router bgp 23R2(config-router)# neighbor 33.1.1.1 next-hop-self
同樣的R3也有可能把路由傳給R2,所以R3也要對R2說
R3(config)# router bgp 23R3(config-router)# neighbor 22.1.1.1 next-hop-self
R3# clear ip bgp * so
R3# show ip bgp
把R1到R3給連起來
R1(config)# interface s 1/0R1(config-if)# no shut
怎麼看R3路由
R3# show ip bgp11.1.1.0這條路由可以通過兩個方向學到,一個從13.1.1.1也能通過22.1.1.1,路由從哪傳來就看 > 在什麼地方。
每條路由都必需偕帶公認必遵屬性,AS-path為Path、Next-hop、Origin起源屬性為最後面的i,標示這條路由是從哪個起源進來的。
Network進來的是i,前面的i是通過iBGP學過來的。
默認是通過第7條選路進來eBGP路徑優於iBGP路徑,同時也有兩個AD值。
通過eBGP學過來的路由他的AD值是20,通過iBGP學過來的路由他的AD值是200。所以選AD(通告距離)小的。
一. 通過Weight (重量)值來改選路 52:00
1. 他是cisco私有的
1. 他是cisco私有的
2. 有兩個默認值 0/32768
3. 越大越好
4. 本地有效
3. 越大越好
5. 只可以在in方向上去修改
R1# show ip bgp
要在R2發給R3的in方向修改
Router-map是一個工具:
1. BGP修改屬性2. 重分佈
3. PBR → 策略路由 (負載均衡)
在R3上做Router-map
首先針對11.1.1.0這條路由來做,所以要把這條路由抓出來,用簡單的方法寫一條ACL。R3(config)# access-list 1 permit 11.1.1.0
R3(config-route-map)# match ip address 1 (1 = access-list 1)
配置了route-map名字是W,匹配了這個路由1 (1 = access-list 1)
R3(config-route-map)# set weight 100
R3(config-route-map)# exit
Set他的weight值 (0-65535)
他跟ACL一樣的概念:
1.從上到下匹配2. route-map如果後面沒有任何東西,最後會有一句deny any,其他所有路由全部拒絕。
為了不影響其他所有路由,在設定一個指令
R3(config)# route-map w
permit 999
意思是放行其他所有路由,我不去match就是match所有,我不去set就是什麼都不做。
我僅只對ACL 1做weigh值的修改,而其他所有路由都沒做任何的set(就是放行)。
如果沒有route-map w permit 999會出現什麼問題
在R1上建一個環回口
R1(config)# interface
loopback 1
R1(config-if)# ip address
122.1.1.1 255.255.255.0R1(config-if)# exit
R1(config)# router bgp 1
R1(config-router)# network 122.1.1.0 mask 255.255.255.0
R1# show ip bgp
R3(config)# no route-map w
permit 999
Router-map做了要調用才會生效
啟用Router-map
R3(config)# router bgp 23R3(config-router)# neighbor 22.1.1.1 router-map w in
在R2發給R3路由的時候,在進來的方向掛上router-map w,只能在in的方向。
R3# show ip bgp
11.1.1.0的weight值變成100,路徑變成R1→R2→R3
122.1.1.0的路由只能從R1學過來,不能從R2學過來,因為router-map設定為只對11.1.1.0的路由在做策略,最後一句deny any為11.1.1.0只能從R2收到路由其他路由全部deny掉了,都不能走R2這條路徑。
R3(config)# route-map w
permit 999
R3# clear ip bgp * so
R3# show ip bgp
之前122.1.1.0只能從R1傳過來,現在也能從R2傳過來了。
總結:在用router-map修改BGP屬性的時候,如果只是針對某一個路由在做屬性的修改,記得要放行其他沒有修改的路由,否則的話你只會收到已修改的路由,沒做修改的路由將會收不到,因為router-map最後一句為deny any,最後要加一句放行。
2. Local preference (本地優先) 1:12:20
還原把調用刪掉R3(config-router)# no neighbor 22.1.1.1 router-map w in
R3# show ip bgp
在其他場商設備Local preference為第一優先,weight只用在cisco設備。
傳播範圍在一個AS內傳遞,默認值是100越大越好,可以使用在in和out方向。看到從R1傳過來的Local preference為0,從R2傳過來的為100,其實R1的Local preference不是0。
看路由的明細
R3# show ip bgp 11.1.1.0
1. 有時候看到LocPrf為0並不代表不是100,要show明細才能看到。
2. 為什麼R1的Local preference為0,因為他只能在一個AS傳遞,所以是在不同的AS;不能在eBGP傳遞,對端R1傳給我的路由並沒有偕帶LocPrf,所以LocPrf為0。
但明細為什麼又能看到LocPrf為100?
明細的LocPrf為100是因為R3默認會把所有eBGP的鄰居傳給我的路由打上LocPrf為100。
總結:LocPrf為0是因為LocPrf不可能在eBGP當中傳遞所以為0,明細裡的LocPrf為100是因為默認的LocPrf只能在一個AS傳遞並且他的默認值為100。這時候當我從eBGP收到的路由,我會自己把他打上一個默認的LocPrf為100
現在要通過Local preference讓R3學過來的11.1.1.0這條路由從R2走
一樣要寫一條ACLR3(config)# access-list 1 permit 11.1.1.0
R3(config)# route-map L
R3(config-route-map)# match
ip address 1R3(config-route-map)# set local-preference 101
R3(config-route-map)# exit
R3(config)# route-map L permit 999
R3(config-route-map)# exit
啟用Router-map
R3(config)# router bgp 23R3(config-router)# neighbor 22.1.1.1 router-map L in
如果out要在R2的出方向做。這時要注意哪個設備的in和out。
R3# show ip bgp
這條路由從R2走,並且其他路由不受影響。還原把啟用刪掉R3(config-router)# neighbor 22.1.1.1 router-map L in
3. 起源本地優先 01:20:00
R1# show ip bgp
在cisco路由器中只要是起源本地他的weight就是32768,從其他地方來的路由他的weight就是0,在cisco中不可能比到起源本地因為第一條weight值就比出來了。
不同品牌路由才會用到。
4. AS-Path 01:22:20
1. 傳播範圍為所有的AS
2. 每經過一個AS會把AS號放進AS-Path裡面
3. AS越少越好 2. 每經過一個AS會把AS號放進AS-Path裡面
4. 只能在eBGP的鄰居上設定
5. 能在in和out方向設定
在R3的in方向把R1傳給我的路由的AS多加一個path
一樣要寫一條ACL把路由抓出來R3(config)# access-list 1 permit 11.1.1.0
R3(config)# route-map AS
R3(config-route-map)# match
ip address 1R3(config-route-map)# set as-path prepend 11 111 111
Prepend叫在什麼什麼之前,後面加了三個AS
R3(config-route-map)# exit
R3(config)# route-map AS
permit 999R3(config-route-map)# exit
啟用Router-map
R3(config)# router bgp 23R3(config-router)# neighbor 13.1.1.1 router-map AS in
只能在eBGP環境下啟用,只能在13.1.1.1建立eBGP鄰居關係後,加上router-map AS在(in)進來之前。
總結prepend的過程:R3在跟R1建立eBGP鄰居關係的時候,在R1把路由傳給我進來之前加上11、111和1111。
R3# clear ip bgp * so
R3# show ip bgp
通過修改在進來之前加了幾個AS,為了控制選路AS-Path最短最優。
增加AS-Path是為了做選路,而本身的AS-Path是在防環路的。
基本觀念:在用AS-Path控制選路時所增加的AS最好跟Path的AS要一樣,所以不能隨便加AS號。
正確要這樣設定
R3(config-route-map)# no set as-path
prepend 11 111 111R3(config-route-map)# set as-path prepend 1 1 1
寫幾個1都可以
R3# show ip bgp
同樣做到選路的目的,也不會重複到其他的AS號,同時也做到了eBGP防環路,就不會影響其他的AS。
還原把啟用刪掉R3(config-router)# no neighbor 13.1.1.1 router-map AS
in
5.
Origin (起源屬性) 01:33:00
1. 傳播範圍為所有的AS 2. 默認值有三個 i > e > ?
通過network進來的是i,通過重分佈進來的是?,通過EGP古老的協定進來的是e。
只要把從R1傳過來的13.1.1.1路由起源屬性改成e或?,他的優先級就沒有比i高了。
R3(config)# route-map O
R3(config-route-map)# match
ip address 1R3(config-route-map)# set origin incomplete
IGP為i、incomplete為?
R3(config-route-map)# exit
R3(config)# route-map O permit 999
R3(config-route-map)# exit
啟用Router-map
R3(config)# router bgp 23R3(config-router)# neighbor 13.1.1.1 router-map O in
跟eBGP建立,你發給我的時候加上router-map O在進來的方向
R3# clear ip bgp * so
R3# show ip bgp還原把啟用刪掉R3(config-router)# no neighbor 13.1.1.1 router-map O in
6. MED (metric) 01:37:30
傳播範圍為所有AS之間傳遞,默認值是0越小越好,可以在in和out方向設定。
只要把從R1傳過來的metric改大
R3(config)# route-map MR3(config-route-map)# match ip address 1
R3(config-route-map)# set metric 50
R3(config-route-map)# exit
R3(config)# route-map M
permit 999
R3(config-route-map)# exit
啟用Router-map
R3(config)# router bgp 23R3(config-router)# neighbor 13.1.1.1 router-map M in
把R1傳給R3的metric改大,掛上router-map M在進來的方向
R3# clear ip bgp * so
R3# show ip bgp
還原把啟用刪掉R3(config-router)# no neighbor 13.1.1.1 router-map M in
7. eBGP優於iBGP 01:41:40
R3# show ip bgp