BGP边界网关路由协议

一、无类别路径矢量EGP协议

针对AS进行分类:AS自治系统、0–65535 (1–64511公有、64512–65535私有) 标准编号(16位二进制)、扩展编号(32位二进制)

路径矢量(一个AS为一跳)---- 距离矢量(一个路由器为一跳)

EGP----外部网关路由协议 ---- BGP (AS之间)
IGP ---- 内部网关路由协议 ---- RIP、OSPF、EIGRP (AS内部)

重发布可以实现AS之间的互通,但会存在以下问题:
1、必须多点双向
2、选路干涉难度很大
3、汇总配置难度很大
4、ASBR设备归属问题

BGP协议本身不产生路由,而是转发本地路由表中来自其他协议生成的路由条目;AS之间正常存在大量的BGP邻居关系,且BGP协议不会计算最佳路径;因此在BGP协议中管理员需要进行策略来干涉选路;

IGP协议关注:
1、收敛快
2、占用资源少
3、选路佳(无环)
EGP协议关注:
1、可控性强(管理员可以方便进行策略干涉选路)
2、可靠性(BGP协议设备间需要交互大量的路由条目,但又不能选择周期更新来占用链路资源,故只能进行触发更新;且BGP协议工作环境中为节约成本,必然出现非直连需要建立邻居关系 ---- 单播邻居)----基于TCP工作,三次握手四次断开 4种可靠传输机制 ---- TCP只能基于单播工作
单播----需要IP可达----依赖IGP、BGP承载与IGP之上
3、AS–BY–AS (以一个AS为一跳)

二、BGP特点

1.无类别路径矢量 ---- 距离矢量的升级版 ---- AS–BY–AS
2.使用单播更新来发送所有信息;基于TCP179端口工作
3.增量更新 ---- 仅触发无周期
4.具有丰富的属性类取代IGP中度量进行选路 ---- 多个参数控制协议
5.可以在进项和出项对流量实施强大的策略 ---- 可控性
6.默认不被用于负载均衡 ---- 通过各种选路规则仅仅产生一条最佳路径
7.BGP支持认证和聚合(汇总)

三、BGP数据包

基于TCP的179端口工作,故BGP协议中所有的数据包均需要在tcp会话建立后,基于TCP的会话来进行传输及可靠性的保障;

首先通过TCP的三次握手来寻找到邻居:

Open仅负责邻居关系的建立,正常进行收发一次即可;
Keeplive保活 周期1min查询邻居关系是否存在;实际保活TCP会话;hold time默认3min
Update携带路由条目 目标网络号+各种属性
Notification出现错误数据时收发
四、BGP的工作过程

1、基于IGP实现IP可达;
2、邻居间单播传输,通过三次握手建立TCP的会话通道;
3、使用open报文进行邻居关系建立,一般收发一次即可,生成邻居表
4、使用update共享路由信息,信息中携带目标网络号+各种属性;
5、生成BGP表 —装载本地发出及接收的所有路由信息;
6、之后将BGP表中的最优路径加载于路由表中;
7、收敛完成后,仅keeplive周期保活即可;
8、所有BGP的数据包均基于TCP会话来保障传输的可靠性;
9、若出现错误信息,将使用notification进行告警;
10、结构突变,使用update触发更新即可

五、名词注解

IBGP ---- 内部BGP邻居关系,在同一个AS的BGP设备间的邻居关系
EBGP ---- 外部的BGP邻居关系,不同AS的BGP设备间建立的邻居关系

六、BGP的路由黑洞

原因
由于BGP协议可以非直连建立邻居关系,故可能出现BGP协议几十年跨越了未运行BGP协议的路由器,导致BGP路由传递后,控制层面显示可达,但数据层面,流量经过未运行BGP协议的路由器,无法通过,最终不通 ---- 控制层面可达,数据层面不可达;

解决方案
1、物理或逻辑链路连
2、BGP邻居关系全连 ---- 所有路由器均运行BGP
3、IGP重发布到BGP
4、MPLS(推荐做法)

七、BGP的防环机制 ---- 水平分割

