BGP 边界网关协议

数通 · 2023-03-29 · 186 人浏览
BGP 边界网关协议

BGP基础

BGP基础原理

BGP(Border GateWay Protocol)边界网关协议
一种运行在自治系统间的动态路由协议
主要功能是将一个自治系统的路由传递到另一个自治系统

自治系统

一组被统一管理,内部运行同一个IGP协议的路由器组成的一个网络范围

自治系统编号

每个自治系统,需要用一个编号来区分不同的自治系统
一般分为2个编号,2字节AS编号和4字节AS编号
【2字节编号】:
公有AS编号:1-64511
私有AS编号:6512-65535

BGP的特点

【1】 BGP是自治系统外部路由协议,用来在AS之间传递路由
【2】 路径矢量路由协议,从设计上避免了环路的发生
【3】 由TCP协议承载,端口号179
【4】 支持CIDR和路由聚合
【5】 路由附带丰富的属性
【6】 只发送增量路由更新
【7】 支持路由过滤和路由策略

BGP的主要作用

BGP只负责把由从一个AS传递到另一个AS
从其他AS传递过来的路由在本地AS内部扩散需要依靠IGP

BGP跳数概念

BGP是路径矢量协议,一跳是一个自治系统
当一条路由传入某个AS时候
该路由的下一跳会变成上个AS的出接口的IP地址
当一条路由在某个AS内部路由之间传递时候,下一跳不变

AS防环机制

当一条路由从一个AS传出时候
会把该AS的编号按照从右往左的顺序一次记录在AS_PATH属性中
一个路由器从其他AS收到了一个路由通告
会检查该路由条路中AS_PATH属性中,如果出现了自身的AS编号
则不会学习该条路由条目
例如:

10.1.1.2(AS-PATH:300,200,100)
BGP工作层次

工作在传输层,基于TCP协议传输
必须手动配置邻居关系,目的端口号179

BGP增量更新

BGP第一次会发送完整的路由表信息
后续只会发送增量更新

BGP的路由选择

BGP中可以有多重属性来控制路由选择

BGP的相关术语

BGP Speaker

BGP Speaker
BGP发言者
就是运行了BGP的路由器
用于接受或者产生新的路由信息
并且发布给其他BGP发言者

Router-id

一个32位比特无符号整数
用于标识自治系统内的一台路由器
运行了BGP的路由器必须有Router-id
和OSPF的Rotuer-id类似

BGP对等体

对等体
BGP Peer
指相互存在TCP连接
且能相互交换路由信息的BGP发言者之间被称为对等体(就是邻接)
可以非直连建立邻居关系(用的TCP协议,只需双方TCP能够互通,就可以建立)
被分为两类IBGP对等体EBGP对等体

IBGP
【IBGP对等体】: BGP对等体属于同一自治系统内的话就是该身份
EBGP
【EBGP对等体】: BGP对等体处于不同自治系统之间时,就是该身份

在自治系统内传递路由的问题

示例
在自治系统内部是使用IBGP来传递路由属性,例如上图:
R1的路由需要传递给R6
R1需要先传递给R2,R2收到后继续需要传输给R5
在R2上该条路由的下一跳是到达R1的接口的IP地址
但传递给R5之后,R5会判断该条路由的下一跳,但是根据BGP的定义下一跳地址为发出该条路径的R1的接口的IP地址,但R5不认识这个下一跳地址,所以就不会学习该条路由
解决办法:
最常见的就是在R2这个边界路由上做个转换
将收到的路由条目在下发给IBGP时,将下一跳地址指向自己
如果对端的路由需要传递去R1,在R5这个边界路由器上还是会做相同的工作,将下一跳地址指向自己,然后下发至IBGP内
由引出下一个问题:BGP路由黑洞问题

BGP路由黑洞问题

示例
由于在IBGP邻居之间没有运行BGP协议的路由器
因此无法获取BGP路由,从而导致进入的数据包会被丢气

解决方案:

