文章目录
- 第六章:BGP---边界网关协议
- BGP基础
- BGP数据包
- BGP状态机
- BGP的工作过程
- BGP的防环
- BGP的路由黑洞
- BGP基础配置
- BGP的路由发布
- BGP的路由聚合
- 路由反射器
- 联邦
- BGP的路径属性和选路规则
- 路径属性
- BGP路由优选规则
- 1.优选Preferred_Value属性值最大的路由
- 2.优选Local_Preference属性值最大的路由
- 3.本地始发的BGP路由优于从其他对等体学习到的路由,本地始发的路由优先级:优选手动聚合>自动聚合>network>import>从对等体学到的
- 4.优选AS_Path属性值最短的路由
- 5.优选0rigin属性最优的路由。0rigin属性值按优先级从高到低的排列是:IGP、EGP及Incomplete
- 6.优选MED属性值最小的路由
- 7.优选从EBGP对等体学来的路由(EBGP路由优先级高于IBGP路由)
- 8.优选到Next_Hop的IGP度量值最小的路由
- 9.优选Cluster_List最短的路由
- 10.优选RouterID(OrginatorID)最小的设备通告的路由
- 11.优选具有最小IP地址的对等体通告的路由
- BGP负载均衡--负载分担
- BGP的路由过滤
- BGP的社团属性----Community
- AS路径过滤器
第六章:BGP—边界网关协议
自治系统----AS
定义:有一个单一的机构或组织所管理的一系列IP网络及其设备所构成的集合。
AS的来源:
- 整个网络规模过大,会导致路由信息收敛速度过慢,设备对相同目标认知不同。
- AS之间可能是不同的机构或企业,相互之间无法完全信任,使用IGP协议会存在暴露网络信息的风险。
AS号,16bit和32bit。-----> IANA组织进行分配
- 取值范围:1-65534(0和65535做保留)
- 1-64511---------公有AS号
- 64512-65534---------私有AS号
BGP基础
运行了BGP协议的路由器,其所维护的路由表,是包含了整个互联网的所有路由信息。
BGP特点
- BGP是基于TCP协议进行数据传输,必须先建立TCP连接,再建立BGP会话连接。
- 仅具备触发更新,而不再进行周期更新。
- BGP协议只传递路由信息,不会暴露AS内部的拓扑信息。
- 通常BG篇被称为无类别的路径矢量协议。
- 无类别----传递时携带掩码信息
- 矢量----方向性:谁传递给我的路由信息,谁就是我的下一跳。
- 路径矢量----将一个AS看作一个整体,从而计算下一跳(开销值)
BGP与IGP协议有本质上的区别,IGP协议主要的任务是将AS内部的未知网段信息计算获取到路由信息,而BGP则主要是将通过IGP协议计算出的路由信息进行搬运,并不会计算路由信息。
BGP特征
- 可控性
- BGP使用大量的路径属性,取代了IGP协议中的Cost值,来对路由信息进行管控。
- 可靠性
- 依靠TCP完成可靠性建设。TCP端口号179。
- 两台运行BGP协议的设备,需要网络管理员手工配置邻居的IP地址,从而实现数据通讯。
- AS-BY-AS
- 在BGP的视角当中,会将一个AS看作为一个整体。
- 因为BGP是将一个AS看作一个整体,但是在该整体内部数据传输时,并不相同,故BGP默认不支持负载均衡功能。
BGP的对等体关系
BGP因为传输层使用的是TCP协议,所以,只要在TCP协议可以正常建立会话的基础上就可以完成BGP会话的建立工作------BGP支持非直连建立邻居。-----前提:网络可达。---->BGP协议的搭建是建立在ICP协议之上。
-
EBGP
- 位于不同自治系统的BGP路由器之间的BGP对等体关系。
- EBGP对等体一般使用直连方式建立邻居关系,故而,TTL数值被设定为1。
- 两台路由器之间要建立EBGP对等体关系,需要满足以下条件:
- 两台路由器所属的AS不同---->判别方式:本地设备通过网络管理员知晓对端的AS,从而判断是否处于相同的AS。
- 配置EBGP时,peer命令所指定的邻居IP地址必须为网络可达,保证TCP链接可以正常建立。
-
IBGP
- 位于相同自治系统的BGP路由器之间的BGP对等体关系。
-
IBGP对等体一般使用非直连方式建立邻居关系,故而,TTL数值被设定为255。
缺省情况下,BGP协议使用报文出接口作为TCP连接的本地接口IP,但是在某些情况下,我们可以指定BGP对等体之间的会话IP地址;例如,在IBGP对等体关系中,常使用环回接口地址作为通讯的源地址。原因是因为loopback接口非常稳定,而且可以借助AS内的IGP协议实现冗余来保证可靠性。
总结:
- BGP是无类别路径矢量协议
- BGP使用单播更新来发送数据,基于TCP实现通讯。
- 增量更新
- 具有丰富的路径属性来取代IGP中的度量值参数,从而控制选路
- 可以在控制层流量的出入口通过路由策略实现可控性
- 默认不被用于负载均衡----会通过各种选路规则选择出一条最优路由信息。
- BGP支持认证以及路由聚合。
BGP数据包
BGP数据报文
Router-refresh----路由刷新包
作用:用来要求对等体重新发送指定地址族的路由信息。
一般为本端修改了相关路由策略之后让对方重新发送update报文,本端执行新的路由策略重新计算BGP路由。-----前提提交为双方均支持路由刷新功能。
open包
是TCP建立之后发送的第一个BGP报文,用于建立BGP对等体之间的连接关系。该过程无非就是进行参数协商的过程。
- AS号
- 不管接收到的open报文中的AS号是否与本地AS号相同,都不会影响到BGP对等体关系的建立。
- 但是,如果open报文中的AS号,与本地建立邻居时由网络管理员编写的AS号不同,则邻居关系无法建立。
- BGP对等体在建立邻居时,会配置对等体所在的AS号,如果对端发送的open报文中所包含的AS号与本地配置不同,才会导致建立邻居失败。
- RID
- 如果两端RID相同,则对等体关系建立失败。
- 认证字段----TCP的可选项位置
- 如果认证方式或者认证数据不通,则导致建邻失败。
- 该字段永远以MD5形式,存储在TCP的选项字段中。
- Hold Time----保活时间
- BGP在建立对等体关系时,两端需要协商该参数,并保持一致。但是该参数并不会影响BGP对等体关系的建立。
- 如果两端的保活时间不同,则按照较小的一端数值来执行。
- 如果在该时间内未收到对端发送来的保文信息,则认为BGP连接断开。该时间默认为180s,报文的周期发送时间为保活时间的三分之一,即60s。
- 该参数可以设置为0,此时代表不发送keepalive报文周期保活。
- 因为BGP会话是基于TCP会话建立,只要TCP判断连接断开,则BGP会话断开,故保活机制对于BGP而言并不那么重要,而设定保活机制原因仅仅是因为TCP判断会话断开所需要的时间过长,为了加快收敛速度,添加保活机制。
- 路由刷新功能
keepalive包
作用:主要用于周期保活,临时充当确认报文。
keepalive报文发送事件默认为保活时间的三分之一。
**keepalive报文的确认实际上是针对open报文的参数信息进行确认,而非open报文本身。**TCP协议进行确认的目的是为了保障数据传输的可靠性,而keepalive报文确认的目的是为了告知对端本地认可你的参数内容。
当收到的open报文中的参数通过验证,则回复keepalive报文;如果未通过验证,则回复Notification报文。
Update包----更新包
作用:用于在对等体之间传递路由信息,可以用于发布和撤销路由。
- 撤销路由字段长度-----Unfeasible routes length(2Byte)
- 撤销路由列表-----Withdrawn routes(NByte)
- length---->待撤销路由的掩码信息
- perfix---->传输的IP地址前缀信息
- 路径属性字段长度-----Total path attribute length (2Byte)
- 路径属性列表-----Path attributes (NByte)
- NLRI (NByte)----->网络层可达信息
- 内容和撤销路由列表相同
BGP状态机
OSPF的状态机是在描述整个协议的完整工作过程,而BGP的状态机仅描述的是对等体关系建立过程中的状态变化。-----因为BGP将邻居建立过程以及BGP路由手法过程完全隔离。
IGP协议在启动后,需要通过network命令激活接口,从而使接口具备处理IGP协议报文的能力。且network命令另一重含义就是发布路由,所以IGP协议无法将邻居建立过程以及路由收发过程隔离。
但是BGP协议在启动后,每一个接口都具备处理BGP报文的能力,不需要其他任何操作,所以可以将邻居建立过程以及路由收发过程进行分割。
- Idle-----空闲状态
- 等待网络管理员手工指定邻居信息、IP地址以及AS号
- 当指定邻居信息后,会进入一个检查环节,需要检查手工指定的IP地址在本地路由表中是否可达,只有可达,才可以正常建立TCP会话,如果不可达,则邻居关系建立失败,停留在Idle状态。
- Connect-----连接状态
- 该状态会开启一个连接重传定时器----32秒
- 当该计时器时间超时,则本端重新发送一次TCP连接请求报文。在该时间段内没有收到任何一个回复报文。
- 如果此时本地判断TCP状态进入到establish状态,则认为TCP连接建立成功,进入到opensent状态。
- 如果此时本地收到的是拒绝报文,则认为TCP连接建立失败,进入到Active状态。
- 如果BGP在连接重传定时器时间内,没有收到对等体的响应,那么BGP会继续尝试与对等体建立TCP会话,并一直处于该状态。
- 该状态会开启一个连接重传定时器----32秒
- Active-----尝试状态
- 当第一次TCP会话建立失败,则进入该状态。
- 如果建立成功,则进入opensent状态;如果建立失败,则停留在active状态。
- 使用在connect状态开启的连接重传定时器来发送连接建立请求报文,当建立成功后,该计时器才会被关闭。
- opensent状态
- 本地发送出open报文,同时也将收到对端发送的open报文,并予以回复。
- 如果收到的open报文中的参数本端认可,则回复keepalive报文;否则回复notification报文。
- 如果回复keepalive报文,则进入openconfirm状态;如果回复notification报文,则进入idle状态。
- openconfirm状态
- 等待对等体对于本地发出的open报文参数的回复。
- 如果收到的是keepalive报文,则认为BGP会话建立成功,进入到establish状态。
- 如果收到的是notification报文,则认为BGP会话建立失败,断开TCP连接,回到idle状态。
- Establish-----建立状态
- BGP会话建立的标志。
- 在该状态可以发送除了open报文以外的所有BGP数据报文。
BGP的工作过程
1、基于IGP、静态、直连路由协议实现IP可达----->前置要求,不是BGP工作过程
2、启动BGP协议,并指定邻居关系:
- 邻居之间使用单播进行数据传输,通过三次握手,建立TCP会话通道。
- 之后所有的数据通讯均基于TCP会话通道来传输,并由TCP协议来提供传输的可靠性机制。
3、使用open报文和keepalive报文进行邻居之间参数的协商,以及对等体关系的建立。
- open报文用来携带参数信息
- keepalive报文用来进行参数确认
- 最终生成BGP邻居表。
4、使用Update报文来传输BGP路由信息,该信息中将携带前缀信息、前缀长度以及路径属性。
- 设备会将自己发送的以及收到的所有BGP路由信息记录在BGP路由表中。
- 设备会对比不同路由表单,将其中最优的路由信息加载到全局路由表中。
5、此时路由收敛完成,BGP对等体之间使用keepalive报文进行周期保活(可选),默认为180s,可以设置为0,关闭周期保活性质。
6、如果出现出错误,使用notification报文告警;如果出现结构突变,使用update报文进行增量更新。
BGP的防环
EBGP的水平分割机制
专门为了解决EBGP对等体之间的路由环路问题
通过AS_Path属性进行防环,该属性会记录下该路由信息所经过的所有AS的AS号。当设备收到一条路由信息时,会查看该属性内容,如果其中存在有与本地AS号相同的信息,则不接受该路由信息。
IBGP的水平分割机制
BGP规定:当路由器从一个IBGP对等体学习到某条BGP路由时,它将不能再把这条路由信息通告给任何IBGP对等体------IBGP水平分割机制。
解决思路:
- 将原本的IBGP对等体关系替换为EBGP对等体关系-----在同一个AS下-----联邦。
- 手工设定让某台路由器将从IBGP学习到的路由信息传递给某个IBGP对等体-----路由反射器。
- 构建全互联的IBGP对等体关系。-----暂时常用
BGP的路由黑洞
BGP同步更新规则----为了避免BGP路由黑洞问题
当一台路由器从自己的IBGP对等体学习到一条IBGP路由时,它将不能使用这条路由或者将这条路由通告给其他设备,除非他又从IGP协议中学习到这条路由信息-------要求IBGP路由与IGP路由同步。
华为与思科默认禁止使用该规则,华为不允许打开该规则,思科允许打开该规则。
解决方法:
- 让两台运行BGP设备在物理或逻辑上直连
- 所有设备运行BGP协议-------暂时最常用
- 将BGP路由引入到IGP中。
- MPLS------多协议标签交换-------现网环境使用的解决方案
BGP基础配置
使用直连接口IP地址来建立EBGP对等体关系(R1和R2之间):
1、启动BGP协议
[r1]bgp 100 ----启动BGP协议,并且规定其AS号
2、配置设备的RID数值,一般选择设备的loopback的接口的IP地址
[r1-bgp]router-id 1.1.1.1
3、配置BGP对等体信息,包含了对等体的IP地址以及对等体所在的AS号
[r1-bgp]peer 12.0.0.2 as-number 200
使用环回接口建立非直连的IBGP对等体关系(R2、3、4之间):
1、启动BGP协议
[r2]bgp 200
2、配置设备的RID数值
[r2-bgp]router-id 2.2.2.2
3、配置BGP对等体信息
[r2-bgp]peer 3.3.3.3 as-number 200
4、修改源数据包中的源IP,对等体双方均需要进行修改
[r2-bgp]peer 3.3.3.3 connect-interface LoopBack 0
[r3-bgp]peer 2.2.2.2 connect-interface LoopBack 0
使用环回接口建立EBGP对等体关系(R4和R5之间):
一般在EBGP对等体设备之间,会使用多条链路进行连接,起到备份的作用,故可以使用环回接口来建立。
[r4]ip route-static 5.5.5.5 32 45.0.0.5
[r4]bgp 200
[r4-bgp]peer 5.5.5.5 as-number 300
[r4-bgp]peer 5.5.5.5 ebgp-max-hop 2
[r4-bgp]peer 5.5.5.5 connect-interface LoopBack 0
[r5]bgp 300
[r5-bgp]router-id 5.5.5.5
[r5-bgp]peer 4.4.4.4 as-number 200
[r5-bgp]peer 4.4.4.4 ebgp-max-hop 2
[r5-bgp]peer 4.4.4.4 connect-interface LoopBack0
问题:此时TCP会话会正常建立,转而建立BGP会话。但是,对设备而言,此时的对端IP检查会发现是通过静态路由或IGP路由才可实现网络可达。那么也就意味着此时需要通过多跳才能到达目的地,而数据包中的TTL=1,发现错误,故两端均会发送notification报文进行告警,并断开BGP和TCP会话。
修改TTL数值:两边均需要修改
[r4-bgp]peer 5.5.5.5 ebgp-max-hop 2 ---修改TTL=2,如果不加参数,则修改为255
使用直连接口IP地址来建立EBGP对等体关系,除R1以外的配置:
[r2]bgp 200
[r2-bgp]router-id 2.2.2.2
[r2-bgp]peer 12.0.0.1 as-number 100
使用 display bgp peer 命令查看BGP邻居表
Peer | V | AS | MsgRcvd | MsgSent | Out | up/down | state | prefRcv |
---|---|---|---|---|---|---|---|---|
对等体IP地址 | 版本号 | 对等体所在AS号 | 已经收到的数据包数量 | 发送的数据包数量 | 出战对列 | BGP协议的启动时间 | 状态机 | 表示收到的路由信息数量 |
使用 display tcp status 命令查看
手工建立邻居关系时,所指定的建邻的IP地址必须和收到的数据包中的源IP地址相同才可以正常建立邻居关系。否则,邻居关系将建立失败。---->修改发送方数据包中的源IP地址。
BGP的路由发布
通过network命令发布路由信息
在BGP中,network命令只能用来发布路由信息。对于BGP而言,只要是路由表中存在的路由信息,都可以通过network命令发布,并且发布的路由必须时本地可用的路由信息。
[r1-bgp]network 1.1.1.1 32 ------发布1.1.1.1/32的路由信息
发布路由时,网络号和掩码信息必须与全局路由表中的信息一致。
[r1]dis bgp routing-table -----查看BGP路由表
NextHop:谁发送的路由信息,下一跳就为谁。如果是本地始发,则该字段为0.0.0.0。
状态码-----路由条目最前面的符号
*
代表可用:设备收到路由条日后,会根据下一跳属性参数来査询本地路由表,查看该地址是否可达,如果可达,则认为这条路由条目可以使用,如果不可达,则这条路由条目不能使用。
>
代表优选:当设备收集到多条到达相同网段的路由信息时,将依据路径属性进行路由优选,从而选择出最优的一条路由信息,该路由信息可以被路由器加载到全局路由表中,并且向下一跳BGP路由器进行传递。
i
代表这条路由信息时从IBGP对等体学习到的。
s
代表该路由信息被抑制************************
如果一条BGP路由信息不可用,则这条路由信息不会参与到路由优选过程。BGP协议在传递BGP路由信息时,只会传递可用且优的路由条目,即*>的状态码。
该条路由信息传递到R3后,因为AS-BY-AS规则,认为此时是在一个整体中进行数据传递,那么路由信息的内容不会发生改变,所有路径属性相同。
这就会导致R3认为传递这条路由信息的人是R1,其下一跳属性为12.0.0.1。而R3设备验算失败,这条路由不可用,即没有*,也没有>。
解决思路:
[r2-bgp]peer 3.3.3.3 next-hop-local ------R2在给3.3.3.3传递路由信息时,将下一跳属性修改为本地
BGP在全局路由表中的下一跳是跟着BGP路由表中的下一跳一致。
使用 display fib 命令查看fib递归表
总结:
- 完成所有路由器的IGP配置
- 使用直连接口建立EBGP对等体关系
- 使用环回接口建立IBGP对等体关系
- 使用connect-interface命令修改IBGP的源IP地址
- 使用next-hop-local命令修改路由传递的下一跳属性
- (可选)如果存在使用环回接口建立EBGP对等体,需要使用ebgp-max-hop命令修改TTL数值
通过重发布的方式发布路由
[r2-bgp]import-route ospf 1 ------将通过OSPF进程1学习到的路由信息重发布到BGP中。
Ogn------起源码属性
标识这条路由信息的起源。
i :
代表这条路由信息时起源于AS内部使用network命令通告的路由信息。
e :
代表这条路由信息起源于EGP协议---现在几乎看不到。
? :
除了以上两种方式获取到的路由信息。
在BGP协议中,不在乎这条路由信息到底属不属于本地的直连,只在乎这条路由信息在本地全局路由表中是否可用。只要可用就可以通过BGP进行通告。
作业
具体内容参照:BGP基础配置实验:http://t.csdnimg.cn/YGHpI
BGP的路由聚合
自动聚合
不常用。------>只能针对重发布的路由信息生效。
华为设备默认关闭自动汇总功能。
将172.16.1.0/24、172.16.2.0/24网段发布到BGP中:
分别抓取流量:
[r1]ip ip-prefix aa permit 172.16.1.0 24
[r1]ip ip-prefix aa permit 172.16.2.0 24
整体抓取流量:
[r1]ip ip-prefix qq permit 172.16.0.0 22 greater-equal 24 less-equal 24
[r1]route-policy aa permit node 10
[r1-route-policy]if-match ip-prefix aa
[r1-bgp]import-route direct route-policy aa
[r1-bgp]summary automatic -----开启自动聚合功能
自动汇总仅支持将子网路由汇总到主类,而主类之间的路由信息无法进行汇总。
通过自动汇总功能,发布的聚合路由信息,该路由的下一跳在始发路由器显示为127.0.0.1。
因为自动聚合是进行主类网段的聚合方式,会造成大范围的路由黑洞,为了防止因为路由黑洞所产生的环路问题,所以,BGP设备会自动产生一条指向NulI接口的汇总路由信息,进行防环,该路由信息的来源为IBGP。
手工聚合
关键字 | 参数 | 缺陷 | 优势 |
---|---|---|---|
aggregate | / | 无法抑制明细路由,导致聚合操作并没有减少路由条目数量,反而增加; 汇总路由丢失了明细路由的路径属性,可能会造成一些环路隐患。 | 可以灵活指定汇总路由的目的网络掩码长度,且不受网络地址类型的限制。 可以在非直连设备上进行汇总,前提条件是非直连设备上的明细路由可用且优。 |
detail-suppressed | 在某些情况下,可能还需要部分明细路由进行传输,而该命令会抑制所有明细路由 | 可以抑制所有明细路由 | |
suppress-policy | 抓取流量时,需要选择permit操作,因为抑制策略时取反操作。 | 可以灵活性的选择明细路由的发送。 | |
as-set | 仅继承AS_Path属性 | 可以继承路径属性 | |
attribute-policy | 可以添加其他路径属性内容 |
将172.16.0.0/24--172.16.14.0/24网段进行手工聚合:
汇总网段为:172.16.0.0/20
[r3-bgp]aggregate 172.16.0.0 20 ------手工聚合
当配置该命令后,设备会做如下操作:
1、检测本地BGP路由表中是否有聚合路由的可用子网路由信息。
2、若有则在本地BGP路由表中发布一条指向空接口的防环路由信息。若无,则该命令无效。
3、将这条汇总路由发布到BGP当中。
BGP的手工聚合可以在非直连设备上进行,只要本地BGP路由表中存在这些明细路由信息,且明细路由信息可用且优,就可以进行路由聚合操作。
[r1-bgp]aggregate 172.16.0.0 20 detail-suppressed ------在发布汇总路由的前提下,抑制所有明细路由
需求:只发送聚合路由172.16.1.0/24路由,其他路由信息被抑制。
1、抓流量
[r1]ip ip-prefix aa deny 172.16.1.0 24
[r1]ip ip-prefix aa deny 172.16.0.0 20 greater-equal 24 less-equal 24
2、做策略
[r1]route-policy aa permit node 10
[r1-route-policy]if-match ip-prefix aa
3、调用
[r1]bgp 100
[r1-bgp]aggregate 172.16.0.0 20 suppress-policy aa
suppress-policy 参数译为“抑制策略”,因为该参数所指定的route-policy中,被允许的路由信息会被抑制。
[r1-bgp]aggregate 172.16.0.0 20 detail-suppressed as-set
as-set--->该参数会让聚合路由继承明细路由的As-path属性
as-set属性会继承所有明细路由信息的AS-Path属性值。如果设备的明细路由来源比较杂乱,那么会将所有的明细路由属性均继承到聚合路由中。但是这样会导致聚合路由的AS_Path属性过程,不利于进行路由优选。故聚合路由在继承多个明细路由属性时,会将多个属性使用{}括起来。
AS_Path属性有两个用途:
- 1.用于EBGP之间防环
- 2.用于路由优选规则,其中该属性包含的内容越少,这条路由越优
在聚合路由中,如果用于防环,则每一个数值都会读取。而如果用于选路,则会将(}中的内容当做是一个整体来看待。
[r1]route-policy bb permit node 10
[r1-route-policy]apply local-preference 10
[r1-route-policy]apply cost 200
[r1-route-policy]apply preferred-value 20
[r1-route-policy]apply as-path 1 2 3 additive
[r1-bgp]aggregate 172.16.0.0 20 detail-suppressed attribute-policy bb
需求:在某些场景中,我们可能希望汇总路由的产生,只以某条或某些特定的明细路由作为触发条件。
例如:只有172.16.1.0/24路由在本地可用且优时,才会通告汇总路由信息。
[r1]ip ip-prefix cc permit 172.16.1.0 24
[r1]route-policy cc permit node 10
[r1-route-policy]if-match ip-prefix cc
[r1-bgp]aggregate 172.16.0.0 20 origin-policy cc -------将172.16.1.0/24与172.16.0.0/20进行强关联。
origin-policy 参数是设定某种明细路由与汇总路由的强关联性,在默认情况下,所有的明细路由与聚合路由都是强关联的。而设定后,在去添加某些参数效果时,也只会对强关联的明细路由产生影响,而其他明细路由不关注。
BGP的汇总路由在产生时,默认情况下会存在属性丢失的问题,所以BGP在设计时,专门为聚合路由添加了两个独立的路径属性。用来警示路由环路的问题。
使用命令:dis bgp routing-table 172.16.0.0 20 查看路由信息详情:
- Aggregator------聚合者
- 携带汇总路由的始发路由器所在的AS号以及RID。
- 功能:用于标记聚合行为发生的位置
- Atomic-aggregate
- 预警属性,不携带任何信息,该属性是提供给网路管理员查看的。
- 只有这条路由信息的所有强关联的明细路由均被抑制时,才会携带。
路由反射器
BGP路由在AS内部只能传递一跳。
引入角色:
-
RR-----路由反射器
- RR就好比是一面镜子,可以将自己收到的BGP路由信息反射给气态BGP对等体
-
Client-----RR客户端
- 所有设备都可以是RR的客户端,但是这件事情需要由RR来指定。
- 只用RR的IBG篇对等体才可以称为其的客户
我们将RR与其的客户端所构成的系统称为路由反射簇,每一个路由反射簇都将使用RR的RID作为簇ID,来标识不同的发射簇。
路由反射器的反射规则:
- 如果RR从自己的非客户端收到一条IBGP路由信息,则可以转发给自己的客户端;
- 如果RR从自己的客户端收到一条IBGP路由信息,则可以转发给自己的所有非客户和除了路由发来的客户;
- 如果RR从自己的EBGP对等体学习到一条路由信息,则可以转发给所有人;
- RR只能将自己身上可用且优的路由信息进行反射。
[r3-bgp]peer 2.2.2.2 reflect-client -------将R2指定为本地的RR客户
路由反射器的出现,解决了IBGP路由传输的问题,打破了IBGP水平分割原理。而IBGP水平分割原理是为了防止BGP出现环路所设计的,打破会存在环路隐患。
路由反射器场景下的防环
起源者ID
规则:当一条BGP路由被RR反射给其他路由器时,如果这条路由已经携带了起源者ID属性,则保留该属性,否则由RR设备为这条路由信息添加起源者ID属性,并且将该属性的数值设定为本地AS内的始发路由器的RID。
防环逻辑:路由器从IBGP对等体收到一条IBGP路由,并且该路由所携带的起源者ID属性与本地的BGP RID相同时,则会意识到该路由信息是从本地始发的信息,将忽略这条路由信息的更新。从而避免环路。
该属性参数,只会在AS内部进行传递,不会传递出AS。
簇列表
规则:当一条BGP路由被路由反射器执行反射时,如果这条路由已经存在簇列表属性,那么路由反射器将本地的簇ID附加到路由的簇列表属性之前。而如果这条路由并不存在簇列表属性,那么RR会为这条路由信息创建一个簇列表属性并将本地的簇ID添加到簇列表中。
防环逻辑:当一台路由反射器收到BGP路由时,若发现该路由携带簇列表,并且簇列表中包含自己本地的簇ID,则忽略这条路由信息的更新。------防环效果类似于AS_Path属性。
注意:
- 当RR从EBGP学习一条路由,并传递给自己的IBGP对等体时,不会创建起源者ID和簇列表属性,因为者本质上不是路由反射行为。
- 这两个属性只会在AS内传递,传出AS时,这两个属性会被删除。
- 当路由反射器执行路由反射时,除了这两个属性,其他路径属性都不会修改。
反射器组网方案
备份RR组网
当客户端1从EBGP对等体收到一条BGP路由时,它将通过IBGP向RR1和RR2通告这条路由。
RR1和RR2在收到该更新路由后,将本地的簇ID添加到簇列表当中,然后向其他客户端反射,同时RR1和RR2相互反射。
RR1和RR2收到相互反射路由时,检查列表,发现与自己的簇ID相同。故忽略对端的路由更新,避免坏路问题。
如果要构建备份RR组网,所有的RR设备必须使用相同的簇ID。
[r2-bgp]reflector cluster-id 2.2.2.2 -----在RR上配置,配置后,会覆盖原有的簇ID,使用2.2.2.2为新的簇ID数值。
多集群路由反射器组网
让反射簇的RR之间建立IBGP对等体关系。
联邦
真实的AS 3456被称为联邦AS号,而联邦AS内部所细化的小的AS号,被称为成员AS号。成员AS号必须是私有AS号。------->私有AS号:64512-65534
成员AS之间的EBGP对等体关系是一种特殊的EBGP对等体,被称为联邦EBGP邻居关系。
- 联邦的EBGP对等体之间仅遵循EBGP对等体的路由传递原则。
- 联邦的EBGP对等体关系在传递路由信息时,不能像正常的EBGP邻居关系一样修改路径属性参数。
联邦AS内部的成员AS对于联邦外部而言是不可见的。
EBGP水平分割机制是依靠AS-Path属性完成,其记录了路由所经过的所有AS,而对于联邦AS而言,在联邦AS内部传递时,正常携带成员AS号用于防环,在传出联邦AS时,将成员AS号移除,正常添加联邦AS号。
联邦基础配置:
[r1]bgp 100
[r1-bgp]router-id 1.1.1.1
[r1-bgp]peer 10.1.13.3 as-number 3456 -----使用联邦AS号建立BGP对等体,原因在于对于R1而言,并不知道成员AS的内容。
[r3]bgp 64512 ---联邦成员设备启动时,使用成员AS号启动
[r3-bgp]router-id 3.3.3.3
[r3-bgp]confederation id 3456 -----定义联邦AS号
[r3-bgp]peer 10.1.13.1 as-number 100 ----与R1建立EBGP对等体
[r3-bgp]peer 4.4.4.4 as-number 64512 -----联邦成员之间建立IBGP对等体关系时,使用成员AS号
[r3-bgp]peer 4.4.4.4 connect-interface LoopBack 0
[r3-bgp]peer 4.4.4.4 next-hop-local
[r4]bgp 64512
[r4-bgp]router-id 4.4.4.4
[r4-bgp]confederation id 3456
[r4-bgp]peer 3.3.3.3 as-number 64512
[r4-bgp]peer 3.3.3.3 connect-interface LoopBack 0
[r4-bgp]confederation peer-as 64513 -----在联邦EBGP对等体关系的设备上进行指定,告知设备与自己建邻的
[r4-bgp]peer 5.5.5.5 as-number 64513
[r4-bgp]peer 5.5.5.5 connect-interface LoopBack 0
[r4-bgp]peer 5.5.5.5 ebgp-max-hop -----修改TTL值为最大值,因为在一个AS内部,无法确定建邻需要经过的跳数。
[r5]bgp 64513
[r5-bgp]router-id 5.5.5.5
[r5-bgp]confederation id 3456
[r5-bgp]confederation peer-as 64512
[r5-bgp]peer 4.4.4.4 as-number 64512
[r5-bgp]peer 4.4.4.4 connect-interface LoopBack 0
[r5-bgp]peer 4.4.4.4 ebgp-max-hop
[r5-bgp]peer 4.4.4.4 next-hop-local
[r5-bgp]peer 6.6.6.6 as-number 64513
[r5-bgp]peer 6.6.6.6 connect-interface LoopBack 0
[r5-bgp]peer 6.6.6.6 next-hop-local
[r5-bgp]peer 10.1.25.2 as-number 200
[r6]bgp 64513
[r6-bgp]router-id 6.6.6.6
[r6-bgp]confederation id 3456
[r6-bgp]peer 5.5.5.5 as-number 64513
[r6-bgp]peer 5.5.5.5 connect-interface LoopBack 0
[r2]bgp 200
[r2-bgp]router-id 2.2.2.2
[r2-bgp]peer 10.1.25.5 as-number 3456
在大型BGP网络中,路由反射器是作为联邦技术的补充技术共同使用。原因在于:联邦中的成员AS若为单线连接,只能存在两台设备,若单线存在多台设备,又会发生成员AS内部的IBGP水平分割现象。
作业—联邦和反射器实验:
具体内容参照:BGP联邦和发射器实验:http://t.csdnimg.cn/19Vj8
BGP的路径属性和选路规则
路径属性
- 公认属性-----指所有BGP路由器都要求识别的路径属性
- 强制属性----在进行路由更新时,必须携带的属性
- 自由决定属性----在进行路由更新时,可以不携带的属性
- 可选属性-----指不要求所有BGP路由器都能够识别的路径属性
- 传递属性----如果路由器无法识别该属性,也应该接收携带该属性的路由信息,并且在路由更新时,携带该属性。
- 非可传递属性----如果路由器无法识别该属性,那么在进行路由更新时,可以忽略该路径属性的传播。
属性名 | 类型 |
---|---|
AS_Path | 公认强制 |
Origin | 公认强制 |
Aggregator | 可选传递 |
Atomic-Aggregate | 公认自由决定属性 |
起源ID | 可选非传递 |
簇列表 | 可选非传递 |
Next-hop | 公认强制 |
local-preference | 公认自由决定属性 |
preferred-value | 私有属性(华为) |
属性名 | 类型 |
---|---|
MED | 可选非传递 |
社团属性 | 可选传递 |
BGP路由优选规则
PL LAO MEN-----------漂亮老男人(口诀)
12 345 678(规则)
也被称为最佳路径选择算法。
1.优选Preferred_Value属性值最大的路由
任何一条BGP路由在参与优选之前都必须先经过检查。设备会检查BGP路由的下一跳属性是否可达,如果不可达,则BGP路由被视为不可用,该路由将无论如何不能被优选,也不会被设备使用或者通告给其他对等体。
-------要求路由的优先级相同,默认的前提条件。
属性名 | 传播范围 | 默认值 | 评判标准 |
---|---|---|---|
PV | 不传递 | 0 | 越大越优 |
LP | AS内部 | 100 | 越大越优 |
AS_Path | BGP对等体之间 | 空列表 | 越少越优 |
OGN | BGP对等体之间 | 根据起源类型决定 | i>e>? |
MED | BGP对等体之间 | 默认继承全局路由表中的开销值 | 越小越优 |
PrefVal----PV值是华为的私有属性,默认值为0,可以理解为权重的概念,权重越大,则对应的路由信息的优先度越高。因为PV值是所有选路原则中的第一条规则,所以,该属性是本设备上选路最方便的属性。
该属性只能在本地生效,无法传递给任何BGP对等体。
方法一:全局修改
[r4]bgp 400
[r4-bgp]peer 10.1.34.3 preferred-value 6000
方法二:精细化修改
[r4]ip ip-prefix PV permit 10.10.0.0 16
[r4]route-policy PV permit node 10
[r4-route-policy]if-match ip-prefix PV
[r4-route-policy]apply preferred-value 100
[r4]route-policy PV permit node 20
[r4-bgp]peer 10.1.34.3 route-policy PV import
2.优选Local_Preference属性值最大的路由
LP属性默认为100,该属性只能在IBGP对等体之间传递,而不能在EBGP对等体之间传递,如果路由在传递到本地时不携带LP属性,则BGP在进行路由优选时使用缺省值来计算,数值越大越优。
这条选路规则时AS内部优选路由的最佳选择。
方法一:全局修改
该属性在IBGP对等体之间存在传递性,故想要影响R4,就必须在R2或者R3上进行修改,后续传递的就是修改后的数值。
[r3]bgp 234
[r3-bgp]default local-preference 200 ---该命令只会影响本地向外发布的路由,而不会影响本地收到的路由
方法二:精细化修改
[r4]ip ip-prefix LP permit 10.11.0.0 16
[r4]route-policy LP permit node 10
[r4-route-policy]if-match ip-prefix LP
[r4-route-policy]apply local-preference 200
[r4]route-policy LP permit node 20
[r4-bgp]peer 3.3.3.3 route-policy LP import
3.本地始发的BGP路由优于从其他对等体学习到的路由,本地始发的路由优先级:优选手动聚合>自动聚合>network>import>从对等体学到的
4.优选AS_Path属性值最短的路由
AS_Path属性 -------(BGP中非常重要的属性)
一台路由器将BGP路由通告给自己的EBGP对等体时,会将本地的AS号插入到该路由原有AS_Path属性之前。
- 实现EBGP路由的环路避免
- 用于BGP路由优选决策
- 该属性越短,该路由越优。
在路由被创建时,该属性也会被创建,仅仅为一个空的列表。
- {}-----在路由聚合时产生
- 从防环角度---->{}中的每一个AS号都需要查看
- 从选路角度---->不管{}中存在多少AS号,仅当作一个来计算
- ()-----联邦
- 选路----->忽略该括号中的内容
方法一:在R1的出方向修改
[r1]ip ip-prefix AS permit 10.13.0.0 16
[r1]route-policy AS permit node 10
[r1-route-policy]if-match ip-prefix AS
[r1-route-policy]apply as-path 11 22 33 overwrite
[r1]route-policy AS permit node 20
[r1-bgp]peer 10.1.13.3 route-policy AS export
特殊配置:
apply as-path none overwrite ----代表将该属性变为空列表
参数说明:
- additive
- 在原AS_Path属性的基础上添加配置的AS号
- overwrite
- 直接覆盖原有AS_Path属性
该属性是BGP重要的工作组成,EBGP防环依赖于该属性,故一般不建议修改改属性如果一定要修改,则建议添加或覆盖的AS号为曾经出现过的AS号,这样即加长了该属性,同时对网络的影响最小。
5.优选0rigin属性最优的路由。0rigin属性值按优先级从高到低的排列是:IGP、EGP及Incomplete
6.优选MED属性值最小的路由
MED的数值是由始发路由器继承IGP协议的Cost值而定的。该属性可以被传递给自己的EBGP对等体,也可以被传递给自己的IBGP对等体。
MED属性可以干扰其他人访问本地AS的流量走向。----->MED属性时BGP选路中唯一一个可以影响到其他AS的属性。----->传播范围:本地以及相邻的AS内部。
BGP规定,非本地始发的BGP路由信息,在传递给自己的EBGP对等体时,将MED值修改为0。
所有的AS边界设备均需要进行路由信息的发布。
MED总结:
- MED数值默认不为0,而是继承了路由表中该路由条目的开销值,所以,MED参数可以反映到达目标网段在本AS内部的开销大小,通过这个参数,别的AS的流量再进入本AS时可以选择开销较小的入口进入。通过修改该属性,可以影响其他AS的流量流入本AS的路径。
- 本地通过EBGP或者IBGP邻居学习到MED内容,之后将其传递给自己的EBGP对等体时,不再携带MED参数。因为可能会造成选路不佳。
注意:
- MED值影响的事别的AS的流量通过多个出口进入到本AS内部,如果流入的不是同一个AS,即收到的路由条目中的AS Path属性最左边的AS号不同,则将不比较第六条选路规则,直接比较第七条选路规则。----->如果想通过MED进行干涉选路,需要保证前五条规则内容完全相同(AS_Path属性的长度和内容和顺序也相同)
[r4-bgp]default med 100 ---全局修改方式
缺陷:只能针对本地聚合路由或者重发布引入的路由信息生效,并且是传递给EBGP对等体时才会携带,不会影响本地MED数值
7.优选从EBGP对等体学来的路由(EBGP路由优先级高于IBGP路由)
8.优选到Next_Hop的IGP度量值最小的路由
9.优选Cluster_List最短的路由
10.优选RouterID(OrginatorID)最小的设备通告的路由
在该条优选规则中,有起源者ID,则比较起源者ID;若无,则比较RID。
11.优选具有最小IP地址的对等体通告的路由
这条规则是一个保守措施,即使在前面所有的规则都未选中的情况下,该条规则一定能选中。
BGP负载均衡–负载分担
形成负载分担的条件—>BGP路由优选规则的1至8条规则中需要比较的路径属性完全相同。
[r4-bgp]maximum load-balancing ?
INTEGER<1-8> Specify maximum equal cost routes
ebgp EBGP routes as equal cost route
ibgp IBGP routes as equal cost route
[r4-bgp]maximum load-balancing ebgp 2 -----修改BGP最大负载分担路由条目为2,默认情况下为1。
如果携带了ebgp或ibgp参数,则代表对某种方式学习到的路由进行负载分担,不携带参数则表示全局执行。
在实现负载均衡后,无论是否配置了next-hop-local命令,本地设备都会向自己的IBGP对等体发布路由时,将下一跳修改为本地地址。
注意内容:当满足如下所有条件时,可以形成等价路由,从而形成负载均衡
- 原始下一跳不同
- PV、LP相同
- 都是聚合路由或者都不是聚合路由
- 起源码相同、MED相同
- AS内部的IGP开销值相同
- AS_Path完全相同-----内容相同、顺序相同、长度相同
[r4-bgp]load-balancing as-path-ignore -----忽略在进行负载均衡配置时的AS_Path属性对比。
BGP的路由过滤
需求:通过路由策略来完成,不让R2将172.16.1.0/24传递给R3
1、抓流量
[r2]ip ip-prefix aa permit 172.16.1.0 24
2、做策略
[r2]route-policy aa deny node 10
[r2-route-policy]if-match ip-prefix aa
[r2]route-policy aa permit node 20
3、调用
[r2-bgp]peer 10.1.23.3 route-policy aa export
需求:不让R3学习到172.16.2.0/24,使用前缀列表
1、配置前缀列表
[r3]ip ip-prefix aa deny 172.16.2.0 24
[r3]ip ip-prefix aa permit 0.0.0.0 0 less-equal 32
2、调用
[r3-bgp]peer 10.1.23.2 ip-prefix aa import
需求:通过filter-policy来完成,不让R2和R3学习172.16.3.0/24路由
1、配置ACL列表
[r2]acl 2000
[r2-acl-basic-2000]rule deny source 172.16.3.0 0
[r2-acl-basic-2000]rule permit source any
2、调用
[r2-bgp]peer 10.1.12.1 filter-policy 2000 import
------在BGP中使用过滤策略时,只能调用ACL列表,所以必须使用ACL列表来抓取流量
BGP的社团属性----Community
类似于路由的“标记”,我们可以针对特定的路由设定特定的社团属性数值,而下游路由器在执行路由策略时,可以通过社团属性来匹配目标路由信息。
社团属性是由32位二进制构成
- 十进制表示
- 十六位二进制:十六位二进制
在一条路由条目中,可以用多个团体属性进行标识。
名称 | 取值 | 功能 |
---|---|---|
internet | 0x00000000 | 代表所有路由信息 |
NO-advertise | 0xFFFFFF02 | 不能被通告给任何BGP对等体 |
no-export | 0xFFFFFF01 | 不能通告给EBGP对等体,但是可以通告给联邦的EBGP对等体 |
no-export-sub | 0xFFFFFF03 | 不能通告给任何EBGP对等体 |
1、抓流量
[r1]ip ip-prefix aa permit 1.1.1.1 32
2、做策略
[r1]route-policy aa permit node 10
[r1-route-policy]if-match ip-prefix aa
[r1-route-policy]apply community no-advertise
3、调用
[r1-bgp]peer 12.0.0.2 route-policy com export
----------------------------------给路由打上社团属性标记---------------------------------
目前大部分厂商默认在传递BGP路由信息时不传递社团属性,所以,需要传递社团属性,需要通过命令打开。
[r1-bgp]peer 12.0.0.2 advertise-community---开启社团属性的传播性
社团属性应用场景
假定:业务A--->100:111 业务B--->100:222
1、设定策略,定义社团属性标记
[r1]route-policy com-1 permit node 10
[r1-route-policy]apply community 100:111
[r1]route-policy com-2 permit node 10
[r1-route-policy]apply community 100:222
2、在发布路由时调用策略
[r1-bgp]network 172.16.1.0 24 route-policy com-1
[r1-bgp]network 172.16.2.0 24 route-policy com-1
[r1-bgp]network 172.16.3.0 24 route-policy com-2
[r1-bgp]network 172.16.4.0 24 route-policy com-2
3、开启社团属性的传播功能
[r1-bgp]peer 10.1.12.2 advertise-community
[r2-bgp]peer 10.1.23.3 advertise-community
需求:对业务A的流量拒绝,对业务B的流量打上no-export属性。配置位置:在AS 200中
4、抓取流量
通过社团属性过滤器来抓取携带社团属性的路由信息
[r2]ip community-filter 1 permit 100:111
[r2]ip community-filter 2 permit 100:222
5、做策略
[r2]route-policy com deny node 10
[r2-route-policy]if-match community-filter 1
[r2]route-policy com permit node 20
[r2-route-policy]if-match community-filter 2
[r2-route-policy]apply community no-export additive -----如果没有additive参数则代表直接覆盖
[r2]route-policy com permit node 30
6、调用策略
[r2]bgp 200
[r2-bgp]peer 10.1.12.1 route-policy com import
AS路径过滤器
需求:
1、禁止R3将始发于AS 100的路由传递给R5
2、R4将始发于AS 200的路由传递给R5时,修改MED
R3:
1、抓取流量
[r3]ip as-path-filter 1 deny _100$
[r3]ip as-path-filter 1 permit .* ----- . 代表任意;* 代表重复无数次。这条命令表示匹配所有
2、调用策略
[r3-bgp]peer 10.1.35.5 as-path-filter 1 export
R4:
1、抓取流量
[r4]ip as-path-filter 1 permit ^200$
2、做策略
[r4]route-policy aa permit node 10
[r4-route-policy]if-match as-path-filter 1
[r4-route-policy]apply cost 10000
[r4]route-policy aa permit node 20
3、调用
[r4-bgp]peer 10.1.45.5 route-policy aa export
AS路径过滤器末尾隐含拒绝所有条件。
正则表达式
目的:检查字符串中符合某个规定的特定子字符串,并且可以捕获这个字符串。
- 普通字符-------所有的大写和小写字母、数字、标点符号
- 特殊字符-------具备特殊含义
特殊字符 | 功能 | 举例 |
---|---|---|
^ | 行首 | ^10---->匹配10.10.10.1 |
$ | 行尾 | 1$ |
* | 匹配子正则表达式0次或多次 | 10* |
+ | 匹配子正则表达式1次或多次 | 10+ |
? | 匹配子正则表达式0次或1次 | 10? |
. | 匹配任意单个字符 | 0.0 |
() | 括号内看做一个整体 | |
_下划线 | 匹配任意括号(大中小括号),逗号,空格 | |
\ | 转义字符,将下一个字符转换为普通字符 | \ * -----> 匹配* |
X|Y | 匹配X或者Y | |
[XYZ] | 匹配包含的任意一个字符 | |
[^XYZ] | 匹配未包含的任意一个字符 | [^123]----->匹配除了1、2、3以外的任意字符 |
AS-Path属性:
1 2 3 100 200 300
1 1 1 200 100 200 ----匹配
1 2 1 200 100 200
100 200 300
1 2 3 3 3 100 200 300
匹配‘1 1 1 200 100 200’属性:
^[1|_]*20 === ^1_1_1_200_100_200$
作业:BGP选路实验
具体内容参照:BGP选路实验:http://t.csdnimg.cn/jBrYP
display lldp neighbor brief--------查看设备的邻接接口