一、BGP基础
1.BGP简介
BGP(Border Gateway Protocol,边界网关协议)是一种用于自治系统(AS)之间交换路由信息的EGP类别动态路由协议。BGP协议为不同AS间共享路由,工作时隔离两个AS的内部网络,形成一个独立的交互空间,且同时可以实施强大的策略来干涉选路。
(1)AS——自治系统
标准AS号长度为16位,范围:0-65535
公有:1-64511
私有:64512 -65535
扩展AS号长度为32位,范围:约42亿
互联网路由和自治系统详细报告:http://www.cidr-report.org/as2.0/
(2)IBG与EGP的区别
IGP追求:收敛速度快,选择路径佳(无环),占用资源少 hop-by-hop
EGP追求:可控性,可靠性,AS-BY-AS
(3)可控性
BGP协议不是路由的产生者,仅为搬运者,且AS间正常应该存在大量的链路来保障稳定性,故BGP协议传递的路由条目很难默认最佳选路,需要管理员对路由进行大量的策略来干涉选路。
(3)可靠性
BGP协议虽然像距离矢量协议一样仅传递路由条目,但更新量依然很大,为了避免对设备资源的占用选择了增量更新(仅触发、无周期),故需要保障所有的路由传递到位(可靠),因此BGP协议,基于TCP工作,TCP的三次握手条件使得TCP只能基于单播工作,同时BGP需要非直连建立邻居,BGP基于IGP之上,先IGP使BGP设备间IP可达,然后BGP才能基于TCP建立非直连邻居关系。
(4)AS-BY-AS
AS-BY-AS—以一个AS为一跳,将一个AS看成一个整体。
(5)专业名词
EBGP:外部的BGP邻居关系,两台处于不同AS的BGP路由器间建立的邻居关系
IBGP:内部的BGP邻居关系,两台处于同一个AS内的BGP路由器间的建立的邻居关系
2.BGP特点
1)无类别路径矢量,距离矢量的升级版:AS-BY-AS
2)使用单播更新来发送所有信息,基于TCP 179端口工作
3)增量更新,仅触发无周期
4)具有丰富的属性来取代IGP中度量进行选路,多个参数控制协议
5)可以在进项和出项对流量实施强大的策略,可控性
6)默认不被用于负载均衡,通过各种选路规则仅仅产生一条最佳路径
7)BGP支持认证和聚合(汇总)
3.BGP数据包
基于TCP的179端口工作,故BGP协议中所有的数据包均需要在tcp会话建立后,基于TCP的会话来进行传输及可靠性的保障,首先通过TCP的三次握手来寻找到邻居。
(1)Open
仅负责邻居关系的建立,正常进收发一次即可,携带route-id,hold time 默认3min。
(2)Keeplive
保活,周期1min查询邻居关系是否存在,实际保活TCP会话。
(3)Update
携带路由条目,目标网络号+各种属性。
(4)Notification
出现错误数据时收发。
4.BGP工作过程
工作过程:
- 管理员定义邻居的ip地址,前提要求对邻居ip可达(IGP可达)
- 启动BGP协议后,先目标端口为179进行TCP的三次握手来建立TCP的会话
- 会话建立后,收发open报文来建立邻居关系,生成邻居表
- 邻居关系建立后,邻居间使用update共享路由条目,在收发了路由信息后,本地生成BGP表(BGP表中装载本地发出及接收到的所有路由条目)
- 之后路由器将BGP表中的最优路径(不一定是最佳选路,仅为BGP参数最佳)加载于路由表中
- 收敛完成,仅keeplive周期保活即可
结构突变:
- 新增网段 – BGP更新源设备将使用update来告知本地所有的邻居
- 断开网段 – BGP更新源设备将使用update来告知本地所有的邻居
- 无法沟通 – 3min hold time到时时断开邻居关系和TCP会话,之后删除从该邻居处学习到的所有信息
ps:BGP更新源设备并不一定直连断开或新增网段的设备,而是第一台将该路由发布到BGP协议中的路由器
5.BGP的三张表
(1)邻居表
查看邻居表的摘要信息
(2)BGP路由表
(3)BGP的IP路由表
注意: EBGP邻居之间传递路由最小间隔为30s;IBGP邻居之间传递路由最小间隔为15s
6.BGP路由黑洞
由于bgp协议可以非直连建立邻居关系,故若两台BGP邻居间存在未运行BGP协议的路由时,可能出现路由条目可以在控制层面正常单播传递,但数据层面流量经过未运行BGP协议的设备时,无法通行,控制层面可达,数据层面不可达。
解决方法:
- 物理或逻辑链路全连
- 全连的BGP邻居关系,所有设备运行bgp
- 将BGP路由条目重发布到IGP协议中(实验环境)
- MPLS多协议标签交换(最佳方案)
7.BGP防环机制
(1)EBGP水平分割(防止EBGP环路)
利用BGP条目中的as-path 属性,该属性将记录所有经过的AS编号,接收到的路由条目中,若as-path中存在本地的AS号,将拒绝接收。
(2)IBGP水平分割(防止IBGP环路)
基于AS-BY-AS特性,BGP的路由条目默认在一个AS内部传递时,其属性不变化;
从一个IBGP邻居处学习到的路由条目不得传递给本地其他IBGP邻居。 因为BGP协议具有非直连建立邻居的能力,故在一个AS内部只要设备运行BGP协议,那么其必然存在EBGP邻居关系(一定连接了其他的AS)。
IBGP水平分割规则将导致在一个AS内部所有运行了BGP协议的路由器间,均需要建立IBGP邻居关系,才能正常传递路由条目(建立邻居关系的配置成指数增长)。可以使用联邦和路由反射器来解决该问题。
二、BGP配置
1.BGP的基础配置
(1)使用直连接口ip地址来建立EBGP邻居关系
[r1]bgp 1 # 启动时需要定义真实的AS号,没有多进程概念
[r1-bgp]router-id 1.1.1.1 # 建议手工配置RID,手工(优先)-环回最大值(其次)-物理接口最大值(最后)
[r1-bgp]peer 12.1.1.2 as-number 2 # 对端IP地址,及对端所在的AS号
(2)使用环回接口ip地址来建立IBGP邻居关系
[r3]bgp 2
[r3-bgp]router-id 3.3.3.3
[r3-bgp]peer 2.2.2.2 as-number 2
[r3-bgp]peer 2.2.2.2 connect-interface LoopBack 0 # 一旦使用环回接口作为目标ip地址时,也应该修改源为本地的环回接口ip地址
(3)若EBGP邻居间存在多条直连链路时,也建议使用环回接口来建立
1.写到达环回接口的静态路由
[r4]ip route-static 5.5.5.0 24 45.1.1.2
2.建立BGP邻居关系
[r5]bgp 3
[r5-bgp]router-id 5.5.5.5
[r5-bgp]peer 4.4.4.4 as-number 2
[r5-bgp]peer 4.4.4.4 connect-interface LoopBack 0
(4)BGP规定EBGP邻居间默认所有的BGP数据包TTL值为1,导致环回建立邻居关系服务正常
[r4-bgp]peer 5.5.5.5 ebgp-max-hop 2
2.BGP的路由宣告
BGP协议本身不计算生成路由条目;负责转发从其他BGP邻居传递过来的路由条目,同时可以将本地路由表中任意路由宣告到BGP协议中来。BGP宣告配置时,只能宣告本地路由表中的路由条目,且宣告配置中网络号的掩码必须和路由表中的记录完全的一致。
[r1]bgp 1
[r1-bgp]network 1.1.1.0 24
当BGP设备进行宣告配置后,本地生成BGP表:装载本地发出及接收到所有BGP路由
[r1]display bgp routing-table
BGP Local router ID is 1.1.1.1
Status codes: * - valid, > - best, d - damped,
h - history, i - internal, s - suppressed, S - Stale
Origin : i - IGP, e - EGP, ? - incomplete
Total Number of Routes: 1
Network NextHop MED LocPrf PrefVal Path/Ogn
*> 1.1.1.0/24 0.0.0.0 0 0 i
*表示可用 >表示条目优秀—可以加表,可以传递(共享给本地的其他邻居)
状态处的i表示该条目通过IBGP邻居关系学习
不优的原因:下一跳不可达
下一跳属性规则:
1)network引入默认next-hop 属性为0.0.0.0
2)network通告路由传递给IBGP邻居或EBGP邻居时,下一跳默认为更新源地址(即建立TCP三次握手的对方IP地址)
3)BGP学习路由传递给EBGP邻居时,下一跳为EBGP邻居建立的更新源地址(EBGP邻居路由传递给EBGP邻居时也一样)
4)EBGP学习路由传递给IBGP邻居时,下一跳不发生改变
ps:
在cisco中默认将IGP协议通告进入BGP时,将原IGP路由的下一跳地址作为BGP路由的下一跳属性传递给其他IBGP邻居时,IBGP邻居发现路由的下一跳属性为自己的接口地址,启用下一跳防环机制,阻止路由加表,下一跳属性具有防环功能。
在华为中,将所有的路由通告进入BGP时,下一跳属性为0.0.0.0,并且传递给其他IBGP邻居时下跳属性直接变为更新源地址,下一跳属性不存在防环功能,所有的再修改优先级的时候可能导致路由环路。
特别说明:在思科中,若IBGP和EBGP邻居都使用MA网络进行连接,同时EBGP邻居使用MA物理接口建立邻居,此时将IBGP邻居路由传递给EBGP邻居时,下一跳属性为到达IBGP邻居的MA物理接口地址。
[r2]bgp 2
[r2-bgp]peer 3.3.3.3 next-hop-local # 将BGP路由传输给邻居3.3.3.3时修改下一跳属性为本地(2.2.2.2)条目传递给本地的ebgp邻居,自动修改属性,包括下一跳为本地;
[r3]bgp 2
[r3-bgp]peer 4.4.4.4 next-hop-invariable # 保持原有下一跳,配合route-police使用
三、BGP进阶
1.对等体组
peer group : 将多个peer 划入一个group中,针对group实施BGP邻居关系建立的配置
创建group:
针对group定义配置(注意在IBGP peer-group中,所有在同一AS,所有不需要单独建立BGP邻居命令):
将peer划入对等组:
2.路由反射器
3种角色:RR(反射器) 客户端 非客户端
3者构建一个簇:可以理解为RR为中心站点,客户端或非客户端是分支站点
要求所有分支与中心必须是IBGP邻居关系;在一个簇中至少存在一台客户端;
规则:
- RR从一台EBGP邻居处学习到的路由可以传输给本地的客户端、非客户端、其他EBGP邻居
- RR从一台客户端邻居处学习到的路由,可以传输给本地的其他客户端、非客户端、其他EBGP邻居
- RR从一台非客户端邻居处学习到的路由条目,可以传输给本地的客户端,其他EBGP邻居,不得传输给本地的其他非客户端
注意:若路由条目不优,不具有传递性,反射器也无法反射路由
[r3-bgp]peer 2.2.2.2 reflect-client # 该指令的作用,是让2.2.2.2成为本地的客户端,同时本地成为路由反射器
3.联邦
将一个真实的大AS,逻辑的分为多个小AS,小AS的编号建议为私有编号,小AS间构建联邦内的EBGP邻居关系,可以向真实EBGP关系一样传递路由条目,但不修改属性,对于该大AS外的其他AS,是不知道内部的小AS情况。
(1)联邦内所有运行BGP协议的设备均声明自己所在的大AS号
[r2]bgp 64512
[r2-bgp]confederation id 2
(2)小AS间互指peer,在联邦内的ebgp邻居关系间的两台设备,互相定义对端的小AS号
[r4-bgp]confederation peer-as 64512
(3)配置邻居关系
[r3]bgp 64512
[r3-bgp]router-id 3.3.3.3
[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
注意:华为设备,必须先定义联邦的id,和互相小AS号后再配置邻居关系建立的命令
4.团体属性
团体属性为可选可传递属性。
标准团体属性:针对传递的路由信息进行标记
扩展团体属性:定义BGP路由的传播范围
扩展团体属性类型:
Internet——可以传递给所有邻居
no-advertise——不能传递给任何邻居
no-export——不能传递出大的AS
no-export-subconfed——不能传递出小的AS
默认情况下,所有路由器识别并支持所有的属性,但是不传递。
开启支持传递标准团体属性:
开启支持传递扩展团体属性:
四、BGP特性
1.路由导入和导出
(1)路由导入 :1.network 自身通告(可以通告所有路由表的路由条目) 2.import 重发布引入
1.network 引入next-hop属性永远为0.0.0.0,将原本IGP中的metric值以MED属性的方式引入
注意: 在思科中,若引入的路由是存在下一跳地址的(IGP或下一跳做法的静态),则引入的路由下一跳属性为原始路由的下一跳地址目的是为了IBGP协议防环,BGP不接收下一跳为自己的BGP路由;在华为中,network引入的路由下一跳属性为0.0.0.0,失去了下一跳防环机制可能会导致路由环路。
2.默认import引入属性与network通告属性相同(区别: 起源码属性为?)
3.BGP协议默认关闭自动汇总,若开启自动,仅仅针对重发布进入的路由生效,将引入的明细路由进行抑制,进行自动汇总(汇总成主类),同时MED属性丢失
开启或关闭自动汇总:
(2)路由的导出: import
BGP协议import进入IGP协议时,默认只能将EBGP邻居学习并加表的路由导出进入IGP协议,可以通过参数permit-ibgp,将IBGP邻居学习路由也引入进IGP协议。
2.增加BGP协议的安全性
(1)BGP路由认证:BGP的路由认证信息存在于TCP数据结构中,密码信息使用MD5 方式
查看BGP认证信息
(2)限制BGP邻屁的TTL值,启用BGP TTL限制:修改了TTL值限制之后,EBGP邻居建立过程中相当于修改EBGP多跳
3.BGP邻居关系重置
(1)重置BGP邻居(断开三次插手,重新建立):
(2)手工进行BGP路由刷新(默认该属性已开启):
4.路由过滤
方法一:使用 route-policy 进行路由过滤(可以在import export方向上实施)
方法二:使用 filter-policy ,可以在BGP协议中直接使用(filter-policy可以正常调用ACL或前缀列表),在针对某BGP邻居过程中使用过滤列表只能调用ACL
(1)方法一配置:
1.使用ACL或前缀列表抓取需要被过滤的路由
2.使用 route-policy 过滤路由
3.BGP peer之间调用 route-policy
(2)方法二配置:
1.使用ACL 或前缀列表定义策略
2.全局中 fitter-policy 调用
在BGP邻居关系建立过程中进行路由过滤(使用fitter-policy只能调用ACL )
1.定义ACL
2.调用
5.路由聚合
(1)利用BGP可以network所有加表的路由
使用静态可以将网段聚合:
宣告:
(2)使用聚合者属性进行路由聚合
注释:
1.默认情况,发送聚合路由也发送所有的明细路由。
2.detail-suppressed,仅仅发送聚合路由,抑制所有的明细路由发送。
3.suppress-policy ,使用抑制列表进行控制,抑制列表调用route-policy,此时route-policy仅仅抓取感兴趣路由(只有permit),抑制列表自身有过滤功能。
4.origin-policy,就是条件策略,针对origin-policy中匹配的路由存在时,聚合才会生效。
5.attribute-policy ,仅仅针对聚合路由进行策略控制(改变聚合路由属性)。
6.as-set,可以还原聚合路由中丢失的某些属性(例如AS-path)。
注意:在进行路由聚合时,会丢弃某些属性,例如AS-path,导致网络故障(严重的会出现路由环路),还有一些属性会自动生成一些默认值。
存在问题的属性:
1.AS-Path(丢失)
2.origin((默认使用所有明细中最差的)
3.LP(丢失)
4.团体属性(丢失)
使用AS-SET属性之后:
AS-PATH:会将经过的所有AS恢复,若存在重复的多个AS路径中,将所有经过的AS写入到个叫做AS序列属性中, 在计算AS-path长度时仅仅算一个。
Origin:默认使用所有明细中最差的 (思科中默认使用i,使用了AS-SET之后才会选择最差的)
LP:丢失(思科中,使用最小的LP)
COM:丢失(在思科中会恢复所有团体属性,同时使用)
6.路由惩罚
特点:
1.被惩罚的路由不能参与选路,不能加入本地的IP路由表,不能传递。
2.路由惩罚仅仅针对EBGP邻居学习的路由,并且针对的是某一个邻居传递的路由并非路由条目本身。
惩罚值:路由条目每翻滚一次,惩罚值+1000,路由属性每改变一次惩罚值+500,不能修改。
惩罚门限:超过了惩罚门限开启路由惩罚,默认值为2000。
重用门限:当惩罚值低于该值,重新使用该路由信息,默认750。
半衰期:默认为15分钟。
思科:设置了一个最大的惩罚时间默认为60分钟。即Maxpenalty=reuselimit*2^(maximulnsuppresstime/halftime)
在思科中,最大惩罚值是计算出来的,所以值修改路由惩罚参数时,需要提前运算,保证最大惩罚值一定时大于惩罚门限的。
华为:最大惩罚值默认为16000。
启用路由惩罚:
查看路由惩罚参数:
查看被惩罚的路由:
清除所有被惩罚的路由信息:
五、BGP选路
选路条件:BGP路由必须有效,无环的,不能被惩罚。
当到达同一目的地存在多条路由时,BGP依次对比下列属性来选择路由:
1.优选协会首选值(PrefVal)最高的路由。协议首选值是华为设备的特有属性,该属性仅在本地有效。
2.优选本地优先级(Local_Pref)最高的路由。
3.next-top为0.0.0.0最优先。
4.优选AS路径(AS_Path)最短的路由。
5.依次优选Origin类型为IGP、EGP、Incomplete的路由。
6.对于来自同一AS的路由,优选MED值最低的路由。
7.EBGP邻居学习路由优于IBGP邻居学习路由。(联邦EBGP当作普通IBGP路由对待)
8.优选最近的下一跳(下一跳地址在本地路由表中的metric值)
9.可以执行负载均衡---
10.最小的router-id(若存在起源者属性,比router-id时使用起源者属性,若相同则继续比较)
11.优选Cluster_List最短的路由
12.最小的peer IP地址