1、EBGP水平分割 ---- 防御EBG环境下的环路
BGP协议将在了路由条目中记录经过的AS编号 ----as–path属性 ---- 装载所有经过过的AS编号属性接收到的BGP条目中,若as–path属性存在本地的AS号将拒绝接收;
2、IBGP水平分割 ---- 防御IBGP环境下的环路
AS–BY–AS特性 ---- 以一个AS为一跳;在一个AS内部传递的路由,其属性默认没有任何变化;

IBGP水平分割 ---- 从一个IBGP邻居出学习到的路由,不得传递给本地其他的IBGP邻居;

为了实现所有BGP设备学习到所有路由,在IBGP水平分割的条件下,两两间均需要建立IBGP邻居关系,IBGP邻居关系的数量成制数上升;
后期可以使用联邦或路由反射器来打破;

八、BGP的基本配置
《1》在BGP协议中,邻居关系的建立与路由条目的宣告是分开进行的;

【1】直连的EBGP间建邻

[r1]bgp 1  #启动时需要定义其所在的AS号,没有多进程的概念
[r1-bgp]route-id 1.1.1.1  #建议RID与OSPF的配置规则一致
[r1-bgp]peer 12.1.1.2 as-number 2  #建立邻居关系,定义对端设备的IP地址以及所在AS编号

两端配置完成后,将基于TCP的三次握手,建立TCP会话
固定端口的使用者为服务端

[r1]display tcp status  #查看TCP建立
[r1]display bgp peer  #查看bgp邻居表

会话建立后,邻居间使用open报文,建立BGP的邻居关系,生成邻居表

【2】建立IBGP邻居关系
由于IBGP邻居处于同一个AS中,正常一个AS内部存在大量的备份路径;若使用物理接口建立邻居关系,将浪费这些备份或负载均衡路径;故建议使用环回接口来进行IBGP邻居关系;

[r2]bgp 2
[r2-bgp]peer 3.3.3.3 as-number 2
[r2-ngp]peer 3.3.3.3 connect-interface LoopBack 0

切记: 一旦使用环回地址作为建邻地址,同时需要修改元IP地址为本地的环回地址;

【3】EBGP邻居间存在多条链路的建立方案
建议使用环回来作为源、目标IP地址,便于利用所有物理链路;
1、IP可达问题 ---- 一般使用静态路由
2、正常使用环回地址作为源、目标建立邻居关系
3、EBGP邻居间,默认TTL值为1,IBGP为255;因为理论上EBGP邻居间没有第三台路由器;故TTL值设定为1,将只能和直连的物理接口建立邻居;一旦使用环回,必须修改TTL值;

[r4-bgp]peer 5.5.5.5 ebgp-max-hop 2  #修改TTL值
《2》BGP路由的宣告

BGP协议可以宣告本地路由表中任意来源路由:本地直连、静态、IGP动态产生均可;
宣告时,宣告的条目内容必须和本地路由表中完全一致;

[r1]bgp 1
[r1-bgp]network 1.1.1.0 24

本地生成BGP表:装载本地接收一级发送出去的所有路由信息

[r1]display bgp routing-table  #查表

*>是表中路由条目的状态
*表示可用,>表示优秀
*>表示可用且优,意味着该条目可以传递(共享给其他BGP邻居)、可以加表(可以加载到本地的路由表中)
i意味着通过IBGP邻居学习

当下BGP环境下,不优主要是因为下一跳不可达,因为AS–BY–AS导致,一条路由信息在IBGP邻居传递时,其属性默认不变化,最终时常导致下一跳不可达;

[r2]bgp 2
[r2-bgp]peer 3.3.3.3 next-hop-local  #要求路由条目传递给下一个邻居时,修改下一跳为本地地址
九、BGP的宣告问题

若通过BGP协议传递的路由条目与其他协议学习到的条目目标一致,将出现:
1、该路由同时作为与其他BGP邻居建立邻居关系时的底层路由,那么这条BGP路由将不优,不能传递也不能加表
2、该路由不作为建立其他BGP邻居的路由,将在本地不加表,但可以传递,属于优的路由;

