目录
BGP边界网关协议(Border Gateway Protocol)
Originator ID (发起者标识/最早学习)& Cluster ID(簇标识)
在非全互联的IBGP邻居关系中,如何保证路由的传递以及通信?/BGP的防环
问?BGP在做路由反射器的时候,是在一个集群内部署两个RR好还是设计两个集群好?
Detail Suppressed,Suppress Policy,Origin Policy,Attribute Policy,AS Set:
BGP边界网关协议(Border Gateway Protocol)
IGP:RIP、EIGRP、OSPF——在同一个自治系统内部运行的路由协议
EGP:BGP——在不同自治系统之间传递高级路由的矢量协议
BGP与IGP相比的特点:
1.侧重点不同:IGP都是着眼于发现并计算路由→快;BGP着眼于路由控制和选路。
2.BGP报文以单播发送,无论两台路由器是否直连都可以建立邻居关系,只是建立邻居和路由收敛速度慢。
3.BGP可以通过路由更新携带各种各样的路径信息和属性,彻底解决BGP环路问题。
4.BGP提供了丰富的路由策略,能对路由灵活的过滤和选择。
5.BGP易于扩展,能使用各种各样的网络新技术的发展。
6.它用于大型/超大型网络,任何IGP无法比拟,运营商骨干网络都是运用BGP来同步整个互联网的路由的。
BGP是个七层协议,基于TCP协议封装,目的端口号179,源端口随机,由路由器自行选择,一般来说在万以上(如20000)(注:RIP也是七层协议,基于udp,端口号502)
BGP在建立邻居的时候,先建立TCP连接,发送BGP/TCP存活消息(keepalive)
每60秒发一次,用来保证BGP邻居之间的TCP连接正常。
BGP是一款路径矢量路由协议
路径矢量:
运行了BGP的路由器之间会交换网络可达性信息(可达性信息指BGP中的属性)。
BGP是使用AS号来划分区域的
公有AS号:1-64511(只能在广域网的BGP设备上配置)
私有AS号:64512-65535(只能在局域网内配置)
BGP使用条件:
1.边界设备冗余
边界设备:一端连接局域网,另一端连接的是运营商/公网
冗余:需要放置至少两台设备
2.链路冗余
如果边界设备无法满足冗余的条件,可以考虑部署链路冗余,即连接多根线路至运营商/公网
3.ISP冗余
如果既不能满足边界设备冗余也不能满足链路冗余,则可以考虑ISP冗余
如:企业的边界设备既连接电信,也连接移动网络。
ISP冗余的几种形式:
1.单宿主
客户的边界设备使用一根线来连接到一个运营商
2.双宿主
客户的边界设备使用两根线来连接到同一个运营商
3.多宿主
客户的边界设备使用两根线来分别连接到不同的运营商
4.多重双宿主
客户的边界设备使用两根线连接到运营商A,再使用两根线连接到运营商B。
BGP邻居
iBGP:内部邻居,即两台路由器运行BGP的AS号相同,管理距离200
eBGP:外部邻居,即两台路由器运行BGP的AS号不同,管理距离20
BGP的邻居消息类型/报文:
Open:用于建立BGP邻居关系
Keepalive:用于维护BGP邻居关系,keep alive间隔60s,hold time间隔180s,是keep alive的三倍。
Update:用于更新路由条目,增量更新,只包含新增的路由条目
Notification:用于差错控制,只要在BGP运行过程中发送了Notification报文,BGP就会立马断开邻居关系,不再继续运行。
Route-Refresh:刷新路由,当路由出现变更时刷新路由(一般来说就是属性的改变)。
BGP报头header:
Marker[16bit]:用来检测BGP对等体之间的同步丢失情况,并且在支持验证功能的情况下进行消息验证。全F
Length[16bit]:表示连报头在内的整个报文的长度,取值19~4096个字节
Type:指明BGP的报文类型
OEPN报文:建立邻居时协商的参数
Version:BGP的版本,必须一致,现网运行的一般都是BGP-4的版本。
My AS:本地的AS号,必须一致
router-id:必须不一致
Hold Time:协商keepalive的时间间隔,默认是180s,如果不一致,两端邻居都会在本地进行比较,然后选择最小的HoldTime作为自己的HoldTime,再除以3,得出hello间隔(open间隔)
BGP Identifier:路由器BGP Router-id
BGP的邻居状态机
1.idle(空闲):初始状态,查找指定的邻居可达性信息
如果找到则进入connect状态;如果停留在idle状态,则可能邻居不可达、IP不可达或者eBGP邻居没有加多跳选项。
2.active(活跃):反复尝试建立TCP连接。
从idle进入active通常需要30s(不固定)的计时器计时;向对方发送TCP连接请求SYN报文时,即进入active状态;回复ACK时,即进入connect状态
3.connect(连接):发送TCP报文,尝试三次握手来建立TCP连接。(过渡)
如果建立成功则进入opensent状态,若不成功,进入active状态
---------------TCP的会话建立:(若没成功,需要检查邻居路由是否可达,防火墙是否放行了tcp的179端口等ipv4路由层面问题)
4.open sent(初始发送):发送Open报文。该状态下等待对端的Open报文,如若能够收到对端邻居的Open报文则进入OpenConfirm状态;如若收不到对端的Open报文,则发送Notification报文并且断开邻居关系
5.open confirm(初始确认):发送Keepalive包欧文,收到对端Keepalive报文进入Established状态,否则回到Idle状态。此状态下可能会发生Keepalive时间的选举,默认为180s,如若遇到两端Keepalive时间不一致,则选择较小的。
6.established(建立):交换Update报文
当两台设备的邻居状态都变为openconfirm后,即双方都收到keepalive消息后,邻居的建立完成,后续就可以交换Update报文了
BGP的部署命令:
传统的IGP协议(EIGRP、OSPF)可以自动地发现网络中的其它设备,从而形成邻居关系。但BGP并不具备该功能,因此BGP所有的邻居都需要进行手工指定。
建立eBGP邻居:
(config)#router bgp AS号
(config-router)# bgp router-id x.x.x.x # 手动指定router-id
(config-router)# neighbor 对端设备的物理接口的IP地址 remote-as 对端设备的AS号
在建立eBGP邻居关系时,建立eBGP邻居时发出的数据包,其TTL(Time To Live)值为1,当数据包每经过一台三层设备(路由器或三层交换机),其TTL值就会减去1,当TTL值为0时候,该数据包会被三层设备丢弃,不再继续转发。
而在建立iBGP邻居关系时候,建立iBGP邻居时发出的数据包,其TTL(Time To Live)值为255,为最大值,没有此顾虑。
因此,如果在建立eBGP邻居关系时,出现跨设备建立,而TTL值不满足条件,可修改TTL值:
(config)#router bgp AS号
(config-router)# neighbor 对端设备的物理接口的IP地址 ebgp-multihop a(1-255)
# 调整eBGP报文的TTL值。
建立iBGP邻居关系:
(config)#router bgp AS号
(config-router)# bgp router-id x.x.x.x # 手动指定router-id
(config-router)# neighbor 对端设备的环回口IP地址 remote-as 对端设备的AS号
# 在内部邻居时,往往推荐使用环回口地址,更加稳定。
(config-router)# neighbor 对端设备的环回口IP地址 update-source 接口编号
# 修改更新源,确保TCP连接的正常建立,接口编号,如lo0。
查看BGP邻居表:
show ip bgp summary
其中字段State/PfxRcd:
如果是State(邻居状态机中的状态中的任何一个),表明邻居建立的过程还没有完全结束。但如果是PfxRcd(数字),表明邻居已经建立完成。Tips:即便该数字是0都是正常的。
内部邻居有隐含的防环规则:
从一个内部邻居学习来的路由不会再发送给其他的内部邻居。
解决方案:
——建立全互联的内部邻居关系
如果想规范的部署完整的iBGP邻居关系,齐活得三条命令:
1.neighbor X.X.X.X remote-as XX # 指定对端AS号
2.neighbor X.X.X.X update-source lo0 # 修改更新源为环回口
3.neighbor X.X.X.X next-hop-self # 修改下一跳为自我
BGP属性:
1.公认必遵(公认必选)
例如:As path(AS路径)、Next hop(下一跳)、Origin(路由来源)
只要路由器运行了BGP,那这台路由器就必须认识和承认这些属性
在传递路由的时候,也必须携带这些属性,若缺少,邻居关系将重置
2.公认可选(公认自决)
例如:Local Preference(本地优先级)、atomic-aggregate(原子聚合)
只要路由器运行了BGP,那这台路由器就必须认识和承认这些属性
在传递路由的时候,可以选择性使用,不要求必须携带该属性,邻居关系不受影响
3.可选可传递
例如:aggregator(聚合者)、community(团体)
在传递路由的时候,可以选择性使用,不要求是否识别这些属性
识与不识别,都会将该属性传递给在BGP中的邻居们
4.可选不可传递
例如:MED、Originator ID、Cluster List
在传递路由的时候,可以选择性使用,不要求是否识别这些属性
不能识别,则忽略该更新报文,不在BGP中传递
下一跳属性:
Next-hop,公认必遵,指明了去往目的地要使用的下一跳地址
规则:
规则一:BGP设备将本地的始发路由发给其所有的BGP邻居时,会把该路由信息的下一条属性设置为本地与对端建立邻居关系的接口地址,比如:使用物理接口与对端建邻居,那么传递给对方路由的下一条属性就是自己的物理接口的地址;如果使用环回口建邻居的话,那下一条属性就是环回口地址
规则二:BGP设备在将自己学习到的路由转发给其他的eBGP外部邻居时,会将这些路由的下一条属性改成自己本地与对端建立eBGP邻居的接口地址
规则三:BGP设备在将自己学习到的路由转发给其他的iBGP内部邻居时,就不改变路由条目的下一条属性。就是说,我的邻居传给我时这个下一条地址是什么,我就原封不动的再传给我的iBGP邻居。
在BGP中,如果学习到的路由下一跳是无法ping通,就不能被视为最优路由,也就无法再传递给其他邻居了。
从外部邻居学习来的路由,再传递给内部邻居的时候,下一跳地址依然是外部邻居地址,故可以在内部邻居间传递路由时,修改下一跳地址:
neighbor X.X.X.X next-hop-self
# 修改下一跳为自我,让外部路由在内部邻居之间正常的传递
在BGP中,只要修改了BGP的属性,就建议清理一次BGP路由表,让路由快速收敛。
clear ip bgp * # 断开BGP邻居关系,重新建立,重新传递收敛路由
clear ip bgp * soft # 在不断开BGP邻居关系的情况下,收敛路由
利用route-map修改下一跳属性:
(config)# ip prefix-list NH permit 1.1.1.1/32
允许特定的IP地址(1.1.1.1/32)通过前缀列表 "NH"。
(config)# route-map NH permit 10
创建名为 "NH" 的路由映射。
(config-route-map)# match ip address prefix-list NH
设置路由映射 "NH" 条目 10,匹配前缀列表 "NH" 中的IP地址。
(config-route-map)# set ip next-hop a.b.c.d # 设置下一跳地址为a.b.c.d
在匹配的路由上,设置下一跳地址为 a.b.c.d。
(config)# route-map NH permit 20
添加另一个条目到名为 "NH" 的路由映射。
(config)# router bgp AS-Number
配置BGP路由器的自治系统号。
(config-router)# neighbor x.x.x.x route-map NH out/in
将路由映射 "NH" 应用于特定邻居的出站或入站路由,以修改交换的路由的下一跳地址。
路径属性:As-Path
As-Path,公认必遵。
在外部邻居传递路由的时候,每经过一个AS,就会标记上一个AS号,越新的排在左边。
1.是BGP外部邻居的防环手段
如果在接收到的路由中,看到自己的AS号(证明这个路由走了一圈了),则拒绝该路由
2.AS-Path属性只能在外部邻居之间传递,而不会在内部邻居之间传递。
3.选路:经过的AS号越少,路由越优先。
4.路径属性当中,最右端是路由的始发地。
5.路径属性不是一成不变的,是可以人为修改的。修改仅限添加,不可以删除。
AS-Path属性值可以进行增加:依靠route-map
例 R1:
(config)# ip prefix-list AS-Path permit 1.1.1.1/32
允许特定的IP地址(1.1.1.1/32)通过前缀列表 "AS-Path"
(config)# route-map AS-Path permit 10
创建名为 "AS-Path" 的路由映射,设置路由映射 "AS-Path" 条目 10
(config-route-map)# match ip address prefix-list AS-Path
匹配前缀列表 "AS-Path" 中的IP地址
(config-route-map)# set as-path prepend AS1 AS2 # 添加AS号,从左至右依次AS1 AS2
在匹配的路由上,向 BGP 属性 "as-path" 左侧添加 AS1 和 AS2
(config)# route-map Origin permit 20
添加另一个条目到名为 "Origin" 的路由映射
(config)# router bgp AS-Number
配置BGP路由器的自治系统号
(config-router)# neighbor x.x.x.x route-map AS-Path in/out
将路由映射 "AS-Path" 应用于特定邻居的入站或出站路由,以修改交换的路由的 AS-Path 属性。
AS属性内容的四种类型:
As Set:无序AS号集合,例如:{300,200,100}(一般出现在聚合路由中,即当某台路由器上做了BGP路由聚合后,BGP进程会将聚合之前的明细路由所携带的AS号整合到一起,用一个大括号括起来作为一个集合,用逗号彼此隔开,且无先后次序,用于防止聚合路由又回到明细路由所在的AS,总而言之,防环)
As Sequence:有序的AS号列表,例如:300 200 100(路由经历了AS100、AS200、AS300)
As Confed Set:无序AS号列表,用法与As Set一样,区别在于列表中的AS号属于BGP联邦中的AS
As Confed Sequence:同上
起源属性:Origin
Origin,公认必遵。
定义路径信息的源,即描述一条BGP路由是如何进入到BGP路由表中的。
在起源属性中,共有三种标识符
1."i":IGP(内部网关协议),由本地IGP学习到的路由,即bgp路由通过network的方式注入到BGP进程里的
2.“e”:EGP,来自于其他EGP的路由,已淘汰,由于EGP目前有且仅有BGP在用,故看不见e
3."?":incomplete,路由来源不明/未知,一般情况下,通过重分发进入BGP的路由会被标记为?
起源属性的符号在AS-Path属性的后面,show ip bgp的末尾
1、标识路由来源
2、选路
i > e > ?
3、更改起源属性
起源属性的属性值是可以进行修改的,结合工具Route-map,例:假设名称是Origin
(config)# ip prefix-list Origin permit 1.1.1.1/32
创建一个前缀列表Origin,允许特定的IP地址(1.1.1.1/32)
(config)# route-map Origin permit 10
创建一个路由映射,命名为 "Origin",并设置一个匹配条件(条目号 10)。
(config-route-map)# match ip address prefix-list Origin
使路由映射的匹配条件基于前缀列表 "Origin" 中的IP地址
(config-route-map)# set origin <igp/incomplete>
设置匹配的路由的 "origin" 属性为 "igp" 或 "incomplete"
(config)# route-map Origin permit 20
向路由映射添加另一个匹配条件(条目号 20)。
(config)# router bgp AS-Number
(config-router)# neighbor x.x.x.x route-map Origin in/out
# 在和x.x.x.x邻居关系下调用Route-map,注意进方向和出方向,如果该路由是要发送给邻居就是出方向,反之,如果是从邻居接收该路由,则是进方向。
其中橙色字体部分为部署方式的其中一种,还可以在宣告进BGP的时候顺带做配置
(config)# router bgp AS-Number
(config-router)# network 1.1.1.1 mask 255.255.255.255 route-map Origin
Originator ID (发起者标识/最早学习)& Cluster ID(簇标识)
1.可选不可传递属性(簇标识)
2.仅在AS之内发生路由反射出现
Originator ID(发起者标识):Originator ID是一个用于标识BGP路由的属性,它在路由选择过程中起到了防止环路的作用。在BGP路由反射中,某个路由器将它学到的路由传递给路由反射器(Route Reflector),然后路由反射器将路由反射给其他路由器。为了防止路由在路由反射器和原始路由器之间产生循环传播,Originator ID用于标识最初将路由通告给路由反射器的原始路由器。Originator ID信息被包含在路由属性中,帮助防止将路由反射回最初通告该路由的路由器。
Cluster ID(簇标识):在BGP中,Cluster ID是另一个用于路由反射过程的属性。BGP路由反射器通常为多个客户端提供服务,Cluster ID用于标识处于同一簇(Cluster)中的一组路由反射器。这对于防止路由在同一簇内的路由反射器之间产生循环非常重要。它确保在同一路由反射器簇内不会发生路由反射。
本地优先级:Local Preference
Local Preference(LocPrf)
1.公认自决属性
2.只能在内部邻居/一个AS里传递,当路由条目被转发出AS之后,会剥离掉该属性,即属性为0,然后再进入新的AS
3.选路:本地优先级,取值越大越优,用来反映路由的好坏,即告诉路由器哪一条是离开当前AS的最优路径(Cisco的设备上,优先级默认是100)
全局修改命令:
router bgp 65001
bgp default local-preference 150<value of LocPrf>
# 修改传递的所有路由的本地优先级为150
如果想要修改某条特定路由的本地优先级
1.抓取特定路由流量
ip prefix-list A permit 11.11.11.0/24
2.定义Route-map 及行为
route-map RA permit 10
match ip address prefix-list A # 关联前缀列表A
set local-preference 300 # 设置本地优先级值300
route-map RA permit 20
3.在邻居关系上调用Route-map
router bgp 65001
neighbor 1.1.1.1 route-map RA out/in # 调用在进出方向上
MED(度量值)
1.可选不可传递属性
2.用于选路:选择如何进入下一个AS
3.MED值越小越优,默认是0。
4.仅在两个相邻的AS之间传递,且不会再传递给其他的AS。
修改命令:
(config)# ip prefix-list MED permit 1.1.1.1/32
(config)# route-map MED permit 10# 给所有流量指定行为
(config-route-map)# match ip address prefix-list MED
(config-route-map)# set metric x # 设置MED的值
(config)# route-map MED permit 20
(config)# router bgp AS-Number
(config-router)# neighbor x.x.x.x route-map MED out/in # 调用Route-map
本地优先级和MED值的选择差别:
当你想要离开一个AS的时候,可以有多台设备路径的选择,这些设备是内部邻居关系,使用本地优先级
当你想要进入到一个新的AS的时候,可以有多台设备路径的选择,这些设备是外部邻居关系,使用MED值
BGP的团体属性
可选可传递属性
用来过滤入站和出站路由的方法
分类:1.标准团体属性 2.扩展团体属性
1.标准团体属性:XX(AS):XX(随意)
用来表示具有相同特征的BGP路由,为了灵活方便的部署路由策略时使用,即抓路由的时候使用。
------(1)公知团体属性:
1.internet:本地可以将路由传递给任何邻居。(相当于本地没有做策略)
2.no-advertise:本地不可以把路由传递给任何邻居。(相当于在路由本地把该路由过滤了)
3.no-export:本地不可以将路由传递给外部邻居,只可以把路由传递给内部邻居。(相当于只在一个AS内传递)
4.local-as:不但不向AS之外传递路由,也不会像AS内的子AS传递路由。(相当于只在本地AS内进行传递)
注意:团体属性在使用时,需要告知路由器,启用团体属性
router bgp AS-Number
neighbor 12.1.1.2 send-community <both/standard/extended/cr>
# 发送团体属性
no-export实验:
(config)# ip prefix-list A permit 8.8.8.8/32
(config)# route-map A permit 10
(config-route-map)# match ip address prefix-list A
(config-route-map)# set community no-advertise / no-export / local-as # 设置团体属性
(config)# route-map A permit 20
(config)# router bgp AS-Number
(config-router)# neighbor x.x.x.x route-map A in/out
-----(2)自定义/私有团体属性:
(1)纯数字,如:123456
(2)aa:nn,如1:1
注:即使配置成aa:nn格式,也会自动转换成纯数字形式,若想查看团体属性时看到aa:nn形式,则需要在全局下输入命令来转换:(config)# ip bgp new-format
私有团体属性的配置:
1.打上团体属性的标记
R1:route-map A permit 10
set community 10
router bgp 100
neighbor 12.1.1.1 route-map A
neighbor 12.1.1.1 send-community
2.使用团体属性列表来匹配团体属性标记
R2:ip community-list 1 permit 10
3.设置策略(更改属性)
route-map B permit 10
match community 1
set local-preference 155
route-map B permit 20
4.调用
R2:router bgp 200
neighbor 3.3.3.3 route-map B out
2.扩展团体属性,一半多用在MPLS VPN里
对等体组 (宏) peer-group
作用:用来简化邻居建立的配置命令。
注意点:
1.只能是配置相同的才可以使用同一个对等体组
2.IBGP邻居和EBGP邻居不可以共享同一个对等体组。
对等体组部署:
1.定义对等体组名称及语句
router bgp AS-Number
neighbor NB peer-group # 定义一个对等体组,名:NB
neighbor NB remote-as 65001
neighbor NB update-source lo0
neighbor NB next-hop-self # 此处还可以有其它命令
2.调用对等体组
neighbor 1.1.1.1 peer-group NB # 调用名为NB的对等体组/将邻居1.1.1.1加入对等体组
在非全互联的IBGP邻居关系中,如何保证路由的传递以及通信?/BGP的防环
1.路由反射器
路由反射器就是通过RR的的路由器来反射路由的手段来实现iBGP邻居之间的路由同步
Route Reflector (RR/路由反射器):负责维护和分发BGP路由信息,以及处理iBGP对等体之间的路由传播。它学习来自客户端的路由信息,并将这些路由信息反射给其他客户端,以及可能的非客户端。
Client (客户端):它是连接到路由反射器的iBGP对等体,是和RR形成iBGP邻居关系的路由器,由RR指定那台设备作为client。这些对等体向路由反射器发送其本地的BGP路由信息,】并从RR接收其他对等体的路由信息。RRC会接受反射来自其他RRC或者是Originator的路由信息。
Non-Client (非客户端):指那些没有连接到RR的iBGP对等体。这些对等体之间通过iBGP会话直接交换路由信息,而不通过路由反射器。它和RR以及其他的Client之间需要建立全互联的iBGP邻居关系。
Originator(路由器始发者):是AS内部路由的始发设备。路由器始发者的router-id——Originator id有助于防止在集群内产生环路,因为即使在不同的对等体之间,相同的路由信息也会具有不同的原始路由器ID。
Cluster(集群):集群是一组与同一个RR建立连接的iBGP对等体集合,包括客户端和非客户端。这些对等体共享相同的AS路径,因此在路由选择过程中,避免了AS路径长度的增加。Cluster list可用于防止集群体间产生环路。
部署路由反射器过程
把当前AS内的路由器划分成一个一个的集群(cluster),每个集群里面都有一个路由反射器RR和若千个client。
Client:只需要和RR之间建立IBGP邻居关系,彼此间不需要建立邻居——减少了IBGP邻居的数量;
RR:会把自己收到的IBGP路由反射给其他符合条件的IBGP邻居——在RR上IBGP的水平分割被关闭;
如果as规模比较大,那可能需要设计多个集群来实现物流同步。
RR如何反射路由?
①从client邻居中收到iBGP路由,它会反射给他所有的client和no client邻居;
②从Non-Client邻居收到的iBGP路由只会反射给他的client,而不会返射给其他的Non-Client;
③在反射路由时RR只看自己的bgp表,只要在bgp表里“>”的best路由他就会反射,无论这条路由有没有加入路由表。
路由在RR反射时会加上两个属性——Originator、Cluster list,这两个属性都是可选可传递属性。
Originator、Cluster list特点:
①只要是反射行为发生了,这两个属性就会被添加在反射的路由上。
②这两个属性不会传递给EBGP邻居也不会传递给任何的联盟路由器,即不会传出AS。
③这两个属性经通过反射的时候是由RR加上的。
④如果在一个AS之内有多个Cluster的话,路由无论经过多少次反射,路由条目的Originator ID始终是不改变的,就是最初通报该路由的那台路由器的router ID。
⑤Cluster list在默认情况下,每一个集群的ID就是RR的router id。
⑥client在把bgp路由发给RR的时候,什么属性都不改,而client在把路由反射给其他的client和non client的时候,除了上面的Originator、Cluster list之外,其他属性也都不改变。
路由反射器的防环机制:
防环分为集群间防环和集群内防环
①集群间防环:当RR收到一条iBGP路由,如果cluster list中包含自己的router ID,那就说明这条路由是由我这个集集群发送出去的,发出去的RR就不会接受,故也不会反射给其他的client和non client邻居,由此避免了整个集群的环路。
②集群内部防环:如果非RR路由器收到一条iBGP地址路由,那它会检查该路由的Originator ID,如果这个属性是由自己的路由ID发送出去的,那他就不接受。
路由反射器在实际环境中如何部署?(三种)
①主备反射器:这种模式就是在一个集群内部部署多个RR所有RR使用相同的cluster ID,且互相建立IBGP邻居关系
②同级路由反射器:部署多个集群,每个集群的RR之间全互联建立起iBGP邻居关系,且互为non-client
③分层路由反射器:也是同样部署多个集群,每个集群的RR之间建立ipgp邻居关系,设计一个网络层次较低的RR,把它配置成网络层次较高的RR的client,成为形成分级的RR。每个路由反射器既可以作为该集群的RR,也可以作为其他集群的client。
问?BGP在做路由反射器的时候,是在一个集群内部署两个RR好还是设计两个集群好?
假设有三台路由器r1在,左r2在上r3在右:
①在一个集群内部署两个RR且互相备份:r1和r2在BGP进程下配置相同的cluster ID,r1、r2都和r3建立iBGP邻居,并且同时都指定为r3为client。r1和r2之间也建立ipgp邻居,但是r1和r2之间互为non-client。如果r3收到一条eBGP路由,他会把这条路由传给r1、r2。r1、r2作为RR又会把这条路由加上自己的两个属性集Originator ID(R3的router id)、cluster list ID(r1、r2的集群id,同一个),因为他俩之间是clien故而他俩收到路由后会互相反射,但他们彼此不会接收,原因:根据路由反射器的集群间防环原则——不会接收来自相同cluster list的路由。届时如果r1和r3之间的链路宕掉,r3就无法直接把路由传给r1,r2接收后反射,但r1又不接收r2的路由,那就导致失去到达r3的外部网络路由,所以这种模式存在单点故障。
②设计成两个集群:r1、r2单独作为一个集群的RR,r3和r1是一个集群,r3和r2也是一个集群(client配置是在RR上指定,∴一个client可以属于多个集群),如果r3收到一条eBGP路由,它会发给r1和r2,r1、r2互为non-client,所以r1收到的同时也会向r2反射(r2同理),但在反射过程中还需要添加cluster list和originator ID,得此,r2其实是收到两份相同的路由(问:r2会优先接受哪份路由?——r3发的纯BGP路由,即优选未经过反射的路由优于反射过后的路由),届时,如果r2和r3之间的链路宕掉,r2也可以获取从r1反射过来的路由,同时r1向r3反射的时候,根据路由反射器的集群内防环原则——不会接收来自相同Originator ID的路由,故而r3会拒收此条路由,避免了内部环路。
路由反射器client客户端配置命令:
作为路由反射器的BGP路由器需要和AS内部所有BGP路由器建立内部邻居关系
建立内部邻居关系:1.指定远端AS号2.修改更新源3.修改下一跳
作为客户端的BGP路由器只需要和路由反射器建立内部邻居关系即可。
router bgp AS-Number
neighbor x.x.x.x route-route-reflector-client # 内部邻居x.x.x.x是RR的客户端
2.联盟
联盟即是将一个AS打散分成若干个小的子AS,每个子AS内部做全互联建立联盟的iBGP邻居,子AS间建立联盟eBGP邻居关系,
原AS号作为每台路由器的联盟id,用来表示它们属于同一个联盟
联盟内部特点:
①路由在联盟eBGP邻居之间传递时,下一跳地址不会改变;
②联盟eBGP对等体通告的路由携带的MED属性local preference属性在整个联盟内部传递时不会被剥离;
③在联盟内将成员的AS号加入AS path中,路由在传出联盟AS时会自动剥离掉子AS号;
④在选路原则中,联盟AS号不计入AS path中,路由在传出联盟AS的时候会自动剥离掉子AS号,即在选路过程中,只要AS path长度相等,在AS号不一致情况下,也可以实现负载均衡;
⑤在联盟中,AS path又加了两个属性——AS confed set、AS confed sequence,默认联盟将成员AS号以AS confed sequence形式出现在AS path;
⑥正常情况下,十三条选录原则的第七条中:eBGP优于iBGP——在联盟中,eBGP和iBGP都会被看做是iBGP,所以不存在这种情况。
联盟配置:
(config)# router bgp AS-Number # 此处写小AS号
(config-router)# bgp confederation identifier AS号 # 声明自己处于哪一个联盟(大AS)中
(config-router)# bgp confederation peers AS-Number # 此处如果要在联盟内部和别的小的AS建立eBGP邻居关系,则需要在此处声明自己和哪个AS相连
路由反射器和联盟的优缺点:
①从兼容性上来看,路由反射器可以直接在现有结构上配置RR且指定client,不需要改变现有的网络拓扑。但联盟要重新规划AS,所以需要改变它的逻辑拓扑。
②在配置层面路由反射器配置更简便,它只需要在RR上配置,但联盟则需要每台设备都要配置,所以联盟的配置更繁琐一些。
③路由反射器适用于中大型网络,而联盟适用于特大型网络。
BGP建立邻居:
内部邻居推荐使用环回口,更稳定。
外部邻居推荐使用直连口,如果使用环回口建立,修改数据传递的跳数,eBGP多跳。
因为eBGP邻居传递数据包的时候最多只能传递一跳。
neighbor 1.1.1.1 ebgp-multihop X(1-255) # eBGP多跳
BGP的路由汇总/聚合
一、自动聚合:(正常不用)
1.公认可选属性
2.只能在本地针对import导入的路由进行自动聚合,针对重分发进BGP进程的外部路由的有类聚合。例如:172.16.1.0/24,172.16.2.0/24,172.16.3.0/24→172.16.0.0/16;
3.默认的明细路由会被自动过滤掉,不需要加任何额外的参数去抑制
BGP下开启summary automatic:自动地生成聚合网络,并且在BGP路由表中只保留聚合后的聚合条目,undo summary automatic用于取消;
二、手动聚合:(手动聚合优先级高于自动聚合)
1.可选可传递属性。
2.六个字节:前两个表示发生聚合的AS,后四个表示发生聚合的router-id。
3.做手动聚合时,默认的明细路由还会发送给邻居,需要格外参数去抑制明细路由。
告诉邻居AS,源路由器聚合了一些路由
(config)# router bgp AS-Number
(config-router)# aggregate-address 聚合后的网络号 聚合后网络号的掩码
# 发送聚合路由,但同时也会发送明细路由
要想只收到聚合路由,不收明细路由,则可以在后面加上参数“summary-only”,意为只在BGP路由表中保留聚合网络的条目,而不保留具体的子网条目,即只发送聚合路由:
(config-router)# aggregate-address 聚合后的网络号 聚合后网络号的掩码 summary-only # 不发送明细路由,明细路由只存在于源路由器上
BGP的路由汇总会将AS-Path属性清空重置,哪台设备做了聚合汇总,哪台设备的AS就是始发地。
如何不清除AS-Path属性:AS-set
aggregate-address 192.168.0.0 255.255.252.0 summary-only AS-set
Detail Suppressed,Suppress Policy,Origin Policy,Attribute Policy,AS Set:
Detail Suppressed(详细信息抑制):
默认情况下,即使做了手动聚合,明细路由依旧会发给邻居,这个参数就用于指定是否在BGP路由表中抑制聚合后的详细信息,只显示聚合的摘要。当启用详细信息抑制时,聚合的路由信息会以摘要形式出现,通常包括聚合的前缀范围。这有助于减少路由表的大小,因为它不会显示所有单独的子网路由,而是显示聚合的路由范围。
Suppress Policy(抑制策略):
用于确定在聚合过程中哪些路由应该被合并或抑制。这涉及选择性地将多个子网路由合并成一个更大的聚合路由,以减少路由表中的条目数量。抑制策略可以基于多种属性,如前缀长度、AS路径、Nexthop等。(先用ACL/前缀列表来抓取需要被抑制的明细路由,再使用Root Policy来调用ACL/前缀列表,然后再使用这个Suppress Policy来调用Root Policy)
Origin Policy(源策略):
它关注在聚合过程中如何处理原始路由的属性。同样也是调用Root Policy,用Root Policy去匹配产生聚合路由的条件,通过定义源策略,管理员可以指定是否应该保留原始路由的某些属性,如AS路径、Nexthop等。这有助于确保在聚合后,传递的聚合路由信息仍然保留了对原始路由的关键属性。
Attribute Policy(属性策略):
Attribute Policy涉及在聚合过程中如何处理其他路由属性。BGP路由的属性可以影响路由选择和传递。属性策略允许管理员定义在聚合过程中哪些属性应该被保留、修改或删除。这可以帮助优化聚合路由的属性,以适应网络的需求和策略。
AS Set(AS集合):
在BGP路由传递过程中,一个聚合路由可能会经过多个AS的传递。AS Set信息记录了传递路由的AS路径信息。通过在聚合路由中包含AS Set信息,可以提供有关路由传递的更多细节,尤其是在多次传递的情况下。
(明细路由被聚合之后,如果它们之前是来自不同的AS。那么聚合路由该怎么处理这些不同的AS信息呢?为了避免产生环路,肯定不能直接删掉,所以就引入了As set属性。在做路由聚合的时候,如果不携带AS SET的话,那聚合路由会直接丢弃所有明细路由的AS信息,BGP会认为这些路由就是在做聚合的路由器上本地产生的,因此它们都会携带本地的AS号。如果加了AS SET的话,所有明细路由的AS将会在一个大括号中无序排列,作为一个整体放在AS path的最右边,如果这些明细路由中有相同的AS,那就会把这些相同的AS单独拿出来,放在大括号的左边。)
综上所述,Detail Suppressed影响路由表的显示,Suppress Policy、Origin Policy和Attribute Policy分别关注路由的合并和属性处理,而AS Set则记录传递路由的AS路径信息。
权重值(Weight):
1.Cisco设备的私有属性。
2.影响某一台设备自己的选路。
权重值只在本地有效,不会传给任何一个邻居,无论是内部邻居还是外部邻居
3.权重值越高越优。
4.默认权重值:思科
如果是本地的路由,为32768
从其它路由器学习到的路由,为0
修改权重值:当把路由传递给邻居时这个值无论怎么改都会恢复到默认状态,一般不修改
router bgp 65001
neighbor 2.2.2.2 weight 5 # 修改权重值
修改权重值
(config)# ip prefix-list 8 permit 8.8.8.8/32
(config)# route-map 8 permit 10
(config-route-map)# match ip address prefix-list 8
(config-route-map)# set weight x # 设置权重值
(config)# route-map 8 permit 20
(config)# router bgp AS-Number
(config-router)# neighbor x.x.x.x route-map in # 权重值只有在in方向上调用才会生效。
BGP的十三条选路原则
1.权重值(Weight):数值越大越好:本地有效
外部学习来的路由:0
自己内部的路由:32768
2.本地优先级(LocPrf):数值越大越好:一个AS内
默认:100
3.判断是不是本地路由
看本地有没有下一跳/Next-hop是0.0.0.0的路由,本地>eBGP路由>iBGP路由
生成本地路由三种方式:
聚合路由(手动>自动)>network直接本地宣告的路由>重分发引入的路由;
4.路径属性(AS-Path):AS号越少越优先
5.起源属性(Origin):i > e > ? 即 ibgp>重分发
6.MED值:越小越优:两个AS间,默认为0
7.eBGP邻居发来的路由优于iBGP邻居发来的路由
eBGP路由管理距离:20
iBGP路由管理距离:200
8.BFP路由的下一跳地址的IGP中度量值,较小的越优先
9.如果以上都一样,则可以手配负载均衡(BGP默认情况下不开启)
10.如果都是从外部邻居学到的路由,选择最老/最早学习的。
11.router-id:数值越小越好
12.如果始发路由器ID相同,选择Cluster-list长度较短 的那个簇列表
13.邻居物理IP地址:越小越好
BGP的路由过滤
1.使用ACL+Route-map
access-list 1 deny 1.1.1.1 0.0.0.255
access 1 permit any
route-map A permit 10
match ip address 1
router bgp 200
neighbor 2.2.2.2 route-map A in
因为ACL不能在邻居关系下不能直接调用,所以需要借助Route-map来使能策略
2.使用Prefix-list
ip prefix-list AA deny 192.168.0.0/16 le 24
ip prefix-list AA permit 0.0.0.0/0 le 32
router bgp 200
neighbor 2.2.2.2 prefix-list AA in
Prefix-List可以直接在邻居关系下调用,故不需要Route-map来使能策略。
3.AS-Path属性过滤(扩展)
正则表达式
.:可以匹配任意单个字符
*:将这个表达式匹配0次或多次
^:匹配字符串的开始位置
$:匹配字符串的结束位置
_:匹配逗号、大括号(左、右)、小括号(左、右)、字符串的开始位置、字符串的结束位置空格
写字板:
(config)#banner motd !(特殊符号) # 使用什么特殊符号进入,就使用什么符号退出
ip as-path access-list 1 deny ^100$ # 路径属性中,只有100这个元素的就匹配上做对应的行为(拒绝)
ip as-path access-list 1 permit .* # 放行所有
router bgp 200
neighbor 2.2.2.2 filter-list 1 in
BGP的路由传递
BGP路由传递为两种方式:本地宣告和重分发,其中重分发较多。
1.本地宣告
(config)# router bgp AS-Number
(config-router)#network 网络号 mask 掩码
需要注意的是,BGP本地宣告中的网络号和掩码必须和现有的IP地址完全一致,如需要宣告1.1.1.1/32,则可以键入“network 1.1.1.1 mask 255.255.255.255”
2.重分发
(config)# router bgp AS-Number
(config-router)# redistribute 路由来源(static/rip/eigrp x /ospf y)
# BGP协议无Metric值概念,B GP内部选路依靠BGP特有的选路原则。
查看BGP路由表:
#show ip route bgp
查看BGP数据表:
#show ip bgp
通过BGP传递来的路由会先被放进BGP的数据表中,由BGP进行判断,如果判断该路由为优选路由,再将其放入BGP路由表中。
eBGP和iBGP在传递路由时的区别:
eBGP在传递路由时,下一跳属性会自动进行改变。
iBGP在传递路由时,下一跳属性是不会改变的。
所以,为了保证iBGP路由的正常传递,在同时拥有eBGP和iBGP邻居的路由器上在和iBGP邻居建立时需要加“next-hop-self”参数来调整下一跳。
(config)#router bgp 200
(config-router)# neighbor 4.4.4.4 next-hop-self
BGP路由黑洞解决方法:
1.IBGP全互联
内部邻居每两两之间建立iBGP邻居关系
(config)#router bgp 200
(config-router)# neighbor 对端环回口地址 remot 200
(config-router)# neighbor 对端环回口地址update-source lo0
(config-router)# neighbor 对端环回口地址next-hop-self
2.物理链路全互联
3.MPLS(多协议标签交换)
(config)# ip cef # 开启思科快速转发,默认开启。
(config)# mpls label protocol ldp # 指定标签分发协议为LDP
(config)# mpls ldp router-id lo0 force # 强制使用lo0地址建立LDP邻居
(config)# int eX/y
(config-if)# mpls ip
4.开启BGP同步(不推荐)
(config)# router bgp 300
(config-router)# synchronization # 开启BGP同步,默认关闭。
BGP的防环机制
防环:
AS之间:
利用路由条目中携带的AS-path属性:当一台路由器收到一条路由的时候会先检查该路由所经过的AS,即ASpath属性,如果包含自己所在的AS,证明这个路由已经转完一圈回来了,避免环路会直接丢弃,如果不包含,就继续转发或匹配其他策略或做过滤等等;
1.allowas-in :允许带有AS-Path属性和自己本地AS号相同的路由进入
部署位置:接收路由的设备上
(config)# router bgp 100
(config-router)# neighbor 对端物理接口地址/环回口地址 allowas-in
2.as-override :AS号覆盖,将不同于自己AS号的值用本地AS号进行覆盖
部署位置:发送路由的设备上
(config)# router bgp 100
(config-router)# neighbor 对端物理接口地址/环回口地址 as-override
AS之内:
利用iBGP的水平分割——一条路由在一个AS内从始发路由开始,只能传一跳。再利用路由发射器和联盟(联邦)与其他邻居同步路由:
(还有个全部全互联方法,可行但不合理,连线和tcp建立邻居的成本太太太高,不会有人做的,n台设备就需要n*(n-1)/2个链接)
1.iBGP邻居全互联:两两内部邻居建立邻居关系
(config)# router bgp 200
(config-router)# neighbor 对端环回口地址 remot-as 200
(config-router)# neighbor 对端环回口地址 update-source lo0
(config-router)# neighbor 对端环回口地址 next-hop-self
2.路由反射器的配置client:
(config)# router bgp AS-Number
(config-router)# neighbor 2.2.2.2 route-reflector-client
3.联盟:
(config)# router bgp AS-Number # 此处写小AS号
(config-router)# bgp confederation identifier AS号 # 声明自己处于哪一个联盟(大AS)中
(config-router)# bgp confederation peers AS-Number # 此处如果要在联盟内部和别的小的AS建立eBGP邻居关系,则需要在此处声明自己和哪个AS相连
后门链路
当路由器既能够从IGP中学习路由,也可以从eBGP中学习路由
如果想要优选IGP的路由,则需要使用后门链路。
后门链路的部署:
router bgp 65001
network 1.1.1.0 mask 255.255.255.0 backdoor
下放默认
前提是下发默认路由的设备本地路由表中有默认路由
1.重分发加下发
(config)# router bgp 100
(config-router)# redistribute static
(config-router)# default-information originate
2.邻居上强制下发
(config)# router bgp 100
(config-router)# neighbor 1.1.1.1 default-originate