【1】 将BGP引入到IGP
【2】 在黑洞路由器上配置目的网段静态路由
【3】 IBGP全连接,就是IBGP的水平分割,从IBGP邻居学习到的路由不会传递给其他IBGP邻居
IBGP全连接
【4】 BGP路由反射器,在路由器中手动选出一台反射器,可以允许从IBGP学习到的路由传递给其他IBGP,可以无视IBGP水平分割
【5】 BGP联盟,会在自治系统内部,再划分子自治系统,通过在子自治系统之间形成EBGP关系来传递路由,不影响路由查找
BGP联盟
一般场景中反射器用的比较多

BGP消息

BGP的消息
一共有五种报文OpenKeepliveUpdateNotificationRouter-refresh

Open消息

用于建立BGP对等体之间的连接关系和协商(建立邻居关系)
报文里面包含了:
BGP版本号自己所属的AS号Router-idHold Time值认证信息

Keeplive消息

用于BGP周期性的向对等体发出Keepalive消息,主要作用和OSPF的hello报文类似,让邻居知道自己纯在,保持邻居稳定关系,还可以哟品与收到对方Open消息时作为回应使用。
报文格式中职包含消息头,没其他附加任何字段,总长度19字节
标记长度类型

Update消息

用于在对等体之间交换路由信息
他既可以发布可达路由信息
也可以撤回不可达路由信息
一条Update消息可以通告一类具有相同路径属性的可达路由
同时还可以携带多条不可达路由
简单的来说就是(携带路由的更新、删除、增加)

Notification消息

用于错误的通知
BGP发言者如果检测到对方发过来的消息错误或者有主动的断开了连接的,都会发出Notification消息来通知BGP邻居
并且关闭连接状态回到idle状态
如果收到邻居发来的Notification消息,也会将状态改变为idle

Route-refesh消息

用于对等体重新发送指定地址族的路由信息
BGP第一次更新会发送所有的路由表给邻居
后续就是增量跟新
而后续需要再发完整路由表的话,就需要该条报文

ORF机制

在对等体的入方向配置了路由策略
就会发送该机制报文,用于通告策略匹配的路由

BGP状态机

BGP状态机
一共分为六个状态机IdleConnectActiveOpenSentOpenConfirmEstablished

Idle状态

空闲状态
也就是初始化状态,等待Start事件产生
【事件产生:】 开启ConnecRetry定时器,向邻居发起TCP连接,进入Connect状态
【事件未产生:】 一直等待

Connect状态

连接中状态,正在建立TCP连接
就是TCP连接的建立,三次握手
【连接成功:】 发送Open消息,关闭定时器,进入OpenSent状态
【连接失败:】 进入Active状态,如果定时器超时,任然重连,并且处于Connect状态
本端属于TCP连接的被动方

Active状态

活跃状态
如果启动了TCP连接,但是连接失败,会进入此状态,该状态任然是TCP连接状态
Active状态会响应系统ConnectRetry Timer expired事件,并且进行重连
同时重置定时器,再次回到Connect状态,如果成功,进入Opensent状态
并且清除之前的定时器,和HoldTime定时器
本端属于TCP连接的主动方

Opensent状态

开始发送状态
成功建立TCP连接后,发出Open报文
等待接收邻居发送的Open报文
【收到Open:】 无误转向OpenConfirm状态,同时向HoldTime定时器的值设置为协商值,并设置Keepalive定时器
【收到错误Open:】 发送Notification错误报文,并且关闭连接

OpenConfirm状态

消息确认状态
表明收到了Open消息,已经收到了对方的Keepalive消息
【收到keepalive】 转入Established状态,并且重置HoldTime定时器
【收到notification】 断开连接

Established状态

连接已建立状态
该状态标识BGP的连接建立状态完成
可以使用Update消息来交换路由信息
【keepalive定时器超时:】 超时则重置定时器,重新发送keepalive消息
【收到keepalive:】 重置HoldTime定时(和OSPF的Deadtime一样)
如果检测到错误或者收到Notification消息,则断开连接

BGP邻居建立的条件

IBGP

对方IP地址TCP可达(需要具有到达对方IP地址的路由)
一般使用换回地址来指定IBGP邻居
更新源地址必须和邻居指定的IP地址一致,(需要配置修改更新源为换回口)
其中IBGP邻居关系不需要直连

/*修改更新源*/
[R1-bgp-default]peer [ip-address] connect-interface [interface]
/*修改对邻居的发送报文的源地址为[interface]接口*/
EBGP