例:
R2与R3运行了OSPF,之后R2学习到的R3的32位环回主机路由;在R2与R3建立BGP邻居关系后R3在BGP协议中宣告了32位的环回路由,那么该条目到达R2后,将不优;---- BGP的建邻路由与BGP的传递路由相同(逻辑悖论);
但R2与R3建立邻居关系时,OSPF将R3环回以32位传递,但BGP使用24位来传递该环回路由的话,那么等于BGP建邻位32位,BGP传递为24位,不是同一条路由,可以优,可以传递,也可以加表;

注: 以上问题在华为设备将出现,但在Cisco中若BGP传递路由在本地路由表中已经通过其他BGP拥有,将被标记为r-RIB,本地不加表,但可以传递;

在BGP协议中进行宣告时,是宣告本地路由表中任意路由,不关注这些条目的产生方式;默认将携带这些路由的cost 值到BGP的路由条目中去;若本地将本地宣告的BGP路由传递给本地的EBGP邻居,将携带这些cost,便于本地的EBGP邻居所在AS内部设备选路,当然这些路由在进人其他AS时不会修改度量;
若本地通过IBGP邻居学习到了BGP 路由,优且存在cost值,在本地将这些路由传递给本地的EBGP邻居时,将cost值归0,因为这些度量不是本地产生的;

总结: 存在EBGP邻居关系(连接其他的AS)的所有BGP设备均建议宣告内部AS的路由;

十、重发布

BGP协议宣告的路由,基本是本地通过IGP学习到的本AS路由;数量较大,若逐条宣告,配置量很大,但可控性强;也可以在同时运行BGP和IGP的设备,将IGP协议重发布到BGP协议中,来实现批量路由宣告的效果;
宣告相当于逐条的重发布,重发布相当于批量的宣告;两者产生的路由条目。起源属性不同,其他属性默认完全一致;
总结: 存在EBGP邻居关系(连接其他的AS)的所有BGP设备均建议重发布IGP到BGP;

十一、自动汇总

自动汇总对于BGP正常通过network宣告产生的路由没有影响;(默认Cisco和华为设备关闭了自动汇总)
仅针对从IGP重发布到BGP的路由条目产生影响;---- 路由条目以主类长度发送,不携带cost值;

[r1]bgp 1
[r1-bgp]summary automatic  #开启自动汇总,建议维持默认关闭状态
十二、手工汇总 ---- 聚合
1、生活中常用

利用了 BGP的宣告的特点,本地路由表中任意路由,不关注来源均可以宣告的BGP中;不用逐一宣告明细路由,先本地手工静态一条指向汇总网段的空接口防环路由,然后再将其宣告到BGP协议中来,从IGP表中宣告到BGP协议中的条目仅携带目标网络号和度量值;

聚合的缺点是将多个网络号合成一个,导致访问整个聚合网段时,仅存在唯一的路径;若在多路径建邻的前提下,将无法精确的选路; 故在大型的多链路的网络中为了更好控制选路,必然在传递聚合条目的同时,再在最佳路径处传递部分的明细路由;

若需要在传递聚合条目的同时,传递部分明细路由,只需要在宣告了空接口路由后,逐一宣告需要的明细路由即可;

以上做法的缺点是不能携带原有明细路由的cost值,因为宣告的是本地路由表中人为添加那条静态空接口路由;

2、官方标准

标准的BGP路由聚合 ---- 先逐一手工宣告明细或批量重发布路由,再进行聚合配置;默认在本地生成空接口防环路由;
默认聚合配置完成后,明细和聚合条目同时发送;
同时本地自动产生一条指向空接口的聚合防环路由;

[r2-bgp]aggregate 1.1.0.0 22  #聚合和所有明细路由均发送
[r2-bgp]aggregate 1.1.0.0 22 detail-suppressed  #抑制所有明细路由,仅发送聚合条目

以上操作方法:若需要在发送聚合条目的同时携带部分的明细条目,需要使用策略
(1)抑制列表

[r2]ip ip-prefix zhb permit 3.3.4.1 32

[r2]route-policy zhb permit node 10
[r2-route-policy]if-match ip-prefix zhb

