BGP基础
定义:
BGP(边界网关协议):是一种用于自治系统间的动态路由协议,是一种外部网关协议
AS自治系统:一组倍进行统一管理,运行同一个IGP协议的路由器组成的网络范围,通常使用相同的路由策略
分类:
IGP:内部网关协议,RIP、OSPF、IS-IS
EGP:外部网关协议,BGP
特性:
1、BGP负责吧路由从一个AS传到另一个AS,从其他AS传递过来的路由在本AS内部的扩散靠IGP
2、BGP是路径矢量协议,一跳就是一个自治系统
一条路由传入某个AS,该路由的下一跳会变成上一个AS的出接口的ip地址,当一条路由在某个AS内部的路由间传递时,下一跳不变
3、AS防环机制:路径矢量协议,从设计上避免了环路的发生(AS_PATH防环机制),每经过一个AS自治系统,则AS_PATH上记录区域值
4、BGP基于TCP协议传输,端口号为179,必须手动配置邻居
5、BGP在第一次网络收敛的时候发送完整的路由表,后续只发送增量更新
6、BGP有多种属性可以控制路由选择
7、支持路由聚合
8、路由过滤和路由策略
基本术语
1、名称
BGP Speaker:运行BGP协议的路由器被称为BGP发言者
BGPP peer:相互之间存在TCP连接、相互交换路由信息的BGP发言者之间互称为BGP对等体(BGP邻居)
2、BGP对等体:
BGP邻居可以直连,也可以非直连
(1)EBGP对等体:
跨AS之间的邻居,一般情况下EBGP邻居之间是物理上直连的
BGP发言者从EBGP对等体获得的路由会向他所有BGP对等体通告(包括EBGP和IBGP)
(2)IBGP对等体
同一个AS内部的邻居
BGP规划不当容易产生的路由黑洞
R1与R2之间用EBGP,R2与R5之间用IBGP,R5与R6之间用EBGP,R1将BGP路由传递给R2,R2传递给R5时,需要经过R3或R4,但是R3和R4上并没有通往R1的路由信息,则会直接丢弃,在R3上产生路由黑洞
**路由黑洞的产生原因:**由于IBGP邻居之间有,没有运行BGP协议的路由,无法获得BGP的路由,从而导致数据包进入路由器被丢弃(如图中R3和R4)
路由黑洞的解决方法:
(1)BGP引入IGP
(2)在黑洞路由上配置目的网段的静态路由(一般不可取)
(3)IBGP全连接 ----IBGP防环机制:IBGP水平分割:从IBGP邻居学到的路由不会传递给其他IBGP邻居,缺点:邻居太多的话,手工配置邻居,会导致工作量大。
(4)BGP路由反射器(无视IBGP防环机制,可以减少邻居关系的数量)
r2作为反射器:(其余IBGP邻居不需要将从邻居学到的路由发送给其他IBGP邻居)
(5)BGP联盟(可以减少邻居关系的数量,IBGP水平分割限制)
BGP环路问题(水平分割)
1、EBGP水平分割(AS_PATH)
通过AS_PATH属性防环,在学习到的路由中,若有本地AS号,则拒绝学习,防止环路
2、IBGP水平分割
当路由器从一个IBGP邻居学习到某条BGP路由时,它将不能再把这条路由通告给任何IBGP邻居
BGP消息种类
1、BGP头部消息
Marker:标记,解决协议兼容性,没有其他含义
Length:BGP报文长度
TYPE:BGP报文类型类型
2、数据包类型(5种)
(1)open:用于建立BGP对等体之间的连接关系,正常收发一次即可,携带route-id
hold time:保持时间,表示路由器在收到Keepalive消息或者Update消息之前等待的最长时间,默认180s,如果邻居双方保持时间不一致,以较短的时间作为双方可接受的保持时间
(2)keepalive:周期保活时间,周期性的向BGP邻居发送keepalive消息,用于保持连接的有效性,在默认情况下是每60秒发送一条,或者以已协商的hold time的1/3为周期发送keepalive消息,默认60s,超时180s
(3)Update:携带的是路由更新(删减、增加)信息
Withdraw Routes Length:表明Withdraw Routes部分长度,为0时则表示没有删减的路由
Withdraw Routes:包含要撤销的路由列表
Total Path Attribute Length:标明Path Attributes的长度,其值为0时,表示没有路由及其路由属性要通告
Path Attributes:路由属性,包含要更新的路由属性列表
Network Layer Reachability Information(NLRI):包含要更新的地址前缀列表
(4)notfication:当BGP检测到错误状况时,就向邻居发送notfication消息,之后BGP连接就会立即被关闭(邻居关系结束)
(5)router-refresh:用于改变路由策略后,要求邻居重新发送指定地址族的完整路由表信息,只有支持路由刷新能力的路由器才会响应router-refresh报文
地址族:
BGP----v4----ipv4网络
BGP4±----ipv6
MP-BGP----MPLS VPN----扩展版本的BGP
BGP状态机
ldle:空闲状态,停留30秒,初始化准备开始TCP连接并监视邻居,启动BGP,同时建立邻居关系
connect:TCP连接中状态,本段位TCP的被动方,若连接失败则进入Active状态,反复尝试连接
Active:活跃状态,本端为TCP主动连接方,TCP连接没建立成功,反复尝试连接
open-sent:开始发送状态,成功建立TCP连接,发出open报文,open报文中携带参数,协商邻居的建立,正在等待接受对方的open报文
open-confirm:开始确认状态,收到open报文,发出keepalive报文,等待第一个keepalive报文
established:已连接状态,收到Keepalive报文,最终成功建立邻居
BGP邻居建立条件
IBGP:
物理口建邻:
建议使用直连接口地址来指定IBGP邻居
环回口建邻:
对方接口要有ip地址,TCP可达(需要具有到达对方ip地址的路由),建议使用环回地址来制定IBGP邻居
更新源地址必须和指定的邻居地址一致,需要修改更新源为环回:[r1-bgp]peer 2.2.2.2 connect-interfence LoopBack 0
IBGP邻居关系不需要直连
EBGP:
物理口建邻:
建议使用直连接口地址来指定EBGP邻居
环回口建邻:
对方接口要有IP地址,TCP可达
可通过修改EBGP最大跳数来使EBGP非直连(默认IBGP邻居之间的TTL值为255,EBGP邻居之间TTL值为1)
更新原地址必须和指定的邻居地址一致
当路由器既有EBGP邻居,又有IBGP邻居的时候,需要对IBGP邻居修改下一跳为本机,否则会造成BGP的路由信息传递失败
配置
1、配置EBGP
(1)物理口建邻
[r1]bgp 100
创建BGP 区域
[r1-bgp]peer 10.1.1.2 as 200
手动建立邻居为对端的AS 200区域的邻居
(2)环回口建邻
[r1]bgp 100
创建BGP区域
[r1-bgp]peer 2.2.2.2 as-number 200
手动指定邻居的ip和区域号
[r1-bgp]peer 2.2.2.2 connect-interfence LoopBack
告诉邻居与你建邻的是我的环回口
[r1-bgp]peer 2.2.2.2 ebgp-max-hop
设置最大跳数
[r1-bgp]network 192.168.1.0 24
宣告私网网段
2、配置IBGP
(1)物理口建邻
[r1]bgp 200
创建BGP区域
[r1-bgp]peer 10.1.1.2 as 200
与同区域的10.1.1.2建邻
(2)环回口建邻
[r1]bgp 200
创建BGP区域
[r1-bgp]peer 2.2.2.2 as 200
与同区域的2.2.2.2 建邻
[r1-bgp]peer 2.2.2.2 connect-interfence LoopBack 0
告诉邻居和你建邻的是我的环回口
[r1-bgp]peer 2.2.2.2 next-hop-local
告诉邻居下一跳是我,修改下一跳为本机
*
代表可用,可用路由会参与路由信息的优选
>
代表优选
i
代表该路由信息通过IBGP邻居学到
l
代表这条路由信息起源于AS内部,使用network通告的
e
代表来自EGP协议
?
代表除了以上两种方式,其他获取路由信息都是?
BGP路由选路原则(13条)
1、首先丢弃下一跳(NEXT_HOP)不可达的路由
2、优选Preferred-value(首选项) 值最大的路由,默认为0,越大越优
3、优选本地优先级(LOCAL_PREF),默认为100,越大越优
4、优选选择network命令生成的路由、import-route命令引入的路由、聚合路由
5、优选AS路径(AS_PATH)最短的路由
6、依次选择ORIGIN属性为IGP、EGP、Incomplete的路由
7、优选MED值最低的路由(MED与cost一致,越小越优)
8、依次选择从EBGP、联盟EBGP、联盟IBGP、IBGP学来的路由
9、优选下一跳度量值最低的路由
10、优选CLUSTER_LIST长度最短的路由,与AS_PATH一样越少越优
11、优选ORIGIATOR_ID最小的路由,与AS_PATH一样越少越优
12、优选Route ID最小的路由器发布的路由
13、优选ip地址最小的邻居发布的路由
负载分担时的选路
需要负载分担时,需要手动配置
[r1]bgp 100
[r1-bgp]maximum load-balancing 2
允许最多两条等价路径
更改MED值,配置:
[r1]acl 2000
[r1-acl-2000]rule permit source 100.1.1.0 0.0.0.255
抓取流量
[r1]route-policy aa permit node 10
写路由策略
[r1-route-policy]if-match acl 2000
如果匹配acl2000
[r1-route-policy]apply med 100
更改med值
[r1]route-policy aa permit node 20
放行空节点
[r1]bgp 100
进入AS 100区域
[r1-bgp]peer 2.2.2.2 route-policy aa export
调用路由策略
BGP属性(控制BGP路由选路的方法)
1、公认属性:所有路由器都必须识别的属性
公认比遵属性:
(1)AS_PATH
定义:AS路径属性用于记录传递过程中经过的AS编号,用于不同AS之间防环
作用:AS防环,AS_PATH短的优先
(2)next-hop 下一跳
如果一个路由器同时拥有EBGP和IBGP邻居
路由发布给EBGP邻居,下一跳变更为指定EBGP邻居地址
路由发布给IBGP邻居,下一跳不变,仍是上个AS的EBGP邻居
对IBGP邻居发布的路由通过命令更改下一跳为本机
(3)origin 路由来源属性
属性值:
IGP:来源于network宣告,聚合的路由显示为i
EGP:来源于引入的EGP协议路由,显示为e
incomplete:未完成,来源于引入IGP协议和静态、直连路由,显示为?
优选顺序:IGP>EGP>incomplete
公认可选:(所有路由器都识别,但不是必须携带的属性)
(1)local-perference
定义:本地优先级,同一个AS内也可以看到这个属性值,表明了BGP路由器的优先级。只对IBGP邻居传递,不对EBGP邻居传递,默认值为100,值大的优先
(2)Atomic-aggregate自动聚合
BGP可以自动聚合也可以手动聚合,建议自动聚合
2、可选属性
1、可选传递属性
定义:路由器可以不识别该属性,但是会继续向下传递该属性
属性:aggregator:手动聚合
community:团体属性
2、可选非传递属性
定义:路由器可以不识别该属性,但是也不会继续向下传递该属性
属性:clustor_list:集群列表
originator_id:集群id
MED:多出口鉴别器,当一个AS有多个如口点时,用于判断流量进入AS时的最优路径
属性控制的选择建议:
1、如果希望影响下游所有路由器的路由选择,建议使用AS_PATH
2、如果只希望影响本AS内部的某个路由器选择,建议使用local-preference
3、如果希望只影响下游某一个AS的路由器选择,建议使用MED
4、如果希望只影响某一台路由器的路由选择,建议使用preferred-value
属性控制方法
大规模BGP网络中遇到的问题及解决方法
问题 | 解决方法 |
---|---|
BGP对等体众多 | 对等体组 |
BGP路由表庞大 | BGP路由聚合 |
BGP全连接(邻居众多) | BGP路由反射、对等体联盟 |
路由变化频繁 | BGP路由衰减 |
1、对等体组
定义:BGP对等体组是一种具有某些相同属性的对等体的集合,通过对等体组可以简化配置
特点:根据对等体所在的AS,对等体组可分为IBGP对等体组和EBGP对等体组
IBGP对等体组:
[r1]bgp 200
[r1-bgp]group aa internal
创建IBGP对等体组
[r1-bgp]peer 2.2.2.2 group aa
将邻居地址添加到对等体组aa中
[r1-bgp]peer aa connect-interface Loopback 0
将整个对等体组aa更改更新源
[r1-bgp]peer aa next-hop-local
更改整个对等体组的下一跳为本地
[r2-bgp]peer 1.1.1.1 as 200
[r2-bgp]peer 1.1.1.1 connect-interface Loopback 0
对等体组中组员正常配置
EBGP对等体:
[r1]bgp 200
[r1-bgp]group bb external
创建IBGP对等体组
[r1-bgp]peer 10.1.1.2 group bb
将邻居地址添加到对等体组aa中
2、BGP路由聚合
作用:减小路由表规模
(1)自动聚合:
只能对引入的IGP的路由进行聚合
只能将明细路由汇总到主类,这会导致路由黑洞
华为设备默认关闭自动聚合功能
只能在始发路由器上配置(引入的路由器)
[r1-bgp]summary automatic
开启自动聚合(聚合后会出现状态吗S
,代表被抑制的路由信息,不会被传递)
(2)手动聚合:
可以实现精确汇总 :[r1-bgp]aggregate 172.16.0.0 16
汇总后的网段和子网掩码
可以在任何路由器上对BGP路由进行聚合
问题:
明细路由依然被通告,有形成环路的隐患
解决方法:
[r1-bgp]aggregate 172.16.0.0 16 detail-suppressed
抑制明细路由,不会通告明细路由
[r1-bgp]aggregate 172.16.0.0 16 detail-suppressed as-set
汇总后的网段继承明细中的AS_PATH值
路由策略(减少收到的明细网段):
1、抓流量
2、写路由策略
3、调用:[r1-bgp]aggredate 172.16.0.0 16 suppress-policy aa
一、路由反射器(router reflect):
定义:BGP反射器能把从IBGP邻居学来的路由反射给其他IBGP邻居
**作用:**用于代替IBGP全连接,减少IBGP邻居数量,解决路由黑洞
**角色:**client:RR客户机、非客户机
反射规则:
从非客户机端接收的路由,仅反射给客户端
从客户端接收的路由,发射给所有客户端和非客户端,路由始发者除外
从EBGP接收的路由,发射给所有客户端和非客户端
注:一个反射群里的所有反射客户端只需要与反射器建立IBGP邻居关系
**反射集群:**由反射器与客户端组成的网络范围
如果一个集群内存在多个反射器,配置相同的cluster_id
,且RR(主反射器和备份反射器)之间需要建立邻居关系
但是这样组网容易形成环路,(一条路由从客户机1传入RR,RR传入备份RR,备份RR在反射给客户机1)
**路由反射存在的问题:**使得IBGP水平分割失效,会导致环路的产生
**解决方法:**通过两个路径属性来避免环路
(1)cluster_id(集群列表)
类似AS_PATH,每个RR都有一个cluster_id,默认为路由器的router-id,可手工修改
同一个AS内的cluster_id必须相同,才能有防环作用
路由传递过程中,把经过的反射器的cluster_id依次记录在cluster_list中;
cluster_list用于反射器防环,当反射器收到BGP路由时,如果本机的cluster_id出现在cluster_list中,则丢弃该路由
cluster_list用于选路优先,越短越优
特殊情况:不受cluster_list防环机制的约束,依然形成环路
一条路由从客户机3传给备用RR,再传到RR,RR会再次传给客户机3,形成环路,解决方法originator_id
(2)originator_id:起源id
由路由反射器反射一条路由时产生,会在反射出去的路由中增加originator_id,他就是本地AS内路由始发的router-id
即使这条反射路由经过多个RR,当BGP路由器收到一条携带originator_id属性的IBGP路由,并且originator_id 属性值与自身的router-id相同,则它会忽略关于该条路由的更新
originator_id用于路由优选,短的优先
总结:BGP的防环机制
(1)AS_PATH:解决AS之间的环路问题
(2)IBGP的水平分割:解决同一个AS内部IBGP邻居之间环路问题
(3)cluster_list防环:当一个反射群中存在多个反射器时,通过cluster_list防环
(4)originator_id:在多个反射群之间,通过originator_id防环
注意事项:反射路由无法使用策略,只能在始发路由上更改路由属性
配置:
在反射器上配置其反射客户机:[r1-bgp]peer 3.3.3.3 reflect-client
把对等体组中的邻居配置其反射客户机:[r2-bgp]peer in reflect-client
配置反射器的集群id:[r2-reflector cluster-id 2.2.2.2]
二、BGP联盟
1、定义:处理AAS内部的IBGP网络连接激增的另一种方法,间接避免了IBGP环路问题
2、原理:联盟将一个自治系统划分为若干个子自治系统,每个自治系统内部的IBGP对等体建立全连接,子自治系统之间建立联盟内部EBGP连接
3、注意点:
子AS使用私有AS编号
其他真实AS的路由器仍然和连门AS建立EBGP邻居
跨越子AS的EBGP邻居仍然需要更改下一跳为本机
每个联盟里有一台路由器和其他联盟中一个路由器建立邻居关系就行
实际场景中一般不用联盟,因为他会改变邻居关系
配置:
进入子AS编号:[r1]bgp 65001
申明自己大号:[r1-bgp]confederation 200
在连接对端联盟的路由器上申明自己的联盟伙伴:[r1-bgp]confederation peer-as 65002
指定EBGP邻居:[r1-bgp]peer 100.1.1.1 as-number 100
[r2-bgp]peer 3.3.3.3 as 65001
[r2-bgp]peer 3.3.3.3 connect-interface Loopback 0
[r2-bgp]peer 3.3.3.3 next-hop-local
联盟之间用EBGP物理口建邻[r2-bgp]peer 10.2.2.5 as 65002
联盟之间需要更改下一跳为本机[r2-bgp]peer 10.2.2.5 next-hop-local
三、BGP团体属性
(1)定义:相当于路由的标记,一组具有相同特征的目的地的集合,可针对特定的路由设置特定的community属性值
问题:网段不连续,ACL写起来比较麻烦
解决方法:在每个分部的市场部路由的出口设备上打上100:1的团体属性
(2)社团属性表达方式:
本质由32位二进制构成,拥有多种表达格式,比如使用十进制、
(3)公认的社团属性:
internet:抓取的BGP流量,默认情况下都属于internet,可以被通告给所有的BGP对等体
no-advertise:路由信息无法发送给自己的IBGP对等体和EBGP对等体
no-export:路由信息可以发送给自己的BGP对等体,但对等体不能离开这个AS,无法发送给自己的EBGP,但可以发送给自己联邦EBGP对等体
no-export-subconfed:路由信息可以发送给自己的BGP对等体,但对等体不能离开这个AS,无法发送给自己的EBGP,也不能发送给自己的联邦EBGP对等体
注:目前大部分厂商默认在传递BGP路由信息时不传递社团属性,如果需要传递社团属性,则需要通过命令开启
配置:
步骤:
1、抓取流量:[r1]acl 2000
[r1-acl-2000]rule permit source 192.168.1.0 0.0.0.255
2、配置路由策略,打上团体属性
[r1]route-policy aa permit node 10
[r1-route-policy]if-match acl 2000
[r1-route-policy]apply community no-export
[r1]route-policy aa permit node 20
3、调用路由策略
[r1]bgp 100
[r1-bgp]peer 100.1.1.2 route-policy aa export
[r1-bgp]peer 100.1.1.2 advertise-community
通告团体属性,使其他邻居学到
[r2]dispaly bgp routing-table 192.168.1.0 24
查看一条路由的详细信息