BGP
-
分公有AS号和私有AS号
-
使用目的端口179(TCP协议)
-
BGP邻居建立:1、直连可达 2、路由可达 3、TCP 179端口不能过滤
二、 BGP 报文头部
-
-
Marker(标记):16字节 Length(长度):2字节,表示消息的全长,包括头部。
-
用于检查BGP对等体的同步信息是否完整,以及用于BGP验证的计算。不使用验证时所有比特均为1
-
BGP的认证信息是通过TCP携带的,头部里面只是一个认证标识
-
-
Type(类型):1字节 报文类型
-
1-open 2-update 3-Notification 4-keepalived 5-route-refresh
-
三、 五种报文类型
-
open :
- 用于建立BGP对等体连接
- BGP version:版本如果不一致,高版本兼容低版本
- Ms As:要和邻居指定的AS号一致
- hold timer:如果不一致则使用小的hold timer
- BGP router-id:不能冲突,否则邻居无法建立,默认使用全局roter-id
- BGP option(能力选项):至少匹配一种地址簇能力才能建立起邻居关系
- IPv4地址簇能力
- router refresh 能力
- 4字节的AS号
-
update:
-
用于在对等体之间交换路由信息
- 触发式更新
-
-
notification
- 用于中断BGP连接
-
keepalived
- 用于保持GBP连接
- 默认60s更新一次,180s超时
- 如果两个BGP邻居hold timer时间不一致,则选择hold timer时间小的,周期发送时间为hold timer的1/3
-
route-refresh
- 用于在改变路由策略后请求对等体重新发送路由信息。
- 只有支持路由刷新能力的BGP设备会发送和响应此报文
四、 BGP状态机
-
Idle、Actice、Connect、OpenSent、OpenConfirm、Established
- Idle 状态:初始化状态,BGP拒绝邻居发送的连接请求
- 处于Idle状态:1、没有去往目的路由 2、没有指定邻居地址或者指定邻居地址不对
-
Connect 状态:
-
如果TCP连接成功,进入OpenSent装填,发送Open报文
- 如果连接失败,进入active状态
- 如果连接重传定时器超时,BGP扔没有收到BGP对等体的响应,那么BGP继续尝试连接,停留在connect状态
-
-
Active状态:BGP试图建立TCP连接
-
如果TCP建立成功进入OpenSent状态;
-
如果建立失败,BGP停留在active状态;
-
重传定时器超时仍然没有建立成功则进入Connect状态
-
-
OpenSent:发送opent报文
- 如果收到Open报文正确,那么BGP发送keepalived报文,进入OpenConfirm状态
- 如果收到错误的Open报文,发送notification报文,进入IDLE状态
-
OpenConfirm:发送keepalived报文
-
Established:update报文
- BGP可以交换updata、keepalive、route-refresh、notification报文
五、 BGP 通告原则
-
向邻居只通告最优的路由(>:代表最优路由)(最优的路由才会存在IP路由表中)
-
从EBGP获得的路由通告给所有BGP邻居(IBGP和EBGP)
-
从IBGP收到路由只通告给EBGP邻居
- 路由更新时,BGP设备只发送更新的BGP路由
-
华为设备不要通告更新源路由(connect-interface lo 0),会变成无效的路由
-
IBGP与IGP 同步(华为不支持,默认关闭)
-
BGP 路由如何产生的:
-
Network 直连、静态、IGP路由、起源属性IGP
-
从其他路由协议引入路由
-
聚合路由
-
-
BGP路由引入IGP时,默认只能引入从EBGP学到的路由,将IBGP学到路由引入的话后面加参数:permit-ibgp
六、BGP属性
公认必遵 |
1、Origin 2、AS_PATH 3、Next_hop |
公认任意 |
1、Local_pref 2、Atomic_aggregate |
可选过渡 |
1、Aggregate 2、Community |
可选非过渡 |
1、Med 2、Originator id 3、cluster list |
常用属性值介绍:
1、origin
-
起源属性,主要不是人为修改,该属性保持不变,描述该路由如何成为BGP路由
-
i:通过network生成BGP路由
-
E:通过EGP得到的路由信息
-
?:通过import-route引入进来的路由
-
i>E>?
-
如何修改origin属性
-
对自身产生的BGP路由时修改
-
对发送给BGP邻居的路由做origin的修改
-
对从BGP邻居接收到的BGP路由做修改
-
2、AS-path
-
BGP在选路时选择经过AS较少的路径;
-
防环机制:
-
当BGP路由传给EBGP时,将自身AS号加入到as-path属性中
-
当从EBGP邻居收到路由时,发现含有自身AS号则丢弃路由
-
IBGP邻居之间不做As-path属性检测
-
-
-
IBGP最左边是起始AS号 EBGP是最右边
- AS-PATH在任何BGP邻居之间任何方向都可以对as-path属性做修改
-
apply as-path none overwrite :清空AS-path属性对发送和接收的BGP路由
-
apply as-path 1 2 3 additive:对发送/接收的BGP路由添加AS-PATH
-
apply as-path 1 2 3 overwrite:对发送/接收的BGP路由的as-path替换
-
3、Next-hop
-
记录了路由下一跳信息
-
遵循原则
-
向EBGP发布路由时,路由下一跳设置为与对端建立的邻居关系的接口地址
-
本地将始发路由器发布给IBGP对等体时,路由下一跳设置为与本端建立BGP邻居关系的接口地址
-
向IBGP发布从EBGP学来的路由时,下一跳属性不会改变
- origin、as_path、next-hop存放位置
-
4、local_pref
-
本地优先级,仅本地有效,表明路由器的BGP优先级;
- 越大越优
-
用于判断出站流量
5、MED值
-
仅在相邻的两个AS之间传递,不会传递给传递给第三个AS
- 优先级越小越优
-
用于判断入站流量
6、 Community(团体)属性
团体属性名称 |
说明 |
Interface |
表示可以通告给任何BGP邻居;缺省情况下都属于interface |
No_advertise |
表示不更新给任何邻居 |
No_Export |
表示不更新给EBGP邻居(联邦内部的EBGP会更新) |
No_Expoer_subconfed |
表示不更新到本AS之外去(用于联邦内部EBGP邻居不会更新) |
扩展团体属性:通过对路由设置团体属性做控制和过滤; 多协议BGP携带RT和SOO值
默认不更新团体属性;需要加命令advertise-community
七、 聚合路由
-
手动聚合>自动聚合(只能聚合引入进来的路由)
-
自动聚合
-
summary automatic 自动聚合,汇总成标准掩码
-
-
手动聚合
-
Aggregate X.X.X.X XX 将某条路由聚合成多少位的路由;后面可用加参数
-
-
聚合注意事项:需要注意聚合路由的属性改变,尽量不要丢失否则会引起环
-
参数1:detail-suppressed 仅仅通告聚合路由,明细路由本地抑制s表示
-
参数2:suppressed-policy 控制路由聚合,通过策略抑制部分路由
-
参数3:attribute-policy 聚合路由完毕后可用增加、修改属性
-
参数4:as-set 还原AS-path的起源属性,不会引起环路
-
参数5:origin-policy 起源属性策略
-
-
Atomic_aggregate:原子聚合,用来通知下游设备丢失明细路由,当聚合路由时加参数detail-suppressed 抑制明细路由时,会产生此属性(公认任意)
八、 管理大规模BGP对等体应用
-
对等体组、团体、路由反射器、联邦
1、RR 路由反射器
-
修改原来IBGP 水平分割属性,将从IBGP邻居接收到的路由信息更新给IBGP邻居
-
通告原则:非非不传;
-
起源路由器的router-id就是originator-id
-
RR的router-id是cluster-id
-
RR客户端发射路由时给路由添加originator_id,cluster_list属性
-
从EBGP邻居收到的路由发射给客户端和非客户端时 或者 发送路由给EBGP邻居时,不会设置这两个属性
-
防环:
-
Cluster list(簇 ID)
-
经过路由发射器加入本地cluster list;防止集群之间产生路由环路
-
-
起源ID(originator id)
-
当第一次被路由反射器发射的时候,加入originator-id;等同于router id
-
防止集群内部产生路由环路
-
-
2、 联邦
-
属于同一联盟必须配置confederation id 和 confederation peer-as
-
联邦外部路由next-hop 属性在整个联盟中被保留
-
被宣告到联盟之内的MED属性在整个联盟中都被保留
-
路由的local_pref 属性在整个联盟中都被保留,而不仅仅是在为他们赋值的成员AS之内
-
联盟内部成员之间AS号加入到as-path路径中,但是不能宣告到联盟之外;as-confed-sequence as-confed-set
-
AS_PATH 中的联盟AS号用户实现环路避免功能,但是在联盟中选择最短AD_path
-
BGP选路相同情况下EBGP路由优于联盟内部EBGP路由,联盟内部EBGP优于IGBP
九、 BGP选路原则
-
选路原则前提,丢弃下一跳不可达路由
-
Preference_value 华为私有协议,本地有效,值越大越优先
-
Local_preference 本地优先级;默认100
-
本地起源;手动聚合>自动聚合>network>import>从对等体学到的
-
手动聚合可以聚合任何路由;自动聚合只能聚合import(引入)进来的路由
-
-
选择As_Path路径最短的
-
Origin 属性;i>e>?;i:network通告 E:通过EGP协议 ?:引入路由
-
对于同一AS选择med 值较小的
-
选择从EBGP学来的路由
-
选择BGP路由下一跳IGP的度量值较小的
-
前8条选择不出来,可以实现负责,默认不开启需要手动开启max load-balancing mun
-
-
优选Cluster-list 最小的路由
-
优选Originator-id最小的路由
-
优选router_id最小邻居发布的路由
-
优选具有较小IP地址的邻居学来的路由
十、路由过滤
-
出方向:route-policy>filter-policy>ip-prefix
-
入方向:filter-policy>ip-prefix>route-policy
十一、BGP防环机制
-
从IBGP邻居学来的路由不会传递给其他IBGP邻居(IBGP 水平分割原则)
-
As_Path 用于EBGP之间防环;收到含有自己的AS_Path丢弃路由
-
RR(路由反射器):Cluster list:防止集群之间环路 Originator:防止集群内部环路
-
MPLS vpn:通过设置soo防环
十二、BGP增强属性
-
基于本地入口策略构建对端的出口策略,实现BGP的按需发布路由,包括基于前缀和VPN的ORF
-
orf 后面参数,有思科兼容模式
-
Active-Route-Advertise:只有当BGP路由被成功加入到路由表,该路由才发布给邻居
-
BGP按组打包组4字节AS号:
- 将所有相同出口策略的BGP邻居看作是一个打包组,发布的路由一次发布给组内所以邻居
-
具体查看手册
-
按策略进行下一跳迭代
- 通过配置路由策略来限制迭代到的路由,如果路由不能通过路由策略,则该路由迭代失败
-
案例:
-
1.1.1.和2.2.2.2建立邻居关系,当与2.2.2.2.接口down或者其他原因链路故障;
-
此时1.1.1.1路由上有一条24位掩码的2.2.2.0的路由指向R16
- 即使R16路由器设备本身无法到达2.2.2.2 但是由于BGP 超时时间为180s,在此期间路由回全部指向到R16
-
配置迭代路由,当与2.2.2.2之间故障时,迭代到配置的路由策略中匹配到的路由;配置如下
十三、BGP安全特性
-
认证
- MD5认证
- keychain认证
-
GTSM
-
peer 10.0.45.4 valid-ttl-hops N 向邻居开启此功能
-
@在向邻居10.0.45.4 发送BGP报文时,TTL为255
- @在接收邻居10.0.45.4发来的BGP报文时,要求报文的TTL大于等于255-N+1
-
十四、BGP4+
-
BGP4的扩展版本
-
支持传递多种地址簇地址
-
新增属性用以支持多地址簇传递
新增两个可选非过渡属性:
-
MP_REACH_NLRI:Multiprotocol Reachable NLRI,多协议可达NLRI。用于发布可达路由及下一跳信息。
-
MP_UNREACH_NLRI:Multiprotocol Unreachable NLRI,多协议不可达NLRI。用于撤销不可达路由。
MP_REACH_NLRI 携带的信息
-
重要的信息
-
AFI:地址簇标识符
-
SAFI:1是单播 2是组播
-
Next Hop:
- 路由下一跳信息是放在MP_reach_nlri属性下的
- 不同的地址簇在不同的MP_reach_nlri属性下的携带更精准
-
NLRI
-
网络层可达信息,描述该链路的前缀长度和掩码信息
-
十五、解决BGP路由黑洞
-
使用全互联
-
RR路由发射器
-
联盟
-
-
通过GRE隧道
-
通过MPLS LSP
-
IGP与BGP路由进行同步