[r2]bgp 2
[r2-bgp]aggregate 3.3.0.0 21 suppress-policy zhb  #在传递聚合条目的同时,再抑制3.3.4.1/32这一条明细路由,其他明细路由正常转发; 

(2)使用路由策略在邻居间直接进行收发路由的管理

[r2]ip ip-prefix zhb permit 3.3.3.3 32

[r2]route-policy zhb deny node 10
[r2-route-policy]if-match ip-prefix zhb
[r2-route-policy]q
[r2]route-policy zhb permit node 20

[r2]bgp 2
[r2-bgp]aggregate 3.3.0.0 21
[r2-bgp]peer 12.1.1.1 route-policy zhb export

(3)直接使用前缀列表来实现方法的功能

[r2]ip ip-prefix lxy deny 3.3.3.3 32
[r2]ip ip-prefix lxy permit 0.0.0.0 0 le 32
[r2]bgp 2
[r2-bgp]peer 12.1.1.1 ip-prefix lxy export
十三、有条件的打破IBGP的水平分割

IBGP水平分割:用于避免在一个AS内部由IBGP邻居间产生的环路

规则:从一个IBGP邻居处学习到的BGP路由不能传递给下一个IBGP邻居;因为BGP的非直连建邻能力,因此可以在一个AS内部建立多个邻居来实现连接关系备份的作用;故正常一台设备只要运行BGP,那么应该处于AS的边界,存在EBGP邻居;
所有运行BGP协议的设备正常都会从其他AS学习到路由条目,然后共享到本地所在的AS,由于IBGP水平分割,导致本地需要和所有本AS内部的BGP设备建立IBGP邻居关系;IBGP邻居关系的数量会成指数上升;
所谓有条件的打破是指在打破IBGP水平分割的同时,不能产生环路 ---- AS–BY–AS

1、路由反射器 ---- RR(反射器)、客户端、非客户端
客户端。非客户端 必须分别为 RR的IBGP邻居关系;三种角色构建为一个簇(组);一个簇内可以存在多台设备,但至少一个簇内存在一个RR和一个客户端;

规则:
(1)RR从一台EBGP邻居处学习到的路由可以共享给本地的其他客户端、非客户端以及其他EBGP邻居;
(2)RR从一台客户端学习到的路由,可以传递给本地其他客户端、非客户端以及其他EBGP邻居;
(3)RR从一台非客户端学习到的路由,可以传递给本地其他客户端、其他EBGP邻居,不能传递给其他非客户端;(非非不传)

[r3-bgp]peer 2.2.2.2 reflect-client  #ibgp邻居2.2.2.2成为本地的客户端,同时本地成为RR

2、联邦
将一个大AS逻辑为多个小AS;小AS使用私有AS号,小AS间为联邦内的ebgp邻居关系,可以像EBGP一样传递数据,但不能修改属性;对于联邦外的AS,只能看到大AS号;
(1)所有的启动、建邻、管理均基于小AS号进行
(2)联邦内所有设备需要声明自己所在的大AS号
(3)小AS间的ebgp邻居需要互指对端的小AS号

[r3]bgp 64512
[r3-bgp]router-id 3.3.3.3
[r3-bgp]confederation id 2  #声明本地的大AS号
[r3-bgp]confederation peer-as 64513  #对端的小AS号
[r3-bgp]peer 2.2.2.2 as-number 64512
[r3-bgp]peer 2.2.2.2 connect-interface LoopBack 0
[r3-bgp]peer 4.4.4.4 as-number 64513
[r3-bgp]peer 4.4.4.4 connect-interface LoopBack 0
[r3-bgp]peer 4.4.4.4 ebgp-max-hop 2

注:实际工程中,路由反射器与联邦技术是结合在一个拓扑中共同使用的;

十四、在MA网段中,BGP协议的下一跳问题

在一个MA网段中运行BGP协议;若该网段存在EBGP邻居关系,那么只要使用该网段内的物理接口IP地址作为邻居建立地址,那么ICMP 重定向 将为我们定义最佳下一跳地址作为BGP路由中的下一跳地址;