对方IP地址TCP可达,且需要直连
可以通过修改EBGP最大跳数来让EBGP非直连建立邻居
建议使用直连接口地址来指定EBGP邻居
更新的源地址必须和邻居指定的IP地址一致

/*修改最大跳数*/
[R1-bgp-default]peer [ip-address] ebgp-max-hop [number] 
/*在协议视图修改到达邻居的最大跳数(TTL)*/

BGP路由优选

注意该条内容需要背诵


【1】: 首先丢弃下一跳不可达的路由Next-HOP
【2】: 优选Preferred-value值最大的路由
【3】: 优选本地优先级Local_Pref最高的路由
【4】: 依次选择network命令生成的路由、import-route命令引入的路由、聚合路由
【5】: 优选AS路径AS_PATH最短的路由
【6】: 依次选择ORIGIN属性为IGP、EGP、Incomplete路由
【7】: 优选MED值最低的路由
【8】: 依次选择从EBGP、联盟EBGP、IBGP学来的路由
【9】: 优选下一跳度量值最低的路由
【10】: 优选CLUSTER_LIST长度最短的路由
【11】: 优选ORIGINATOR_ID最小的路由
【12】: 优选Router-id最小的路由器发布的路由
【13】: 优选IP地址最小的对等体发布的路由

BGP负载分担

BGP无法产生等价路由
只有通过配置来产生等价路由
BGP的负载分担与IGP的负载分担有所不同

IGP负载分担

IGP是通过协议自身定义的路由算法
对到达同一目的地址的不同路由
将度量值(metric)相等的路由进行负载分担

BGP负载分担

BGP本身没有路由计算的算法,但是BGP有丰富的选路规则
可以在对路由进行一定的选择后,有条件的进行负载分担

BGP路由的发布策略

【1】 只将最优路由发布给对等体
如果配置了advertise-rib-active命令
则BGP只发布IP路由表中的最优路由
否则,发布BGP路由表中的最优路由

【2】 只将自己使用的路由发布给邻居
【3】 从IBGP学习到的路由不向其他IBGP邻居发布
【4】 如果一个路由器既连接了EBGP又连接了内部的IGP,就需要配置下一跳地址为自己next-hop-local

BGP的基础配置

实例:
配置实例

宣告路由注意事项

BGP宣告路由用的正掩码
宣告的路由会在本机的路由表中精确匹配项
路由表内有该项,才会放入BGP的路由表中下发给邻居路由

/*创建BGP进程,设置区域编号*/
[h3c] bgp [as-number]
/*设置Router-id*/
[h3c-bgp] router-id [id]
/*手动配置邻居*/
[h3c-bgp] peer [ip-address] as-number [as-number]
/*手动跟新源*/
[h3c-bgp] peer [ip-address] connect-interface [interface]
/*进入IPv4单播(unicast)地址簇*/
[h3c-bgp] address-family ipv4 unicast
/*启用邻居*/
[h3c-bgp-ipv4] peer [ip-address] enable
/*变更下一跳地址为本机*/
[h3c-bgp-ipv4] peer [ip-address] next-hop-local
/*宣告路由*/
[h3c-bgp-ipv4] network [ip-address] [mask]
/*查看BGP邻居*/
[h3c-bgp-ipv4] display bgp peer [ipv4]
/*查看BGP路由表*/
[h3c-bgp-ipv4] display bgp routing-table ipv4
BGP路由表

BGP路由表

BGP路由属性控制

该功能主要是通过配置、修改BGP的基本属性值
来影响协议选路,从而实现控制BGP路由的目的
引入其他路由协议发现的路由时,发布或者接收路由信息时
通过匹配过滤器实现控制BGP路由,例如:
【1】 Fiter-policy
【2】 Route-policy
【3】 As路径访问列表

BGP属性分类

公共属性

公认属性又被分为公认必遵属性公认可选属性

【公认必遵属性】
由BGP发布的路由必须携带,所有的路由器必须识别的属性
携带属性:
【1】 AS_PATH AS路径
【2】 Next-hop下一跳信息
【2】 Origin 起源,BGP路由来源


【公认可选属性】
所有路由器都识别,但是不是必须携带是属性,可有可无
携带属性:
【1】 Local-Preference 本地优先级
【2】 Atomic_aggregate 自动聚合

