內容簡介:
概述
鄰居建立
配置,水平分割,更新源
路由黑洞
RR
聯邦
認證,刷新
路由彙總
#################################################################################
BGP的自制系統
RFC對AS的定義:一組被統一管理的路由器,他們使用相同的內部網關協議和統一的度量值在AS內部路由分組,使用外部路由網關協議將分組路由器到其他AS。
IGP 運行在自治系統內,優化最佳路由
BGP 運作與自治系統之間,利用路由策略選路和提供安全控制
必須交換物環路的路由信息。
自治系統之間運行BGP原因:
AS之間的路由條目龐大
選路機制需求
BGP
分類 EGP,距離(路徑)矢量,無類
封裝 TCP 179
更新目標(3層) 單播
更新方式 增量更新,觸發更新
AD iBGP:200 eBGP:20
度量方法 無
路徑矢量協議
記錄沿途的AS號
放環機制:丟掉帶自己AS號的路由
特性 增強的距離矢量協議
可靠的路由更新:使用TCP179
增量更新,觸發更新
利用keepalive來提供保活和驗證連接
豐富的度量方法(路徑矢量或是屬性)
支持超大規模的網絡
最適合使用與下列情況
一個AS允許數據包通過他透傳到其他自治系統(ISP)
有多個連接到其他自治系統,在流量進入或離開AS時必須實施路由策略以及路由選擇
BGP數據庫
鄰居表:bgp永遠要手工建立
BGP表:列出了從每一個鄰居學習到的網絡
到一個目的網絡可以包含多個路徑
每個路徑包含BGP屬性
IP表 :列出到 達目的最好的路徑
####################### 以上對 BGP 的概述 ###############################################
BGP鄰居的建立
BGP消息類型:(5種)
open :建立鄰居用
包含 hold time 180s;BGP routerID
協商的信息包含:
版本 (ipv4)
AS號(AS號一致才能建立鄰居)
hold time
router ID
能力值(ipv4/6;***v4/6等)
keepalive:保持鄰居 60s 因連接建立時協商大量的屬性,所以保持時不需要一一保持,所以用 keepalive包來保持鄰居
update:發送如何到達目的網絡的路由更新
包含路徑屬性以及網絡
notification:檢測到錯誤關閉連接用
因爲BGP是在TCP上的,所以會先建立TCP連接,然後在open協商,當協商不通過,就使 用notification斷開BGP連接
router-refresh message:
BGP建立鄰居狀態
1,idle(空閒):路由器搜索路由表,看是否有路由到達鄰居
2,connect(連接):路由器發現了去往鄰居的路由並準備TCP的3次握手
建立成功就進入open sent,否則變爲active等待重新建TCP連接
3,open sent(發送):發送open消息,然後等待一個open的到來
4,open confirm(確認):路由器收到一個open,檢查BGP回話參數,匹配後發送keepalive確認, 然後進入到openconfirm,開始等待自己的open報文被確認
注意confirm狀態是在在收到對方的open後就進入了,不是收到keepalive才進入confirm狀態的。
5,established(建立):收到了對自己open報文的keepalive確認,對等體建立;準備交換路由
如果收到一個notification消息,則說明自己的open不被認可,則斷開TCP連 接,遷移到idle狀態
6,active:該狀態正常不會出現,只有當參數不匹配,TCP建立不成功等。BGP進程會初始化與鄰居的TCP連接嘗試重新建立時纔會進入的狀態。
卡在idle:情況:
1,沒有路由表
2,EBGP鄰居,用loopback建立,沒有敲ttl的多跳
卡在active 情況
思路:1,TCP建立不成功
2,參數不匹配
TCP建立不成功:數據包有去無回,可以用帶源ping測試
鄰居之間指鄰居配置錯誤
參數不匹配:可以sho run 查看
#########################################################################################
配置部分
router bgp AS號
這個命令只是進入路由配置模式;必須配置子命令激活BGP(默認激活ipv4)
一個路由器只能配置一個BGP實例
自治系統號確定了本地路由器屬於的自治系統
nei x.x.x.x mask remote AS
no bgp default ipv4-unicast 關閉IPV4
router-id x.x.x.x
address-family ipv4 unicast 開啓ipv4
nei x.x.x.x remote-as 100
nei x.x.x.x active
sho ip bgp summary
sho bgp ipv4 unicast summary
sho bgp ipv4 unicast neighbors
BGP更新源
IBGP 建議用loopback口建鄰居
nei x.x.x.x update-source lo0 //手工指定更新源
EBGP 通常使用物理口建鄰居,'mt6但是如果使用了loopback口建立。要注意:
1,靜態路由
2,EBGP鄰居的TTL值默認是 1。所以要修改ttl>=2
3,設置更新源
例子:
router bgp 200
nei 6.1.1.1 remot 300
nei 6.1.1.1 up lo0
nei 6.1.1.1 ebgp-multihop 2 (不打數字默認255)
注意:如果兩端都是用默認路由的話,默認是不主動發起建立TCP連接的。所以也就不能建立BGP鄰居
宣告網絡
network:但不能激活,激活需要neighbor
任何路由表的路由都能network,不一定要直連。
當一條路由不優的結果:
1,自己不用
2,不傳給其他鄰居
不優原因: 1,下一跳不可達
2,同步被開啓,同時IGP沒有學到這個路由
◆ next-hop行爲
從eBGP學到的路由的下一跳,在AS內傳遞時,下一跳也是eBGP鄰居。只有在離開本AS時,下一跳才變。
下一跳指我
nei x.x.x.x next-hop-self
sho ip bgp summ 顯示 r //加載失敗
sho ip bgp rip-failure
原因 AD值太高
sho ip bgp rib-failure 通常發生在IBGP之間 同時從IGP和IBGP學到的路由,IBGP的AD=200
sho ip bgp
s suppressed 彙總時被抑制
d damped 此路由總是up/down 被懲罰
h history 路由曾經存在
> best 優化路由
i interna
BGP建鄰居
EBGP之間用物理口建立,一條命令 neighbor xxxx remote xxx
EBGP之間用loopback口建鄰居,3條命令 neighbor xxx remote xxx
neighbor xxx update-source lox
neighbor xxx ebgp-multihop 2
IBGP之間用物理口建鄰居,1條命令 neighbor xxx remote xxx
IBGP之間用loopback口建鄰居,3條命令 neighbor xxx remote xxx
neighbor xxx update-source lox
neighbor xxx next-hop-self
###########################################################################
路由黑洞
如圖,R1 R2建立eBGP。AS200運行ospf,R2 R5運行iBGP。R5 R6運行eBGP
R1 network 1.1.1.1 mask 255.255.255.255
R6 network 6.1.1.1 mask 255.255.255.255
R2 R5 nei xxx next-hop-self
R1 R6 sho ip ro bgp 可以看到1.1.1.1 6.1.1.1
但是,R1 R6是ping不通的。ping 6.1.1.1 source 1.1.1.1 路由黑洞現象。
IGP中是hop-by-hop的,所以不會出現路由黑洞現象。BGP中,是AS-BY-AS的。上圖,R4沒有R1 R6的路由。
控制層面,路由R1 R6是通過eBGP和iBGG以及IGP使得iBGP的IP可達,使得路由可達;但在數據層面上,數據包回包時,源、目IP是R1 R6 而R4不知道R1 R6的ip的路由,所以丟包。
路由黑洞解決辦法 (3種)
路由反射器 RR:
可以打破iBGP的水平分割
聯邦:
BGP聯邦會修改AS-PATH屬性值
MPLS
◆ RR重點:
RR的防環 ----- clusterD(默認routerID)
Ooignator-ID(默認routerID)
只有通過RR被反射的路由纔會攜帶clusterID和origintID
RR如何反射路由
從client過來的路由器會傳給所有IBGP鄰居
從非client過來的路由,只傳給client
◆ 如何部署RR
client路由器只與他的RR建立IBGP鄰居關係
RR要與同一個簇的client建立IBGP鄰居關係,同時也要與不同簇的RR和普通路由器建立IBGP鄰居關係(RR要全互聯)
show ip bgp neighbor 顯示client鄰居關係
show ip bgp 11.0.0.0 顯示 “received from a RR-client”
被反射的路由會顯示 originator:x.x.x.x ,cluster list :x.x.x.x
總結:起源ID由RR打的,打的是client的routerID。
RR把路由傳給client,client遵循IBGP只傳一次,EBGP隨便傳,所以client不會再把路由傳回RR,不管誰傳給client路由,client都遵循IBGP只傳一次,EBGP隨便傳
#########################################################################################
聯邦
小的AS號在內部傳,出了大AS號後還是標記的最外大的AS號
IBGP------- AS-PATH不被改變
內部EBGP--- 內部聯邦的AS號被放到AS-PATH中
EBGP------- 內部聯邦AS號被移出AS-PATH
外部AS號被放到AS-path中
小的AS號在內部傳,出了大AS號後還是標記的最外大的AS號
內部小AS之間建立鄰居注意,如果用loopback口建立,類似與EBGP,要配置ebgp多跳
路由更新類似於IBGP:BGP屬性不變
整個聯邦跑一個IGP,保證下一跳最佳路徑可達
在聯邦內部的IBGP 鄰居關係必須是full mesh。可以在一個聯邦內部啓用RR以再減少TCP連接
聯邦內部的EBGP連接不受物理拓撲的限制
注意:在現網中配置聯邦,需要所有配置都必須重配,因爲聯邦內部使用小AS號啓進程
現網中 要先no掉原有BGP
no router bgp as-num ----- 去掉原有bgp
router bgp member-as-number -配置小AS號
bgp confederation identifier external-as-number ---配置屬於哪個大AS
bgp confederation peers list-of-intra-confederation-as --打上聯邦的其他小AS 例子:
聯邦內ebgp查看:
confed-internal--聯邦內部
confed-external--聯邦外部
external---------真正ebgp
#########################################################################################
認證
一條命令---配置密碼
router(config-router)#
neighbor {ip-address | peer-group-name} password string
例:router bgp 100
neighbor 12.1.1.2 password cisco
利用TCP擴展包頭完成的認證
###########################################################################################
刷新BGP路由
清除BGP會話
當策略,入ACL或屬性的變化,這種變化並不立即生效。並在未來的時間裏,一個前綴或路由使 用新的策略,這可能要較長時間使得策略生效於所有網絡。
必須觸發策略的更新,以確保策略是立即生效於所有英雄的前綴和路由。
如何觸發策略的更新:
硬清除 (把所有BGP鄰居down-up不要使用,會導致整個網絡down)
clear ip bgp *
軟清除 相對硬清 比較安全的 不會導致down鄰居,也不會影響bgp鄰居
clear ip bgp * soft out
clear ip bgp {*| 鄰居IP} soft in (利用type5報文 refresh 觸發對方update)
路由刷新
◆ BGP排錯,當BGP路由顯示不完整,查看鄰居是否起來,如果沒起來時,使用如下命令
sho ip bgp neighbor 56.1.1.5 advertised-routes---顯示給鄰居傳了哪些路由
如果要查看本地收到鄰居的哪些路由使用命令(一般不用)
show ip bgp neighbors 56.1.1.6 received-routes 此命令需要在配置inbound時才生效
neighbor 56.1.1.6 soft-reconfiguration inbound
##########################################################################################
BGP路由聚合(彙總)
自動彙總:只會彙總本地重分佈的,不會彙總本地network的。通常不用自動彙總
手動彙總(重點)
思路:
1,將要被彙總的路由,寫成靜態指向null0
2,把靜態宣告進BGP
router(config)#router bgp 123
router(config-router)# network 192.168.0.0 mask 255.255.0.0
router(router)#exit
router(config)# ip route 192.168.0.0 255.255.0.0 null 0
例: 上圖中R6:
int lo0 6.1.1.1 255.255.255.255
int lo1 6.1.1.2 255.255.255.255 secondary
int lo2 6.1.1.3 255.255.255.255 sec
int lo3 6.1.1.4 255.255.255.255 sec
int lo4 6.1.1.5 255.255.255.255 sec
int lo5 6.1.1.6 255.255.255.255 sec
◆ ip route 6.1.1.0 255.255.255.248 null 0
◆ router bgp 300
network 6.1.1.0 mask 255.255.255.248
方法二,在任意節點彙總
R6:
router bgp 300
network 6.1.1.1 mask 255.255.255.255
network 6.1.1.2 mask 255.255.255.255
network 6.1.1.3 mask 255.255.255.255
network 6.1.1.4 mask 255.255.255.255
network 6.1.1.5 mask 255.255.255.255
network 6.1.1.6 mask 255.255.255.255
R5:(彙總R6路由)
router bgp 200
◆ aggregate-address 6.1.1.0 mask 255.255.255.248
sho ip bgp 產生彙總的同時,明細也依然存在
使用參數 summary-only 顧慮明細,只傳彙總
◆ aggregate-address 6.1.1.0 mask 255.255.255.248 summary-only
◆ 選擇抑制(只彙總部分路由)suppress-map
以上都是把所有路由全部彙總,實際中可能會只彙總一部分。例如只彙總.1.2.3
利用route-map匹配要抑制的路由(即要彙總的路由)
route-map test permit 10
match ip address 4
access-list 4 permit 6.1.1.4 0.0.0.3(匹配了4-7)
router bgp 200
aggregate-address 6.1.1.0 mask 255.255.255.248 suppress-map test
◆ 條件通告advertise-map(只有滿足某些條件時,纔會產生彙總)
例如,R5只有存在6.1.1.1這條路由時,纔會產生彙總(使用route-map)
router bgp 200
aggregate-address 6.1.1.0 mask 255.255.255.248 suppress-map test advertise-map test2
route-map test2 permit 10
match ip address 1
access-list 1 permit 6.1.1.1
◆ as-set
在其他節點產生彙總時,也會把彙總傳回給產生這條路由的源節點,因爲彙總產生時沒 有攜帶AS號
R6:sho ip bgp 也會看到R5對R6產生的彙總
R5:
aggregate-address 6.1.1.0 mask 255.255.255.248 suppress-map test advertise-map test2 as-set
sho ip bgp 看到彙總帶上AS號了 300
R6:sho ip bgp 就看到沒有那條彙總了
◆ attribute-map
通過route-map修改其他屬性值
route-map test3 permit 10 //通過route-map設置weigh值
set weight 100
router bgp 200
aggregate-address 6.1.1.0 mask 255.255.255.248 suppress-map test advertise-map test2 as-set attribut-map test3
sho ip bgp //彙總路由的weight由默認32768變爲100