[r1]display bgp routing-table peer 123.1.1.2 advertise-routes  #查看本地向该邻居发送的BGP路由
[r1]display bgp routing-table peer 123.1.1.2 received-routes  #查看本地从该邻居学习到的路由
十五、next-hop-local与路由策略

next-hop-local本地从EBGP邻居出学习到的路由向邻居传递时修改下一跳为本地,本地从IBGP邻居出学习到的路由,传递给本地的其他IBGP是不修改

一旦使用路由策略来代替next-hop-local指令时,需要注意其将会修改所以路由的下一跳属性,可能导致环路,需要进行精确的匹配来策略具体的路由修改下一跳;

部分厂商的真机设备在使用路由反射器后,next-hop-local指令不生效,只能使用路由策略来实现效果,一定需要关注防环

十六、属性

属性比较的前提:所以路由均满足优的条件后,再进行对比;
在这里插入图片描述
BGP六种公开属性:

属性介绍传播范围默认值大优或小优
PrefVal(权重属性)本地私有属性,在本地排第一不传播0–65535,默认0
LocPrf(本地优先级)最长用于IBGP关系下,干涉选路IBGP邻居间100
as-path优先经过AS数量较少路径,该属性的自动添加时在EBGP邻居关系间进行AS的编号是在EBGP邻居间传递路由信息时才进行添加,但由于该属性是整个网络传递的,故既可用于干涉EBGP关系下的选路,也可用于干涉IBGP关系下的选路,但只能在EBGP关系下修改只能添加少优
Ogn(起源属性 来源)有三种,第一种使用字母i标记,逐条network本地路由表中的路由;第二种使用?标记,批量将本地的IGP重发布到BGP协议;第三种使用e标记,从EGP重发布到BGP的路由;i优于e优于?
MED(多出口鉴别属性 度量)干涉EBGP关系下选路使用最多;最常用于AS1干涉AS2对AS1的选路;MED就是认为的修改cost值,最终干涉选路默认为0

负载均衡:到达同一个目标,可以将流量拆分后延多条开销相似路径同时传输;
负载分担: 基于不同目标,通过不同路径访问

修改权重:

[r4-bgp]peer 3.3.3.3 preferred-value 1  #修改权重属性,只要从3过来的路由权重值全部改成1

#负载分担
[r4]ip ip-prefix pp permit 1.1.1.0 24  #抓取要修改的
[r4]route-policy pp permit node 10
[r4-route-policy]if-match ip-prefix pp
[r4-route-policy]apply preferred-value 1 #修改权重
[r4-route-policy]q
[r4]route-policy pp permit node 20 #建立空表放过其他路由
[r4-route-policy]q
[r4]bgp 2  #进入bgp,针对3.3.3.3这哥邻居在入向上调用
[r4-bgp]peer 3.3.3.3 route-policy pp import   #因为该属性为私有不传递属性,故调用时,只能在控制层面的入向调用来影响本地的BGP生成

修改本地优先级:

[r3-bgp]default local-preference 101 #本地所有传输到IBGP的路由条目,其中本地优先级修改为101;强烈不建议用的全局修改

#负载分担,修改单独一条的
[r3]ip ip-prefix ll permit 1.1.1.0 24
[r3]route-policy ll permit node 10
[r3-route-policy]if-match ip-prefix ll
[r3-route-policy]apply local-reference 101
[r3-route-policy]q
[r3]route-policy ll permit node 20
[r3-route-policy]q
[r3]bgp 2
[r3-bgp]peer 4.4.4.4 route-policy ll export  #调用时在控制层面的出或入向均可,但必须为IBGP邻居关系   

as-pathAS数量添加

[r2]ip ip-prefix as permit 1.1.1.0 24
[r2]route-policy as permit node 10
[r2-route-policy]if-match ip-prefix as
[r2-route-policy]apply as-path 3 4 5 additive  #添加as
[r2-route-policy]q
[r2]route-policy as permit node 20
[r2]bgp 2
[r2-bgp]peer 12.1.1.1 route-policy as import  