可选属性

可选属性又被分为可选传递属性可选非传递属性

【可选传递属性】
路由器key不识别该属性,但会继续向下传递该属性
携带属性:
【1】 Community 团体字
【2】 Aggregator 手动聚合

【可选非传递属性】
路由器可以不识别该属性,而且不识别时候,不会继续向下传递属性
携带属性:
【1】 MED
【2】 Cluster_list 集群列表
【3】 Originator_id 起源ID

各类属性详解

下列属性都可以人为修改

AS_PATH

【定义】: AS路径属性,记录路由传递过程中经历的AS编号
【作用】: AS防环、路由优选[AS-PATH短的优先]
【注意】:
AS-PATH属性增加AS编号是在路由从一个AS传出的时候增加
增加AS-PATH长度来控制选路时,建议增加已经真是经过的AS编号,防止AS防环机制导致路由无法学习例如:

/*没修改前*/
(100,200)
/*修改后*/
(200,100,100,200)
/*用于控制选路路径*/
Next-hop

【定义】: 下一跳属性
【注意】:
路由发布给EBGP邻居,下一跳变更为指定的EBGP邻居地址
路由发不给IBGP邻居,下一跳不变,仍保持为指定的上一个AS的EBGP邻居的IP地址
对IBGP邻居发布的路由通过命令修改下一跳为本机

[h3c-bgp-ipv4] peer [ip-address] next-hop-local
Origin

【定义】: 源属性,标识该路由的来源
【属性值】:
IGP :来源于Network宣告、聚合的路由,在BGP路由表中显示为i
EGP :来源于引入的EGP协议路由,在BGP路由表中显示为e
Incomplete :来源于引入的IGP协议或者静态路由,在BGP路由表中显示为?
【优选顺序】 IGP>EGP>Incomplete

【注意】:

Local-Preference

【定义】: 本地优先级
【作用】: 用来通告IBGP邻居离开AS的最优路径
【注意】: 默认值100,值越大越优先,只对IBGP邻居传递,不对EBGP邻居传递

MED

【定义】: 多出口鉴别器,相当于IGP路由协议的度量值metric
【作用】: 用于判断流量进入AS时候的最优路径
【属性值】:
NetWork路由 默认值为0
引入的路由 默认值为原IGP协议中的cost
【注意】:
数值小的优先
MED属性会被传递至IBGP邻居和EBGP邻居,但不会传递给下下个AS
也就是说只能传递一个自治系统,路由从另一个AS到另一个AS传递路由到时候就不带MED值
以上为简述,下面是详细解释:
如果一条路由的MED属性是在本机赋予的,该路由的MED属性会传递至IBGP和EBGP邻居
如果一条路由的MED属性不是本机赋予的,该路由的ED属性值会被传递至IBGP邻居
路由是本机发布进BGP或者在本机上通过策略修改了MED属性,都算MED属性本机赋予
默认情况下,一个路由器只会对同一个AS的EBGP邻居传递路由比较MED

Preferred-value

【定义】: 首选项值
【作用】: 用于控制本地路由选择
【属性值】: 默认为0,如果本地是始发路由,默认值是32768,数值越大越优先
【注意】:
该选项是华三和华为BGP私有协议
该属性不会传递给任何BGP邻居,只对本地有效

属性控制的选择建议

【1】 如果希望影响下游所有的路由器的路由选择,建议使用AS-Path
【2】 如果希望只影响本AS内部路由器的路由选择,建议使用Local-Preference
【3】 如果希望只影响下游某个AS的路由器的路由选择,建议使用MED
【4】 如果希望只影响某一台路由器的路由选择,建议使用Preferred-value

BGP属性控制的方法

路由策略

注意事项:
路由策略的使用位置

对邻居传出或者传入的方向调用

匹配路由使用apply子句修改属性
其他路由使用空节点正常放行

宣告网段时调用

在使用net宣告网段时直接调用Route-polciy
直接使用apply子句修改属性
不需要配置if-match匹配条件
不需要配置空节点

引入时调用

如果要过路由过滤则不需要配置空节点

BGP属性控制实例

基础操作实例

Preferred-value控制路由

实例

/*直接在启用邻居地址族内使用*/
peer  [ip-address] preferred-value
/*值越大,优先级越高,只影响本地*/
Local-Preference控制路由

