31-BGP配置
本章节下载: 31-BGP配置 (954.47 KB)
BGP(Border Gateway Protocol,边界网关协议)是一种既可以用于不同AS(Autonomous System,自治系统)之间,又可以用于同一AS内部的动态路由协议。当BGP运行于同一AS内部时,被称为IBGP(Internal BGP);当BGP运行于不同AS之间时,称为EBGP(External BGP)。AS是拥有同一选路策略,属于同一技术管理部门的一组路由器。当前使用的BGP版本是BGP-4。
BGP具有如下特点:
· BGP是一种EGP(Exterior Gateway Protocol,外部网关协议),与OSPF、RIP等IGP(Interior Gateway Protocol,内部网关协议)不同,其着眼点不在于发现和计算路由,而在于控制路由的传播和选择最佳路由。
· BGP使用TCP作为其传输层协议(端口号179),提高了协议的可靠性。
· BGP是一种路径矢量(Path-Vector)路由协议,它采用到达目的地址所经过的AS列表来衡量到达目的地址的距离。
· BGP支持CIDR(Classless Inter-Domain Routing,无类域间路由)。
· 路由更新时,BGP只发送更新的路由,大大减少了BGP传播路由所占用的带宽,适用于在Internet上传播大量的路由信息。
· BGP路由通过携带AS路径信息彻底解决路由环路问题。
· BGP提供了丰富的路由策略,能够对路由实现灵活的过滤和选择。
· BGP易于扩展,能够适应网络新的发展。
运行BGP协议的路由器称为BGP发言者。BGP发言者接收或产生路由信息,并将路由信息发布给其它BGP发言者。
相互之间存在TCP连接、相互交换路由信息的BGP发言者互为BGP对等体。根据对等体所在的AS,对等体分为以下几种:
· IBGP对等体:对等体与本地路由器位于同一AS。
· EBGP对等体:对等体与本地路由器位于不同AS。
BGP定义了以下几种消息类型:
· Open:TCP连接建立后发送的第一个消息,用于在BGP对等体之间建立会话。
· Update:用于在对等体之间交换路由信息。一条Update消息可以发布具有相同路径属性的多条可达路由,也可以同时撤销多条不可达路由。
· Keepalive:BGP周期性地向对等体发送Keepalive消息,以保持会话的有效性。
· Route-refresh:用来要求对等体重新发送指定地址族的路由信息。
· Notification:当BGP检测到错误状态时,就向对等体发出Notification消息,之后BGP会话会立即中断。
BGP报文由报文头和报文内容构成,BGP五种消息具有相同的报文头,但报文内容各不相同。
图1-1 BGP报文头格式
BGP报文头格式如图1-1所示,各字段的描述如表1-1所示。
表1-1 BGP报文头字段描述
字段 |
长度 (字节) |
字段说明 |
Marker |
16 |
用于检查BGP连接同步状态,如果本字段的取值不为十六进制数全F,则说明存在BGP连接同步错误 |
Length |
2 |
包括报文头在内的BGP消息总长度,取值范围为19~4096 |
Type |
1 |
BGP消息的类型,取值包括: · 1:Open消息 · 2:Update消息 · 3:Notification消息 · 4:Keepalive消息 · 5:Route-refresh消息 |
图1-2 Open报文格式
Open报文用于建立BGP连接,并协商各种能力,格式如图1-2所示,各字段的描述如表1-2所示。
表1-2 Open报文字段描述
字段 |
长度 (字节) |
字段说明 |
Version |
1 |
BGP协议的版本号 |
My Autonomous System |
2 |
Open报文发送者自身的AS号 |
Hold Time |
2 |
报文发送方设置的Hold Time(单位为秒)。此时间用于保持对等体间的连接关系,以及确定Keepalive或Update消息的发送间隔,BGP会话双方均接收到对方设定的Hold Time后,选择其中较小的时间作为双方协商后共同使用的Hold Time |
BGP Identifier |
4 |
报文发送方的Router ID |
Opt Parm Len |
1 |
可选参数的长度,单位为字节。取值为0时表示无可选参数 |
Option Parameters |
可变 |
可选参数,每一个可选参数都是一个TLV格式的单元。可选参数通常用来表示协商的能力 |
图1-3 Update报文格式
Update报文用于通告路由,格式如图1-3所示,各字段的描述如表1-3所示。
表1-3 Update报文字段描述
字段 |
长度 (字节) |
字段说明 |
Withdrawn Routes Length |
2 |
撤销路由部分的长度,单位为字节。取值为0时,表示无撤销路由 |
My Autonomous System |
可变 |
要撤销的路由,格式为掩码长度(1字节)+IP地址前缀(可变) |
Total Path Attribute Length |
2 |
所有路由属性的长度 |
Path Attributes |
可变 |
路由携带的所有路由属性,按类型号从小到大的顺序排列。每一个属性都以TLV的格式编码,形式如下:
其中,Type表示路由属性的类型,长2字节,其组成为Attr.Flag+Attr.Type Code · Attr.Flag:类型标记,可以决定路由属性的以下内容: ¡ O:此标记决定路由属性是否公认(Well-known),路由属性为公认属性时,O标记不置位(设置为0),路由属性为可选属性(Optional)时,O标记置位(设置为1) ¡ T:此标记决定路由属性是否具为过渡属性(Transitive),路由属性为过渡属性时,T标记置位(设置为1),否则不置位(设置为0) ¡ P:此标记决定路由属性是否具有局部性,具有局部性的路由属性仅在同一自治域内有效,不会被传递到其他自治域。仅具有局部性的可选过渡属性P标记会置位(设置为1),其他情况下,P标记均不置位(设置为0) ¡ E:此标记决定路由属性的长度字段是否需要扩展。需要扩展则E标记置位,此时Length字段占2字节;不需要扩展则E标记不置位,此时Length字段占1字节 ¡ U:U标记位做保留使用,全部不置位 · Attr.Type Code:类型码,表明路由属性的类型,取值包括: ¡ 1:表示源(ORIGIN)属性 ¡ 2:表示AS路径(AS_PATH)属性 ¡ 3:表示下一跳(NEXT_HOP)属性 ¡ 4:表示MED属性 ¡ 5:表示本地优先(LOCAL_PREF)属性 ¡ 6:表示原子聚合(ATOMIC_AGGREGATE)属性 ¡ 7:表示聚合者(AGGREGATOR)属性 ¡ 8:表示团体(COMMUNITY)属性 ¡ 9:表示Originator ID属性 ¡ 10:表示集群ID列表(CLUSTER_LIST)属性 ¡ 14:表示MP_REACH_NLRI属性 ¡ 15:表示MP_UNREACH_NLRI属性 ¡ 16:表示扩展团(EXT-COMMUNITY)体属性 Length表示路由属性的长度,单位为字节 Value表示路由属性的内容 |
Network Layer Reachability Information(NLRI) |
可变 |
要更新的路由,格式为掩码长度(1字节)+IP地址前缀(可变) |
Notification报文用于通告BGP会话过程中发生的错误,格式如图1-4所示,各字段的描述如表1-4所示。
表1-4 Notification报文字段描述
字段 |
长度 (字节) |
字段说明 |
Error code |
1 |
差错码 |
Error code |
1 |
差错子码 |
Data |
可变 |
错误详细内容 |
上述内容的取值和含义的详细介绍,如表1-5所示。
表1-5 差错码/差错子码详细含义列表
差错码/差错子码 |
邻居断开的详细原因 |
说明 |
1/1 |
connection not synchronized |
连接不同步,目前实现为收到的报文的报文头前16字节不全为F |
1/2 |
bad message length |
报文长度无效 |
1/3 |
bad message type |
报文的类型无效 |
3/1 |
the withdrawn length is too large |
撤销信息长度过长 |
the attribute length is too large |
属性长度过长 |
|
one attribute appears more than once |
同一个属性在一个Update消息中出现了多次 |
|
the attribute length is too small |
属性长度字段不足2字节 |
|
exntended length field is less than two octets |
属性长度为可扩展长度,但长度字段不足2字节 |
|
the length field is less than one octet |
属性长度为正常长度,但长度字段不足1字节 |
|
link-state attribute error |
链路状态属性形式错误 |
|
3/2 |
unrecognized well-known attribute |
不支持的公认属性 |
3/3 |
attribute-type attribute missed |
attribute-type类型的属性丢失,attribute-type取值包括: · ORIGIN · AS_PATH · LOCAL_PREF · NEXT_HOP |
3/4 |
attribute flags error |
属性标记错误 |
3/5 |
attribute-type attribute length error |
attribute-type类型的属性长度错误,attribute-type取值包括: · AS_PATH · AS4_PATH · CLUSTER_LIST · AGGREGATOR · AS4_AGGREGATOR · ORIGIN · NEXT_HOP · MED · LOCAL_PREF · ATOMIC_AGGREGATE · ORIGINATOR_ID · MP_REACH_NLRI · COMMUNITIES · extended communities |
attribute length exceeds |
属性长度越界 |
|
3/6 |
invalid ORIGIN attribute |
ORIGIN属性无效 |
3/8 |
invalid NEXT_HOP attribute |
下一跳属性无效 |
3/9 |
invalid nexthop length in MP_REACH_NLRI (address-family) |
address-family地址族MP_REACH_NLRI属性的Nexthop长度错误,address-family的取值包括: · 4u:表示IPv4单播地址族 · IPv4 Flowspec:表示IPv4 Flowspec地址族 · MPLS:表示MPLS地址族 · VPNv4:表示VPNv4地址族 · 6u:表示IPv6单播地址族 · VPNv6:表示VPNv6地址族 · L2VPN:表示L2VPN地址族 |
the length of MP_UNREACH_NLRI is too small |
MP_UNREACH_NLRI的长度小于3字节 |
|
the MP NLRI attribute length exceeds |
MP_REACH_NLRI 或MP_UNREACH_NLRI属性长度越界 |
|
erroneous MP NLRI attribute end position |
可达或不可达前缀结束位置与报文属性结束位置不同 |
|
3/10 |
invalid network field |
网络字段无效 |
3/11 |
malformed AS_PATH |
AS路径形式不对 |
4/0 |
Keepalive last triggered time |
最后一次触发发送Keepalive消息时间 |
Keepalive last sent time |
最后一次发送Keepalive消息时间 |
|
Update last sent time |
最后一次发送Update消息时间 |
|
EPOLLOUT last occurred time |
最后一次发生EPOLLOUT时间 |
|
Keepalive last received time |
最后一次接收Keepalive消息时间 |
|
Update last received time |
最后一次接收Update消息时间 |
|
EPOLLIN last occurred time |
最后一次发生EPOLLIN时间 |
|
5/0 |
connection retry timer expires |
ConnectRetry定时器超时 |
TCP_CR_Acked event received |
收到了TCP_CR_Acked事件 |
|
TCP_Connection_Confirmed event received |
收到了TCP_Connection_Confirmed事件 |
|
5/3 |
open message received |
收到open消息 |
6/0 |
manualstop event received |
收到manualstop事件 |
physical interface configuration changed |
物理配置改变,比如接口变化 |
|
session down event received from BFD |
收到BFD会话down事件 |
|
6/1 |
maximum number of prefixes reached |
前缀数超过peer route-limit所配置的数目 |
maximum number of address-family prefixes reached |
address-family地址族的前缀数超过peer route-limit所配置的数目,address-family的取值包括: · IPv4 unicast:表示IPv4单播地址族 · IPv6 unicast:表示IPv6单播地址族 · VPNv4:表示VPNv4地址族 · VPNv6:表示VPNv6地址族 |
|
6/2 |
configuration of peer ignore changed |
配置peer ignore命令 |
6/3 |
address family deleted |
地址族被删除 |
peer disabled |
关闭对等体 |
|
6/4 |
administrative reset |
执行reset bgp命令或者配置改变导致BGP会话重启 |
6/5 |
connection rejected |
连接被拒绝 |
6/6 |
other configuration change |
其他配置变化 |
6/7 |
connection collision resolution |
连接冲突 |
two connections exist and MD5 authentication is configured for the neighbor |
存在两个连接,且其中一个配置了MD5认证 |
|
6/8 |
· no memory to process the attribute:解析属性时内存不够 · no memory for the route:生成路由或者标签块信息时,获取不到内存 · no memory to generate unreachable NLRI:封装unreachable NLRI时申请不到内存 · no memory to generate a message:封装报文时申请不到内存 · can’t get the VPN RD:解析前缀时获取不到RD · can’t get the VPN routing table:解析前缀时获取不到VPN路由表 · can’t get the attributes:解析前缀时获取不到属性 · entered severe memory state:进入二级门限告警 · entered critical memory state:进入三级门限告警 |
图1-5 Keepalive报文格式
Keepalive报文用于保持BGP会话,格式如图1-5所示,各字段的描述如表1-6所示。
表1-6 Keepalive报文字段描述
字段 |
长度 (字节) |
字段说明 |
Marker |
16 |
用于检查BGP对等体的同步信息完整度,以及进行BGP验证。不验证时取值为十六进制全F |
Length |
2 |
Keepalive报文总长度,单位为字节 |
Type |
1 |
BGP消息类型,Keepalive报文取值为4 |
Route-refresh报文用于请求对等体重新发布路由,设备在接收到Route-refresh报文后会重新发布该报文指定地址族下的路由。Route-refresh报文的格式如图1-6所示,各字段的描述如表1-7所示。
表1-7 Route-refresh报文字段描述
字段 |
长度 (字节) |
字段说明 |
AFI |
2 |
地址族 |
Reserved |
1 |
保留字段 |
Type |
1 |
子地址族 |
BGP在会话建立过程中共具有六种状态,会话两端设备的BGP所处状态迁移过程如图1-7所示。
图1-7 BGP有限状态机变化过程
此状态是BGP的初始状态,在此状态下,BGP拒绝任何连接请求。只有收到Start事件时,设备才给BGP分配资源,并尝试进行TCP连接、转入Connect状态。
在其他的五种状态下,如果发生了TCP连接断开、报文错误、配置触发关闭连接或收到Notification消息等错误事件,BGP都会转入Idle状态。
在此状态下,BGP启动Connect Retry定时器,等待TCP完成连接:
· 如果在Connect Retry定时器超时前成功建立TCP连接,则BGP关闭Connect Retry定时器,向对等体发送Open消息,并转入OpenSent状态。
· 如果在Connect Retry定时器超时前建立TCP连接失败,则BGP转入Active状态。
· 如果Connect Retry定时器超时,BGP仍未收到对端的连接响应,则BGP重置Connect Retry定时器,再次尝试与对等体建立TCP连接,并保持Connect状态。
在此状态下,BGP不断尝试建立TCP连接:
· 如果TCP连接建立成功,则BGP关闭Connect Retry定时器,向对等体发送Open消息,并转入OpenSent状态。
· 如果TCP连接建立失败,则BGP重置Connect Retry定时器并保持Active状态。
· 如果Connect Retry定时器超时,BGP仍未收到对端的连接响应,则BGP重置Connect Retry定时器,并转入Connect状态。
在此状态下,BGP等待来自对等体的Open消息,并对Open消息中的BGP版本号、AS号等信息进行检查:
· 如果收到的Open消息正确,则BGP向对等体发送Keepalive消息,并转入OpenConfirm状态。
· 如果收到的Open消息错误,则BGP向对等体发送Notification消息,并转入Idle状态。
在此状态下如果TCP连接断开,则BGP重置Connect Retry定时器,并转入Active状态,重新尝试TCP连接的建立。
在此状态下,BGP等待Keepalive或Notification消息。如果BGP收到Keepalive消息,则转入Established状态,如果收到Notification消息,则转入Idle状态。
在此状态下,BGP可以和对等体交互Update、Keepalive、Route-refresh以及Notification消息:
· 收到正确的Update消息或Keepalive消息时,BGP保持Established状态。
· 收到错误的Update消息或Keepalive消息时,BGP向对等体发送Notification消息并转入Idle状态。
· Route-refresh消息不影响BGP状态。
· 收到Notification消息时,BGP转入Idle状态。
BGP路由属性是跟随路由一起发布出去的一组参数。它对特定的路由进行了进一步的描述,使得路由接收者能够根据路由属性值对路由进行过滤和选择。下面将介绍几种常见的路由属性。
ORIGIN属性定义了路由信息的来源,标记一条BGP路由是怎么生成的。它有以下三种类型:
· IGP:优先级最高,表示路由产生于本AS内。
· EGP:优先级次之,表示路由通过EGP学到。
· Incomplete:优先级最低,表示路由的来源无法确定。例如,从其它路由协议引入的路由信息。
AS_PATH属性记录了某条路由从本地到目的地址所要经过的所有AS号。当BGP路由器将一条路由通告到其他AS时,会把本地AS号添加在AS_PATH列表中。收到此路由的BGP路由器根据AS_PATH属性就可以知道到达目的地址所要经过的AS。
AS_PATH属性有以下两种类型:
· AS_SEQUENCE:AS号按照一定的顺序排列。如图1-8所示,离本地AS最近的相邻AS号排在前面,其他AS号按顺序依次排列。
· AS_SET:AS号只是经过的AS的简单罗列,没有顺序要求。
AS_PATH属性具有如下用途:
· 避免路由环路的形成:缺省情况下,如果BGP路由器接收到的路由的AS_PATH属性中已经包含了本地的AS号,则BGP路由器认为出现路由环路,不会接受该路由。
· 影响路由的选择:在其他因素相同的情况下,BGP会优先选择路径较短的路由。比如在图1-8中,AS 50中的BGP路由器会选择经过AS 40的路径作为到目的地址8.0.0.0的最优路由。
BGP的NEXT_HOP属性取值不一定是邻居路由器的IP地址。如图1-9所示,NEXT_HOP属性取值情况分为几种:
· BGP发言者把自己产生的路由发给所有邻居时,将该路由信息的NEXT_HOP属性设置为自己与对端连接的接口地址;
· BGP发言者把接收到的路由发送给EBGP对等体时,将该路由信息的NEXT_HOP属性设置为自己与对端连接的接口地址;
· BGP发言者把从EBGP邻居得到的路由发给IBGP邻居时,并不改变该路由信息的NEXT_HOP属性。
MED属性仅在相邻两个AS之间交换,收到此属性的AS不会再将其通告给其它AS。
MED属性相当于IGP使用的度量值(metrics),它用于判断流量进入AS时的最佳路由。当一个BGP路由器通过不同的EBGP对等体得到目的地址相同但下一跳不同的多条路由时,在其它条件相同的情况下,将优先选择MED值较小者作为最佳路由。如图1-10所示,从AS 10到AS 20的流量将选择Router B作为入口。
通常情况下,BGP只比较来自同一个AS的路由的MED属性值。
LOCAL_PREF属性仅在IBGP对等体之间交换,不通告给其他AS。它表明BGP路由器的优先级。
LOCAL_PREF属性用于判断流量离开AS时的最佳路由。当BGP路由器通过不同的IBGP对等体得到目的地址相同但下一跳不同的多条路由时,将优先选择LOCAL_PREF属性值较高的路由。如图1-11所示,从AS 20到AS 10的流量将选择Router C作为出口。
在BGP协议的应用早期,网络中使用的AS号长度为2字节(取值范围为1~65535)。随着网络规模的扩大,2字节的AS号已经不够分配,所以需要将AS号的长度扩展到4字节(取值范围为1~4294967295),以避免AS号资源的枯竭。
使用4字节AS号建立会话前需要通过Open消息来进行能力协商,双方都支持4字节AS号时才能协商成功,协商成功后才能成功建立使用4字节AS号的BGP会话。协商4字节AS号能力时,Open消息的格式如图1-12。由于Open消息头的字段格式是固定的,所以My Autonomous System字段无法填写4字节AS号,使用4字节AS号的设备将AS号23456填写到My Autonomous System字段中,而实际使用的4字节AS号填写在可选参数字段,这样在能力协商时就能知晓对端设备是否支持4字节AS号,以及使用的4字节AS号的值。
图1-12 4字节AS号能力协商时Open消息格式
BGP路由的生成、获得和发布过程如图1-13所示。
图1-13 BGP处理路由过程
BGP协议自身无法发现路由,所以需要将其他协议的路由引入到BGP的路由表中,才能生成BGP路由并对其进行传播。BGP路由可以通过以下两种粒度引入:
· 协议引入:BGP可以按照协议类型,将IGP路由、直连路由或静态路由等路由批量引入到BGP路由表中来生成BGP路由。
· 精确引入:BGP可以按照地址前缀,精确指定一条本地存在的路由引入到BGP路由表中来生成BGP路由。
在大规模的网络中,BGP路由表十分庞大,使用路由聚合(Routes Aggregation)可以大大减小BGP路由表的规模。
路由聚合实际上是将多条路由合并的过程。这样BGP在向对等体通告路由时,可以只通告聚合后的路由,而不是将所有的具体路由都通告出去。
目前系统支持自动聚合和手动聚合方式:
· 自动聚合:对BGP引入的路由按照自然网段自动进行聚合。自动聚合后,参加聚合的具体路由将被抑制。
· 手动聚合:将BGP路由聚合为用户手动配置的指定聚合路由。在手动聚合时,可以控制聚合路由的属性,并决定是否发布具体路由。
目前,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、IBGP学来的路由;
(9) 优选IGP Metric值最小的路由;
(10) 优选迭代深度值小的路由;
(11) 如果当前的最优路由为EBGP路由,则BGP路由器收到来自不同的EBGP邻居的路由后,不会改变最优路由;
(12) 优选Router ID最小的路由器发布的路由。
(13) 优选IP地址最小的对等体发布的路由。
BGP发布路由时采用如下策略:
· 存在多条有效路由时,BGP发言者只将最优路由发布给对等体。
· BGP发言者只把自己使用的路由发布给对等体。
· BGP发言者会将从EBGP获得的路由发布给它的所有BGP对等体(包括EBGP对等体和IBGP对等体)。
· BGP发言者会将从IBGP获得的路由发布给它的EBGP对等体,但不会发布给它的IBGP对等体。
· 会话一旦建立,BGP发言者将把满足上述条件的所有BGP路由发布给新对等体。之后,BGP发言者只在路由变化时,向对等体发布更新的路由。
为保证IBGP对等体之间的连通性,需要在IBGP对等体之间建立全连接关系。假设在一个AS内部有n台路由器,那么应该建立的IBGP连接数就为n(n-1)/2。当IBGP对等体数目很多时,对网络资源和CPU资源的消耗都很大。
利用路由反射可以解决这一问题。在一个AS内,其中一台路由器作为RR(Route Reflector,路由反射器),作为客户机(Client)的路由器与路由反射器之间建立IBGP连接。路由反射器从客户机接收到路由后,将其传递(反射)给所有其他的客户机,从而保证客户机之间不需要建立BGP连接,就可以学习到彼此的路由。
既不是路由反射器也不是客户机的BGP路由器被称为非客户机(Non-client)。非客户机与路由反射器之间,以及所有的非客户机之间仍然必须建立全连接关系。其示意图如图1-14所示。
路由反射器及其客户机形成了一个集群。通常情况下,一个集群中只有一个路由反射器,该反射器的Router ID就作为集群ID,用于识别该群。如图1-15所示,为了提高网络的可靠性、避免单点故障,一个集群中可以设置多个路由反射器。此时,集群中所有路由反射器上都需要配置相同的集群ID,以便集群具有统一的标识,避免路由环路的产生。
如果配置了路由反射器后,由于组网需要在路由反射器的客户机之间又建立了全连接,则客户机之间可以直接交换路由信息,客户机到客户机之间的路由反射是没有必要的。此时,不需要修改网络配置或改变网络拓扑,只需在路由反射器上通过相关命令禁止其在客户机之间反射路由,就可以避免路由反射,减少占用的带宽资源。
禁止客户机之间的路由反射后,客户机到非客户机之间的路由仍然可以被反射。
在大规模BGP网络中,对等体的数目众多,路由表庞大,配置和维护极为不便。通过如下方法,可以降低管理难度,提高路由发布效率。
在大规模的网络中,BGP路由表十分庞大,使用路由聚合(Routes Aggregation)可以大大减小BGP路由表的规模。
路由聚合实际上是将多条路由合并的过程。这样BGP在向对等体通告路由时,可以只通告聚合后的路由,而不是将所有的具体路由都通告出去。
目前系统支持自动聚合和手动聚合方式。使用后者还可以控制聚合路由的属性,以及决定是否发布具体路由。
在大规模BGP网络中,对等体的数量很多,其中很多对等体具有相同的策略,在配置时会重复使用一些命令。此时,将这些对等体加入一个对等体组,可以简化配置。
对等体组是具有某些相同属性的对等体的集合。当一个对等体加入对等体组时,此对等体将获得与所在对等体组相同的配置。当对等体组的配置改变时,组内成员的配置也相应改变。
为保证IBGP对等体之间的连通性,需要在IBGP对等体之间建立全连接关系。假设在一个AS内部有n台路由器,那么应该建立的IBGP连接数就为n(n-1)/2。当IBGP对等体数目很多时,对网络资源和CPU资源的消耗都很大。
利用路由反射可以解决这一问题。在一个AS内,其中一台路由器作为RR(Route Reflector,路由反射器),作为客户机(Client)的路由器与路由反射器之间建立IBGP连接。路由反射器从客户机接收到路由后,将其传递(反射)给所有其他的客户机,从而保证客户机之间不需要建立BGP连接,就可以学习到彼此的路由。
既不是路由反射器也不是客户机的BGP路由器被称为非客户机(Non-client)。非客户机与路由反射器之间,以及所有的非客户机之间仍然必须建立全连接关系。其示意图如图1-16所示。
路由反射器及其客户机形成了一个集群。通常情况下,一个集群中只有一个路由反射器,该反射器的Router ID就作为集群ID,用于识别该群。如图1-17所示,为了提高网络的可靠性、避免单点故障,一个集群中可以设置多个路由反射器。此时,集群中所有路由反射器上都需要配置相同的集群ID,以便集群具有统一的标识,避免路由环路的产生。
如果配置了路由反射器后,由于组网需要在路由反射器的客户机之间又建立了全连接,则客户机之间可以直接交换路由信息,客户机到客户机之间的路由反射是没有必要的。此时,不需要修改网络配置或改变网络拓扑,只需在路由反射器上通过相关命令禁止其在客户机之间反射路由,就可以避免路由反射,减少占用的带宽资源。
禁止客户机之间的路由反射后,客户机到非客户机之间的路由仍然可以被反射。
BGP-4只能传递IPv4单播的路由信息,不能传递其它网络层协议(如IPv6等)的路由信息。
为了提供对多种网络层协议的支持,IETF对BGP-4进行了扩展,形成MP-BGP(Multiprotocol Border Gateway Protocol,多协议边界网关协议)。MP-BGP可以为多种网络层协议传递路由信息。
目前仅支持IPv6单播,通过MP-BGP发布和维护IPv6单播路由前缀信息。
路由信息中与网络层协议相关的关键信息包括路由前缀和下一跳地址。BGP-4通过Update消息中的NLRI(Network Layer Reachability Information,网络层可达性信息)字段携带可达路由的前缀信息,Withdrawn Routes字段携带不可达路由的前缀信息,NEXT_HOP属性携带下一跳地址信息。NLRI字段、Withdrawn Routes字段和NEXT_HOP属性不易于扩展,无法携带多种网络层协议的信息。
为实现对多种网络层协议的支持,MP-BGP定义了两个新的路径属性:
· MP_REACH_NLRI(Multiprotocol Reachable NLRI,多协议可达NLRI):用于携带多种网络层协议的可达路由前缀及下一跳地址信息,以便向邻居发布该路由。
· MP_UNREACH_NLRI(Multiprotocol Unreachable NLRI,多协议不可达NLRI):用于携带多种网络层协议的不可达路由前缀信息,以便撤销该路由。
MP-BGP通过上述两个路径属性传递不同网络层协议的可达路由和不可达路由信息。不支持MP-BGP的BGP发言者接收到带有这两个属性的Update消息后,忽略这两个属性,不把它们传递给其它邻居。
MP-BGP采用地址族(Address Family)和子地址族(Subsequent Address Family)来区分MP_REACH_NLRI属性、MP_UNREACH_NLRI属性中携带路由信息所属的网络层协议。例如,如果MP_REACH_NLRI属性中AFI(Address Family Identifier,地址族标识符)为2、SAFI(Subsequent Address Family Identifier,子地址族标识符)为1,则表示该属性中携带的是IPv6单播路由信息。关于地址族的一些取值可以参考RFC 1700。
MP-BGP支持IPvX(X可以为4或6)对等体之间交互IPv4和IPv6路由,即IPv4对等体之间除了交互IPv4路由以外还可以交互IPv6路由,IPv6对等体之间除了交互IPv6路由以外还可以交互IPv4路由:
· IPv6路由的下一跳为IPv4地址时,MP-BGP将此IPv4地址映射为IPv6地址封装在Update报文的Next-Hop属性中。
· IPv4路由的下一跳为IPv6地址时,需要BGP会话协商支持扩展IPv6下一跳能力,将IPv4 NLRI封装在MP_REACH_NLRI属性中。
图1-18 MP-BGP支持BGP IPvX会话承载IPv4和IPv6路由
以图1-18为例,Device B和Device C之间仅建立BGP IPv6会话,Device A和DeviceB、Device C和Device D之间同时建立BGP IPv4和BGP IPv6会话,Device A和Device D可以学习到对方的IPv4和IPv6路由并且两个地址族下的流量都能正常互通。
一台BGP路由器上可以同时启动多个BGP进程,每个BGP进程对应一个BGP实例。BGP为不同的BGP实例维护独立的路由表。多个BGP实例的AS号可以相同,也可以不同,他们之间互相独立,互不影响。
BGP对BGP多实例具有如下要求:
· 不能通过公网内的不同BGP实例与相同地址的对等体建立BGP会话。
· 不同BGP实例对应的AS号可以相同,不同BGP实例的实例名称不能相同。
如图1-19所示,三台设备都属于AS 100,但是需要实现Device B和Device C之间的业务隔离,仅允许它们与Device A进行互通,则可以Device A上同时创建两个BGP实例,使用default实例和Device B建立BGP会话,使用abc实例和Device C建立会话。这样虽然Device A能够同时学习到Device B和Device C的路由,但是由于两个BGP实例相互独立,Device B和Device C无法互相学习路由,以实现业务隔离。
图1-19 BGP多进程实现业务隔离组网图
与BGP相关的协议规范有:
· RFC 1700:ASSIGNED NUMBERS
· RFC 1997:BGP Communities Attribute
· RFC 2439:BGP Route Flap Damping
· RFC 2545:Use of BGP-4 Multiprotocol Extensions for IPv6 Inter-Domain Routing
· RFC 2918:Route Refresh Capability for BGP-4
· RFC 3107:Carrying Label Information in BGP-4
· RFC 4271:A Border Gateway Protocol 4 (BGP-4)
· RFC 4275:BGP-4 MIB Implementation Survey
· RFC 4277:Experience with the BGP-4 Protocol
· RFC 4360:BGP Extended Communities Attribute
· RFC 4451:BGP MULTI_EXIT_DISC (MED) Consideration
· RFC 4456:BGP Route Reflection: An Alternative to Full Mesh Internal BGP
· RFC 4486:Subcodes for BGP Cease Notification Message
· RFC 4724:Graceful Restart Mechanism for BGP
· RFC 4760:Multiprotocol Extensions for BGP-4
· RFC 5004:Avoid BGP Best Path Transitions from One External to Another
· RFC 5065:Autonomous System Confederations for BGP
· RFC 5668:4-Octet AS Specific BGP Extended Community
· RFC 6608:Subcodes for BGP Finite State Machine Error
· RFC 6793:BGP Support for Four-Octet Autonomous System (AS) Number Space
IPv4单播的BGP配置任务如下:
(1) 配置BGP基本功能
a. 启动BGP
b. 手工创建BGP对等体
c. 动态创建BGP对等体
d. 配置IBGP对等体组
在大规模的BGP网络中可通过配置BGP对等体组简化配置。
e. 配置EBGP对等体组
在大规模的BGP网络中可通过配置BGP对等体组简化配置。
f. (可选)配置建立TCP连接使用的源地址
(2) 生成BGP路由信息
请至少选择其中一项任务进行配置:
¡ (可选)配置BGP路由聚合
¡ (可选)配置向对等体/对等体组发送缺省路由
(3) (可选)控制BGP路由信息的发布
(4) (可选)控制BGP路由信息的接收
¡ 配置SoO属性
(5) (可选)配置BGP定时器
(6) (可选)配置BGP日志和告警功能
IPv6单播/IPv6组播的BGP配置任务如下:
(1) 配置BGP基本功能
a. 启动BGP
b. 手工创建BGP对等体
c. 动态创建BGP对等体
d. 配置IBGP对等体组
在大规模的BGP网络中可通过配置BGP对等体组简化配置。
e. 配置EBGP对等体组
在大规模的BGP网络中可通过配置BGP对等体组简化配置。
f. (可选)配置建立TCP连接使用的源地址
(2) 生成BGP路由信息
请至少选择其中一项任务进行配置:
¡ (可选)配置BGP路由聚合
¡ (可选)配置向对等体/对等体组发送缺省路由
(3) (可选)控制BGP路由信息的发布
(4) (可选)控制BGP路由信息的接收
¡ 配置SoO属性
(5) (可选)配置BGP定时器
(6) (可选)配置BGP日志和告警功能
如果要在BGP实例下运行BGP协议,则必须为BGP实例指定Router ID。Router ID用来在一个自治系统中唯一的标识一台路由器。
· 用户可以在启动BGP实例进入BGP实例视图后指定该实例的Router ID。不同BGP实例的Router ID可以相同。配置时,必须保证自治系统中任意两台路由器的Router ID都不相同。通常的做法是将路由器的Router ID配置为与该路由器某个接口的IP地址一致,为了增加网络的可靠性,建议将Router ID配置为Loopback接口的IP地址。
· 如果没有在BGP实例视图下配置Router ID,则该实例使用全局Router ID。
· BGP实例的Router ID一旦确定为非零值后不会随着系统视图下router id命令配置的改变而改变。只能在BGP实例视图下通过router-id命令改变BGP的Router ID。
· 如果是在BGP实例视图下配置的Router ID,则Router ID所在接口被删除时路由器不会重新选择Router ID,只有在BGP实例视图下使用undo router-id命令删除手工配置的Router ID后,路由器才会重新选择Router ID。
(1) 进入系统视图。
system-view
(2) 配置全局Router ID。
router id router-id
缺省情况下,未配置全局Router ID。
如果未配置全局Router ID,则按照下面的规则进行选择:
¡ 如果存在配置IP地址的Loopback接口,则选择Loopback接口地址中最大的作为Router ID。
¡ 如果所有Loopback接口都未配置IP地址,则从其他接口的IP地址中选择最大的作为Router ID(不考虑接口的up/down状态)。
(3) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
缺省情况下,没有运行BGP,不存在BGP实例。
(4) (可选)为指定的BGP实例配置路由器的Router ID。
router-id router-id
缺省情况下,未配置BGP路由器在BGP实例内的Router ID,为系统视图下通过router id命令配置的全局Router ID。
当通过IPv6链路本地地址创建对等体或向对等体组中添加指定的对等体时,必须使用直连接口建立对等关系,且必须通过peer connect-interface命令将本地直连出接口指定为建立TCP连接使用的源接口。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 创建IPv4 BGP对等体,并指定对等体的AS号。
peer ipv4-address as-number as-number
(4) (可选)配置对等体的描述信息。
peer ipv4-address description text
缺省情况下,对等体没有描述信息。
(5) 创建BGP IPv4单播地址族,并进入相应地址族视图。
address-family ipv4 [ unicast ]
(6) 允许本地路由器与指定对等体交换IPv4单播路由信息。
peer ipv4-address enable
缺省情况下,本地路由器不能与对等体交换IPv4单播路由信息。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 创建IPv4 BGP对等体,并指定对等体的AS号。
peer ipv4-address as-number as-number
(4) (可选)配置对等体的描述信息。
peer ipv4-address description text
缺省情况下,对等体没有描述信息。
(5) 创建BGP IPv6单播地址族,并进入相应地址族视图。
address-family ipv6 [ unicast ]
(6) 允许本地路由器与指定对等体交换IPv6单播路由信息。
peer ipv4-address enable
缺省情况下,本地路由器不能与对等体交换IPv6单播路由信息。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 创建IPv6 BGP对等体,并指定对等体的AS号。
peer ipv6-address as-number as-number
(4) (可选)配置对等体的描述信息。
peer ipv6-address description text
缺省情况下,对等体没有描述信息。
(5) 创建BGP IPv6单播地址族,并进入相应地址族视图。
address-family ipv6 [ unicast ]
(6) 允许本地路由器与指定对等体交换IPv6单播路由信息。
peer ipv6-address enable
缺省情况下,本地路由器不能与对等体/对等体组交换IPv6单播路由信息。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 创建IPv6 BGP对等体,并指定对等体的AS号。
peer ipv6-address as-number as-number
(4) (可选)配置对等体的描述信息。
peer ipv6-address description text
缺省情况下,对等体没有描述信息。
(5) 创建BGP IPv4单播地址族,并进入相应地址族视图。
address-family ipv4 [ unicast ]
(6) 允许本地路由器与指定对等体交换IPv4单播路由信息。
peer ipv6-address enable
缺省情况下,本地路由器不能与对等体交换IPv4单播路由信息。
设备需要和大量的邻居建立对等体关系时,如果逐个配置对等体关系,则配置工作量大,新增或者删除对等体的维护、升级工作难度较大,且容易出错。
如果设备的邻居位于同一个网段内,则可以通过BGP动态对等体功能简化配置。在设备上简单地配置一个网段地址内的邻居作为动态对等体,就可以接受来自该网段内的所有邻居的连接请求,并与其建立对等体关系。只有当邻居发起连接请求时,本地才会维护与该邻居的对等体关系;否则,不维护对等体关系。BGP动态对等体功能既简化了配置,又大大降低了维护和升级成本。
配置动态对等体时,设备和邻居只能有一端配置网段地址,另一端必须配置实际IP地址。
当通过IPv6链路本地地址创建对等体或向对等体组中添加指定的对等体时,必须使用直连接口建立对等关系,且必须通过peer connect-interface命令将本地直连出接口指定为建立TCP连接使用的源接口。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 创建IPv4 BGP动态对等体,并指定对等体的AS号。
peer ipv4-address mask-length as-number as-number
(4) (可选)配置对等体的描述信息。
peer ipv4-address mask-length description text
缺省情况下,动态对等体没有描述信息。
(5) 创建BGP IPv4单播地址族,并进入相应地址族视图。
address-family ipv4 [ unicast ]
(6) 允许本地路由器与指定动态对等体交换IPv4单播路由信息。
peer ipv4-address mask-length enable
缺省情况下,本地路由器不能与动态对等体交换IPv4单播路由信息。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图
bgp as-number [ instance instance-name ]
(3) 创建IPv4 BGP动态对等体,并指定对等体的AS号。
peer ipv4-address mask-length as-number as-number
(4) (可选)配置对等体的描述信息。
peer ipv4-address mask-length description text
缺省情况下,动态对等体没有描述信息。
(5) 创建BGP IPv6单播地址族,并进入相应地址族视图。
address-family ipv6 [ unicast ]
(6) 允许本地路由器与指定对等体交换IPv6单播路由信息。
peer ipv4-address mask-length enable
缺省情况下,本地路由器不能与动态对等体交换IPv6单播路由信息。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 创建IPv6 BGP动态对等体,并指定对等体的AS号。
peer ipv6-address prefix-length as-number as-number
(4) (可选)配置动态对等体的描述信息。
peer ipv6-address prefix-length description text
缺省情况下,动态对等体没有描述信息。
(5) 创建BGP IPv6单播地址族,并进入相应地址族视图。
address-family ipv6 [ unicast ]
(6) 允许本地路由器与指定动态对等体交换IPv6单播路由信息。
peer ipv6-address prefix-length enable
缺省情况下,本地路由器不能与动态对等体交换IPv6单播路由信息。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 创建IPv6 BGP动态对等体,并指定对等体的AS号。
peer ipv6-address prefix-length as-number as-number
(4) (可选)配置动态对等体的描述信息。
peer ipv6-address prefix-length description text
缺省情况下,动态对等体没有描述信息。
(5) 创建BGP IPv4单播地址族,并进入相应地址族视图。
address-family ipv4 [ unicast ]
(6) 允许本地路由器与指定对等体交换IPv4单播路由信息。
peer ipv6-address prefix-length enable
缺省情况下,本地路由器不能与动态对等体交换IPv4单播路由信息。
IBGP对等体组是指对等体组中的对等体与当前路由器位于同一AS。
创建IBGP对等体组后,系统在将对等体加入IBGP对等体组时,会自动在BGP实例视图下创建该对等体,并设置其AS号为本地AS号。
当通过IPv6链路本地地址创建对等体或向对等体组中添加指定的对等体时,必须使用直连接口建立对等关系,且必须通过peer connect-interface命令将本地直连出接口指定为建立TCP连接使用的源接口。
如果分别对对等体组和对等体组中的对等体进行了某项BGP配置,则以最后一次配置为准。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 创建IBGP对等体组。
group group-name [ internal ]
(4) 向对等体组中添加指定的IPv4 BGP对等体。
peer ipv4-address [ mask-length ] group group-name [ as-number as-number ]
as-number as-number参数可选可不选,如果选择则必须和本地的AS号一致。
(5) (可选)配置对等体组的描述信息。
peer group-name description text
缺省情况下,对等体组没有描述信息。
(6) 创建BGP IPv4单播地址族,并进入相应地址族视图。
address-family ipv4 [ unicast ]
(7) 允许本地路由器与指定对等体组中的对等体交换IPv4单播路由信息。
peer group-name enable
缺省情况下,本地路由器不能与对等体交换IPv4单播路由信息。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 创建IBGP对等体组。
group group-name [ internal ]
(4) 向对等体组中添加指定的IPv4 BGP对等体。
peer ipv4-address [ mask-length ] group group-name [ as-number as-number ]
as-number as-number参数可选可不选,如果选择则必须和本地的AS号一致。
(5) (可选)配置对等体组的描述信息。
peer group-name description text
缺省情况下,对等体组没有描述信息。
(6) 创建BGP IPv6单播地址族,并进入相应地址族视图。
address-family ipv6 [ unicast ]
允许本地路由器与指定对等体组中的对等体交换IPv6单播路由信息。
(7) peer group-name enable
缺省情况下,本地路由器不能与对等体交换IPv6单播路由信息。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 创建IBGP对等体组。
group group-name [ internal ]
(4) 向对等体组中添加指定的IPv6 BGP对等体。
peer ipv6-address [ prefix-length ] group group-name [ as-number as-number ]
as-number as-number参数可选可不选,如果选择则必须和本地的AS号一致。
(5) (可选)配置对等体组的描述信息。
peer group-name description text
缺省情况下,对等体组没有描述信息。
(6) 创建BGP IPv6单播地址族,并进入相应地址族视图。
address-family ipv6 [ unicast ]
(7) 允许本地路由器与指定对等体组中的对等体交换IPv6单播路由信息。
peer group-name enable
缺省情况下,本地路由器不能与对等体交换IPv6单播路由信息。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 创建IBGP对等体组。
group group-name [ internal ]
(4) 向对等体组中添加指定的IPv6 BGP对等体。
peer ipv6-address [ prefix-length ] group group-name [ as-number as-number ]
as-number as-number参数可选可不选,如果选择则必须和本地的AS号一致。
(5) (可选)配置对等体组的描述信息。
peer group-name description text
缺省情况下,对等体组没有描述信息。
(6) 创建BGP IPv4单播地址族,并进入相应地址族视图。
address-family ipv4 [ unicast ]
(7) 允许本地路由器与指定对等体组中的对等体交换IPv4单播路由信息。
peer group-name enable
缺省情况下,本地路由器不能与对等体交换IPv4单播路由信息。
EBGP对等体组是指对等体组中的对等体与当前路由器位于不同AS。
根据对等体组中的对等体是否属于同一个外部AS,EBGP对等体组又可以分为纯EBGP对等体组和混合EBGP对等体组。如果对等体组中的对等体属于同一个外部AS,该对等体组就是纯EBGP对等体组;如果对等体组中的对等体属于不同外部AS,该对等体组就是混合EBGP对等体组。
用户有三种方式配置EBGP对等体组:
· 第一种方式是创建对等体组后,先指定对等体组的AS号,再将对等体加入到对等体组中,该方式下加入的对等体具有相同的AS号,均为对等体组的AS号。对等体加入对等体组之前可以配置AS号,且为对等体配置的AS号必须与对等体组的AS号相同。
· 第二种方式是创建对等体组后,先配置对等体的AS号,再将对等体加入对等体组中。该方式下,对等体组中对等体的AS号可以相同也可以不同。
· 第三种方式是创建对等体组后,将对等体加入对等体组的同时指定AS号。该方式下,对等体组中对等体的AS号可以相同也可以不同。
如果分别对对等体组和对等体组中的对等体进行了某项BGP配置,则以最后一次配置为准。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 创建EBGP对等体组。
group group-name external
(4) 指定对等体组的AS号。
peer group-name as-number as-number
缺省情况下,未指定对等体组的AS号。
如果对等体组中已经存在对等体,则不能改变该对等体组的AS号,也不能使用undo命令删除已指定的AS号。
(5) 向对等体组中添加指定的IPv4 BGP对等体。
peer ipv4-address [ mask-length ] group group-name [ as-number as-number ]
as-number as-number参数可选可不选,如果选择则必须和peer group-name as-number as-number命令中配置的一致。
(6) (可选)配置对等体组的描述信息。
peer group-name description text
缺省情况下,对等体组没有描述信息。
(7) 创建BGP IPv4单播地址族,并进入相应地址族视图。
address-family ipv4 [ unicast ]
(8) 允许本地路由器与指定对等体组中的对等体交换IPv4单播路由信息。
peer group-name enable
缺省情况下,本地路由器不能与对等体交换IPv4单播路由信息。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 创建EBGP对等体组。
group group-name external
(4) 创建IPv4 BGP对等体,并指定对等体的AS号。
peer ipv4-address [ mask-length ] as-number as-number
(5) 向对等体组中添加指定的IPv4 BGP对等体。
peer ipv4-address [ mask-length ] group group-name [ as-number as-number ]
as-number as-number参数可选可不选,如果选择则必须和peer ipv4-address [ mask-length ] as-number as-number命令中配置的一致。
(6) (可选)配置对等体组的描述信息。
peer group-name description text
缺省情况下,对等体组没有描述信息。
(7) 创建BGP IPv4单播地址族,并进入相应地址族视图。
address-family ipv4 [ unicast ]
(8) 允许本地路由器与指定对等体组中的对等体交换IPv4单播路由信息。
peer group-name enable
缺省情况下,本地路由器不能与对等体交换IPv4单播路由信息。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 创建EBGP对等体组。
group group-name external
(4) 向对等体组中添加指定的对等体。
peer ipv4-address [ mask-length ] group group-name as-number as-number
(5) (可选)配置对等体组的描述信息。
peer group-name description text
缺省情况下,对等体组没有描述信息。
(6) 创建BGP IPv4单播地址族,并进入相应地址族视图。
address-family ipv4 [ unicast ]
(7) 允许本地路由器与指定对等体组中的对等体交换IPv4单播路由信息。
peer group-name enable
缺省情况下,本地路由器不能与对等体交换IPv4单播路由信息。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 创建EBGP对等体组。
group group-name external
(4) 指定对等体组的AS号。
peer group-name as-number as-number
缺省情况下,未指定对等体组的AS号。
如果对等体组中已经存在对等体,则不能改变该对等体组的AS号,也不能使用undo命令删除已指定的AS号。
(5) 向对等体组中添加指定的IPv4 BGP对等体。
peer ipv4-address [ mask-length ] group group-name [ as-number as-number ]
as-number as-number参数可选可不选,如果选择则必须和peer group-name as-number as-number命令中配置的一致。
(6) (可选)配置对等体组的描述信息。
peer group-name description text
缺省情况下,对等体组没有描述信息。
(7) 创建BGP IPv6单播地址族,并进入相应地址族视图。
address-family ipv6 [ unicast ]
(8) 允许本地路由器与指定对等体组中的对等体交换IPv6单播路由信息。
peer group-name enable
缺省情况下,本地路由器不能与对等体交换IPv6单播路由信息。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 创建EBGP对等体组。
group group-name external
(4) 创建IPv4 BGP对等体,并指定对等体的AS号。
peer ipv4-address [ mask-length ] as-number as-number
(5) 向对等体组中添加指定的IPv4 BGP对等体。
peer ipv4-address [ mask-length ] group group-name [ as-number as-number ]
as-number as-number参数可选可不选,如果选择则必须和peer ipv4-address [ mask-length ] as-number as-number命令中配置的一致。
(6) (可选)配置对等体组的描述信息。
peer group-name description text
缺省情况下,对等体组没有描述信息。
(7) 创建BGP IPv6单播地址族,并进入相应地址族视图。
address-family ipv6 [ unicast ]
(8) 允许本地路由器与指定对等体组中的对等体交换IPv6单播路由信息。
peer group-name enable
缺省情况下,本地路由器不能与对等体交换IPv6单播路由信息。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 创建EBGP对等体组。
group group-name external
(4) 向对等体组中添加指定的对等体。
peer ipv4-address [ mask-length ] group group-name as-number as-number
(5) (可选)配置对等体组的描述信息。
peer group-name description text
缺省情况下,对等体组没有描述信息。
(6) 创建BGP IPv6单播地址族,并进入相应地址族视图。
address-family ipv6 [ unicast ]
(7) 允许本地路由器与指定对等体组中的对等体交换IPv6单播路由信息。
peer group-name enable
缺省情况下,本地路由器不能与对等体交换IPv6单播路由信息。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 创建EBGP对等体组。
group group-name external
(4) 指定对等体组的AS号。
peer group-name as-number as-number
缺省情况下,未指定对等体组的AS号。
如果对等体组中已经存在对等体,则不能改变该对等体组的AS号,也不能使用undo命令删除已指定的AS号。
(5) 向对等体组中添加指定的IPv6 BGP对等体。
peer ipv6-address [ prefix-length ] group group-name [ as-number as-number ]
as-number as-number参数可选可不选,如果选择则必须和peer group-name as-number as-number命令中配置的一致。
(6) (可选)配置对等体组的描述信息。
peer group-name description text
缺省情况下,对等体组没有描述信息。
(7) 创建BGP IPv6单播地址族,并进入相应地址族视图。
address-family ipv6 [ unicast ]
(8) 允许本地路由器与指定对等体组中的对等体交换IPv6单播路由信息。
peer group-name enable
缺省情况下,本地路由器不能与对等体交换IPv6单播路由信息。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 创建EBGP对等体组。
group group-name external
(4) 创建IPv6 BGP对等体,并指定对等体的AS号。
peer ipv6-address [ prefix-length ] as-number as-number
(5) 向对等体组中添加指定的IPv6 BGP对等体。
peer ipv6-address [ prefix-length ] group group-name [ as-number as-number ]
as-number as-number参数可选可不选,如果选择则必须和peer ipv6-address [ prefix-length ] as-number as-number命令中配置的一致。
(6) (可选)配置对等体组的描述信息。
peer group-name description text
缺省情况下,对等体组没有描述信息。
(7) 创建BGP IPv6单播地址族,并进入相应地址族视图。
address-family ipv6 [ unicast ]
(8) 允许本地路由器与指定对等体组中的对等体交换IPv6单播路由信息。
peer group-name enable
缺省情况下,本地路由器不能与对等体交换IPv6单播路由信息。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 创建EBGP对等体组。
group group-name external
(4) 向对等体组中添加指定的IPv6 BGP对等体。
peer ipv6-address [ prefix-length ] group group-name as-number as-number
(5) (可选)配置对等体组的描述信息。
peer group-name description text
缺省情况下,对等体组没有描述信息。
(6) 创建BGP IPv6单播地址族,并进入相应地址族视图。
address-family ipv6 [ unicast ]
(7) 允许本地路由器与指定对等体组中的对等体交换IPv6单播路由信息。
peer group-name enable
缺省情况下,本地路由器不能与对等体交换IPv6单播路由信息。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 创建EBGP对等体组。
group group-name external
(4) 指定对等体组的AS号。
peer group-name as-number as-number
缺省情况下,未指定对等体组的AS号。
如果对等体组中已经存在对等体,则不能改变该对等体组的AS号,也不能使用undo命令删除已指定的AS号。
(5) 向对等体组中添加指定的IPv6 BGP对等体。
peer ipv6-address [ prefix-length ] group group-name [ as-number as-number ]
as-number as-number参数可选可不选,如果选择则必须和peer group-name as-number as-number命令中配置的一致。
(6) (可选)配置对等体组的描述信息。
peer group-name description text
缺省情况下,对等体组没有描述信息。
(7) 创建BGP IPv4单播地址族,并进入相应地址族视图。
address-family ipv4 [ unicast ]
(8) 允许本地路由器与指定对等体组中的对等体交换IPv4单播路由信息。
peer group-name enable
缺省情况下,本地路由器不能与对等体交换IPv4单播路由信息。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 创建EBGP对等体组。
group group-name external
(4) 创建IPv6 BGP对等体,并指定对等体的AS号。
peer ipv6-address [ prefix-length ] as-number as-number
(5) 向对等体组中添加指定的IPv6 BGP对等体。
peer ipv6-address [ prefix-length ] group group-name [ as-number as-number ]
as-number as-number参数可选可不选,如果选择则必须和peer ipv6-address [ prefix-length ] as-number as-number命令中配置的一致。
(6) (可选)配置对等体组的描述信息。
peer group-name description text
缺省情况下,对等体组没有描述信息。
(7) 创建BGP IPv4单播地址族,并进入相应地址族视图。
address-family ipv4 [ unicast ]
(8) 允许本地路由器与指定对等体组中的对等体交换IPv4单播路由信息。
peer group-name enable
缺省情况下,本地路由器不能与对等体交换IPv4单播路由信息。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 创建EBGP对等体组。
group group-name external
(4) 向对等体组中添加指定的IPv6 BGP对等体。
peer ipv6-address [ prefix-length ] group group-name as-number as-number
(5) (可选)配置对等体组的描述信息。
peer group-name description text
缺省情况下,对等体组没有描述信息。
(6) 创建BGP IPv4单播地址族,并进入相应地址族视图。
address-family ipv4 [ unicast ]
(7) 允许本地路由器与指定对等体组中的对等体交换IPv4单播路由信息。
peer group-name enable
缺省情况下,本地路由器不能与对等体交换IPv4单播路由信息。
BGP使用TCP作为其传输层协议。在如下场合需要通过本配置指定建立TCP连接使用的源地址或源接口(即采用指定源接口的IP地址/IPv6地址与对等体/对等体组建立TCP连接):
· 当指定对等体的IP地址/IPv6地址不是本地路由器与对等体之间直连接口的IP地址/IPv6地址时,需要在对等体上通过本配置指定建立TCP连接的源接口为对等体IP地址/IPv6地址所在的接口或者指定TCP连接的源地址为对等体IP地址/IPv6地址。
· 当通过IPv6链路本地地址创建对等体或向对等体组中添加指定的对等体时,必须使用直连接口建立对等关系,且必须通过peer connect-interface命令将本地直连出接口指定为建立TCP连接使用的源接口。
· 当建立BGP会话的路由器之间存在冗余链路时,如果路由器上的一个接口发生故障,链路状态变为down,建立TCP连接的源地址可能会随之发生变化,导致BGP需要重新建立TCP连接,造成网络震荡。为了避免该情况的发生,建议网络管理员将建立TCP连接所使用的源地址配置为Loopback接口的地址,或将源接口配置为Loopback接口,以提高TCP连接的可靠性和稳定性。
· 当BGP对等体之间同时建立多条BGP会话时,如果没有明确指定建立TCP连接的源地址,可能会导致根据最优路由选择TCP连接源地址错误,并影响BGP会话的建立。如果多条BGP会话基于不同接口的IP地址建立,则建议用户在配置BGP对等体时,通过配置源接口或源地址明确指定每个BGP会话的TCP连接源地址;如果多条BGP会话基于同一接口的不同IP地址建立,则建议用户通过配置源地址,明确指定每个BGP会话的TCP连接源地址。
对于IBGP邻居,如果通过peer connect-interface命令指定的接口为物理接口,则当该接口发生故障、链路状态变为down时,IBGP邻居关系会立即断开,从而加快路由收敛。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 指定与IPv4对等体/对等体组创建BGP会话时建立TCP连接使用的源地址或源接口。
¡ 指定与IPv4对等体/对等体组创建BGP会话时建立TCP连接使用的源地址。
peer { group-name | ipv4-address [ mask-length ] } source-address source-ipv4-address
¡ 指定与IPv4对等体/对等体组创建BGP会话时建立TCP连接使用的源接口。
peer { group-name | ipv4-address [ mask-length ] } connect-interface interface-type interface-number
缺省情况下,BGP使用到达BGP对等体的最佳路由出接口的主IPv4地址与对等体/对等体组建立TCP连接。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 指定与IPv6对等体/对等体组创建BGP会话时建立TCP连接使用的源地址或源接口。
¡ 指定与IPv6对等体/对等体组创建BGP会话时建立TCP连接使用的源地址。
peer { group-name | ipv6-address [ prefix-length ] } source-address source-ipv6-address
¡ 指定与IPv6对等体/对等体组创建BGP会话时建立TCP连接使用的源接口。
peer { group-name | ipv6-address [ prefix-length ] } connect-interface interface-type interface-number
缺省情况下,BGP使用到达BGP对等体的最佳路由出接口的IPv6地址与对等体/对等体组建立TCP连接。
通过本配置可以将本地路由表中指定网段的路由添加到BGP路由表中,以便通过BGP发布该网段路由。通过该种方式发布的路由的ORIGIN属性为IGP。
本配置中指定的网段路由必须存在于本地的IP路由表中,且处于Active状态,否则无法将该网段路由添加到BGP路由表中。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 进入BGP IPv4单播地址族视图。
address-family ipv4 [ unicast ]
(4) 配置BGP发布的本地网段路由。
network ipv4-address [ mask-length | mask ]
缺省情况下,BGP不发布本地的网段路由。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 进入BGP IPv6单播地址族视图。
address-family ipv6 [ unicast ]
(4) 配置BGP发布的本地网段路由。
network ipv6-address prefix-length
缺省情况下,BGP不发布本地的网段路由。
BGP可以向邻居AS发送本地AS内部网络的路由信息,但BGP不是自己去发现AS内部的路由信息,而是将IGP路由协议的路由信息引入到BGP路由表中,并发布给对等体。在引入IGP路由协议的路由时,可以针对不同的路由协议来对路由信息进行过滤。
缺省情况下,BGP引入IGP路由协议的路由时,不会引入该协议的缺省路由。用户可以通过配置,指定BGP引入IGP路由协议的路由时,允许将缺省路由引入到BGP路由表中。
通过引入方式发布的路由的ORIGIN属性为Incomplete。
只能引入路由表中状态为active的路由,是否为active状态可以通过display ip routing-table protocol命令或display ipv6 routing-table protocol命令来查看。这两条命令的详细介绍,请参见“网络互通命令参考”中的“IP路由基础”。
针对同一协议进程重复执行import-route命令引入路由时,最后一次执行的命令生效。若要引入同一协议进程时不覆盖已存在配置,则可以通过import-route-append命令附加引入IGP路由。针对同一协议进程同时配置import-route与import-route-append命令时:
如果均指定了引入路由的MED度量值,以import-route-append命令的配置为准。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 进入BGP IPv4单播地址族视图。
address-family ipv4 [ unicast ]
(4) 将IGP路由协议的路由信息引入到BGP路由表中。
¡ 引入IS-IS、OSPF、RIP协议的路由。
import-route { isis | ospf | rip } [ { process-id | all-processes } [ allow-direct | med med-value ] * ]
¡ 引入直连、Guard或静态路由。
import-route { direct | guard | static } [ med med-value ] *
缺省情况下,BGP不会引入IGP路由协议的路由信息。
(5) (可选)以附加的方式将IGP路由协议的路由信息引入到BGP路由表中。
¡ 引入IS-IS、OSPF、RIP协议的路由。
import-route-append { isis | ospf | rip } [ { process-id | all-processes } [ allow-direct | med med-value ] * ]
¡ 引入直连或静态路由。
import-route-append { direct | static } [ med med-value ] *
缺省情况下,BGP不会引入IGP路由协议的路由信息。
(6) (可选)允许将缺省路由引入到BGP路由表中。
default-route imported
缺省情况下,BGP不允许将缺省路由引入到BGP路由表中。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 进入BGP IPv6单播地址族视图。
address-family ipv6 [ unicast ]
(4) 将IGP路由协议的路由信息引入到IPv6 BGP路由表中。
¡ 引入IS-ISv6、OSPFv3、RIPng协议的路由。
import-route { isisv6 | ospfv3 | ripng } [ { process-id | all-processes } [ allow-direct | med med-value ] * ]
¡ 引入直连、Guard或静态路由。
import-route { direct | guard | static } [ med med-value ] *
缺省情况下,BGP不会引入IGP路由协议的路由信息。
(5) (可选)以附加的方式将IGP路由协议的路由信息引入到BGP路由表中。
¡ 引入IS-ISv6、OSPFv3、RIPng协议的路由。
import-route-append { isisv6 | ospfv3 | ripng } [ { process-id | all-processes } [ allow-direct | med med-value ] * ]
¡ 引入直连或静态路由。
import-route-append { direct | static } [ med med-value ] *
缺省情况下,BGP不会引入IGP路由协议的路由信息。
(6) (可选)允许将缺省路由引入到IPv6 BGP路由表中。
default-route imported
缺省情况下,BGP不允许将缺省路由引入到IPv6 BGP路由表中。
在中型或大型BGP网络中,在向对等体发布路由信息时,可以配置路由聚合,减少发布的路由数量,并减小路由表的规模。IPv4 BGP支持自动聚合和手动聚合两种聚合方式,同时配置时,手动聚合的优先级高于自动聚合的优先级。IPv6 BGP只支持手动聚合。
配置自动聚合功能后,BGP将对通过import-route命令引入的IGP子网路由进行聚合,不再发布子网路由,而是发布聚合的自然网段的路由。
自动聚合是按照自然网段进行聚合,而且只能对IGP引入的子网路由进行聚合。通过配置手动聚合,用户可以同时对从IGP路由协议引入的子网路由和用network命令发布的路由进行聚合,而且还可以根据需要定义聚合路由的子网掩码长度。
BGP路由表中创建的聚合路由的出接口为Null0接口,聚合后可以减少向BGP对等体发布的路由数目。在使用中应注意不要使这条聚合路由成为本设备的优选路由,否则会导致报文转发失败。如果聚合路由的子网掩码长度和被聚合的某一条具体路由完全相同,且聚合路由优先级高于具体路由,则聚合路由会成为优选路由,这种情况下需要通过修改路由优先级等方式,来确保优选的路由为具体路由。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 进入BGP IPv4单播地址族视图。
address-family ipv4 [ unicast ]
(4) 配置对引入的子网路由进行自动聚合。
summary automatic
缺省情况下,不对引入的子网路由进行自动聚合。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 进入BGP IPv4单播地址族视图。
address-family ipv4 [ unicast ]
(4) 在BGP路由表中创建一条聚合路由。
aggregate ipv4-address { mask-length | mask } [ as-set| detail-suppressed ] *
缺省情况下,未配置聚合路由。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 进入BGP IPv6单播地址族视图。
address-family ipv6 [ unicast ]
(4) 在IPv6 BGP路由表中创建一条聚合路由。
aggregate ipv6-address prefix-length [ as-set | detail-suppressed ] *
缺省情况下,未配置聚合路由。
执行本配置后,设备将向指定对等体/对等体组发布一条下一跳地址为本地地址的缺省路由。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 进入BGP IPv4单播地址族视图。
address-family ipv4 [ unicast ]
(4) 向对等体/对等体组发送缺省路由。
peer { group-name | ipv4-address [ mask-length ] | ipv6-address [ prefix-length ] } default-route-advertise
缺省情况下,不向对等体/对等体组发送缺省路由。
仅BGP IPv4单播地址族支持IPv6参数。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 进入BGP IPv6单播地址族视图。
address-family ipv6 [ unicast ]
(4) 向对等体/对等体组发送缺省路由。
peer { group-name | ipv4-address [ mask-length ] | ipv6-address [ prefix-length ] } default-route-advertise
缺省情况下,不向对等体/对等体组发送缺省路由。
仅BGP IPv6单播地址族支持IPv4参数。
缺省情况下,BGP发布BGP路由表中的最优路由,不管该路由在IP路由表中是否为最优路由。通过本配置可以保证BGP发送出去的路由是IP路由表中的最优路由,以减少BGP发送的路由数量。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 全局配置发布IP路由表中的最优路由。
advertise-rib-active
缺省情况下,BGP发布BGP路由表中的最优路由。
(4) 进入BGP IPv4单播地址族视图。
address-family ipv4 [ unicast ]
(5) 在指定地址族视图下,配置发布IP路由表中的最优路由。
advertise-rib-active
缺省情况下,与BGP实例视图下的配置保持一致。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 全局配置发布IPv6路由表中的最优路由。
advertise-rib-active
缺省情况下,BGP发布BGP路由表中的最优路由。
(4) 进入BGP IPv6单播地址族视图。
address-family ipv6 [ unicast ]
(5) 在指定地址族视图下,配置发布IPv6路由表中的最优路由。
advertise-rib-active
缺省情况下,与BGP实例视图下的配置保持一致。
可以通过以下几种方式配置BGP路由信息的发布策略:
· 使用访问控制列表或地址前缀列表对向所有对等体发布的路由信息进行过滤。
· 向指定对等体或对等体组发布路由时,使用访问控制列表或路由发送条件对发布给该对等体或对等体组的路由信息进行过滤。
用户可以根据需求选择过滤策略。如果同时配置了几种过滤策略,则按照如下顺序过滤发布的路由信息:
· peer filter-policy export
· filter-policy export
只有通过前面的过滤策略,才能继续执行后面的过滤策略;只有通过所有配置的过滤策略后,路由信息才能被发布。
配置BGP路由信息的发布/接收策略前,根据采取的策略,需要配置访问控制列表,详细配置过程请参见“安全配置指导”中的“ACL”。
过滤策略通过ACL或者前缀列表进行过滤时(例如配置filter-policy export命令时指定通过ACL匹配BGP路由信息):
· BGP路由只有能够通过ACL或前缀列表permit动作的匹配,该路由才能通过过滤策略的过滤。即如果一个过滤策略指定的是全部为deny动作的ACL或前缀列表,那么所有BGP路由均无法通过该过滤策略的过滤。
· ACL按照配置顺序进行匹配时,设备根据规则编号从小到大的顺序进行匹配;前缀列表按照表项索引号从小到大的顺序进行匹配。在该匹配顺序下,路由匹配到了一个ACL规则或者前缀列表的表项后,就不会继续再往下匹配。所以在配置多个规则/表项的ACL/前缀列表时,请尽量将先匹配的规则/表项的匹配范围设置为较小一些,以免后匹配的规则/表项不生效。
· 指定高级ACL作为过滤器时,rule [ rule-id ] permit ip source sour-addr sour-wildcard destination dest-addr dest-wildcard中的source sour-addr sour-wildcard用来匹配路由的目的网络地址,destination dest-addr dest-wildcard用来匹配路由的掩码。需要注意的是,需要指定路由掩码的点分十进制格式,例如,如果需要匹配3.3.3.0/24的路由,指定的规则应为rule [ rule-id ] permit ip source 3.3.3.0 0.0.0.255 destination 255.255.255.0 0.0.0.255。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 进入BGP IPv4单播地址族视图。
address-family ipv4 [ unicast ]
(4) 配置BGP路由信息的发布策略。请至少选择其中一项进行配置。
¡ 对向所有对等体发布的路由信息进行过滤。
filter-policy { ipv4-acl-number } export [ direct | { isis | ospf | rip } process-id | static ]
¡ 为对等体/对等体组设置基于ACL的路由发布过滤策略。
peer { group-name | ipv4-address [ mask-length ] | ipv6-address [ prefix-length ] } filter-policy ipv4-acl-number export
缺省情况下,不对发布的路由信息进行过滤。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 进入BGP IPv6单播地址族视图。
address-family ipv6 [ unicast ]
(4) 配置BGP路由信息的发布策略。请至少选择其中一项进行配置。
¡ 对向所有IPv6 BGP对等体发布的路由信息进行过滤。
filter-policy { ipv6-acl-number } export [ direct | { isisv6 | ospfv3 | ripng } process-id | static ]
¡ 为对等体/对等体组设置基于ACL的路由发布过滤策略。
peer { group-name | ipv4-address [ mask-length ] | ipv6-address [ prefix-length ] } filter-policy ipv6-acl-number export
配置了本功能时,在经过了重启且BGP进程恢复后,设备不能立刻向邻居发布更新消息,而是在一段延迟时间之后才能发送。这段延迟时间的作用是,设备重启后可以等待路由接收完成并优选后再向其他设备发布,以避免设备重启后路由信息不全,就发布给其他设备导致流量丢失的情况。
配置本功能后,如果需要部分路由前缀不受延迟发布控制,可以使用前缀列表进行控制,通过前缀列表过滤的路由不受延迟发布的影响。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 配置设备重启且BGP进程恢复后,经过一段延迟时间才能发送更新消息。
bgp update-delay on-startup seconds
缺省情况下,设备重启且BGP进程恢复后,立刻向Established状态的BGP邻居发布路由更新消息。
(4) (可选)配置通过前缀列表控制BGP更新消息延迟发布。
bgp update-delay on-startup prefix-list ipv4-prefix-list-name
缺省情况下,未配置通过前缀列表控制BGP更新消息延迟发布。
通过本配置可以避免攻击者向路由器发送大量的BGP路由,对路由器进行攻击。
当路由器从指定对等体/对等体组接收的路由数量超过指定的最大值时,可以选择以下处理方式:
· 路由器中断与该对等体/对等体组的BGP会话,不再尝试重建会话。
· 路由器保持与该对等体/对等体组的BGP会话,可以继续接收路由,仅打印日志信息。
· 路由器保持与该对等体/对等体组的BGP会话,丢弃超出限制的路由,并打印日志信息。
· 路由器中断与该对等体/对等体组的BGP会话,经过指定的时间后自动与对等体/对等体组重建会话。
执行本配置任务时,还可以指定路由器产生日志信息的阈值,即路由器接收的路由数量与配置的最大值的百分比达到指定的阈值时,路由器将产生日志信息。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 进入BGP IPv4单播地址族视图。
address-family ipv4 [ unicast ]
(4) 配置允许从对等体/对等体组接收的路由的最大数量。
peer { group-name | ipv4-address [ mask-length ] | ipv6-address [ prefix-length ] } route-limit prefix-number [ { alert-only | discard | reconnect reconnect-time } | percentage-value ] *
缺省情况下,不限制从对等体/对等体组接收的路由数量。
仅BGP IPv4单播地址族支持IPv6参数。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 进入BGP IPv6单播地址族视图。
address-family ipv6 [ unicast ]
(4) 配置允许从对等体/对等体组接收的路由的最大数量。
peer { group-name | ipv4-address [ mask-length ] | ipv6-address [ prefix-length ] } route-limit prefix-number [ { alert-only | discard | reconnect reconnect-time } | percentage-value ] *
缺省情况下,不限制从对等体/对等体组接收的路由数量。
仅BGP IPv6单播地址族支持IPv4参数。
可以通过以下几种方式配置BGP路由信息的接收策略:
· 使用访问控制列表或地址前缀列表对从所有对等体接收的路由信息进行过滤。
· 从指定对等体或对等体组接收路由时,使用访问控制列表对从该对等体或对等体组接收的路由信息进行过滤。
用户可以根据需求选择过滤策略。如果同时配置了几种过滤策略,则按照如下顺序过滤接收的路由:
· peer filter-policy import
· filter-policy import
只有通过前面的过滤策略,才能继续执行后面的过滤策略;只有通过所有配置的过滤策略后,路由信息才能被接收。
配置BGP路由信息的发布/接收策略前,根据采取的策略,需要配置访问控制列表,详细配置过程请参见“安全配置指导”中的“ACL”。
过滤策略通过ACL进行过滤时(例如配置filter-policy export命令时指定通过ACL匹配BGP路由信息):
· BGP路由只有能够通过ACL或前缀列表permit动作的匹配,该路由才能通过过滤策略的过滤。即如果一个过滤策略指定的是全部为deny动作的ACL或前缀列表,那么所有BGP路由均无法通过该过滤策略的过滤。
· ACL按照配置顺序进行匹配时,设备根据规则编号从小到大的顺序进行匹配;前缀列表按照表项索引号从小到大的顺序进行匹配。在该匹配顺序下,路由匹配到了一个ACL规则或者前缀列表的表项后,就不会继续再往下匹配。所以在配置多个规则/表项的ACL/前缀列表时,请尽量将先匹配的规则/表项的匹配范围设置为较小一些,以免后匹配的规则/表项不生效。
· 指定高级ACL作为过滤器时,rule [ rule-id ] permit ip source sour-addr sour-wildcard destination dest-addr dest-wildcard中的source sour-addr sour-wildcard用来匹配路由的目的网络地址,destination dest-addr dest-wildcard用来匹配路由的掩码。需要注意的是,需要指定路由掩码的点分十进制格式,例如,如果需要匹配3.3.3.0/24的路由,指定的规则应为rule [ rule-id ] permit ip source 3.3.3.0 0.0.0.255 destination 255.255.255.0 0.0.0.255。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 进入BGP IPv4单播地址族视图。
address-family ipv4 [ unicast ]
(4) 配置BGP路由信息的接收策略。请至少选择其中一项进行配置。
¡ 对从所有对等体接收的路由信息进行过滤。
filter-policy { ipv4-acl-number } import
¡ 为对等体/对等体组设置基于ACL的路由接收过滤策略。
peer { group-name | ipv4-address [ mask-length ] | ipv6-address [ prefix-length ] } filter-policy ipv4-acl-number import
缺省情况下,不对接收的路由信息进行过滤。
仅BGP IPv4单播地址族支持IPv6参数。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 进入BGP IPv6单播地址族视图。
address-family ipv6 [ unicast ]
(4) 配置BGP路由信息的接收策略。请至少选择其中一项进行配置。
¡ 对从所有IPv6 BGP对等体接收的路由信息进行过滤。
filter-policy { ipv6-acl-number } import
¡ 为对等体/对等体组设置基于ACL的路由接收过滤策略。
peer { group-name | ipv4-address [ mask-length ] | ipv6-address [ prefix-length ] } filter-policy ipv6-acl-number import
缺省情况下,不对接收的路由信息进行过滤。
为BGP对等体/对等体组配置SoO属性后,从该BGP对等体/对等体组接收路由时设备会为路由增加SoO属性,并且向该BGP对等体/对等体组发布路由时设备会检查路由的SoO属性,如果路由中携带的SoO属性与为对等体/对等体组配置的SoO属性相同,则不会将该路由发布给对等体/对等体组,从而避免路由环路。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 进入BGP IPv4单播地址族视图。
address-family ipv4 [ unicast ]
(4) 为BGP对等体/对等体组配置SoO属性。
peer { group-name | ipv4-address [ mask-length ] | ipv6-address [ prefix-length ] } soo site-of-origin
缺省情况下,没有为BGP对等体/对等体组配置SoO属性。
仅BGP IPv4单播地址族支持IPv6参数。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 进入BGP IPv6单播地址族视图。
address-family ipv6 [ unicast ]
(4) 为BGP对等体/对等体组配置SoO属性。
peer { group-name | ipv4-address [ mask-length ] | ipv6-address [ prefix-length ] } soo site-of-origin
缺省情况下,没有为BGP对等体/对等体组配置SoO属性。
仅BGP IPv6单播地址族支持IPv4参数。
当对等体间建立了BGP会话后,它们定时向对端发送Keepalive消息,以防止路由器认为BGP会话已中断。Keepalive消息的发送时间间隔称为存活时间间隔。
若路由器在设定的会话保持时间(Holdtime)内未收到对端的Keepalive消息或Update消息,则认为此BGP会话已中断,从而断开此BGP会话。
用户可以全局配置当前路由器上所有BGP会话的存活时间间隔与保持时间,也可以配置与指定对等体/对等体组建立的BGP会话的存活时间间隔和保持时间。如果同时配置了两者,则为指定对等体/对等体组配置的值具有较高的优先级。
存活时间间隔、会话保持时间的协商及计算方法如下:
· 如果当前路由器上配置的保持时间与对端设备(对等体)上配置的保持时间不一致,则数值较小者作为协商后的保持时间。协商的保持时间为0时,不向对等体发送Keepalive消息,与对等体之间的会话永远不会超时断开。
· 存活时间间隔不为0时,将协商的保持时间的三分之一与配置的存活时间间隔比较,取最小值作为存活时间间隔。
配置的保持时间必须大于或等于存活时间的三倍。
本功能可以针对所有BGP会话配置,或仅针对特定的对等体/对等体组配置。对于特定的对等体/对等体组,与设备间BGP会话的存活时间间隔和保持时间以peer timer命令的配置为准,如果设备未指定该对等体/对等体组配置过peer timer命令,则采用timer命令的配置。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 配置BGP会话的存活时间间隔和保持时间。请至少选择其中一项进行配置。
¡ 配置所有BGP会话的存活时间间隔和保持时间。
timer keepalive keepalive hold holdtime
配置本命令后,不会影响已建立的BGP会话,只对新建立的会话生效。
¡ 配置本地路由器与指定对等体/对等体组之间BGP会话的存活时间间隔和保持时间。
peer { group-name | ipv4-address [ mask-length ] } timer keepalive keepalive hold holdtime
缺省情况下,BGP会话的存活时间间隔为60秒,保持时间为180秒。
配置timer或peer timer命令后,不会马上断开会话,而是等到其他条件触发会话重建(如复位BGP会话)时,再以配置的保持时间协商建立会话。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 配置BGP会话的存活时间间隔和保持时间。请至少选择其中一项进行配置。
¡ 配置所有BGP会话的存活时间间隔和保持时间。
timer keepalive keepalive hold holdtime
配置本命令后,不会影响已建立的BGP会话,只对新建立的会话生效。
¡ 配置本地路由器与指定IPv6 BGP对等体/对等体组之间BGP会话的存活时间间隔和保持时间。
peer { group-name | ipv6-address [ prefix-length ] } timer keepalive keepalive hold holdtime
缺省情况下,BGP会话的存活时间间隔为60秒,保持时间为180秒。
配置timer或peer timer命令后,不会马上断开会话,而是等到其他条件触发会话重建(如复位BGP会话)时,再以配置的保持时间协商建立会话。
通过配置本功能可以控制重新建立BGP会话的速度:
· 当邻居关系建立失败,可以将定时器时间间隔的值调小,从而加快BGP会话建立的速度,便于路由快速收敛。
· 当邻居关系震荡时,可以将定时器时间间隔的值调大,从而减轻路由震荡。
配置本地路由器与指定对等体/对等体组之间重新建立BGP会话的时间间隔比配置本地路由器与所有对等体之间重新建立BGP会话的时间间隔的优先级高。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 配置本地路由器与对等体之间重新建立BGP会话的时间间隔。请选择其中一项进行配置。
¡ 配置本地路由器与所有对等体之间重新建立BGP会话的时间间隔。
timer connect-retry retry-time
¡ 配置本地路由器与指定对等体/对等体组之间重新建立BGP会话的时间间隔。
peer { group-name | ipv4-address [ mask-length ] } timer connect-retry retry-time
缺省情况下,本地路由器与对等体/对等体组之间重新建立BGP会话的时间间隔为32秒。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 配置本地路由器与对等体之间重新建立BGP会话的时间间隔。请选择其中一项进行配置。
¡ 配置本地路由器与所有对等体之间重新建立BGP会话的时间间隔。
timer connect-retry retry-time
¡ 配置本地路由器与指定IPv6 BGP对等体/对等体组之间重新建立BGP会话的时间间隔。
peer { group-name | ipv6-address [ prefix-length ] } timer connect-retry retry-time
缺省情况下,本地路由器与对等体/对等体组之间重新建立BGP会话的时间间隔为32秒。
BGP路由发生变化时,BGP路由器会发送Update消息通知对等体。如果同一路由频繁变化,BGP路由器会频繁发送Update消息更新路由,导致路由震荡。通过本配置指定向对等体/对等体组发布同一路由的更新时间间隔,可以避免每次路由变化都发送Update消息,避免路由震荡。对于需要撤销的路由,BGP路由器会立即向邻居发送路由撤销消息,不受本功能的控制。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 配置向指定对等体/对等体组发布同一路由的时间间隔。
peer { group-name | ipv4-address [ mask-length ] } route-update-interval interval
缺省情况下,向IBGP对等体发布同一路由的时间间隔为15秒,向EBGP对等体发布同一路由的时间间隔为30秒。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 配置向指定IPv6 BGP对等体/对等体组发布同一路由的时间间隔。
peer { group-name | ipv6-address [ prefix-length ] } route-update-interval interval
缺省情况下,向IBGP对等体发布同一路由的时间间隔为15秒,向EBGP对等体发布同一路由的时间间隔为30秒。
本地标签是指本地设备通过带标签的IPv4单播路由或带标签的IPv6单播路由分配给其他BGP对等体的MPLS标签。为路由分配的本地标签发生变化时,如果立即删除本地标签,则BGP对等体可能尚未收到新的标签,仍然采用旧的标签转发报文,从而导致流量中断。为了避免上述情况发生,BGP需要延迟一段时间再删除本地标签。通过本配置可以调整本地标签的延迟删除时间。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 配置删除本地标签的延迟时间。
retain local-label retain-time
缺省情况下,删除本地标签的延迟时间为60秒。
全局使能BGP日志记录功能,并使能与指定对等体/对等体组之间BGP会话的日志记录功能后,与该对等体/对等体组之间的BGP会话建立以及断开时会生成日志信息,通过display bgp peer ipv4 unicast log-info命令或display bgp peer ipv6 unicast log-info命令可以查看记录的日志信息。生成的日志信息还将被发送到设备的信息中心,通过设置信息中心的参数,决定日志信息的输出规则(即是否允许输出以及输出方向)。
有关信息中心参数的配置请参见“设备管理配置指导”中的“信息中心”。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 全局使能BGP日志记录功能。
log-peer-change
缺省情况下,全局BGP日志记录功能处于开启状态。
(4) 使能与指定对等体/对等体组之间BGP会话的日志记录功能。
peer { group-name | ipv4-address [ mask-length ] } log-change
缺省情况下,与所有对等体/对等体组之间BGP会话的日志记录功能均处于开启状态。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 全局使能BGP日志记录功能。
log-peer-change
缺省情况下,全局BGP日志记录功能处于开启状态。
(4) 使能与指定对等体/对等体组之间BGP会话的日志记录功能。
peer { group-name | ipv6-address [ prefix-length ] } log-change
缺省情况下,与所有对等体/对等体组之间BGP会话的日志记录功能均处于开启状态。
开启BGP模块的告警功能后,当BGP的邻居状态变化时BGP会产生RFC 4273中规定的告警信息,该信息包含邻居地址、最近一次出现错误的错误码和错误子码、当前的邻居状态。生成的告警信息将发送到设备的SNMP模块,通过设置SNMP中告警信息的发送参数,来决定告警信息输出的相关属性。
通过MIB(Management Information Base,管理信息库)节点对BGP进行管理时,BGP无法获知被管理的节点属于哪个BGP实例。为不同的BGP实例配置不同的SNMP上下文可以解决上述问题。
设备接收到SNMP报文后,根据报文中携带的上下文(对于SNMPv3)或团体名称(对于SNMPv1/v2c),判断如何进行处理:
· 对于SNMPv3报文:
¡ 如果报文中不携带上下文,且没有为default实例配置SNMP上下文,则对BGP default实例的MIB节点进行相应处理。
¡ 如果报文中携带上下文,设备上存在对应的SNMP上下文(通过系统视图下的snmp-agent context命令创建),且该上下文与为某一个BGP实例配置的上下文相同,则对该BGP实例的MIB节点进行相应处理。
¡ 其他情况下,不允许对任何MIB节点进行处理。
· 对于SNMPv1/v2c报文:
¡ 如果设备上没有通过系统视图下的snmp-agent community-map命令将报文中的团体名映射为SNMP上下文,且没有为default实例配置SNMP上下文,则对BGP default实例的MIB节点进行相应处理。
¡ 如果设备上将团体名映射为SNMP上下文,设备上存在对应的SNMP上下文,且该上下文与为某一个BGP实例配置的上下文相同,则对该BGP实例的MIB节点进行相应处理。
¡ 其他情况下,不允许对任何MIB节点进行处理。
有关告警信息的详细和SNMP上下文和团体名的详细介绍,请参见“网络管理和监控配置指导”中的“SNMP”。
(1) 进入系统视图。
system-view
(2) 开启BGP模块的告警功能。
snmp-agent trap enable bgp [ instance instance-name ]
缺省情况下,BGP模块的告警功能处于开启状态。
(3) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(4) 配置BGP实例的SNMP上下文。
snmp context-name context-name
缺省情况下,未配置BGP实例的SNMP上下文。
在完成上述配置后,在任意视图下执行display命令可以显示配置后BGP的运行情况,通过查看显示信息验证配置的效果。
表2-1 搭建基本BGP网络配置显示(IPv4单播)
操作 |
命令 |
显示BGP IPv4单播对等体组的信息 |
display bgp [ instance instance-name ] group ipv4 [ unicast ] [ group-name group-name ] |
显示通过network命令发布的路由信息 |
display bgp [ instance instance-name ] network ipv4 [ unicast ] |
显示BGP IPv4单播对等体或对等体组的状态和统计信息 |
display bgp [ instance instance-name ] peer ipv4 [ unicast ] [ ipv4-address mask-length | { ipv4-address | group-name group-name } log-info | [ ipv4-address ] verbose ] display bgp [ instance instance-name ] peer ipv4 [ unicast ] [ ipv6-address prefix-length | ipv6-address log-info | [ ipv6-address ] verbose ] |
显示BGP IPv4单播路由的震荡统计信息 |
display bgp [ instance instance-name ] routing-table flap-info ipv4 [ unicast ] [ ipv4-address [ { mask-length | mask } [ longest-match ] ] | as-path-acl as-path-acl-number ] |
显示BGP IPv4单播路由信息 |
display bgp [ instance instance-name ] routing-table ipv4 [ unicast ] [ ipv4-address [ { mask-length | mask } [ longest-match ] ] | ipv4-address [ mask-length | mask ] advertise-info | as-path-acl as-path-acl-number | community-list { { basic-community-list-number | comm-list-name } [ whole-match ] | adv-community-list-number } | peer { ipv4-address | ipv6-address } { advertised-routes | received-routes } [ ipv4-address [ mask-length | mask ] | statistics ] | statistics ] |
显示BGP IPv4单播地址族下打包组的相关信息 |
display bgp [ instance instance-name ] update-group ipv4 [ unicast ] [ ipv4-address ] display bgp [ instance instance-name ] update-group ipv4 [ unicast ] [ ipv6-address ] |
显示所有BGP实例的信息 |
display bgp instance-info |
表2-2 搭建基本BGP网络配置显示(IPv6单播)
操作 |
命令 |
显示BGP IPv6单播对等体组的信息 |
display bgp [ instance instance-name ] group ipv6 [ unicast ] [ group-name group-name ] |
显示通过network命令发布的路由信息 |
display bgp [ instance instance-name ] network ipv6 [ unicast ] |
显示BGP IPv6单播对等体或对等体组的状态和统计信息 |
display bgp [ instance instance-name ] peer ipv6 [ unicast ] [ ipv6-address prefix-length | { ipv6-address | group-name group-name } log-info | [ ipv6-address ] verbose ] display bgp [ instance instance-name ] peer ipv6 [ unicast ] [ ipv4-address mask-length | ipv4-address log-info | [ ipv4-address ] verbose ] |
显示BGP IPv6单播路由的震荡统计信息 |
display bgp [ instance instance-name ] routing-table flap-info ipv6 [ unicast ] [ ipv6-address prefix-length | as-path-acl as-path-acl-number ] |
显示BGP IPv6单播路由信息 |
display bgp [ instance instance-name ] routing-table ipv6 [ unicast ] [ ipv6-address prefix-length [ advertise-info ] | as-path-acl as-path-acl-number | community-list { { basic-community-list-number | comm-list-name } [ whole-match ] | adv-community-list-number } | peer ipv6-address { advertised-routes | received-routes } [ ipv6-address prefix-length | statistics ] | statistics ] display bgp [ instance instance-name ] routing-table ipv6 [ unicast ] peer ipv4-address { advertised-routes | received-routes } [ ipv6-address prefix-length | statistics ] |
显示BGP IPv6单播地址族下打包组的相关信息 |
display bgp [ instance instance-name ] update-group ipv6 [ unicast ] [ ipv4-address | ipv6-address ] |
显示所有BGP实例的信息 |
display bgp instance-info |
当BGP路由策略或协议发生变化后,如果需要通过复位BGP会话使新的配置生效,请在用户视图下进行下列配置。
复位BGP会话时,会造成短暂的BGP会话中断。
表2-3 复位BGP会话
操作 |
命令 |
复位IPv4单播地址族下的BGP会话 |
reset bgp [ instance instance-name ] { as-number | ipv4-address [ mask-length ] | all | external | group group-name | internal } ipv4 [ unicast ] reset bgp [ instance instance-name ] ipv6-address [ prefix-length ] ipv4 [ unicast ] |
复位IPv6单播地址族下的BGP会话 |
reset bgp [ instance instance-name ] { as-number | ipv6-address [ prefix-length ] | all | external | group group-name | internal } ipv6 [ unicast ] reset bgp [ instance instance-name ] ipv4-address [ mask-length ] ipv6 [ unicast ] |
复位所有BGP会话 |
reset bgp [ instance instance-name ] all |
在用户视图下,执行reset命令可以清除BGP相关统计信息。
表2-4 清除BGP信息
操作 |
命令 |
清除BGP IPv4单播路由的震荡统计信息 |
reset bgp [ instance instance-name ] flap-info ipv4 [ unicast ] [ ipv4-address [ mask-length | mask ] | as-path-acl as-path-acl-number | peer ipv4-address [ mask-length ] ] |
清除BGP IPv6单播路由的震荡统计信息 |
reset bgp [ instance instance-name ] flap-info ipv6 [ unicast ] [ ipv6-address prefix-length | as-path-acl as-path-acl-number | peer ipv6-address [ prefix-length ] ] |
不同款型规格的资料略有差异, 详细信息请向具体销售和400咨询。H3C保留在没有任何通知或提示的情况下对资料内容进行修改的权利!