切记:as-path属性又用于EBGP的水平分割,若人为添加的as号在网络后端实际存在,将导致这些路由无法进入这些AS;
解决方案:反复添加已经经过的ad编号,如下:

[r2-route-policy]apply as-path 1 1 1 additive

出向调用 ---- x 3 4 5;x为实际经过的AS号;最前端号码为最新经过的AS号;
入向调用 ---- 3 4 5 x;

修改起源属性

[r2]ip ip-prefix oo permit 1.1.1.0 24
[r2]route-policy oo permit node 10
[r2-route-policy]if-match ip-prefix oo
[r2-route-policy]apply origin egp 2  #将i降级为e 后面要跟对端的as号
[r2-route-policy]q
[r2]route-policy oo permit node 20
[r2]bgp 2
[r2-bgp]peer 4.4.4.4 route-policy oo export

修改MED

[r1]ip ip-prefix med permit 1.1.1.0 24
[r1]route-policy med permit node 10
[r1-route-policy]if-match ip-prefix med
[r1-route-policy]apply cost 1
[r2-route-policy]q
[r2]route-policy med permit node 20
[r2]bgp 1
[r2-bgp]peer 12.1.1.2 route-policy med export
十七、BGP的选路

比较前提,多条BGP路由目标相同,且均可优(下一跳可达、同步关闭),具有相同的优先级(管理距离)。

1、优选Preference_Value值最高的路由(私有属性,仅本地有效)。不传递。权限最高的属性 ;可以干涉EBGP/IBGP选路;
2、优选本地优先级(Local_Preference)最高的路由。只能在IBGP邻居间传递,最长干涉IBGP关系的选路
3、优选手动聚合>自动聚合>network>import>从对等体学到的
4、优选AS_Path短的路由。EBGP/IBGP关系均可被干涉,但只能在EBGP邻居间修改;
5、起源类型 IGP>EGP>Inxomplete。起源属性i优于e优于?;可在控制层面任意接口修改;
6、对于来自同一AS的路由,优选MED值小的。默认为0,宣告或重发布(关闭自动汇总)路由时携带本地到达目标的cost;最常用于干涉EBGP选路的属性
7、优选从EBGP学来的路由(EBGP>IBGP)
8、优选AS内部 IGP的Metric最小的路由
9、优选Cluster_List最短的路由
10、优选Orginator_ID最小的路由
11、优选Router_ID最小的路由
12、优选具有较小IP地址的邻居学来的路由

十八、BGP的社团属性

BGP的扩展属性,默认大多数厂商的产品在BGP协议中不携带社团属性
例:控制传播范围的社团属性

[r1]route-policy com permit node 10

[r1-route-policy]apply community no-advertise  #no-advertise是社团里的不宣告属性
[r1-route-policy]apply community no-export  #no-export是不能传递给下一个AS
[r1-route-policy]apply community no-export-subconfed  #no-export-subconfed是不能出联邦的小AS

[r1]bgp 1
[r1-bgp]peer 12.1.1.2 route-policy com export
#默认华为设备不传递社团属性,故使用社团属性时,必须定义传递性
[r1-bgp]peer 12.1.1.2 advertise-community  #逐跳行为,每台设备均需开启传递性
十九、BGP认证
[r3-bgp]peer 34.1.1.2 password cipher 123456

双方密码需要一致,密码默认基于md5计算后转发

二十、使用MPLS解决BGP的路由黑洞

MPLS协议并不会为通过BGP协议学习的路由分配标签号;
而是在访问这些BGP路由目标网段时,在流量中压入到达这邪恶网段的BGP下一跳设备地址的标签号;

例:
R2从BGP邻居5.5.5.5学习到6.6.6.0网段的路由,R2在访问6.6.6.0时,将在数据包中压入到达5.5.5.5IP地址的标签号来穿越中间没有运行BGP协议的设备,实现打破路由黑洞;

注:华为设备默认不为BGP协议执行下一跳标签机制,Cisco默认执行;
华为设备需要开启 route recursive-lookup tunnel 路由基于隧道进行递归查找;

[r2]route recursive-loopup tunnel
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值