实例

/*只能在地址族内配置*/
default local-preference [value]
/*值越大,越优先,只影响AS内下游路由器*/
MED值控制路由

实例

/*还是在地址族内配置*/
default med [value]
/*
数值越小越优先
影响外部AS收到的路由
*/
next-hop-local控制路由

实例

/*IBGP内部路由的下一跳不可达所以学习不到路由,需要修改下一跳值*/
peer [ip-address] next-hop-local
/*修改下一跳地址为自身*/

路由策略、包过滤实例

基于包过滤

包过滤
通过配置前缀访问列表匹配需要执行操作的源地址
在BGP内使用包过滤调用前缀访问列表

[BGP] filter-policy prefix-list [id] [import/export]
[H3C] ip prefix-list [id] index [num] [permit/deny] [address] [netmask]
基于路由策略

路由策略
通过配置acl、或则前缀访问列表来实现对源地址的匹配
在路由策略中调用ACL或者前缀访问列表
在执行apply语句实现对路由属性的控制

[h3c] route-policy [name] [permit/deny] node [id]
[h3c-router-policy] if-match ip address [acl/prefix]
[h3c-router-policy] apply [cost/origin/local-preference/preferred-value]

AS路径过滤列表

AS_PATH List
用于对自治系统路径域指定匹配条件的过滤器
AS路径过滤器表使用regular expression正则表达式,来对路由所携带的AS路径属性域进行匹配
一个AS过滤列表可以包含多个表项,各表项之间是"或"的关系

正则表达式操作符

正则表达式

一般会在结尾加一个_来标识匹配符号,也就是相当于只匹配一个结果
常用的正则表达式:

^$
/*标识只匹配本地路由*/
.*
/*标识匹配所有路由*/
^100
/*标识匹配AS100/10000/1001/1002等等开头的as路径*/
^100_
/*匹配最后经过的AS是100开头的路由*/
^100$
/*标识匹配源自AS100*/
-100$
/*匹配最后三个字符是100的AS始发的路由*/

基础配置:

ip as-path [id] [permit/deny] [^/$]
/*在Router-polciy中的if-match中调用*/

实例:

屏蔽源PATH来自AS200的路由

BGP的增强配置


大规模BGP组网的问题

大规模组网
大规模的组网中
BGP对等体数量众多,配置繁琐,维护管理难度大
BGP的路由表庞大,对设备的性能有较大的要求
IBGP全连接,应用和管理BGP的难度增大
路由变化频繁,导致路由更新繁琐

如何解决大规模BGP中的问题

BGP对等体众多

可以使用以下组件来解决问题:
对等体组(Peer Group)
BGP团体(Community)

BGP路由表庞大

可以使用以下组件来解决问题:
BGP路由聚合

IBGP全连接

可以使用以下组件来解决问题:
BGP路由反射(Route Reflection)
BGP联盟(Confederation)

路由变化频繁

可以使用以下组件来解决问题:
BGP路由衰减(Route Dampening)

BGP对等体组

BGP对等体组,是指具有相同属性的对等体的一组集合
通过对等体组可以简化配置
根据对等体所在的AS,将对等体分为
IBGP对等体组
EBGP对等体组

IBGP对等体组基础配置
/*创建IBGP对等体组*/
[Router-bgp-default] group [name] internal
/*向对等体组中加入对等体*/
[Rouer-bgp-default] peer [ip-address] group [name] as-number [id]
EBGP对等体组基础配置
/*创建EBGP对等体组*/
[Router-bgp-default] group [name] external
/*设置对等体组的AS编号*/
[Router-bgp-default] peer [name] as-number [id]
/*向对等体组中加入对等体*/
[Router-bgp-default] peer [ip-address] group [name] as-number [id]

配置实例:
对等体组实验

BGP路由聚合

路由聚合

配置路由聚合,可以减小对等体路由表中的路由数量
BGP支持自动聚合和手动聚合两种聚合方式

自动聚合

自动聚合只会聚合主类网段(和RIP的类似)
默认情况下是关闭状态
只会对引入的IGP的路由进行聚合配置
只能在始发路由器上进行配置

/*开启BGP自动聚合*/
[Router-bgp-ipv4] summary automatics

