偶尔偷懒,经常偶尔
BGP
- 概述
- 前言
- BGP&BGP4+ Basic
- 为了满足大规模路由的需求,需要通过BGP(Border Gateway Protocol)在AS之间传递数量庞大的IPv4、v6路由,并且通过各种策略进行路径的选取,控制等;此外,为了满足MPLS VPN的业务,在AS内及AS间需要MP-BGP。针对上述需求,本章节将介绍BGP原理以及BGP对IPv6的扩展特性—BGP4+。
- BGP Advance & Internet
- BGP提供各种高级特性与技术供使用
- 合理运用各种特性与技术可提升网络性能
- BGP网络可能存在的问题
- 目标
- BGP&BGP4+ Basic
- 理解BGP基本原理
- 理解BGP4+基本原理
- 掌握BGP基本配置命令
- 熟悉BGP基本故障排查思路
- BGP Advance & Internet
- 熟悉BGP在大规模路由场景下的常用工具及技术
- 了解BGP的各种扩展特性和增强特性
- 理解Internet设计的概念
- 掌握BGP属性配置和故障排查
- BGP Basic
- BGP原理
- BGP概述
- 外部网关协议
- BGP是一种外部网关协议(EGP)。
- 与OSPF、RIP等内部网关协议(IGP)不同。
- 其着眼点不在于自动发现网络拓扑,而在于在AS之间选择最佳路由和控制路由的传播。
- 使用TCP作为其传输层协议
- BGP使用TCP作为其传输层协议(监听端口号为179)。
- 提高了协议的可靠性。
- 且不需要专门的机制来确保连接的可控性。
- BGP进行域间的路由选择,对协议的稳定性要求非常高,用TCP协议的高可靠性来保证BGP协议的稳定性。
- BGP的对等体之间必须在逻辑上连通,并进行TCP连接。目的端口号为179,本地端口号任意。
- 路由更新时,BGP只发送更新的路由,大大减少了BGP传播路由所占用的带宽,适用于在Internet上传播大量的路由信息。
- 支持CIDR
- 增量更新
- 路径矢量路由协议
- 无环路
- BGP从设计上避免了环路的发生。
- AS之间:BGP通过携带AS路径信息来标记途经的AS,带有本地AS号的路由将被丢弃,从而避免了域间产生环路。
- AS内部:BGP在AS内学到的路由不再通告给AS内的BGP邻居,避免了AS内产生环路。
- 路由策略丰富
- BGP提供了丰富的路由策略,能够对路由实现灵活的过滤和选择。
- 可防止路由振荡
- BGP提供了防止路由振荡的机制,有效提高了Internet网络的稳定性。
- 易于扩展
- BGP易于扩展,能够适应网络新的发展。
- 主要是通过TLV进行扩展。
- BGP基本概念
- BGP是一种用于自治系统(Autonomous System)之间的动态路由协议。
- 早期发布的三个版本分别是BGP-1(RFC1105)、BGP-2(RFC1163)和BGP-3(RFC1267),主要用于交换AS之间的可达路由信息,构建AS域间的传播路径,防止路由环路的产生,并在AS级别应用一些路由策略。
- 当前使用的版本是BGP-4(RFC4271)。
- BGP作为事实上的Internet外部路由协议标准,被广泛应用于ISP之间。
- BGP工作原理
- 报文类型
- 报文类型
- Open报文
- 协商BGP参数
- Open消息,是TCP连接建立后发送的第一个消息
- 用于建立BGP对等体之间的连接关系。
- 对等体在接收到Open消息并协商成功后,将发送Keepalive消息确认并保持连接的有效性。
- 确认后,对等体间可以进行Update、Notification、Keepalive和Route-Refresh消息的交换。
- Update报文
- 交换路由信息
- Update消息:用于在对等体之间交换路由信息。一条Update消息可以发布多条属性相同的可达路由信息,也可以撤销多条不可达路由信息。
- 一条Update消息可以发布多条具有相同路由属性的可达路由,这些路由可共享一组路由属性。所有包含在一个给定的Update消息里的路由属性适用于该Update消息中的NLRI(NetworkLayer Reachability Information)字段里的所有目的地(用IP前缀表示)。
- 一条Update消息可以撤销多条不可达路由。每一个路由通过目的地(用IP前缀表示),清楚的定义了BGPSpeaker之间先前通告过的路由。
- 一条Update消息可以只用于撤销路由,这样就不需要包括路径属性或者NLRI。相反,也可以只用于通告可达路由,就不需要携带撤销路由信息了。
- Keepalive报文
- 保持邻居关系
- Keepalive消息:BGP会周期性的向对等体发出Keepalive消息,用来保持连接的有效性。
- Notification报文
- 差错通知
- Notification消息:当BGP检测到错误状态时,就向对等体发出Notification消息,之后BGP连接会立即中断
- Route-Refresh报文
- 用于在改变路由策略后请求对等体重新发送路由信息
- Route-Refresh消息:通过OPEN消息告知BGP peer本地支持路由刷新能力(Route-Refresh capability)。
- 在所有BGP路由器使能Route-Refresh能力的情况下,如果BGP的入口路由策略发生了变化,本地BGP路由器会向对等体发布Route-Refresh消息,收到此消息的对等体会将其路由信息重新发给本地BGP路由器。
- 这样,可以在不中断BGP连接的情况下,对BGP路由表进行动态刷新,并应用新的路由策略
- 报文应用
- BGP使用TCP建立连接
- 本地监听端口为179。
- 和TCP连接建立相同,BGP连接的建立也要经过一系列的对话和握手。
- TCP通过握手协商通告其端口等参数。
- BGP的握手协商的参数有:BGP版本、BGP连接保持时间、本地的路由器标识(RouterID)、授权信息等。
- 这些信息都在Open消息中携带。
- BGP连接建立后
- 如果有路由需要发送则发送Update消息通告对端。
- Update消息发布路由时,还要携带此路由的路由属性,用以帮助对端BGP协议选择最优路由。
- 在本地BGP路由变化时,要通过Update消息来通知BGP对等体。
- BGP连接维护
- 经过一段时间的路由信息交换后,本地BGP和对端BGP都无新路由通告,趋于稳定状态。
- 此时要定时发送KEEPALIVE消息以保持BGP连接的有效性。
- 对于本地BGP,如果在保持时间内,未收到任何对端发来的BGP消息,就认为此BGP连接已经中断,将断开此BGP连接,并删除所有从该对等体学来的BGP路由。
- 当本地BGP在运行中发现错误时(如对端BGP版本本地不支持、本地BGP收到了结构非法的Update消息等),要发送Notification消息通告BGP对等体。
- 本地BGP退出BGP连接时,也需发送Notification报文。
- BGP报头
- Marker(标记):16字节,固定为1。
- Length(长度):两字节无符号整数。指定了消息的全长,包括头部。
- Type(类型):1字节,指示报文类型:
- Open
- Update
- Keepalive
- Notification
- Route-Refresh
- 报文结构
- Open报文结构
- Version
- My Autonomous System
- 本地AS编号。
- 通过比较两端的AS编号可以确定是EBGP连接还是IBGP连接。
- HoldTime
- 在建立对等体关系时两端要协商Holdtime,并保持一致。
- 如果两端所配置的Holdtime时间不同,则BGP会选择较小的值作为协商的结果。
- 如果在这个时间内未收到对端发来的Keepalive消息,则认为BGP连接中断。
- 如果保持时间为0,则标识不发送Keepalive报文。
- BGP Identifier
- BGP路由器的RouterID
- 以IP地址的形式表示
- 用来识别BGP路由器。
- Opt Parm Len(Optional Parameters Length)
- Optional Parameters
- 是一个可选参数用于BGP验证或多协议扩展(Multiprotocol Extensions)等功能。
- 每一个参数为一个(Parameter Type-Parameter Length-Parameter Value)三元组。
- Update报文结构
- Withdrawn Routes Length
- (2字节无符号整数)
- 不可达路由长度,表示Withdrawn Routes字段的数据长度。
- 如果Withdrawn Routes Length字段数值为0,则表示WithdrawnRoutes字段没有任何数据,在UPDATE消息中不会被显示。
- Withdrawn Routes
- (变长)
- 撤销路由。
- 该字段包括一系列的IP地址前缀信息,以<length,prefix>的格式来表示,比如<19,198.18.160.0>表示一个198.18.160.0255.255.224.0的网络。
- Path Attribute Length
- (2字节无符号整数)
- 路由属性长度,表示Path Attribute字段的数据长度。
- 如果Path Attribute Length数值为0,则表示Path Attribute字段没有任何数据,在UPDATE消息中不会被显示。
- Network Layer Reachability Information
- (变长)
- 网络可达信息。
- 包括一系列的IP地址前缀。
- 格式与撤消路由字段一样<length,prefix>。
- Keepalive报文结构
- KeepAlive报文的组成只包括一个BGP数据报头。
- 缺省情况下
- 发送KeepAlive的时间间隔为 60秒
- HoldTime是180秒。
- 每次从邻居处接收到KeepAlive报文将重置HoldTime定时器,如果HoldTime定时器超时,就认为对等体Down掉。
- Notification报文结构
- Errorcode:错误码。
- 1字节长的字段。
- 每个不同的错误都使用唯一的代码表示,而每一个错误码都可以拥有一个或多个错误子码,但如果某些错误码并不存在错误子码的话,则该错误子码字段以全0表示。
- Errsubcode:错误子码。
- 状态机
- BGP有限状态机共有六种状态,分别是Idle、Connect、Active、OpenSent、OpenConfirm和Established。
- Idle
- Idle状态是BGP初始状态。
- 在Idle状态下,BGP拒绝邻居发送的连接请求。
- 只有在收到本设备的Start事件后,BGP才开始尝试和其它BGP对等体进行TCP连接,并转至Connect状态。
- Start事件是由一个操作者配置一个BGP过程,或者重置一个已经存在的过程或者路由器软件重置BGP过程引起的。
- 任何状态中收到Notification报文或TCP拆除链路通知等Error事件后,BGP都会转至Idle状态。
- Connect
- 在Connect状态下,BGP启动连接重传定时器(ConnectRetry,缺省为32秒),等待TCP完成连接。
- 此阶段主动发起TCP连接;
- 如果TCP连接成功,那么BGP向对等体发送Open报文,并转至OpenSent状态;
- 如果TCP连接失败,那么BGP转至Active状态;
- 如果连接重传定时器超时,BGP仍没有收到BGP对等体的响应,那么BGP继续尝试和其它BGP对等体进行TCP连接,停留在Connect状态。
- 如果发生其他事件(由系统或者操作人员启动的),则退回到Idle状态。
- Active
- 在Active状态下,BGP总是在试图建立TCP连接。
- 此阶段等待对方发起TCP连接;
- 如果TCP连接成功,那么BGP向对等体发送Open报文,关闭连接重传定时器,并转至OpenSent状态;
- 如果TCP连接失败,那么BGP停留在Active状态;
- 如果连接重传定时器超时,BGP仍没有收到BGP对等体的响应,那么BGP转至Connect状态。
- OpenSent
- 在OpenSent状态下,BGP等待对等体的Open报文,并对收到的Open报文中的AS号、版本号、认证码等进行检查。
- 如果收到的Open报文正确,那么BGP发送Keepalive报文,并转至OpenConfirm状态;
- 如果发现收到的Open报文有错误,那么BGP发送Notification报文给对等体,并转至Idle状态。
- OpenConfirm
- 在OpenConfirm状态下,BGP等待Keepalive或Notification报文。
- 如果收到Keepalive报文,则转至Established状态。
- 如果收到Notification报文,则转至Idle状态。
- Established
- 在Established状态下,BGP可以和对等体交换Update、Keepalive、Route-refresh报文和Notification报文。
- 如果收到正确的Update或Keepalive报文,那么BGP就认为对端处于正常运行状态,将保持BGP连接。
- 如果收到错误的Update或Keepalive报文,那么BGP发送Notification报文通知对端,并转至Idle状态。
- Route-refresh报文不会改变BGP状态。
- 如果收到Notification报文,那么BGP转至Idle状态。
- 如果收到TCP连接断开消息,那么BGP断开连接,转至Idle状态。
- 数据库
- IP路由表(IP-RIB)
- BGP路由表(Loc-RIB)
- BGP路由信息库,包括本地BGP Speaker选择的路由信息
- 邻居表
- Adj-RIB-In
- 对等体宣告给本地BGP Speaker的未处理的路由信息库
- Adj-RIB-Out
- 本地BGP Speaker宣告给指定对等体的路由信息库
- BGP路由信息处理
- 当从对等体接收到更新数据包时,路由器会把这些更新数据包存储到路由选择信息库(RoutingInformation Base, RIB)中,并指明是来自哪个对等体的(Adj-RIB-In)。
- 这些更新数据包被输入策略引擎过滤后,路由器将会执行路径选择算法,来为每一条前缀确定最佳路径。
- 得出的最佳路径被存储到本地BGPRIB (Loc-RIB)中,然后被提交给本地IP路由选择表(IP-RIB),以用作安装考虑。
- 除了从对等体接收来的最佳路径外,Loc-RIB也会包含当前路由器注入的(被称为本地发起的路由),并被选择为最佳路径的BGP前缀。
- Loc-RIB中的内容在被通告给其他对等体之前,必须通过输出策略引擎。
- 只有那些成功通过输出策略引擎的路由,才会被安装到输出RIB(Adj-RIB-Out)中。
- 对等体之间的交互原则
- 从IBGP对等体获得的路由,只发布给EBGP对等体
- 从IBGP对等体获得的BGP路由,BGP设备只发布给它的EBGP对等体
- 从EBGP对等体获得的路由,发布给所有EBGP和IBGP对等体
- 从EBGP对等体获得的BGP路由,BGP设备发布给它所有EBGP和IBGP对等体
- 只将BGP的最优路由发布给对等体
- 当存在多条到达同一目的地址的有效路由时,BGP设备只将最优路由发布给对等体
- 只发送更新的BGP路由
- IBGP与IGP的同步
- 从IBGP邻居学到的路由,只有当IGP中也存在相同的路由时才会宣告给EBGP对等体
- IBGP与IGP同步
- 同步是指IBGP和IGP之间的同步,其目的是避免误导外部AS的路由器。
- 拓扑说明
- R4通过BGP学习到R1宣告的10.0.0.0/24网络。
- R4在将该网络通告给R5之前,会首先检查自己的IGP路由表是否已经存在10.0.0.0/24网络。
- 如果R4本地IGP路由表项存在10.0.0.0/24网络,则将该网络通告给R5。
- 如果R4本地IGP路由表项不存在10.0.0.0/24网络,则不能将该网络通告给R5
- 在IBGP路由加入路由表并发布给EBGP对等体之前,会先检查IGP路由表。只有在IGP也知道这条IBGP路由时,它才会被加入到路由表,并发布给EBGP对等体。
- 注意事项
- VRP平台缺省情况下BGP与IGP是取消同步机制的,并不可改变。
- 但取消同步是有条件的,在以下两种情况下可以取消同步:
- 本AS不是过渡AS。
- 本AS内所有路由器建立IBGP全连接。
- BGP属性特点
- BGP属性特点—概述
- lBGP路由属性是一套参数,它是对路由的进一步的描述,使得BGP能够对路由进行过滤和选择。
- 公认必遵
- 所有BGP路由器都必须识别,且必须存在于Update消息中
- 如果缺少这种属性,路由信息就会出错
- Origin为公认必遵属性
- AS_Path为公认必遵属性
- Next_Hop为公认必遵属性
- 公认任意
- 所有BGP路由器都可以识别,但不要求必须存在于Update消息中
- 即就算缺少这类属性,路由信息也不会出错
- Local_Pref为公认任意属性
- 可选过渡
- 在BGP对等体之间具有可传递性的属性
- BGP路由器可以不支持此属性,但它仍然会接收这类属性,并传递给其他对等体
- community为可选过渡属性
- 可选非过渡
- 如果BGP路由器不支持此属性,则相应的这类属性会被忽略,且不会传递给其他对等体
- MED为可选非过渡属性
- Originator_ID为可选非过渡属性
- Cluster_List为可选非过渡属性
- Origin属性
- Origin属性用来定义路径信息的来源
- 该属性为公认必遵
- IGP
- 具有最高的优先级
- 通过路由始发AS的IGP得到的路由信息,如通过network命令注入BGP路由表的路由
- 其Origin属性为IGP,标识符为“i”
- EGP
- 优先级次之
- 通过EGP得到的路由信息
- 其Origin属性为EGP,标识符为“e”
- Incomplete
- 优先级最低
- 通过其他方式学习到的路由信息,如BGP通过import-route命令引入的路由
- 其Origin属性为Incomplete,标识符为“?”
- PrefVal(协议首选值)
- 协议首选值(PrefVal)是华为设备的特有属性
- 该属性仅在本地有效,不会传递给BGP邻居
- 因为协议首选值是人为主动设置的,代表本地用户的意愿
- 在BGP进行选路时会优先比较协议首选值,默认情况下均为0,该值越大越优先。
- AS_Path属性
- AS_Path属性按矢量顺序记录某条路由从本地到目的地址所要经过的所有AS编号。
- 该属性为公认必遵。
- AS_Path属性可以当做BGP选路的参考属性之一,AS_Path长度越短越优先。
- 此外,当BGP路由器从EBGP对等体接收路由时,如果发现AS_Path列表中有本AS号,则不接收该路由,从而避免了AS间的路由环路。
- 当BGPSpeaker本地通告一条路由时:
- 当BGPSpeaker将这条路由通告到其他AS时,便会将本地AS号添加在AS_Path列表中,并通过Update消息通告给邻居路由器。
- 当BGPSpeaker将这条路由通告到本地AS时,便会在Update消息中创建一个空的AS_Path列表。
- 当BGPSpeaker传播从其他BGPSpeaker的Update消息中学习到的路由时:
- 当BGPSpeaker将这条路由通告到其他AS时,便会把本地AS编号添加在AS_Path列表的最前面(最左面)。收到此路由的BGP路由器根据AS_Path属性就可以知道去目的地址所要经过的AS。离本地AS最近的相邻AS号排在前面,其他AS号按顺序依次排列。
- 当BGPSpeaker将这条路由通告到本地AS时,不会改变这条路由相关的AS_Path属性。
- Next_Hop属性
- Next_Hop属性记录了路由的下一跳信息
- AS_Path属性按矢量顺序记录某条路由从本地到目的地址所要经过的所有AS编号,可作为选路参考值
- Next_Hop属性记录了路由的下一跳信息,已选路完成
- 该属性为公认必遵
- BGP的下一跳属性和IGP的有所不同,不一定就是邻居设备的IP地址。
- 通常情况下,Next_Hop属性遵循下面的规则
- BGP Speaker将本地始发路由发布给IBGP对等体时,会把该路由信息的下一跳属性设置为本地与对端建立BGP邻居关系的接口地址。
- BGP Speaker在向EBGP对等体发布某条路由时,会把该路由信息的下一跳属性设置为本地与对端建立BGP邻居关系的接口地址。
- BGP Speaker在向IBGP对等体发布从EBGP对等体学来的路由时,并不改变该路由信息的下一跳属性。
- Local_Pref属性
- Local_Pref属性表明BGP路由器的优先级,该值越大越优先。
- 该属性仅在IBGP对等体之间有效,不通告给其他AS。
- 它表明路由器的BGP优先级。
- 当BGP路由器通过不同的IBGP对等体得到目的地址相同但下一跳不同的多条路由时,将优先选择Local_Pref属性值较高的路由。
- 缺省情况下该值为100。
- 该属性为公认任意
- MED属性
- MED属性类似于IGP的代价值,用于AS间的路由选路。
- 该属性为可选非过渡
- 当一个运行BGP的设备通过不同的EBGP对等体(EBGP对等体需属于同一AS)得到目的地址相同但下一跳不同的多条路由时,在其它条件相同的情况下,将优先选择MED值较小者作为最佳路由。
- MED属性仅在相邻两个AS之间传递,收到此属性的AS一方不会再将其通告给任何其他第三方AS。
- MED属性可以手动配置,如果路由没有配置MED属性,BGP选路时将该路由的MED值按缺省值0来处理。
- MED值缺省值0
- BGP路由计算-选路规则
- 当到达同一目的地存在多条路由时,BGP依照如下策略顺序进行路由选择
- 如果此路由的下一跳不可达,忽略此路由
- 优选协议首选值(PrefVal)最高的路由
- 协议首选值(PrefVal)是华为设备的特有属性
- 该属性仅在本地有效
- 优选本地优先级(Local_Pref)最高的路由
- 如果路由没有本地优先级,BGP选路时将该路由按缺省的本地优先级100来处理。
- 通过执行default local-preference命令可以修改BGP路由的缺省本地优先级。
- 优选手动聚合路由、自动聚合路由、network命令引入的路由、import-route命令引入的路由、从对等体学习的路由
- 本地生成的路由包括通过network命令或import-route命令引入的路由、手动聚合路由和自动聚合路由。
- 优选聚合路由(聚合路由优先级高于非聚合路由)。
- 通过aggregate命令生成的手动聚合路由的优先级高于通过summary automatic命令生成的自动聚合路由。
- 通过network命令引入的路由的优先级高于通过import-route命令引入的路由。
- 优选AS路径(AS_Path)最短的路由
- AS_Path的长度不包括AS_CONFED_SEQUENCE和AS_CONFED_SET。
- AS_SET的长度为1,无论AS_SET中包括多少AS号。
- 执行bestrouteas-path-ignore命令后,BGP选路时,忽略AS_Path的比较。
- 比较Origin属性,依次优选Origin类型为IGP、EGP、Incomplete的路由
- 优选MED值最低的路由
- BGP只比较来自同一个AS(不包括联盟的子AS)的路由的MED值。
- 即,只有两条路由的AS_SEQUENCE(不包括AS_CONFED_SEQUENCE)属性的第一个AS号相同时,BGP才会比较二者的MED值。
- 如果路由没有MED属性,BGP选路时将该路由的MED值按缺省值0来处理。
- 执行bestroutemed-none-as-maximum命令后,BGP选路时将该路由的MED值按最大值4294967295来处理。
- 执行compare-different-as-med命令后,BGP将强制比较来自不同自治系统中的邻居的路由的MED值。
- 除非能够确认不同的自治系统采用了同样的IGP和路由选择方式,否则不要使用compare-different-as-med命令(可能产生环路)。
- 执行bestroutemed-confederation命令后,只有当AS_Path中不包含外部AS号(不属于联盟的子AS),且AS_CONFED_SEQUENCE的第一个AS号相同时,才能比较MED值的大小。
- 执行deterministic-med命令后,将消除路由接收顺序对选路结果的影响。
- 优选从EBGP邻居学来的路由(EBGP路由优先级高于IBGP路由)
- 优选到下一跳IGP Metric较小的路由
- 优选Cluster_List最短的路由
- 优选Router ID最小的路由器发布的路由
- 比较对等体的IP Address,优选从具有较小IP Address的对等体学来的路由
- 负载分担
- 当到达同一目的地址存在多条等价路由时,可以通过BGP等价负载分担实现均衡流量的目的。
- 形成BGP等价负载分担的条件是:BGP选路规则中“到下一跳的IGPmetric”这条规则之前所有需要比较的属性完全相同。
- BGP 4+原理
- BGP 4 +概述
- BGP4 的扩展版本
- 扩展能力自协商机制
- 支持传递多种地址族地址(IPv6、VPNv4、VPNv6等)
- 新增属性用以支持多地址族地址传递
- BGP 4+ 扩展能力协商
- OPEN Message 中进行扩展能力的协商
- 当两台BGP对等体之间需要传输IPv6地址族的地址时,需要在OPEN Message 中进行扩展能力的协商
- OPEN消息中的Capabilities Advertisement字段用于扩展能力的协商
- BGP 4 +扩展属性
- BGP 4 +扩展属性—MP_REACH_NLRI
- lMP_REACH_NLRI属性(Type Code=14)
- BGP4+使用此属性来通告IPv6 路由
- 当传递IPv6路由时
- AFI=2 ,SAFI=1(Unicast) ,SAFI=2(Multicast)
- 下一跳地址长度字段决定了下一跳地址的个数
- 长度字段=16,下一跳地址为下一跳路由器的全球单播地址
- 长度字段=32,下一跳地址为下一跳路由器的全球单播地址和链路本地地址
- 保留字段,恒等于0
- NLRI字段,可变长字段,表示路由前缀和掩码信息。
- 拓扑及报文
- 地址族信息(AddressFamily Information)域
- 由2字节的地址族标识AFI(AddressFamily Identifier)和1字节的子地址族标识SAFI(SubsequentAddress Family Identifier)组成。
- 下一跳长度(Lengthof Next HopNetwork Address)域
- 1字节长度
- 表示下一跳地址的长度
- 通常情况下为16
- 下一跳地址(NetworkAddress of Next Hop)域
- 保留字段(Reserved)域
- 网络层可达信息(Network Layer ReachabilityInformation)域
- 表示含有匹配相同属性的路由信息。
- 当此字段为0时,表示为缺省路由。
- BGP 4 +扩展属性—MP_UNREACH_NLRI
- MP_UNREACH_NLRI属性(Type Code= 15 )
- BGP 4+用该属性撤销路由
- 当撤销IPv6路由时
- AFI=2 ,SAFI=1(Unicast) ,SAFI=2(Multicast)
- Withdrawn Routes 字段代表需要撤回的路由前缀及掩码。
- 地址族信息(AddressFamily Information)域
- 由2字节的地址族标识AFI(AddressFamily Identifier)和1字节的子地址族标识SAFI(SubsequentAddress Family Identifier)组成。
- 撤销路由(Withdrawn Routes)域
- 表示撤销的路由条目。
- 格式为<掩码长度,路由前缀> 。
- 当此掩码长度为0时,表示为缺省路由。
- BGP &BGP 4+基本配置
- 各AS之间的直连边界路由之间建立EBGP邻居关系
- AS内建立稳定的IBGP邻居关系
- 所有的IPv4和IPv6网络之间能够互通
- AS内部通过IGP实现互通
- 命令含义
- peer as-number命令用来配置指定对等体(组)的对端AS号。
- peer connect-interface命令用来指定发送BGP报文的源接口,并可指定发起连接时使用的源地址。
- peer next-hop-local命令用来设置向IBGP对等体(组)通告路由时,把下一跳属性设为自身的IP地址。
- 具体用法
- 参数意义
- peer ipv4-address as-number as-number
- ip-address:对等体的IPv4地址。
- as-number:对等体的对端AS号。
- peer ipv4-address connect-interface interface-type interface-number [ ipv4-source-address ]
- ip-address:对等体的IPv4地址。
- interface-type interface-number:接口类型和接口号。
- ipv4-source-address:建立连接时的IPv4源地址。
- peer ipv4-address next-hop-local
- 注意事项
- 在使用Loopback接口作为BGP报文的源接口时,必须注意以下事项:
- 确认BGP对等体的Loopback接口的地址是可达的。
- 如果是EBGP连接,还要配置peerebgp-max-hop命令,允许EBGP通过非直连方式建立邻居关系。
- peer next-hop-local和peernext-hop-invariable是两条互斥命令。
- Display bgp peer中的PrefRcv表示本端从对等体上收到路由前缀的数目。
- IPv6的配置与IPv4基本一致,但是在指定完peer地址和as-number之后,需手工进入ipv6-familyunicast视图,执行peer peer-ip-address enable 命令来激活。
- 地址分配规则
- Rx和Ry(X<Y)直连接口的IPv4网段为:10.0.xy.0/24. Rx相应接口的地址为10.0.xy.x ,Ry为10.0.xy.y
- Rx和Ry(X<Y)直连接口的IPv6网段为:2000::xy00/120. Rx相应接口的地址为2000::xy0x ,Ry为2000::xy0y
- 各路由器的LoopBack 0 接口的地址已给出,各LoopBack 0接口的IPv6地址为2000::z(z为相应路由器的编号)
- 提示
- AS内可运行OSPF,ISIS等协议来实现互通
- 稳定的IBGP关系可通过loopback接口来建立
- EBGP邻居关系直接用物理接口建立即可
- 配置BGP– PrefVal属性
- 从R1去往AS400中的10.0.4.0/24网段走路径R1-R2-R4-R6-R7
- 从R1去往AS400中的2000:0:0:4::/64网段走路径R1-R3-R5-R6-R7
- 只能对R1产生效果,不影响网络中的其他设备
- 此拓扑与“基础配置”一致,已建立了BGP邻居关系
- 命令含义
- peer route-policy命令用来对来自对等体(组)的路由或向对等体(组)发布的路由指定Route-Policy,对接收或发布的路由进行控制。
- apply preferred-value preferred-value 命令用来在路由策略中配置改变BGP路由的首选值的动作。
- 具体用法
- peer route-policy命令为BGP视图命令
- 参数意义
- peer ipv4-address route-policy route-policy-name { import | export }
- ipv4-address:对等体的IPv4地址。
- route-policy-name:Route-Policy的名称。
- import:对从对等体(组)来的路由应用Route-Policy。
- export:对向对等体(组)发布的路由应用Route-Policy。
- preferred-value:指定BGP的首选值。在选择路由时,协议优选首选值最高的BGP路由。整数形式,取值范围0~65535,默认为0
- 实验现象
- 我们使用display bgp routing-table和display bgp ipv6 routing-table命令查看BGP路由表。
- 注意事项
- Preferred-value是BGP协议的私有属性,该命令只对BGP路由生效。
- Preferred-value是BGP选路规则中的weight值,不是RFC规定的标准属性,所以该命令仅在本地生效,在BGP的出口策略中不生效。
- 配置BGP–Local_Pref属性
- 从R1去往AS400中的10.0.4.0/24和2000:0:0:4::/64网段走路径R1-R3-R5-R6-R7
- 只能操作AS100的设备
- 沿用BGP“基础配置”拓扑,仅建立了BGP邻居关系
- 命令含义:
- apply local-preference preference 配置路由的本地优先级
- 参数含义:
- Preference 指定的BGP路由的本地优先级,整数形式,取值范围是0~4294967295,默认情况下为100
- 注意事项:
- 策略生效后,将影响BGP路由选路。
- 本地优先级仅用于同一个AS域内的选路,不向域外发布这个属性,所以用于配置EBGP邻居的export方向的策略时,applylocal-preference命令的设置不生效。
- 网络存在来回路径不一致的问题。可通过R2宣告更高MED属性的路由,使得R5选择R3宣告的路由解决问题,方法详见“配置BGP– MED属性”
- 解决上一步网络出现的问题
- 只能操作AS100的设备
- 保留上一步local-preference的配置,其他不变。
- 需要解决上一步出现的来回路径不一致的问题,可通过R2宣告更高MED属性的路由,使得R5选择R3宣告的路由。
- 命令含义
- apply cost [ + | – ] cost命 令用来在路由策略中配置改变路由的开销值的动作。
- 参数含义:
- + :表示增加开销值。
- – :表示减少开销值。
- cost :指定路由的开销值。对路由的选路进行控制,需要将路由的开销设置为固定值时,可以通过调整开销值避免路由环路的产生。
- 注意事项:
- 在缺省情况下,BGP只比较来自同一AS的路由的MED值。
- 这里的AS不包括联盟的子AS。
- 为了使BGP在联盟内选择最优路由时能够比较MED值,可以配置bestroutemed-confederation命令。
- 配置bestroutemed-confederation命令后,只有当AS_Path中不包含外部自治系统(不在联盟内的自治系统)号时才比较MED值的大小。
- 如果AS_Path中包含外部自治系统号,则不进行比较。
- 例如:自治系统65000、65001、65002和65004属于同一联盟。四条到达同一目的地址的待选路由如下所示:
- path1:AS_Path=6500065004,med=2
- path2:AS_Path=6500165004,med=3
- path3:AS_Path=6500265004,med=4
- path4:AS_Path=6500365004,med=1
- 在配置bestroutemed-confederation命令后,因为path1、path2和path3的AS_Path中不包含同一联盟外的自治系统,所以当BGP需要通过比较MED值来选择路由时,将只比较path1、path2和path3的MED值。而path4的AS_Path中包含同一联盟外的自治系统,因此不比较path4的MED值。
- 配置BGP– BGP AS_Path属性
- AS500内的用户需要优选经过AS300到达AS100的路由
- 仅能操作AS200内的设备
- l拓扑与配置采用“基础配置”的内容。仅有基本的BGP邻居配置
- 命令含义
- apply as-path {{ as-number-plain | as-number-dot } &<1-10> { additive } | noneoverwrite }
- 参数含义
- as-number-plain:指定要替换或增加的整数形式的AS号。在同一个命令行中最多可以同时指定10个AS号。
- as-number-dot:指定要替换或增加的点分形式的AS号。在同一个命令行中最多可以同时指定10个AS号。
- additive :在原有的AS_Path列表中追加指定的AS号。
- overwrite :用指定的AS号覆盖原有的AS_Path列表。
- None :清空原来的AS_Path列表。
- 注意事项:
- 策略生效后,将会影响BGP路由选路。
- 配置该命令会直接影响网络流量所经过的途径,另外也可能造成环路和选路错误,请谨慎使用该命令。
- 配置BGP– BGP AS_Path属性2
- AS500内的用户需要优选经过AS300到达AS100的路由
- 仅能在AS500内的设备上进行操作
- AS500不知道全网的拓扑信息
- 拓扑与配置采用“基础配置”的内容。仅有基本的BGP邻居配置
- 命令含义:
- if-match as-path-filter {as-path-filter-number &<1-16> | as-path-filter-name }
- ip as-path-filter { as-path-filter-number | as-path-filter-name } { deny | permit } regular-expression命令用来创建AS路径过滤器
- 参数含义:
- as-path-filter-number:指定AS路径过滤器号。在一个命令行中可以配置多个此参数,但最大不能超过16。整数形式,取值范围1~256。
- as-path-filter-name指定AS路径过滤器名称。字符串形式,区分大小写,不支持空格,长度范围是1~51,且不能都是数字。当输入的字符串两端使用双引号时,可在字符串中输入空格。
- deny指定AS路径过滤器的匹配模式为拒绝。
- ermit 指定AS路径过滤器的匹配模式为允许。
- 注意事项:
- 在一个命令行中可以配置多个AS-Path-filter值,但最多不能超过16个。它们之间是“或”的关系,即通过其中某一个AS路径过滤器的过滤就可以通过该命令的过滤。
- AS路径过滤器(AS_Path-Filter)
- AS路径过滤器是一组针对BGP路由的AS_Path属性进行过滤的规则
- AS路径过滤器的默认行为是deny,即路由如果没有在某一次过滤中被permit则最终不能通过该过滤器的过滤。
- AS路径过滤器的匹配条件使用正则表达式指定
- 举例:
- ① ^10_ 匹配AS_Path属性以AS10开头的路由
- ② _20_ 匹配AS_Path属性中包含AS20的路由
- ③.* 匹配所有AS_Path属性
- 配置BGP–负载分担
- AS500中的设备充分利用两条链路访问AS100
- 只能操作AS500中的设备
- 拓扑与配置采用“基础配置”的内容。仅有基本的BGP邻居配置
- 命令含义:
- maximumload-balancing命令用来设置等价路由的最大条数。
- 具体用法
- 命令maximumload-balancing为BGP视图命令。
- 参数意义
- ebgp:仅EBGP路由参与负载分担。
- ibgp:仅IBGP路由参与负载分担。
- number:BGP路由表中最大等价路由条数。
- 注意事项
- 如果配置了maximumload-balancing number命令,那么再配置maximumload-balancing ebgp number或maximumload-balancing ibgpnumber命令都不会生效;如果配置了maximumload-balancing ebgp number或maximumload-balancing ibgp number命令,那么再配置maximumload-balancing number命令也不会生效。
- AS_Path不仅需要长度相等,内容也必须一致才能形成负载分担。可在BGP进程视图下使用load-balancingas-path-ignore设置路由在形成负载分担时不比较路由的AS-Path属性。
- 实验结果
- 使用命令displayiprouting-table protocol bgp可以查看到通过BGP学到的等价路由。
- BGP故障诊断
- 三台路由中的直连路由器之间建立BGP邻居关系
- 配置完成之后发现R1和R3所连接的网络无法互访
- 分析并解决此问题
- BGP故障排除流程
- BGP邻居状态无法到达Established状态
- IGP不通
- ACL过滤了TCP的179端口
- 邻居的Router ID冲突
- 配置的邻居的AS号错误
- 用Loopback口建立邻居时没有配置peer connect-interface
- 用建立EBGP邻居时未配置peer ebgp-max-hop
- peer valid-ttl-hops配置错误。
- 对端发送的路由数量是否超过peer route-limit命令设定的值。
- 对端配置了peer ignore
- 两端的地址族不匹配
- BGP邻居关系正常的情况下,但是BGP路由表没有该表项
- 下一跳地址是否可达
- 入口是否进行了策略限制
- 接收前缀的条目是否进行了限制
- 对端出口是否进行了策略限制
- 该前缀在对端BGP路由表中是否最优
- 对端是否配置了active-route-advertise
- BGP邻居关系正常的情况下,BGP路由表存在某些表项不是最优
- 根据选路原则,某些表项不是最优
- 某些前缀是否为抑制状态
- BGP Advance & Internet
- BGP大规模路由应用
- 概述
- 在较大规模组网或者路由条目较多的情况下,出于简化配置,减少路由条目,提升设备性能等等因素的考虑,会需要用到以下几种工具或技术
- 路由聚合(Aggregation)
- 对等体组(PeerGroup)
- 团体属性(Community)
- 路由反射(RouteReflection )
- BGP联盟(Confederations)
- 路由聚合(Aggregation)
- 只向对等体发送聚合后的路由,从而缩小路由表规模
- 明细路由如果发生路由振荡,不会对网络造成影响
- 路由聚合分为自动聚合和手动聚合
- 路由聚合是会使用Aggregator属性(可选过渡属性)
- 该属性标识发生聚合的节点,携带发生聚合节点的route-id和AS号。
- BGP支持
- 对于IPv4路由,BGP支持
- 对于IPv6路由,BGP支持
- 说明
- 在大规模的网络中,BGP路由表十分庞大,给设备造成了很大的负担,同时使发生路由振荡的几率也大大增加,影响网络的稳定性。
- 路由聚合是将多条路由合并的机制,它通过只向对等体发送聚合后的路由而不发送所有的具体路由的方法,减小路由表的规模。
- 并且被聚合的路由如果发生路由振荡,也不再对网络造成影响,从而提高了网络的稳定性。
- 聚合方式
- 对BGP引入的路由进行有类聚合;
- 配置聚合后,成员明细路由将被抑制;
- 仅对import引入的路由进行聚合。
- 注意事项
- import命令对BGP引入的路由进行聚合,引入的路由可以是直连路由、静态路由、OSPF路由、IS-IS路由。配置聚合后,BGP将按照自然网段聚合路由,明细路由在BGP路由更新中被抑制。该命令对network命令引入的路由无效。
- BGP只向对等体发送聚合后的路由;
- 缺省情况下BGP不启用自动聚合;
- 聚合之后的路由将带有atomic_aggregate和aggregator属性。
- 手工聚合
- 对BGP本地路由表中的路由进行聚合。
- 手动聚合可以控制聚合路由的属性。
- 聚合路由不会携带成员明细路由的AS_PATH属性。
- 可通过命令决定是否抑制明细路由,抑制后该聚合后的路由会携带atomic_aggregate属性。
- 通过AS_SET属性来携带AS号,以避免环路。
- SET和SEQUENCE的不同之处
- SET选项下的AS列表通常用于路由聚合,将来自不同AS的AS号无序排列在AS列表里;
- 而SEQUENCE选项下的AS列表是有序的,每经过一个AS都会将其AS号排列在列表的前端。
- 对等体组(PeerGroup)是一些具有某些相同策略的对等体的集合。
- 当一个对等体加入对等体组中时,此对等体将获得与所在对等体组相同的配置。
- 当对等体组的配置改变时,组内成员的配置也相应改变。
- 对等体组中的单个对等体也可以配置自己的发布路由与接收路由的策略。
- 此功能可以简化BGP的配置,同时减少路由性能损耗。
- 在大型BGP网络中,对等体的数量会很多,其中很多对等体具有相同的策略,在配置时会重复使用一些命令,利用对等体组可以简化配置。
- BGP按组打包
- 按组打包技术将所有拥有共同出口策略的BGP邻居当作是一个打包组。
- 每条待发送路由只被打包一次然后发给组内的所有邻居。
- 应用按组打包功能后,每条待发送路由只被打包一次然后发给组内的所有邻居,使打包效率成倍提升。
- 缺省情况下,BGP会针对不同邻居(即使出口策略相同)单独打包路由。
- 拓扑描述
- 一个反射器有3个客户机,有10万条路由需要反射。
- 如果按照每个邻居分别打包的方式,反射器RR在向3个客户机发送路由的时候,所有路由被打包的总次数是10万×3。
- 而按组打包技术将这个过程变为10 万×1,性能相当于提升了3倍。
- 团体属性(Community)
- 团体属性用于标识具有相同特征的BGP 路由
- 该属性为可选过渡
- 团体属性分为
- Internet
- 缺省情况下,所有的路由都属于Internet团体。具有此属性的路由可以被通告给所有的BGP对等体。
- No_Advertise
- 具有此属性的路由在收到后,不能被通告给任何其他的BGP对等体。
- No_Export
- 具有此属性的路由在收到后,不能被发布到本地AS之外。如果使用了联盟,则不能被发布到联盟之外,但可以发布给联盟中的其他子AS。
- No_Export_Subconfed
- 具有此属性的路由在收到后,不能被发布到本地AS之外,也不能发布到联盟中的其他子AS。
- 团体属性概述
- 团体属性用一组以4字节为单位的列表来表示
- 格式:
- aa:nn:aa和nn的取值范围都是0~65535。
- 管理员可根据实际情况设置具体数值。
- 通常aa表示自治系统AS编号,
- nn是管理员定义的团体属性标识。
- 例如,来自AS100的一条路由,管理员定义的团体属性标识是1,则该路由的团体属性格式是100:1
- 团体号:团体号是0~4294967295的整数。
- 标准协议中定义,0(0x00000000)~65535(0x0000FFFF)和4294901760(0xFFFF0000)~4294967295(0xFFFFFFFF)是预留的。
- 团体属性用来简化路由策略的应用和降低维护管理的难度,利用团体可以使多个AS中的一组BGP设备共享相同的策略。
- 团体是一个路由属性,在BGP对等体之间传播,且不受AS的限制。
- BGP设备在将带有团体属性的路由发布给其它对等体之前,可以先改变此路由原有的团体属性。
- 路由反射(RouteReflection )
- 概述
- 为保证IBGP对等体之间的连通性,需要在IBGP对等体之间建立全连接(Full-mesh)关系。
- 假设在一个AS内部有n台路由器,那么应该建立的IBGP连接数就为n(n-1)/2。
- 当IBGP对等体数目很多时,对网络资源和CPU资源的消耗都很大。
- 利用路由反射可以解决这一问题。
- 路由反射器
- 允许将从IBGP邻居学习到的路由发送给特定IBGP邻居,打破了IBGP邻居关系全互联的需求,减少IBGP会话数量。
- 客户机与路由反射器之间建立IBGP连接。
- 路由反射器和它的客户机组成一个集群(Cluster)。
- 路由反射器在客户机之间反射路由信息,客户机之间不需要建立BGP连接。
- 包括路由反射器(RR)和客户机(Client)。
- 在一个AS内,其中一台路由器作为路由反射器RR(Route Reflector),其它路由器作为客户机(Client)。
- 路由反射器概念
- 路由反射器RR(RouteReflector)
- 允许把从IBGP 对等体学到的路由反射到其他IBGP对等体的BGP设备。
- 客户机(Client)
- 与RR形成反射邻居关系的IBGP设备。
- 在AS内部客户机只需要与RR直连。
- 非客户机(Non-Client)
- 既不是RR也不是客户机的IBGP设备。
- 在AS内部非客户机与RR之间,以及所有的非客户机之间仍然必须建立全连接关系。
- 始发者(Originator)
- 在AS内部始发路由的设备。
- Originator_ID属性用于防止集群内产生路由环路。
- 集群(Cluster)
- 路由反射器及其客户机的集合。
- Cluster_List属性用于防止集群间产生路由环路。
- 反射规则
- 在向IBGP邻居发布学习到的路由信息时,RR按照以下规则发布路由
- 从EBGP对等体学到的路由,发布给所有的非客户机和客户机。
- 从非客户机IBGP对等体学到的路由,发布给此RR的所有客户机。
- 从客户机学到的路由,发布给此RR的所有非客户机和客户机(发起此路由的客户机除外)。
- RR的配置方便,只需要对作为反射器的路由器进行配置,客户机并不需要知道自己是客户机。
- VRP支持配置命令undo reflect between-clients来禁止RR将从客户机收到的路由再反射给其他客户机。
- 在某些网络中,路由反射器的客户机之间已经建立了全连接,它们可以直接交换路由信息,此时客户机到客户机之间的路由反射是没有必要的,而且还占用带宽资源。
- 防环机制
- Originator_ID属性
- 该属性为可选非过渡;
- 用于集群内的防环;
- 由路由反射器(RR)产生,携带了本地AS内该路由发送者的RouterID。
- Originator ID由RR产生,使用的Router ID的值标识路由的发送者,用于防止集群内产生路由环路。
- 当一条路由第一次被RR反射的时候,RR将Originator_ID属性加入这条路由,标识这条路由的发起设备。
- 如果一条路由中已经存在了Originator_ID属性,则RR将不会创建新的Originator_ID属性。
- 当设备接收到这条路由的时候,将比较收到的OriginatorID和本地的RouterID,如果两个ID相同,则不接收此路由。
- Cluster_List属性
- 该属性为可选非过渡;
- 用于集群间的防环;
- 由每个路由反射器(RR)产生,记录反射路由经过的集群。
- 路由反射器和它的客户机组成一个集群(Cluster)。
- 在一个AS内,每个路由反射器使用唯一的Cluster ID作为集群标识。
- 为了防止集群间产生路由环路,路由反射器使用Cluster_List属性,记录路由经过的所有集群的ClusterID。
- 当RR在它的客户机之间或客户机与非客户机之间反射路由时,RR会把本地Cluster_ID添加到Cluster_List的前面。
- 如果Cluster_List为空,RR就创建一个。
- 当RR接收到一条更新路由时,RR会检查Cluster_List。
- 如果Cluster_List中已经有本地Cluster_ID,丢弃该路由。
- 如果没有本地Cluster_ID,将其加入Cluster_List,然后反射该更新路由。
- 备份RR
- 当客户机Client1从外部对等体接收到一条更新路由(10.0.0.0/24)后,它通过IBGP向RR1和RR2通告这条路由。
- RR1接收到该更新路由后,它向其他的客户机(Client2、Client3)和非客户机(RR2)反射,同时将本地Cluster_ID添加到Cluster_List前面。
- RR2接收到该反射路由后,检查Cluster_List,发现自己的Cluster_ID已经包含在Cluster_List中。因此,它丢弃该更新路由,不再向自己的客户机反射。
- 相同集群中的路由反射器要共享相同的Cluster_ID;
- VRP需要使用命令reflector cluster-id给所有位于同一个集群内的路由反射器配置相同的Cluster_ID。
- 在冗余的环境里,客户机会收到不同反射器发来的到达同一目的地的多条路由,这时客户机应用BGP选择路由的策略来选择最佳路由。
- Cluster_List的应用保证了同一AS内的不同RR之间不出现路由循环。
- 同级反射器
- 一个AS中可能存在多个集群,各个RR之间是IBGP对等体的关系
- 一个骨干网被分成多个反射集群,每个RR将其它的RR配置成非客户机,各RR之间建立全连接。
- 每个客户机只与所在集群的RR建立IBGP连接。
- 这样该自治系统内的所有BGP路由器都会收到反射路由信息。
- 分级反射器
- 将较低网络层次的RR配成更高网络层次中RR的客户机。
- Cluster1中部署了一个一级RR(RR-1),Cluster2和Cluster3中的RR(RR-2和RR-3)作为RR-1的客户端
- BGP联盟(Confederations)
- 概述
- 将一个AS划分为若干个子AS,每个子AS内部建立全连接的IBGP邻居,子AS之间建立EBGP连接关系。
- 联盟将一个AS划分为若干个子AS。
- 每个子AS内部建立IBGP全连接关系。
- 子AS之间建立联盟EBGP连接关系。
- 但联盟外部AS仍认为联盟是一个AS。
- 配置联盟后,原AS号将作为每个路由器的联盟ID。
- 原有的IBGP属性,包括LocalPreference属性、MED属性和NEXT_HOP属性等;联盟相关的属性在传出联盟时会自动被删除,即管理员无需在联盟的出口处配置过滤子AS号等信息的操作。
- 防环机制
- AS_CONFED_SEQUENCE和AS_CONFED_SET
- 联盟内部的成员AS号对于其他非联盟AS是不可见的,所以路由在从联盟内部发送到其他非联盟AS时,联盟成员AS号被剥离
- AS_PATH属性被定义为公认必遵属性,该属性由AS号所组成。AS_PATH包含4种不同类型
- AS_SET
- 由一系列AS号无序地组成,包含在UPDATE消息里。
- 当网络发生聚合时,可通过适当策略使AS_PATH使用类型AS_SET来避免路径信息丢失。
- AS_SEQUENCE
- 由一系列AS号顺序地组成,包含在UPDATE消息里。
- 一般情况下,AS_PATH类型为AS_SEQUENCE。
- AS_CONFED_SEQUENCE
- 在本地联盟内由一系列成员AS号按顺序地组成。
- 包含在UPDATE消息中。
- 用法和AS_SEQUENCE相同。
- 只能在本地联盟内传递。
- AS_CONFED_SET
- :在本地联盟内由一系列成员AS无序地组成。
- 包含在UPDATE消息中。
- 用法和AS_SET相同。
- 只能在本地联盟内传递
- BGP路由反射器和联盟的比较
- 联盟需要重新划分区域,对现网改动较大。
- 反射器在配置时,只需要对RR进行配置,客户机不需要做任何其他的操作;联盟需要在所有路由器上进行配置。
- RR与RR间需要IBGP全互联。
- 路由反射器应用较为广泛;联盟应用较少。
- BGP扩展特性
- 安全特性
- MD5
- BGP使用TCP作为传输层协议。
- 为提高BGP的安全性,可以在建立TCP连接时进行MD5认证。
- 但BGP的MD5认证并不能对BGP报文认证,它只是为TCP连接设置MD5认证密码,由TCP完成认证。
- 如果认证失败,则不建立TCP连接。
- GTSM(Generalized TTL Security Mechanism)
- GTSM通过检测IP报文头中的TTL值是否在一个预先定义好的特定范围内,对IP层以上业务进行保护,增强系统的安全性。
- 使能BGP的GTSM策略后,接口板对所有BGP报文的TTL值进行检查。
- 根据实际组网的需要,对于不符合TTL值范围的报文,GTSM可以设置为通过或丢弃。
- 配置GTSM缺省动作为丢弃时,可以根据网络拓扑选择合适的TTL有限值范围,不符合TTL值范围的报文会被接口板直接丢弃,这样就避免了网络攻击者模拟的“合法”BGP报文占用CPU。
- 该功能与EBGP多跳互斥。
- 限制从对等体接收的路由数量
- AS_Path长度保护
- 通过在入口和出口两个方向对AS_Path的长度进行限定,直接丢弃AS_Path超限的报文。
- 路由衰减
- 路由衰减(Route Dampening)用来解决路由不稳定的问题
- BGP衰减使用惩罚值(Penalty Value)
- 来衡量一条路由的稳定性,惩罚值越高则说明路由越不稳定。
- 路由每发生一次振荡(路由从激活状态变为未激活状态,称为一次路由振荡),BGP便会给此路由增加一定的惩罚值(1000)。
- 当惩罚值超过抑制阈值(Suppress Value)时,此路由被抑制,不加入到路由表中,也不再向其他BGP对等体发布更新报文。
- 最大抑制值(Maximum Suppress Value)
- 当某条路由的惩罚值到达最大抑制值(Maximum Suppress Value),便不会再增加。
- 这样就可以确保某路由在非常短的时间内翻动十几次之后,不会将惩罚值累加到一个很高的、使路由始终保持被抑制状态的值。
- 抑制阈值(Suppress Value)
- 再使用阈值(Reuse Value)
- 半衰期(Half-life)
- 被抑制的路由每经过一段时间,惩罚值便会减少一半,这个时间称为半衰期(Half-life)。
- 当惩罚值降到再使用阈值(Reuse Value)时,此路由变为可用并被加入到路由表中,同时向其他BGP对等体发布更新报文。
- 上文提到的惩罚值、抑制阈值和半衰期都可以手动配置。
- 多数情况下,BGP协议都应用于复杂的网络环境中,路由变化十分频繁。
- 为了防止持续的路由振荡带来的不利影响,BGP使用路由衰减来抑制不稳定的路由。
- 路由衰减只适用于EBGP路由。
- 对于从IBGP收来的路由不能进行衰减,因为IBGP路由经常含有本AS的路由,内部网络路由要求转发表尽可能一致,IGP快速收敛就是为了达到信息同步,转发一致。
- 如果衰减对IBGP路由起作用,不同设备的衰减参数不一致时,会导致转发表不一致。
- BGP增强特性
- BGP ORF
- BGP基于前缀的ORF( Outbound Route Filtering )功能
- 基于本地的入口策略构建对端的出口策略,实现BGP按需发布路由;
- 包括基于前缀的ORF和VPNORF。
- 拓扑描述
- 直连EBGP邻居中,Client1、R1协商基于前缀的ORF能力后,Client1将本地配置的基于前缀的入口策略打包到Route-refresh报文中发送给R1。R1根据接收到的路由刷新报文构造出口策略,通过Route-refresh报文发送路由给Client1。Client1只收到它需要的路由,而R1不必维护路由策略,减少了配置工作。
- Client1、Client2为RR的客户端,Client1与RR、Client2与RR,分别协商基于前缀的ORF能力,Client1、Client2将本地配置的基于前缀的入口策略打包到Route-refresh报文中发送给RR。RR根据接收到的前缀信息构造出口策略,通过Route-refresh报文将路由反射给Client1、Client2。Client1和Client2只收到需要的路由,RR不必维护路由策略,减少了配置工作。
- 作用
- 避免了本端设备接收大量无用的路由。
- 降低了本端设备的CPU使用率。
- 有效减少了BGP邻居的配置工作。
- 降低了链路带宽的占用率。
- Active-Route-Advertise
- 只有当BGP路由被成功的安装进IP或IPv6路由表,该路由才能被发送给邻居
- 默认情况下路由只需在BGP中优选即可向邻居发布。
- 配置了此特性之后,路由必须同时满足在BGP协议层面优选与在路由管理层面活跃两个条件,才能向邻居发布。
- 与命令bgp-rib-only(用来禁止BGP路由下发到IP路由表)互斥。
- 4字节AS号概念
- 4字节AS号特性是将AS号的编码范围由2字节扩大为4字节
- 4字节AS号定义的角色
- NewSpeaker:支持4字节AS号扩展能力的对等体。
- OldSpeaker:不支持4字节AS号扩展能力的对等体。
- NewSession:NewSpeaker之间建立的BGP连接。
- OldSession:NewSpeaker和OldSpeaker之间或者OldSpeaker之间建立的BGP连接。
- 拓扑描述
- R2收到R1的一条四字节AS的路由,AS号码为10.1;
- R2与R3建立邻居,需要令R3认为R2的AS号为AS_TRANS;
- R2发送路由给R3的时候把AS_TRANS记录在AS_Path里面,把10.1与自己的AS号码20.1按照BGP要求的顺序记录在AS4_Path;
- R3对于不识别的属性AS4_Path不作处理依然保留,它只按照BGP的规则来发送路由给RD。当然它认为R4的AS号码也是AS_TRANS;
- 这样当R4收到从R3来的路由会把AS_PATH中的AS_TRANS按照顺序替换为AS4_Path里所记录的相应的地址,在R4上把AS_PATH属性还原为3020.1 10.1。
- 协议扩展
- 定义了2种新的可选过渡属性AS4_Path(属性码为0x11)和AS4_Aggregator属性(属性码为0x12)用于在OldSession上传递4字节AS信息。
- 如果NewSpeaker和OldSpeaker建立连接,定义AS_TRANS(保留值为23456)用于衔接2字节AS和4字节AS。
- 新的AS号有三种写法:
- splain:就是一个十进制的数字
- asdot+:写成(2字节).(2字节)的形式,所以旧的2字节ASN123可以写成0.123,ASN65536是1.0;最大为65535.65535;
- asdot:旧的2字节写法照旧,新的4字节写成asdot+的形式;(1-65535;1.0-65535.65535)
- 华为支持asdot写法。
- 按策略进行下一跳迭代
- 通过配置路由策略来限制迭代到的路由。如果路由不能通过路由策略,则该路由迭代失败
- 拓扑描述
- R1和R2、R3之间通过Loopback口建立IBGP邻居。R1从R2、R3分别收到了前缀为10.0.0.0/24的BGP路由。其中从R2收到的BGP路由的原始下一跳为2.2.2.2。另外,R1上Ethernet0/0/0的接口地址为2.2.2.100/24。
- 当R2正常运行时,R1收到从R2发来的前缀为10.0.0.0/24的路由会迭代到IGP路由2.2.2.2/32。但是当R2的IGP发生故障时,IGP路由2.2.2.2/32被撤销,这样就导致下一跳重新迭代。在R1上会用原始下一跳2.2.2.2在IP路由表中进行最长匹配迭代,结果会迭代到2.2.2.0/24的路由上。但此时用户期望的是,当到2.2.2.2的路由不可达时,可以重新选路优选到3.3.3.3的路由。实际上该故障主要是由于BGP收敛引起的,从而产生了路由的瞬时黑洞。
- 配置下一跳迭代策略,可以通过到BGP路由原始下一跳所依赖路由的掩码长度来过滤迭代路由。可以通过配置下一跳迭代策略,使到原始下一跳2.2.2.2只能依赖于2.2.2.2/32的IGP路由。
- BGP需要对非直连的下一跳进行路由迭代,但是如果不对迭代到的路由进行过滤的话,可能会迭代到一个错误的转发路径上。
- 按策略进行下一跳迭代就是通过配置路由策略来限制迭代到的路由。
- 如果路由不能通过路由策略,则该路由迭代失败。
- Internet设计理念
- 什么样的网络需要BGP
- 常见的企业网络拓扑类型
- 单归属自治系统(一个出口设备且连接到一个ISP)
- 仅有一个出口设备且只连接到一个ISP
- 这种情况下,就可以不需要配置BGP协议。
- 可在用户边界设备上添加一条默认路由,并宣告到用户自治系统内部
- 多归属到单自治系统(多个出口设备仅连接到一个ISP)
- 增加了对链路和网络设备的冗余性,一般这种情况下用户网络用的会是私有AS号
- 若两条链路采用主备的方式
- 不需要采用BGP。
- 两台出口设备分别向本自治系统内的设备宣告metric值不同的默认路由即可。
- 若采用OSPF为IGP,外部路由的cost应该采用E2方式,仅考虑外部开销(cost)
- 若两台路由器采用负载分担方式
- 方式一:两台路由器分别向自治系统内(IGP采用OSPF)宣告costtype为E1的默认路由,使得自治系统其他路由器选择距离自己最近的出口路由器到达外部网络。这种情况也可以不使用BGP。但是当两个出口路由器的物理间隔十分大,并且对时延有很高要求时,就可以考虑采取BGP来获取更精细的路由条目。
- 方式二:与ISP设备之间建立BGP连接,从BGP接收更为精细的路由条目,配合上路由策略工具的使用,来达到针对不同目的地址使用不同出口路由的目的。
- 多归属到多自治系统(多个出口设备且连接到多个ISP)
- 不仅增加了对链路和网络设备的冗余性,同时使用了做到了ISP的冗余备份
- 对于这种自治系统,需要充分考虑到地址空间是否独立于运营商,是否拥有公有AS号等问题。
- 理想情况下,当用户网络拥有独立于ISP的地址空间和公有AS号时,有三种部署方式
- 方式一:采取主备方式,出口路由器向内部宣告开销不一样的默认路由。
- 方式二:负载分担方式,出口路由器向内部宣告默认路由,仅使用IGP的开销计算机制,由IGP自行决定使用哪一台出口路由器。
- 方式三:部署BGP。考虑与ISP签署的合约,企业本身的业务流量特点等因素,使用各种路由策略工具,如有必要也可以使用默认路由宣告等方式。充分控制企业进和出方向的流量。
- 一般情况下,多归属到多自治系统的网络会考虑部署BGP协议,因为前两种方法不利于路由的控制。但是不是绝对的,需要仔细权衡所得到的好处与增加路由复杂度所带来的代价。
- 需要BGP的几点考虑
- 路由规模庞大且无法聚合;
- 跨经营实体时(沟通不便利、信息保密);
- 一个路由选择域内运行了多种IGP协议;
- IGP无法提供相应的工具来实施所需策略;
- 多ISP归属网络;
- …….
- 当符合以上的情况,且充分考虑工程实施,网络规划等内容之后可以考虑部署BGP。
- 潜在危险
- BGP路由劫持
- 产生原因
- BGP协议里虽然有一些简单的安全认证的部分,但是对于两个已经成功建立BGP连接的AS来说,基本会无条件的相信对方AS所传来的信息,包括对方声称所拥有的IP地址范围。
- 潜在危害
- 若无条件相信对方发送过来的Update消息,不排除恶意的AS宣告不存在的IP网段,通过修改AS_Path等BGP属性,让其他AS认为这条路径才是到达这个目的网段的最短路径,那么该恶意的AS就能截获到数据流量。
- 不对称路由
- 产生原因
- 不恰当的属性使用或者是路由聚合不合理导致路由精准性不足,导致流量的出方向和入方向不同。
- 潜在危害
- 首先,不对称流量会使互联网络的流量模型变得难以预测,使得网络基准、容量规划、故障检测及排除变得困难;
- 其次,不对称流量会使链路使用率出现不均衡,某些链路的带宽出现饱和,而其他链路的带宽却得不到有效利用;
- 再次,不对称流量会使出流量和入流量的时延出现很大的差异,这种时延变化(即抖动)会对某些时延敏感型应用(如语音和直播视频)造成损害。
- ……
- BGP网络部署及维护注意事项
- 公司A连接两个AS,由于配置失误,将ISP1宣告的路由宣告进入了ISP2。
- 注意筛选ISP发布的路由,根据自身业务情况进行路由选择。
- 时刻关注对端AS对网络的操作,防止因对端误操作而对本网造成危害。
- 优化BGP能力
- 建立对等体会话
- 路由更新起源
- 优化路由策略
- 路由过滤和属性控制
- 路由聚合
- 提高BGP可用性
- 控制AS内部路由
- 非BGP路由与BGP路由之间的交互
- 一般情况下,IGP与BGP会有路由的引入,应采用合理的过滤策略,使合适的路由在IGP与BGP之间互相引入。
- 默认路由
- 对于默认路由的发放,可以通过策略使默认路由根据某些具体条件来下发默认路由。
- 策略路由
- 控制大型AS
- 设计稳定的Internet
- BGP高级配置
- 底层IGP协议已经部署完成,所有设备均处于OSPF骨干区域中;
- R4、R5、R6之间使用loopback接口建立EBGP邻居关系,要求R4的配置方式能够尽量节约资源。
- 案例描述
- 本案例中设备互联地址规则如RX与RY互联,则互联地址为XY.1.1.X与XY.1.1.Y,掩码长度为24位。
- OSPF和OSPFv3已经运行正常,且设备互联地址和环回口地址已经宣告进了OSPF或OSPFv3。
- 案例分析
- 配置命令
- 命令含义
- peer as-number命令用来配置指定对等体(组)的对端AS号。
- peer connect-interface命令用来指定发送BGP报文的源接口,并可指定发起连接时使用的源地址。
- peer next-hop-local命令用来设置向IBGP对等体(组)通告路由时,把下一跳属性设为自身的IP地址。
- group命令可以用来创建对等体组。
- 具体用法
- 参数意义
- peer ipv4-address as-number as-number
- ip-address:对等体的IPv4地址。
- as-number:对等体的对端AS号。
- peer ipv4-address connect-interface interface-type interface-number [ ipv4-source-address ]
- ip-address:对等体的IPv4地址。
- interface-type interface-number:接口类型和接口号。
- ipv4-source-address:建立连接时的IPv4源地址。
- peer ipv4-address next-hop-local
- group group-name [ external | internal ]
- group-name:对等体组的名称。
- external:创建EBGP对等体组。
- internal:创建IBGP对等体组。
- 注意事项
- 在使用Loopback接口作为BGP报文的源接口时,必须注意以下事项:
- 确认BGP对等体的Loopback接口的地址是可达的。
- 如果是EBGP连接,还要配置peerebgp-max-hop命令,允许EBGP通过非直连方式建立邻居关系。
- peer next-hop-local和peernext-hop-invariable是两条互斥命令。
- Display bgp peer中的Rec表示本端从对等体上收到路由前缀的数目。
- IPv6的配置与IPv4配置一致。
- 配置BGP自动聚合和缺省路由
- 将网络16.X.0/24引入到BGP中,并做自动汇总;
- 当R4上存在172.16.0.0/16路由的时候,需要往AS300下发缺省路由。
- 案例描述
- 本案例中的需求是对之前案例的扩展,在原案例的基础上进行配置。
- 需求2中,要求缺省路由的下发需要关联路由172.16.0.0/16,如果172.16.0.0/16消失,该缺省路由也消失。
- 配置命令
- 命令含义
- peer route-policy命令用来对来自对等体(组)的路由或向对等体(组)发布的路由指定Route-Policy,对接收或发布的路由进行控制。
- peer default-route-advertise命令用来设置给对等体(组)发布缺省路由。
- 具体用法
- peer route-policy命令为BGP视图命令
- peer default-route-advertise命令BGP视图命令
- 参数意义
- peer ipv4-address route-policy route-policy-name { import | export }
- ipv4-address:对等体的IPv4地址。
- route-policy-name:Route-Policy的名称。
- import:对从对等体(组)来的路由应用Route-Policy。
- export:对向对等体(组)发布的路由应用Route-Policy。
- peer { group-name | ipv4-address } default-route-advertise [ route-policy route-policy-name ][ conditional-route-match-all{ ipv4-address1 { mask1 | mask-length1 }} &<1-4>| conditional-route-match-any { ipv4-address2 { mask2 | mask-length2 }} &<1-4> ]
- ipv4-address:对等体的IPv4地址。
- route-policy route-policy-name:指定Route-Policy名称。
- conditional-route-match-all ipv4-address1{ mask1 | mask-length1 }:指定条件路由的IPv4地址,以及掩码/掩码长度。匹配所有条件路由则发送缺省路由。
- conditional-route-match-any ipv4-address2{ mask2 | mask-length2 }:指定条件路由的IPv4地址,以及掩码/掩码长度。匹配任一条件路由则发送缺省路由。
- 实验现象
- 我们通过命令display ip routing-table命令用来显示路由表中包含的信息。
- 配置BGP手动聚合
- 在R1上引入网络10.0.X.0/24同时将其community标记为200:200;
- 在R1上对community标记200:200对路由进行手工聚合,聚合后路由掩码为/23,并抑制明细路由,需充分考虑环路避免。
- 在R4上对2010::x:0:0/96网段进行聚合,聚合后掩码为94。
- 案例描述
- 本案例中的需求是对之前案例的扩展,在原案例的基础上进行配置。
- 配置命令
- 命令含义:
- aggregate命令用来在BGP路由表中创建一条聚合路由。
- 具体用法
- 参数意义
- aggregate ipv4-address { mask | mask-length }[ as-set | attribute-policy route-policy-name1 | detail-suppressed | origin-policy route-policy-name2 | suppress-policyroute-policy-name3 ] *
- ipv4-address:指定聚合路由的IPv4地址。
- mask:仅IBGP路由参与负载分担。
- mask-length:指定聚合路由的网络掩码长度。
- as-set:指定生成具有AS-SET的路由。
- attribute-policy route-policy-name1:指定聚合后路由的属性策略名称。
- detail-suppressed:指定仅通告聚合路由。
- origin-policy route-policy-name2:指定允许生成聚合路由的策略名称。
- suppress-policy route-policy-name3:指定抑制指定路由通告的策略名称。
- 注意事项
- 手工聚合和自动聚合本地均会产生指向NULL0的路由。
- IPv6的配置与IPv4配置一致。
- 实验结果
- 命令displayiprouting-table protocol bgp可以查看BGP学到的路由。
- BGP故障诊断及排除
- AS100内运行OSPF,所有路由器均属于AREA0 ,直连路由器之间用LOOPBACK0口建立IBGP,同时尽量减少BGP连接数;
- R5和R6用LOOPBACK0口建立IBGP关系,R5与R3/R4用直连口建立EBGP邻居关系,用LOOPBACK0 口和R7建立EBGP邻居关系;
- R1直连192.168.0.0/24,R2直连192.168.1.0/24,R7直连192.168.2.0/23,要求这三个网段能互访,且R6上的路由条目尽可能的少。
- 拓扑描述
- 路由器Rx和Ry(X<Y)之间的接口网段为10.0.xy.0/24网段,Rx地址=10.0.xy.x Ry地址=10.0.xy.y。
- 所有接口地址均已经配置完成。
- 配置
- 故障
- 配置完成之后,所有BGP邻居建立正常,但是AS100中的两个网段无法访问AS300中的网段
- 故障排查
- 可以看到,因为AS_Set中包含本自治系统的AS号,所以导致无法接受这条聚合后的路由,可以考虑关闭明细抑制或取消AS_Set
- 案例总结
- 配置路由聚合时需要谨慎,聚合配置不当会出现以下问题:
- 案例二
- AS100内运行OSPF,所有路由器均属于AREA0 ,路由器之间用loopback0口建立IBGP邻居关系,对等体关系如图中标识
- R7和R5及R6通过直连接口建立EBGP邻居关系。
- 为了所有路由器能学习到AS200的路由器,设置RR反射器,R5为R3的client,R6为R4的client
- 拓扑说明
- 路由器Rx和Ry(X<Y)之间的接口网段为10.0.xy.0/24网段,Rx地址=10.0.xy.x Ry地址=10.0.xy.y。
- 所有接口地址均已经配置完成。
- R5是R3的client, R6是R4的client。
- 配置
- 其他说明
- 配置完成之后所有BGP邻居关系建立正常,且OSPF学习到的路由也都完整。
- R2与R1配置类似,R3与R4配置类似,R5与R6配置类似。
- 建立完成之后R1通告直连的192.168.1.0/24进入BGP,R7通告直连的192.168.2.0/24进入BGP。
- 故障
- 故障分析
- R7向R5和R6发送192.168.2.0/24前缀。
- R5,R6收到,分别向自己的IBGP邻居R3,R4发送。
- 这里分析R4的情况。R4收到后会有一个路径决策过程,这里R3也会向它发送192.168.2.0/24的前缀,根据BGP路径决策的13个原则,R4最总选择IGP度量值最小的,即选择R6作为下一跳。然后它将这个最佳路径发往R3和R1。
- 同理,R3最总选择的下一跳是R5。
- 关键在于R1和R2。因为R1只能收到R4发来的更新,所以,它去往192.168.1.0/24的下一跳也是R4;同理R2去往192.168.1.0/24的下一跳是R5。
- 经过IGP路由的递归查询,从192.168.1.1到192.168.2.1的数据包会在R1和R2之间来回转发,直到IP报文的TTL被减至0。
- 故障排查
- [R1]ping -a 192.168.1.1 192.168.2.1
- 案例总结
- 配置RR时,应遵循以下原则:
- 不要跨越非客户端建立客户端
- 不要跨越客户端建立非客户端对等体
- 客户端与非客户端之间不要建立IBGP会话
- 思考题
- BGP在OPEN报文中协商地址族支持情况( A )
- AS_Path长度相同,但是顺序不同,不会影响负载分担的建立( B )
- RR在反射从IBGP发来的路由信息时,不允许修改其中任何的属性。( A )
- 简要说明一下路由聚合的分类以及注意事项等。
- 路由聚合分为自动聚合和手工聚合
- 自动聚合:只能聚合通过import命令引入的路由,只能按照自然掩码进行聚合,IPv6不支持自动聚合。
- 手工聚合:IPv4与IPv6路由均能聚合,可设置明细路由抑制,添加AS_set等功能。
- 总结
- BGP Basic
- BGP4 & BGP4+原理
- BGP基本原理
- BGP属性及其特点
- BGP 4 + 原理及其新增属性
- BGP 4&BGP 4 + 配置
- BGP 故障排查
- BGP Advance&Internet
- BGP大规模应用时的部署方案
- Internet设计理念
- BGP典型配置及故障排除