实例

手动聚合

可以针对任意BGP路由进行聚合
可以在任何路由上进行配置

/*配置BGP手动聚合*/
[Router-bgp-ipv4] aggregate [ip-address] [mask] detail-suppressed

/*参数概述*/
as-set 
/*可以设置该条聚合后的路由的AS-PATH属性,不填写默认采用本机AS号*/
attribute-policy
/*根据路由策略来指定聚合后的路由属性*/
detail-suppressed
/*仅宣告聚合路由*/
suppress-policy
/*根据路由策略来指定,抑制或不通告部分具体路由*/
origin-policy
/*根据路由策略来指定用于聚合的源路由,用于匹配符合源路由条件的策略来生成聚合*/

实例

BGP反射器

对比图

路由反射器可以代替IBGP对等体全连接
IBGP对等体之间会建立全连接关系
如果一个AS内部有台路由器,那么应该建立的IBGP连接数就为n(n-1)/2这样对网络资源和CPU的消耗都很大,因此可以配置路由反射,来打破,对等体之间的全连接性
它的原理就是允许某些网络设备将从IBGP对等体接收到的路由信息发布给其他特定的IBGP对等体,而这些网络设备被称为反射器(Route Reflector)
通俗的说,客户机只需要和反射器建立IBGP连接即可,就是一个典型的星型网络拓扑

反射器

注意事项

【1】:如果路由更新是从非客户机收到的,那么这条路由跟新只反射给客户机,而不反射给非客户机
【2】:如果路由更新是从客户机收到的,会反射给除路由更新始发者以外的所有路由,也就是客户机和非客户机
【3】:如果路由更新是从EBGP邻居收到的,会反射给内部所有的路由器

反射器冗余

通过配置多个反射器,来组成集群,来增加网络的可靠性
在集群中的每个反射器都需要配置相同的集群IDCLUSTR_ID

反射器环路问题

路由反射器因为能发布给其他IBGP,那么多次传递之后,有可能会再次回到原来的反射器上,为了防止环路,引入了ORIGINATOR_IDCLUSTER_LIST
CLUSTER_LIST是解决集群内部的环路问题
ORIGINATOR_ID是解决多个集群组成的环路问题

CLUSTER_LIST

标识该条路由经过的集群ID,通过它来跟踪反射路径(和AS-PATH很像)
路由反射器会检查收到的路由信息里面的CLUSTER_LIST
如果出现了自己的集群IDCLUSTER_ID,那么就丢弃该条路由信息
当Cluster_list用于路由优选时候,越短的优先

ORIGINATOR_ID

标识了从AS内部路由发起者的路由器ID
如果BGP发言者收到了和自己ORIGINATOR_ID相同的路由信息就会丢弃
ORIGINATOR_ID用于路由优先,越小的优先

反射器基础配置
/*指定邻居为反射器客户端,提供反射服务*/
[Router-bgp-ipv4] peer [ip-address] reflect-client
/*配置反射器ID*/
[Router-bgp-ipv4] reflector cluster-id [id]
/*允许客户机到客户机的路由反射,默认情况下允许*/
[Router-bgp-ipv4] undo reflect between-clients

反射器配置实例

BGP联盟

将一个AS划分为若干个子AS
在子AS内部IBGP建立全连接
子AS之间建立EBGP邻居
组合起来简称联盟
用于代替IBGP全连接
减少IBGP邻居数量
解决BGP路由黑洞问题
其中一个联盟最多可包含32个子自治系统

注意事项

在子AS中使用私有AS编号6512-65535
内部路由器的BGP运行在子AS中
其他真实的AS的路由器任然和联盟AS建立EBGP邻居
跨域子ASEBGP邻居任然需要改下一跳为本机

联盟基础配置
/*宣告子自治系统ID*/
[Router] bgp [as-id]
/*配置联盟ID*/
[Router-bgp] confederation id [as-id]
/*配置联盟体中包含了那些自治系统*/
[Router-bgp] confederation peer-as [as-id]

配置实例

BGP团体属性

一组拥有相同特征的目的地址的集合
通过对一些具有相同特则需要统一操作的路由器标记团体属性
来进行区分和识别
其中一条路由可以有多个团体属性值

公认团体属性

一共有四种公认团体属性,一般用于控制路由传播范围
INTERNETNO_EXPORTNO_ADVERTISENO_EXPORT_SIBCONFED

INTERNET

收到带有该条属性的路由后
会通告给所有BGP邻居
默认情况下,所有的路由器都属于INTERNET团体

NO_EXPORT

收到带有该条属性的路由后
不会发布该路由到本AS之外
如果联盟使用了该属性
则不发布至联盟外,可以在联盟子AS内部传递

NO_ADVERTISE

收到带有该条属性的路由后
不会同通告给其他任何的BGP邻居

NO_EXPORT_SUBCONFED

收到带有该条属性的路由后
不会发布至本AS之外,也不会发布到联盟中其他子AS

自定义团体属性

除了公认的团体属性,还可以使用自定义团体属性,一般泽泻属性值使用一些数字来标识,例如100:1

注意事项

路由器默认不传递团体属性,需要开启团体属性传递

/*开启某邻居团体属性传递*/
[Router-bgp-ipv4] peer [ip-address] advertise-community
配置发布团体属性
/*创建基本ACL*/
[Router] acl basic 2000
/*设置匹配的IP地址*/
[Router-acl] rule permit [ip-address] [wild-mask] 
/*创建路由策略*/
[Router] router-policy [name] permit node 10
/*设置匹配条件,符合ACL的IP地址*/
[Router-policy] if-match ip address acl [id]
/*执行如下操作*/
[Router-polciy] apply community [200:1 / INTERNET / NO_EXPORT / NO_EXPORT_SUBCONFED]
/*配置空节点放行*/
[Router] router-policy [name] permit node 20
/*在BGP IPV4地址族内指定邻居调用团体属性*/
[Router-bgp-ipv4]peer [group/address] advertise-communnity

实例

BGP路由衰减

路由衰减

因为在广域网上的接口频繁[UP/Down]会导致全网更新扩散(BGP是矢量距离协议)
会消耗大量的CPU和带宽起源,会频繁的计算和更新路由
可以通过路由衰减来解决,接口震荡更新扩散问题

BGP衰减

使用惩罚值来衡量一条路由的稳定性
惩罚值高:路由不稳定
惩罚值低:路由相对稳定

每当路由器可达状态变更为不可达状态,或者属性发生变化时候
系统会自动给该条路由添加一定的惩罚值(1000,此值为系统固定,不可修改)
当惩罚值超过一定的预定值时,该条路由进入抑制状态,不参与路由优选

被抑制的路由每经过一段时间,惩罚值便会减少一半,这叫Half-life半衰期
当惩罚值降低到正常阈值时,就变为可用路由并参与路由优选

基础配置
/*路由衰减配置命令*/
[Router-bgp-default-ipv4] dampening [half-list-reachable] [half-life-unreachable] [reuse] [suppress] [ceiling] | route-policy [name]

half-life-reachable:发生震荡可达路由的半衰期
half-life-unreachable:发生震荡的不可达路由的半衰期
reuse:指定路由器接触抑制状态阈值。当惩罚值降低到该值以下,路由就被再使用
suppress:指定路由进入抑制状态的阈值,当惩罚值超过该值时候,路由收到抑制
ceiling:惩罚值上线,就是惩罚值最高是多少,就不在增加
以上参数配置了任意一个,其余参数必须全部带上

多出口BGP网络

多出口
拥有多个出口网络,可以增加了网络的可靠性,对流量实现负载均衡
仅需在出口路由器上部署BGP与ISP对接交互

部署方案一

方案一
ISP的边界路由器上发布缺省路由至企业
企业内部使用IGP来选择路由路径,出口到外部网络

部署方案二

方案二
ISP边界路由器上发布缺省以及部分(经常访问的明细路由)到企业
出口路由器与内部路由器又两种发布方式
【1】 导入外部路由到IGP内部
【2】 与内部路由器建立IBGP连接,通过BGP发布外部路由

部署方案三

方案三

ISP边界路由器发布所有的Internet路由到企业网(规模巨大)比较要求设备性能较高
内部路由器通过BGP路由来选择从哪一个出口路由器连接外部

三种方案部署对比

对比图

https://upyun.breezecloud.cn/img/network.webp

Theme Jasmine by Kent Liao