06-BGP配置
本章节下载: 06-BGP配置 (985.8 KB)
目 录
在以下路由协议的介绍中所指的路由器及路由器图标,代表了一般意义下的路由器以及运行了路由协议的以太网交换机。
BGP(Border Gateway Protocol,边界网关协议)是一种用于AS(Autonomous System,自治系统)之间的动态路由协议。AS是拥有同一选路策略,在同一技术管理部门下运行的一组路由器。
早期发布的三个版本分别是BGP-1(RFC 1105)、BGP-2(RFC 1163)和BGP-3(RFC 1267),当前使用的版本是BGP-4(RFC 1771,已更新至RFC 4271)。BGP-4做为事实上的Internet外部路由协议标准,被广泛应用于ISP(Internet Service Provider,互联网服务提供商)之间。
下文中若不做特殊说明,所指的BGP均为BGP-4。
BGP特性描述如下:
l BGP是一种外部网关协议(Exterior Gateway Protocol,EGP),与OSPF、RIP等内部网关协议(Interior Gateway Protocol,IGP)不同,其着眼点不在于发现和计算路由,而在于控制路由的传播和选择最佳路由。
l BGP使用TCP作为其传输层协议(端口号179),提高了协议的可靠性。
l BGP支持CIDR(Classless Inter-Domain Routing,无类域间路由)。
l 路由更新时,BGP只发送更新的路由,大大减少了BGP传播路由所占用的带宽,适用于在Internet上传播大量的路由信息。
l BGP路由通过携带AS路径信息彻底解决路由环路问题。
l BGP提供了丰富的路由策略,能够对路由实现灵活的过滤和选择。
l BGP易于扩展,能够适应网络新的发展。
发送BGP消息的路由器称为BGP发言者(BGP Speaker),它接收或产生新的路由信息,并发布(Advertise)给其它BGP发言者。当BGP发言者收到来自其它自治系统的新路由时,如果该路由比当前已知路由更优、或者当前还没有该路由,它就把这条路由发布给自治系统内所有其它BGP发言者。
相互交换消息的BGP发言者之间互称对等体(Peer),若干相关的对等体可以构成对等体组(Peer group)。
BGP在路由器上以下列两种方式运行:
l IBGP(Internal BGP):当BGP运行于同一自治系统内部时,被称为IBGP;
l EBGP(External BGP):当BGP运行于不同自治系统之间时,称为EBGP。
BGP有5种消息类型:Open、Update、Notification、Keepalive和Route-refresh。这些消息有相同的报文头,其格式如图1-1所示。
图1-1 BGP消息的报文头格式
主要字段的解释如下:
l Marker:16字节,用于标明BGP报文边界,所有比特均为“1”。
l Length:2字节,BGP消息总长度(包括报文头在内),以字节为单位。
l Type:1字节,BGP消息的类型。其取值从1到5,分别表示Open、Update、Notification、Keepalive和Route-refresh消息。其中,前四种消息是在RFC 1771中定义,而Type为5的消息则是在RFC 2918中定义的。
Open消息是TCP连接建立后发送的第一个消息,用于建立BGP对等体之间的连接关系。其消息格式如图1-2所示。
图1-2 BGP Open消息格式
主要字段的解释如下:
l Version:BGP的版本号。对于BGP-4来说,其值为4。
l My autonomous system:本地AS号。通过比较两端的AS号可以确定是EBGP连接还是IBGP连接。
l Hold time:保持时间。在建立对等体关系时两端要协商Hold Time,并保持一致。如果在这个时间内未收到对端发来的Keepalive消息或Update消息,则认为BGP连接中断。
l BGP identifier:BGP标识符。以IP地址的形式表示,用来识别BGP路由器。
l Opt Parm Len(Optional Parameters Length):可选参数的长度。如果为0则没有可选参数。
l Optional parameters:可选参数。用于多协议扩展(Multiprotocol Extensions)等功能。
Update消息用于在对等体之间交换路由信息。它既可以发布可达路由信息,也可以撤销不可达路由信息。其消息格式如图1-3所示。
图1-3 BGP Update消息格式
一条Update报文可以通告一类具有相同路径属性的可达路由,这些路由放在NLRI(Network Layer Reachability Information,网络层可达性信息)字段中,Path Attributes字段携带了这些路由的属性,BGP根据这些属性进行路由的选择;同时Update报文还可以携带多条不可达路由,被撤销的路由放在Withdrawn Routes字段中。
主要字段的解释如下:
l Unfeasible routes length:不可达路由字段的长度,以字节为单位。如果为0则说明没有Withdrawn Routes字段。
l Withdrawn routes:不可达路由的列表。
l Total path attribute length:路径属性字段的长度,以字节为单位。如果为0则说明没有Path Attributes字段。
l Path attributes:与NLRI相关的所有路径属性列表,每个路径属性由一个TLV(Type-Length-Value)三元组构成。BGP正是根据这些属性值来避免环路,进行选路,协议扩展等。
l NLRI:可达路由的前缀和前缀长度二元组。
当BGP检测到错误状态时,就向对等体发出Notification消息,之后BGP连接会立即中断。其消息格式如图1-4所示。
主要字段的解释如下:
l Error code:差错码,指定错误类型。
l Error subcode:差错子码,错误类型的详细信息。
l Data:用于辅助发现错误的原因,它的内容依赖于具体的差错码和差错子码,记录的是出错部分的数据,长度不固定。
BGP会周期性地向对等体发出Keepalive消息,用来保持连接的有效性。其消息格式中只包含报文头,没有附加其他任何字段。
Route-refresh消息用来要求对等体重新发送指定地址族的路由信息。其消息格式如图1-5所示。
主要的字段解释如下:
l AFI:Address Family Identifier,地址族标识。
l Res.:保留,必须置0。
l SAFI:Subsequent Address Family Identifier,子地址族标识。
BGP路由属性是跟随路由一起发送出去的一组参数,封装在Update报文的Path attributes字段中。它对特定的路由进行了进一步的描述,使得路由接收者能够根据路由属性值对路由进行过滤和选择。
事实上,所有的BGP路由属性都可以分为以下四类:
l 公认必须遵循(Well-known mandatory):所有BGP路由器都必须能够识别这种属性,且必须存在于Update消息中。如果缺少这种属性,路由信息就会出错。
l 公认可选(Well-known discretionary):所有BGP路由器都可以识别,但不要求必须存在于Update消息中,可以根据具体情况来选择。
l 可选过渡(Optional transitive):在AS之间具有可传递性的属性。BGP路由器可以不支持此属性,但它仍然会接收带有此属性的路由,并通告给其他对等体。
l 可选非过渡(Optional non-transitive):如果BGP路由器不支持此属性,该属性被忽略,且不会通告给其他对等体。
BGP路由几种基本属性和对应的类别如表1-1所示。
表1-1 路由属性和类别
属性名称 |
类别 |
ORIGIN |
公认必须遵循 |
AS_PATH |
公认必须遵循 |
NEXT_HOP |
公认必须遵循 |
LOCAL_PREF |
公认可选 |
ATOMIC_AGGREGATE |
公认可选 |
AGGREGATOR |
可选过渡 |
COMMUNITY |
可选过渡 |
MULTI_EXIT_DISC (MED) |
可选非过渡 |
ORIGINATOR_ID |
可选非过渡 |
CLUSTER_LIST |
可选非过渡 |
(1) 源(ORIGIN)属性
ORIGIN属性定义路由信息的来源,标记一条路由是怎么成为BGP路由的。它有以下三种类型:
l IGP:优先级最高,说明路由产生于本AS内。
l EGP:优先级次之,说明路由通过EGP学到。
l incomplete:优先级最低,它并不是说明路由不可达,而是表示路由的来源无法确定。例如,引入的其它路由协议的路由信息。
(2) AS路径(AS_PATH)属性
AS_PATH属性按一定次序记录了某条路由从本地到目的地址所要经过的所有AS号。当BGP将一条路由通告到其他AS时,便会把本地AS号添加在AS_PATH列表的最前面。收到此路由的BGP路由器根据AS_PATH属性就可以知道去目的地址所要经过的AS。离本地AS最近的相邻AS号排在前面,其他AS号按顺序依次排列。如图1-6所示。
通常情况下,BGP不会接受AS_PATH中已包含本地AS号的路由,从而避免了形成路由环路的可能。
在目前的实现中,根据某些特殊的具体应用需求,可以通过配置peer allow-as-loop命令允许AS号重复。
同时,AS_PATH属性也可用于路由的选择和过滤。在其他因素相同的情况下,BGP会优先选择路径较短的路由。比如在上图中,AS 50中的BGP路由器会选择经过AS 40的路径作为到目的地址8.0.0.0的最优路由。
在某些应用中,可以使用路由策略来人为地增加AS路径的长度,以便更为灵活地控制BGP路径的选择。
通过配置AS路径过滤列表,还可以针对AS_PATH属性中所包含的AS号来对路由进行过滤。
(3) 下一跳(NEXT_HOP)属性
BGP的下一跳属性和IGP的有所不同,不一定就是邻居路由器的IP地址。
下一跳属性取值情况分为三种,如图1-7所示。
l BGP发言者把自己产生的路由发给所有邻居时,将把该路由信息的下一跳属性设置为自己与对端连接的接口地址;
l BGP发言者把接收到的路由发送给EBGP对等体时,将把该路由信息的下一跳属性设置为本地与对端连接的接口地址;
l BGP发言者把从EBGP邻居得到的路由发给IBGP邻居时,并不改变该路由信息的下一跳属性。如果配置了负载分担,等价路由被发给IBGP邻居时则会修改下一跳属性。关于“负载分担”的概念请参见“1.1.4 BGP的选路规则”。
(4) MED(MULTI_EXIT_DISC)
MED属性仅在相邻两个AS之间交换,收到此属性的AS一方不会再将其通告给任何其他第三方AS。
MED属性相当于IGP使用的度量值(metrics),它用于判断流量进入AS时的最佳路由。当一个运行BGP的路由器通过不同的EBGP对等体得到目的地址相同但下一跳不同的多条路由时,在其它条件相同的情况下,将优先选择MED值较小者作为最佳路由。如图1-8所示,从AS 10到AS 20的流量将选择Router B作为入口。
图1-8 MED属性
通常情况下,BGP只比较来自同一个AS的路由的MED属性值。
在目前的实现中,通过配置compare-different-as-med命令,可以强制BGP比较来自不同AS的路由的MED属性值。
(5) 本地优先(LOCAL_PREF)属性
LOCAL_PREF属性仅在IBGP对等体之间交换,不通告给其他AS。它表明BGP路由器的优先级。
LOCAL_PREF属性用于判断流量离开AS时的最佳路由。当BGP的路由器通过不同的IBGP对等体得到目的地址相同但下一跳不同的多条路由时,将优先选择LOCAL_PREF属性值较高的路由。如图1-9所示,从AS 20到AS 10的流量将选择Router C作为出口。
(6) 团体(COMMUNITY)属性
团体属性也是跟随路由一起发送出去的一组特殊数据。根据需要,一条路由可以携带一个或多个团体属性值(每个团体属性值用一个四字节的整数表示)。接收到该路由的路由器就可以根据团体属性值对路由作出适当的处理(比如决定是否发布该路由、在什么范围发布等),从而能够简化路由策略的应用和降低维护管理的难度。
公认的团体属性有:
l INTERNET:缺省情况下,所有的路由都属于INTERNET团体。具有此属性的路由可以被通告给所有的BGP对等体。
l NO_EXPORT:具有此属性的路由在收到后,不能被发布到本地AS之外。如果使用了联盟,则不能被发布到联盟之外,但可以发布给联盟中的其他子AS(关于联盟的定义请参见“1.1.6 大规模BGP网络所遇到的问题”)。
l NO_ADVERTISE:具有此属性的路由被接收后,不能被通告给任何其他的BGP对等体。
l NO_EXPORT_SUBCONFED:具有此属性的路由被接收后,不能被发布到本地AS之外,也不能发布到联盟中的其他子AS。
在目前的实现中,BGP选择路由时采取如下策略:
(1) 首先丢弃下一跳(NEXT_HOP)不可达的路由;
(2) 优选Preferred-value值最大的路由;
(3) 优选本地优先级(LOCAL_PREF)最高的路由;
(4) 优选聚合路由;
(5) 优选AS路径(AS_PATH)最短的路由;
(6) 依次选择ORIGIN类型为IGP、EGP、Incomplete的路由;
(7) 优选MED值最低的路由;
(8) 依次选择从EBGP、联盟、IBGP学来的路由;
(9) 优选下一跳Cost值最低的路由;
(10) 优选CLUSTER_LIST长度最短的路由;
(11) 优选ORIGINATOR_ID最小的路由;
(13) 优选地址最小的对等体发布的路由。
l CLUSTER_ID为路由反射器的集群ID,CLUSTER_LIST由CLUSTER_ID序列组成,反射器将自己的CLUSTER_ID加入CLUSTER_LIST中,若反射器收到路由中CLUSTER_LIST中包含有自己的CLUSTER_ID,则丢弃该路由,从而避免群内环路的发生。
l 如果配置了负载分担,并且有多条到达同一目的地的路由,则根据配置的路由条数选择多条路由进行负载分担。
在BGP中,由于协议本身的特殊性,它产生的路由的下一跳地址可能不是当前路由器直接相连的邻居。常见的一个原因是:IBGP之间发布路由信息时不改变下一跳。这种情况下,为了能够将报文正确转发出去,路由器必须先找到一个直接可达的地址(查找IGP建立的路由表项),通过这个地址到达路由表中指示的下一跳。在上述过程中,去往直接可达地址的路由被称为依赖路由,BGP路由依赖于这些路由指导报文转发。根据下一跳地址找到依赖路由的过程就是路由迭代(recursion)。
目前系统支持基于迭代的BGP负载分担,即如果依赖路由本身是负载分担的(假设有三个下一跳地址),则BGP也会生成相同数量的下一跳地址来指导报文转发。需要说明的是,基于迭代的BGP负载分担并不需要命令配置,这一特性在系统上始终启用。
在实现方法上,BGP的负载分担与IGP的负载分担有所不同:
l IGP是通过协议定义的路由算法,对到达同一目的地址的不同路由,根据计算结果,将度量值(metric)相等的(如RIP、OSPF)路由进行负载分担,选择的标准很明确(按metric)。
l BGP本身并没有路由计算的算法,它只是一个选路的路由协议,因此,不能根据一个明确的度量值决定是否对路由进行负载分担,但BGP有丰富的选路规则,可以在对路由进行一定的选择后,有条件地进行负载分担,也就是将负载分担加入到BGP的选路规则中去。
l BGP只对AS_PATH属性、ORIGIN属性、LOCAL_PREF和MED值完全相同的路由进行负载分担。
l BGP负载分担特性适用于EBGP、IBGP以及联盟之间。
l 如果有多条到达同一目的地的路由,则根据配置的路由条数选择多条路由进行负载分担。
图1-10 BGP负载分担示意图
在图1-10中,Router D和Router E是Router C的IBGP对等体。当Router A和Router B同时向Router C通告到达同一目的地的路由时,如果用户在Router C配置了负载分担(如balance 2),则当满足一定的选路规则后,并且两条路由具有相同的AS_PATH属性、ORIGIN属性、LOCAL_PREF和MED值时,Router C就把接收的两条路由同时加入到转发表中,实现BGP路由的负载分担。Router C只向Router D和Router E转发一次该路由,AS_PATH不变,但NEXT_HOP属性改变为Router C的地址,而不是原来的EBGP对等体地址。其它的BGP过渡属性将按最佳路由的属性传递。
在目前的实现中,BGP发布路由时采用如下策略:
l 存在多条有效路由时,BGP发言者只将最优路由发布给对等体;
l BGP发言者只把自己使用的路由发布给对等体;
l BGP发言者从EBGP获得的路由会向它所有BGP对等体发布(包括EBGP对等体和IBGP对等体);
l BGP发言者从IBGP获得的路由不向它的IBGP对等体发布;
l BGP发言者从IBGP获得的路由发布给它的EBGP对等体(关闭BGP与IGP同步的情况下,IBGP路由被直接发布;开启BGP与IGP同步的情况下,该IBGP路由只有在IGP也发布了这条路由时才会被同步并发布给EBGP对等体);
l 连接一旦建立,BGP发言者将把自己所有的BGP路由发布给新对等体。
同步是指IBGP和IGP之间的同步,其目的是为了避免出现误导外部AS路由器的现象发生。
如果一个AS中有非BGP路由器提供转发服务,经该AS转发的IP报文将可能因为目的地址不可达而被丢弃。如图1-11所示,Router E通过BGP从Router D可以学到Router A的一条路由8.0.0.0/8,于是将到这个目的地址的报文转发给Router D,Router D查询路由表,发现下一跳是Router B(通过peer next-hop-local命令手动设置)。由于Router D从IGP学到了到Router B的路由,所以通过路由迭代,Router D将报文转发给Router C。但Router C并不知道去8.0.0.0/8的路由,于是将报文丢弃。
图1-11 IBGP和IGP同步
如果设置了同步特性,在IBGP路由加入路由表并发布给EBGP对等体之前,会先检查IGP路由表。只有在IGP也知道这条IBGP路由时,它才会被发布给EBGP对等体。
在下面的情况中,可以关闭同步特性。
l 本AS不是过渡AS(上图中的AS 20就属于一个过渡AS)
l 本AS内所有路由器建立IBGP全连接
在大规模的网络中,BGP路由表十分庞大,使用路由聚合(Routes Aggregation)可以大大减小路由表的规模。
路由聚合实际上是将多条路由合并的过程。这样BGP在向对等体通告路由时,可以只通告聚合后的路由,而不是将所有的具体路由都通告出去。
目前系统支持自动聚合和手动聚合方式。使用后者还可以控制聚合路由的属性,以及决定是否发布具体路由。
BGP路由衰减(Route Dampening)用来解决路由不稳定的问题。路由不稳定的主要表现形式是路由振荡(Route flaps),即路由表中的某条路由反复消失和重现。
发生路由振荡时,路由协议就会向邻居发布路由更新,收到更新报文的路由器需要重新计算路由并修改路由表。所以频繁的路由振荡会消耗大量的带宽资源和CPU资源,严重时会影响到网络的正常工作。
在多数情况下,BGP协议都应用于复杂的网络环境中,路由变化十分频繁。为了防止持续的路由振荡带来的不利影响,BGP使用衰减来抑制不稳定的路由。
BGP衰减使用惩罚值来衡量一条路由的稳定性,惩罚值越高则说明路由越不稳定。路由每发生一次振荡(路由从激活状态变为未激活状态,称为一次路由振荡),BGP便会给此路由增加一定的惩罚值(1000,此数值为系统固定,不可修改)。当惩罚值超过抑制阈值时,此路由被抑制,不加入到路由表中,也不再向其他BGP对等体发布更新报文。
被抑制的路由每经过一段时间,惩罚值便会减少一半,这个时间称为半衰期(Half-life)。当惩罚值降到再使用阈值时,此路由变为可用并被加入到路由表中,同时向其他BGP对等体发布更新报文。
图1-12 BGP衰减示意图
对等体组(Peer Group)是一些具有某些相同属性的对等体的集合。当一个对等体加入对等体组中时,此对等体将获得与所在对等体组相同的配置。当对等体组的配置改变时,组内成员的配置也相应改变。
在大型BGP网络中,对等体的数量会很多,其中很多对等体具有相同的策略,在配置时会重复使用一些命令,利用对等体组在很多情况下可以简化配置。
将对等体加入对等体组中,对等体与对等体组具有相同的路由更新策略,提高了路由发布效率。
如果对等体和对等体组都对某个选项做了配置,配置以最后一次的修改为准。
对等体组可以使一组对等体共享相同的策略,而利用团体可以使多个AS中的一组BGP路由器共享相同的策略。团体是一个路由属性,在BGP对等体之间传播,它并不受到AS范围的限制。
BGP路由器在将带有团体属性的路由发布给其它对等体之前,可以改变此路由原有的团体属性。
除了使用公认的团体属性外,用户还可以使用团体属性列表自定义扩展团体属性,以便更为灵活地控制路由策略。
为保证IBGP对等体之间的连通性,需要在IBGP对等体之间建立全连接关系。假设在一个AS内部有n台路由器,那么应该建立的IBGP连接数就为n(n-1)/2。当IBGP对等体数目很多时,对网络资源和CPU资源的消耗都很大。
利用路由反射可以解决这一问题。在一个AS内,其中一台路由器作为路由反射器RR(Route Reflector),其它路由器做为客户机(Client)与路由反射器之间建立IBGP连接。路由反射器在客户机之间传递(反射)路由信息,而客户机之间不需要建立BGP连接。
既不是反射器也不是客户机的BGP路由器被称为非客户机(Non-Client)。非客户机与路由反射器之间,以及所有的非客户机之间仍然必须建立全连接关系。其示意图如图1-13所示。
路由反射器和它的客户机组成了一个集群(Cluster)。某些情况下,为了增加网络的可靠性和防止单点故障,可以在一个集群中配置一个以上的路由反射器。这时,位于相同集群中的每个路由反射器都要配置相同的Cluster_ID,以避免路由循环。如图1-14所示。
在某些网络中,路由反射器的客户机之间已经建立了全连接,它们可以直接交换路由信息,此时客户机到客户机之间的路由反射是没有必要的,而且还占用带宽资源。目前,系统支持配置相关命令来禁止在客户机之间反射路由。
禁止客户机之间的路由反射后,客户机到非客户机之间的路由仍然可以被反射。
联盟(Confederation)是处理AS内部的IBGP网络连接激增的另一种方法,它将一个自治系统划分为若干个子自治系统,每个子自治系统内部的IBGP对等体建立全连接关系,子自治系统之间建立联盟内部EBGP连接关系。其示意图如图1-15所示。
在不属于联盟的BGP发言者看来,属于同一个联盟的多个子自治系统是一个整体,外界不需要了解内部的子自治系统情况,联盟ID就是标识联盟这一整体的自治系统号,如上图中的AS 200就是联盟ID。
联盟的缺陷是:从非联盟方案向联盟方案转变时,要求路由器重新进行配置,逻辑拓扑也要改变。
在大型BGP网络中,路由反射器和联盟可以被同时使用。
GR是一种在协议重启或Master/Slave切换时保证转发业务不中断的机制。GR有两个角色:
l GR Restarter:发生协议重启或主备倒换事件且具有GR能力的设备。
l GR Helper:和GR Restarter具有邻居关系,协助完成GR流程的设备。
基于BGP的GR Restarter为了与BGP对等体建立一个BGP会话连接,首先要发送一个包含了GR能力的OPEN消息到对端,BGP对等体收到该消息后,得知发送方已具有GR能力。这样,通过OPEN消息交互GR能力,GR Restarter与其BGP对等体之间协商建立起GR Session连接。如果双方都没有交换GR能力的信息,建立起的会话也就不具备GR能力。
对于IRF设备,当进行Master/Slave切换时,会话项将丢失,此时具备GR感知能力的BGP对等体会将所有与该GR Restarter有关的路由进行失效标记。但在GR Time内仍按照这些路由进行报文转发,这样确保了在从BGP对等体重新收集路由信息的过程中没有报文丢失。
对于IRF设备,当进行Master/Slave切换时,GR Restarter会重新与BGP对等体建立GR Session连接,同时发送新的GR消息以宣告其重启完毕。此时两个BGP对等体间进行路由信息交换。交换完成后,GR Restarter根据新的路由转发信息更新路由表和转发表,删除失效的路由,完成BGP协议收敛。
传统的BGP-4只能管理IPv4单播的路由信息,对于使用其它网络层协议(如IPv6等)的应用,在跨自治系统传播时就受到一定限制。
为了提供对多种网络层协议的支持,IETF对BGP-4进行了扩展,形成MP-BGP,目前的MP-BGP标准是RFC 4760(Multiprotocol Extensions for BGP-4,BGP-4的多协议扩展)。
支持BGP扩展的路由器与不支持BGP扩展的路由器可以互通。
BGP-4使用的报文中,与IPv4地址格式相关的三条信息都由Update报文携带,这三条信息分别是:NLRI、路径属性中的NEXT_HOP、路径属性中的AGGREGATOR(该属性中包含形成聚合路由的BGP发言者的IP地址)。
为实现对多种网络层协议的支持,BGP-4需要将网络层协议的信息反映到NLRI及NEXT_HOP。MP-BGP中引入了两个新的路径属性:
l MP_REACH_NLRI:Multiprotocol Reachable NLRI,多协议可达NLRI。用于发布可达路由及下一跳信息。
l MP_UNREACH_NLRI:Multiprotocol Unreachable NLRI,多协议不可达NLRI。用于撤销不可达路由。
这两种属性都是可选非过渡(Optional non-transitive)的,因此,不提供多协议能力的BGP发言者将忽略这两个属性的信息,不把它们传递给其它邻居。
MP-BGP采用地址族(Address Family)来区分不同的网络层协议,关于地址族的一些取值可以参考RFC 1700(Assigned Numbers)。目前,系统实现了多种MP-BGP扩展应用,包括对VPN的扩展、对IPv6的扩展等,不同的扩展应用在各自的地址族视图下配置。
l 有关VPN的扩展应用,请参见“MPLS配置指导”中的“MPLS L3VPN”。
l 有关IPv6的扩展应用,请参见“三层技术-IP路由配置指导”中的“IPv6 BGP”。
l 本章不对MP-BGP地址族视图下的、与特定应用相关的命令作详细介绍。
与BGP相关的协议规范有:
l RFC 1771:A Border Gateway Protocol 4 (BGP-4)
l RFC 2858:Multiprotocol Extensions for BGP-4
l RFC 3392:Capabilities Advertisement with BGP-4
l RFC 2918:Route Refresh Capability for BGP-4
l RFC 2439:BGP Route Flap Damping
l RFC 1997:BGP Communities Attribute
l RFC 2796:BGP Route Reflection
l RFC 3065:Autonomous System Confederations for BGP
l RFC 4271,A Border Gateway Protocol 4 (BGP-4)
l RFC 5291,Outbound Route Filtering Capability for BGP-4
l RFC 5292,Address-Prefix-Based Outbound Route Filter for BGP-4
l draft-ietf-idr-restart-08:Graceful Restart Mechanism for BGP
表1-2 BGP配置任务简介
配置任务 |
说明 |
详细配置 |
|
配置BGP连接 |
创建BGP连接 |
必选 |
|
配置建立TCP连接使用的源接口 |
可选 |
||
配置允许同非直连邻居建立EBGP连接 |
可选 |
||
控制路由信息的生成 |
配置BGP发布本地路由 |
二者至少选其一 |
|
配置BGP引入其它路由 |
|||
配置BGP引入其它协议缺省路由 |
可选 |
||
控制路由信息的发布与接收 |
配置BGP路由聚合 |
可选 |
|
配置向对等体/对等体组发送缺省路由 |
|||
配置BGP路由信息的发布/接收策略 |
|||
配置BGP与IGP路由同步 |
|||
限制从BGP对等体/对等体组接收的路由前缀数量 |
|||
配置BGP路由衰减 |
|||
配置shortcut路由 |
|||
配置BGP的路由属性 |
为接收路由分配首选值 |
可选 |
|
配置BGP的路由优先级 |
|||
配置Local-Preference缺省值 |
|||
配置MED属性 |
|||
配置下一跳属性 |
|||
配置AS_PATH属性 |
|||
调整和优化BGP网络 |
配置BGP存活时间间隔与保持时间 |
可选 |
|
配置发送路由更新报文的时间间隔 |
|||
配置BGP软复位 |
|||
配置BGP ORF能力 |
|||
使能4字节AS号抑制功能 |
|||
使能EBGP连接快速复位功能 |
|||
配置BGP建立TCP连接时进行MD5认证 |
|||
配置BGP负载分担 |
|||
禁止与对等体/对等体组建立会话 |
|||
配置大型BGP网络 |
配置BGP对等体组 |
可选 |
|
配置BGP团体 |
|||
配置BGP路由反射器 |
|||
配置BGP联盟 |
|||
配置BGP GR |
可选 |
||
开启Trap功能 |
可选 |
||
使能BGP日志功能 |
可选 |
||
配置BGP与BFD联动 |
可选 |
本节讲述最基本的BGP网络配置过程。
在本节中,不对BGP和MP-BGP进行严格的区分,命令的适用情况请参考所在的视图。
在配置BGP连接之前,需保证相邻节点在网络层互通。
要在路由器上创建BGP连接,必须配置该路由器所在的AS编号即启动BGP、配置对等体(对等体组)的AS编号。
Router ID用来在一个自治系统中唯一的标识一台路由器,一台路由器如果要运行BGP协议,则必须存在Router ID。
l 用户可以在启动BGP进入BGP视图后指定Router ID,配置时,必须保证自治系统中任意两台路由器的ID都不相同。通常的做法是将路由器的ID配置为与该路由器某个接口的IP地址一致,为了增加网络的可靠性,建议将Router ID配置为Loopback接口的IP地址。
l 如果没有在BGP视图下配置Router ID,则缺省使用全局Router ID。
l 如果BGP使用的是全局Router ID,当Router ID所在接口被删除时会重新选择路由器的Router ID。
l 如果是在BGP视图下手工配置的Router ID,只有使用undo router-id命令才能重新选择路由器的Router ID。
表1-3 创建BGP连接
操作 |
命令 |
说明 |
进入系统视图 |
system-view |
- |
配置全局Router ID |
router id router-id |
可选 缺省情况下,未配置全局Router ID 如果没有配置全局Router ID,则按照下面的规则进行选择: (1) 如果存在配置IP地址的Loopback接口,则选择Loopback接口地址中最大的作为Router ID (2) 如果没有配置IP地址的Loopback接口,则从其他接口的IP地址中选择最大的作为Router ID(不考虑接口的up/down状态) |
启动BGP,进入BGP视图 |
bgp as-number |
必选 缺省情况下,系统没有运行BGP |
配置Router ID |
router-id router-id |
可选 缺省情况下,与全局Router ID相同 |
指定对等体/对等体组及其AS号 |
peer { group-name | ip-address } as-number as-number |
必选 缺省情况下,没有指定对等体/对等体组AS号 |
配置使用peer as-number命令创建邻居时默认使能IPv4单播地址族 |
default ipv4-unicast |
可选 |
激活指定对等体 |
peer ip-address enable |
可选 缺省情况下,BGP对等体是激活的 |
配置对等体/对等体组的描述信息 |
peer { group-name | ip-address } description description-text |
可选 缺省情况下,对等体/对等体组没有描述信息 |
BGP使用TCP作为其传输层协议,缺省情况下,BGP使用到达对等体最佳路由的出接口作为与对等体/对等体组建立TCP连接的源接口。
当建立BGP连接的路由器之间存在冗余链路时,如果路由器上的一个接口发生故障,链路状态变为down,建立TCP连接的源接口可能会随之发生变化,导致BGP需要重新建立TCP连接,造成网络振荡。为了避免该情况的发生,建议网络管理员使用Loopback接口建立BGP连接,并将建立BGP连接所使用的源接口配置为Loopback接口,来提高BGP连接的可靠性和稳定性。
表1-4 配置建立TCP连接使用的源接口
操作 |
命令 |
说明 |
进入系统视图 |
system-view |
- |
进入BGP视图 |
bgp as-number |
- |
配置与对等体/对等体组创建BGP会话时建立TCP连接使用的源接口 |
peer { group-name | ip-address } connect-interface interface-type interface-number |
必选 缺省情况下,BGP使用到达BGP对等体的最佳路由的出接口作为与对等体/对等体组创建BGP会话时建立TCP连接的源接口 |
当两个设备之间建立多条BGP连接时,如果没有为每个连接明确指定建立TCP连接的源接口,可能会由于无法根据到达BGP对等体的最优路由确定TCP连接源接口从而导致无法建立TCP连接,在此情况下建议用户配置BGP对等体时明确配置BGP会话建立TCP连接的源接口。
当前路由器要与另外一个路由器建立EBGP连接,它们必须具有直连的物理链路,如果不满足这一要求,则必须使用peer ebgp-max-hop命令允许它们之间经过多跳建立TCP连接。
表1-5 配置允许同非直连邻居建立EBGP连接
操作 |
命令 |
说明 |
进入系统视图 |
system-view |
- |
进入BGP视图 |
bgp as-number |
- |
配置允许同非直接相连网络上的邻居建立EBGP连接 |
peer { group-name | ip-address } ebgp-max-hop [ hop-count ] |
必选 缺省情况下,不允许同非直接相连网络上的邻居建立EBGP连接 |
直连EBGP对等体不需要配置peer ebgp-max-hop命令。
BGP与IGP不同,其着眼点主要在于控制路由的传播和选择最佳路由。
要生成BGP路由,主要有以下两种途径:
l 配置BGP发布本地路由
l 引入其它路由
网络管理员也可以根据需要配置引入其它协议的缺省路由。
在控制BGP路由信息的生成之前,需要先创建BGP连接。
用户可以在BGP视图下配置发布某个网段的路由,从而将该路由发布给对等体,通过该种方式发布的路由的Origin属性为IGP。网络管理员还可以通过使用路由策略更为灵活地控制所发布的路由。
需要注意的是,要发布的本地路由必须存在于IP路由表中。
表1-6 配置BGP发布本地路由
操作 |
命令 |
说明 |
进入系统视图 |
system-view |
- |
进入BGP视图 |
bgp as-number |
- |
将网段路由发布到BGP路由表中 |
network ip-address [ mask | mask-length ] route-policy route-policy-name |
必选 缺省情况下,BGP不发布任何网段路由 |
BGP可以向邻居AS发送本地AS内部网络的路由信息,但BGP不是自己去发现AS内部的路由信息,而是将IGP的路由信息引入到BGP路由表中,并发布给对等体。在引入IGP路由时,可以针对不同的路由协议来对路由信息进行过滤。
通过引入方式发布的路由的Origin属性为incomplete。
表1-7 配置BGP引入其它路由
操作 |
命令 |
说明 |
进入系统视图 |
system-view |
- |
进入BGP视图 |
bgp as-number |
- |
引入其它协议路由信息并通告 |
import-route protocol [ { process-id | all-processes } [ allow-direct | med med-value | route-policy route-policy-name ] * ] |
必选 缺省情况下,BGP不引入其它协议的路由 目前只有OSPF协议支持配置allow-direct参数 |
只能引入路由表中状态为active的路由,是否为active状态可以通过display ip routing-table protocol命令来查看。
BGP不能通过import-route命令从其它协议引入缺省路由,如果要引入其它协议缺省路由,必须要使用下面命令进行配置。
表1-8 配置BGP引入其它协议缺省路由
操作 |
命令 |
说明 |
进入系统视图 |
system-view |
- |
进入BGP视图 |
bgp as-number |
- |
引入其它协议路由信息并通告 |
import-route protocol [ { process-id | all-processes } [ allow-direct | med med-value | route-policy route-policy-name ] * ] |
必选 缺省情况下,BGP不引入其它协议的路由 目前只有OSPF协议支持配置allow-direct参数 |
允许将缺省路由引入到BGP路由表中 |
default-route imported |
必选 缺省情况下,BGP不允许将缺省路由引入到BGP路由表中 |
在控制BGP路由信息的发布与接收之前,需要先配置BGP连接。
在中型或大型BGP网络中,在向对等体发布路由信息时,需要配置路由聚合,减小对等体路由表中的路由数量。BGP支持自动聚合和手动聚合两种聚合方式,同时配置时,手动聚合的优先级高于自动聚合的优先级。
配置自动聚合功能后,BGP将对引入的IGP子网路由进行聚合,不再发布子网路由,而是发布聚合后的自然网段的路由。
需要注意的是,用network命令发布的路由不能进行自动聚合。
表1-9 配置路由自动聚合
操作 |
命令 |
说明 |
进入系统视图 |
system-view |
- |
进入BGP视图 |
bgp as-number |
- |
配置对引入的IGP子网路由进行自动聚合 |
summary automatic |
必选 缺省情况下,不对引入的IGP子网路由进行自动聚合 |
自动聚合是按照自然网段进行聚合,而且只能对IGP引入的子网路由进行聚合。
通过配置手动聚合,用户可以同时对IGP引入的子网路由和用network命令发布的路由进行聚合,而且还可以根据需要定义聚合路由的子网掩码长度。
表1-10 配置路由手动聚合
操作 |
命令 |
说明 |
进入系统视图 |
system-view |
- |
进入BGP视图 |
bgp as-number |
- |
配置路由手动聚合 |
aggregate ip-address { mask | mask-length } [ as-set | attribute-policy route-policy-name | detail-suppressed | origin-policy route-policy-name | suppress-policy route-policy-name ] * |
必选 缺省情况下,不进行路由聚合 |
通过配置向对等体/对等体组发送缺省路由,不论本地路由表中是否存在缺省路由,都将向指定对等体/对等体组发布一条下一跳地址为本地地址的缺省路由。
表1-11 配置向对等体/对等体组发送缺省路由
操作 |
命令 |
说明 |
进入系统视图 |
system-view |
- |
进入BGP视图 |
bgp as-number |
- |
向对等体/对等体组发送缺省路由 |
peer { group-name | ip-address } default-route-advertise [ route-policy route-policy-name ] |
必选 缺省情况下,不向对等体/对等体组发送缺省路由 |
配置BGP路由信息的发布/接收策略前,根据采取的策略,需要配置下列过滤器:
l 访问控制列表
l IP地址前缀列表
l 路由策略
l AS路径过滤列表
关于访问控制列表的详细配置过程,请参考“ACL和QoS配置指导”中的“ACL”。
关于IP地址前缀列表、路由策略和AS路径过滤列表的详细配置过程,请参考“三层技术-IP路由配置指导”中的“路由策略”。
用户可以使用路由策略、访问控制列表、AS路径过滤列表或IP地址前缀列表对发布给对等体的路由信息进行过滤,可以根据需求选择过滤策略。
表1-12 配置BGP路由信息的发布策略
操作 |
命令 |
说明 |
进入系统视图 |
system-view |
- |
进入BGP视图 |
bgp as-number |
- |
配置引入的路由在发布时进行过滤 |
filter-policy { acl-number | ip-prefix ip-prefix-name } export [ direct | isis process-id | ospf process-id | rip process-id | | static ] |
至少选其一 缺省情况下,不对发布的路由信息进行过滤 可以根据需求选择过滤策略 同时配置几种过滤策略时,按照如下顺序执行: l filter-policy export l peer filter-policy export l peer as-path-acl export l peer ip-prefix export l peer route-policy export 只有通过前面的过滤策略,才能继续执行后面的过滤策略;只有通过所有配置的过滤策略后,路由信息才能被发布 |
对发布给对等体/对等体组的路由指定路由策略 |
peer { group-name | ip-address } route-policy route-policy-name export |
|
为对等体/对等体组设置基于ACL的过滤策略 |
peer { group-name | ip-address } filter-policy acl-number export |
|
为对等体/对等体组设置基于AS路径过滤列表的BGP路由过滤策略 |
peer { group-name | ip-address } as-path-acl as-path-acl-number export |
|
为对等体/对等体组设置基于IP前缀列表的路由过滤策略 |
peer { group-name | ip-address } ip-prefix ip-prefix-name export |
用户可以使用路由策略、访问控制列表、AS路径过滤列表或IP地址前缀列表对从等体接收的路由信息进行过滤,只有满足某些条件的路由才能被BGP接收,并加到路由表中。
网络管理员可以根据需求选择过滤策略,可以对从所有对等体接收的路由信息进行过滤,也可以从指定对等体接收的路由信息进行过滤。
需要注意的是,对等体组的成员可以与所在的组使用不同的入方向路由策略,即接收路由时,各对等体可以选择自己的策略。
表1-13 配置BGP路由信息的接收策略
操作 |
命令 |
说明 |
进入系统视图 |
system-view |
- |
进入BGP视图 |
bgp as-number |
- |
对接收的路由信息进行过滤 |
filter-policy { acl-number | ip-prefix ip-prefix-name } import |
至少选其一 缺省情况下,不对接收的路由信息进行过滤 可以根据需求选择过滤策略 同时配置几种过滤策略时,按照如下顺序执行: l filter-policy import l peer filter-policy import l peer as-path-acl import l peer ip-prefix import l peer route-policy import 只有通过前面的过滤策略,才能继续执行后面的过滤策略;只有通过所有配置的过滤策略后,路由信息才能被接收 |
对来自对等体/对等体组的路由指定路由策略 |
peer { group-name | ip-address } route-policy route-policy-name import |
|
为对等体/对等体组设置基于ACL的过滤策略 |
peer { group-name | ip-address } filter-policy acl-number import |
|
为对等体/对等体组设置基于AS路径过滤列表的BGP路由过滤策略 |
peer { group-name | ip-address } as-path-acl as-path-acl-number import |
|
为对等体/对等体组设置基于IP前缀列表的路由过滤策略 |
peer { group-name | ip-address } ip-prefix ip-prefix-name import |
BGP路由器收到一条IBGP路由,缺省只检查该路由的下一跳是否可达。如果可达, BGP路由器就将这条IBGP路由发布给EBGP对等体。如果配置了同步特性,则需要同时满足以下条件, BGP路由器才会将该IBGP路由发布给EBGP对等体:
l 该路由的下一跳可达;
l 在IGP路由表中存在一条active的路由,与该IBGP路由的目的网段完全相同。(IGP路由是否为active状态可以通过display ip routing-table protocol命令来查看)
表1-14 配置BGP与IGP路由同步
操作 |
命令 |
说明 |
进入系统视图 |
system-view |
- |
进入BGP视图 |
bgp as-number |
- |
配置BGP与IGP路由同步 |
synchronization |
必选 缺省情况下,BGP和IGP路由不同步 |
表1-15 限制从BGP对等体/对等体组接收的路由前缀数量
操作 |
命令 |
说明 |
进入系统视图 |
system-view |
- |
进入BGP视图 |
bgp as-number |
- |
配置当从指定对等体/对等体组收到的路由前缀数量超过最大值时,路由器中断BGP连接 |
peer { group-name | ip-address } route-limit prefix-number [ percentage-value ] |
三者必选其一 缺省情况下,没有限制从BGP对等体/对等体组接收的路由前缀数量 |
配置当从指定对等体/对等体组收到的路由前缀数量超过最大值时,仅打印告警信息,路由器保持与指定对等体/对等体组的连接 |
peer { group-name | ip-address } route-limit prefix-number alert-only [ percentage-value ] |
|
配置当从指定对等体/对等体组收到的路由前缀数量超过允许的最大值时,路由器中断BGP连接,但会自动与对等体重建连接 |
peer { group-name | ip-address } route-limit prefix-number reconnect reconnect-time [ percentage-value ] |
通过配置BGP衰减,可以抑制不稳定的路由信息,不将这类路由加入到路由表中,也不将这类路由向其他BGP对等体发布。
表1-16 配置BGP路由衰减
操作 |
命令 |
说明 |
进入系统视图 |
system-view |
- |
进入BGP视图 |
bgp as-number |
- |
配置BGP路由衰减 |
dampening [ half-life-reachable half-life-unreachable reuse suppress ceiling | route-policy route-policy-name ] * |
必选 缺省情况下,没有配置BGP路由衰减 |
缺省情况下,接收到的EBGP路由的路由管理优先级为255,比本地生成的路由的管理优先级低。
通过将一条EBGP路由被配置成short-cut,那么这条路由在加入到路由表时将使用本地生成路由的路由管理值,而不是EBGP路由的路由管理值,此时,这条路由成为最佳路由的可能性被提高了很多。
表1-17 配置shortcut路由
操作 |
命令 |
说明 |
进入系统视图 |
system-view |
- |
进入BGP视图 |
bgp as-number |
- |
配置short-cut路由 |
network ip-address [ mask | mask-length ] short-cut |
可选 缺省情况下,接收到的EBGP路由的路由管理优先级为255 |
BGP具有很多路由属性,利用这些属性可以改变BGP的选路策略。
在配置BGP的路由属性之前,需要先配置BGP连接。
BGP选择路由时将首先丢弃下一跳不可达的路由,其次再优选Preferred-value值最大的路由。
缺省情况下,从对等体/对等体组学到的路由的首选值为0,网络管理员可以为从某个对等体/对等体组接收的路由配置首选值,从而提高从指定对等体/对等体学到的路由的优先级。
表1-18 为接收路由分配首选值
操作 |
命令 |
说明 |
进入系统视图 |
system-view |
- |
进入BGP视图 |
bgp as-number |
- |
为从对等体/对等体组接收的路由分配首选值 |
peer { group-name | ip-address } preferred-value value |
可选 缺省情况下,从对等体/对等体组接收的路由的首选值为0 |
由于路由器上可能同时运行多个动态路由协议,就存在各个路由协议之间路由信息共享和选择的问题。系统为每一种路由协议设置一个优先级,在不同协议发现同一条路由时,优先级高的路由将被优先选择。
用户可以修改EBGP路由、IBGP路由以及用本地产生的BGP路由的路由优先级;还可以应用路由策略为匹配过滤条件的特定路由配置优先级,对于那些没有匹配的路由,使用缺省优先级。
表1-19 配置BGP的路由优先级
操作 |
命令 |
说明 |
进入系统视图 |
system-view |
- |
进入BGP视图 |
bgp as-number |
- |
配置BGP路由的管理优先级 |
preference { external-preference internal-preference local-preference | route-policy route-policy-name } |
可选 缺省情况下,EBGP路由的管理优先级为255,IBGP路由的管理优先级为255,本地产生的BGP路由的管理优先级为130 |
Local-Preference用来判断流量离开AS时的最佳路由。当BGP的路由器通过不同的IBGP对等体得到目的地址相同但下一跳不同的多条路由时,将优先选择Local-Preference值较高的路由。
用户可以通过default local-preference命令改变BGP路由器向IBGP对等体发送的路由Local-Preference的缺省值。
表1-20 配置Local-Preference缺省值
操作 |
命令 |
说明 |
进入系统视图 |
system-view |
- |
进入BGP视图 |
bgp as-number |
- |
配置本地优先级的缺省值 |
default local-preference value |
可选 缺省情况下,本地优先级的缺省值为100 |
MED用来判断流量进入AS时的最佳路由。当一个运行BGP的路由器通过不同的EBGP对等体得到目的地址相同但下一跳不同的多条路由时,在其它条件相同的情况下,将优先选择MED值较小者作为最佳路由。
表1-21 配置MED缺省值
操作 |
命令 |
说明 |
进入系统视图 |
system-view |
- |
进入BGP视图 |
bgp as-number |
- |
配置系统MED的缺省值 |
default med med-value |
可选 缺省情况下,MED的缺省值为0 |
缺省情况下,BGP只比较来自同一个AS的路由的MED属性值。
通过配置compare-different-as-med命令,可以强制BGP比较来自不同AS的路由的MED属性值。
表1-22 配置允许比较来自不同AS邻居路由的MED属性值
操作 |
命令 |
说明 |
进入系统视图 |
system-view |
- |
进入BGP视图 |
bgp as-number |
- |
配置允许比较来自不同AS邻居的路由路径的MED属性值 |
compare-different-as-med |
必选 缺省情况下,不允许比较来自不同AS邻居的路由路径的MED属性值 |
缺省情况下,系统不会对来自同一AS的路由进行MED排序优选。
BGP选择最优路由时是将新的路由和当前BGP路由表中的最优路由进行比较,只要新的路由比当前BGP路由表中的最优路由更优,新的路由将成为最优路由,路由学习的顺序有可能会影响最优路由的选择结果。
图1-16 MED排序优选示意图
如上图所示,Router D分别从Router A和Router B学习到了到达网段10.0.0.0的路由,由于Router B的Router ID值较小,因此,从Router B学来的路由被选为最优路由:
Network NextHop MED LocPrf PrefVal Path/Ogn
*>i 10.0.0.0 2.2.2.2 50 0 300e
* i 3.3.3.3 50 0 200e
当Router D再从Router C学习到到达10.0.0.0 网段的路由时,它只和当前路由表的最优路由进行比较,由于Router C和Router B位于不同的AS,选择路由时不会比较MED值,而Router C的Router ID值更小,相对更优,它将成为最优路由。
Network NextHop MED LocPrf PrefVal Path/Ogn
*>i 10.0.0.0 1.1.1.1 60 0 200e
* i 10.0.0.0 2.2.2.2 50 0 300e
* i 3.3.3.3 50 0 200e
但是如果将这条路由与从Router A学习到的路由进行比较,那么由于来自同一AS 200且MED值更大,应该视为无效路由。
在Router D上配置bestroute compare-med命令,Router D对于学习到新的路由会首先按照路由来自的AS分组,对来自同一AS的路由根据MED值的大小进行优选,选出来MED值最小的路由,然后再对来自不同AS的路由进行优选,从而避免路由优选结果的不确定性。配置对来自同一AS的路由进行MED排序优选后,Router D上的BGP 路由表如下所示,从Router B学习到的到达10.0.0.0 网段的路由将成为最优路由。
Network NextHop MED LocPrf PrefVal Path/Ogn
*>i 10.0.0.0 2.2.2.2 50 0 300e
* i 10.0.0.0 3.3.3.3 50 0 200e
* i 1.1.1.1 60 0 200e
需要注意的是,BGP将无法进行负载分担,因为BGP要求进行负载分担的路由必须AS PATH相同。
表1-23 配置对来自同一AS的路由进行MED排序优选
操作 |
命令 |
说明 |
进入系统视图 |
system-view |
- |
进入BGP视图 |
bgp as-number |
- |
配置根据路由来自的AS进行分组,并根据MED排序优选 |
bestroute compare-med |
必选 缺省情况下,不根据路由来自的AS进行分组对MED排序优选 |
表1-24 配置允许比较来自同一联盟不同子自治系统邻居路由的MED属性值
操作 |
命令 |
说明 |
进入系统视图 |
system-view |
- |
进入BGP视图 |
bgp as-number |
- |
配置允许比较来自同一联盟不同子自治系统邻居路由的MED属性值 |
bestroute med-confederation |
必选 缺省情况下,不比较来自同一联盟不同子自治系统邻居路由的MED属性值 |
只有AS_PATH里不包含联盟体外的子自治系统编号时,才会比较来自同一联盟不同子自治系统邻居路由的MED属性值,例如有三条路由,它们的AS-PATH值分别为65006 65009、65007 65009和65008 65009,MED值分别为2、3、1,由于第三条路由包含了联盟体外的子自治系统编号,因此在选择最优路由时第一条路由将成为最优路由。
缺省情况下,路由器向IBGP对等体/对等体组发布路由时,不将自身地址作为下一跳,但有的时候为了保证IBGP邻居能够找到下一跳,可以配置将自身地址作为下一跳。以下图为例,Router A与Router B建立EBGP邻居关系,Router B与Router C建立IBGP邻居关系,Router B在向Router C发布从Router A学到的BGP路由时,如果Router C上没有到达1.1.1.1/24的路由,可以在Router B上配置peer next-hop-local命令将3.1.1.1/24做为下一跳,这样,Router C就能找到下一跳。
图1-17 配置BGP下一跳属性应用组网图一
在一些比较特殊的组网环境中(即两个BGP连接在同一网段的广播网),路由器向EBGP对等体/对等体组发布路由时不会将自身地址作为下一跳,以下图为例:Router A与Router B建立EBGP邻居关系,Router B与Router C建立IBGP邻居关系,两个BGP连接都位于同一个广播网1.1.1.0/24中,Router B向Router A发布EBGP路由时不会将自身地址1.1.1.2/24作为下一跳,但如果用户有需要,也可以通过通过配置peer next-hop-local命令实现将自身地址1.1.1.2/24作为下一跳。
图1-18 配置BGP下一跳属性应用组网图二
需要注意的是,如果配置了BGP负载分担,则不论是否配置了peer next-hop-local命令,本地路由器向IBGP对等体/对等体组发布路由时都先将下一跳地址改变为自身地址。
表1-25 配置BGP的下一跳属性
操作 |
命令 |
说明 |
进入系统视图 |
system-view |
- |
进入BGP视图 |
bgp as-number |
- |
配置发布路由时将自身地址作为下一跳 |
peer { group-name | ip-address } next-hop-local |
可选 缺省情况下,向EBGP对等体/对等体组发布路由时,将自身地址作为下一跳;向IBGP对等体/对等体组发布路由时,不将自身地址作为下一跳 |
通常情况下,BGP会检查对等体发来的路由的AS_PATH属性,如果其中已存在本地AS号,则BGP会忽略此路由,以免形成路由环路。
通过配置peer allow-as-loop命令,可以允许本地AS号在所接收的路由的AS_PATH属性中出现,并可同时配置允许重复的次数。
表1-26 配置允许本地AS号重复出现的次数
操作 |
命令 |
说明 |
进入系统视图 |
system-view |
- |
进入BGP视图 |
bgp as-number |
- |
配置允许本地AS号重复出现的次数 |
peer { group-name | ip-address } allow-as-loop [ number ] |
必选 缺省情况下,不允许本地AS重复出现 |
路由器在选择最优路由时会优选AS路径最短的路由,通过如下配置可以禁止路由器将AS_PATH当作选路算法中的一个因素。
表1-27 禁止路由器将AS_PATH当作选路算法中的一个因素
操作 |
命令 |
说明 |
进入系统视图 |
system-view |
- |
进入BGP视图 |
bgp as-number |
- |
禁止路由器将AS_PATH当作选路算法中的一个因素 |
bestroute as-path-neglect |
必选 缺省情况下,路由器将AS_PATH当作选路算法中的一个因素 |
当网络管理员需要进行系统移植时,例如,Router A原来位于AS 2,现在需要将它移植到AS 3里,可以在Router A上为已经创建的EBGP对等体(组)配置一个虚拟的本地自治系统号2,将本地真实的AS号3隐藏起来;由于位于其他AS内的EBGP对等体只能看到这个虚拟AS号2,因此它们不需要改变现有配置,从而在系统升级调试过程中可以不中断现有的BGP服务。
表1-28 为对等体/对等体组定制一个虚拟的自治系统号
操作 |
命令 |
说明 |
进入系统视图 |
system-view |
- |
进入BGP视图 |
bgp as-number |
- |
为对等体/对等体组定制一个虚拟的自治系统号 |
peer { group-name | ip-address } fake-as as-number |
必选 缺省情况下,没有为对等体/对等体组配置虚拟的本地自治系统号 |
peer fake-as命令只适用于EBGP对等体/对等体组。
在MPLS L3VPN中,如果PE和CE之间运行EBGP,由于BGP使用AS号检测路由环路,为保证路由信息的正确发送,需要为物理位置不同的站点分配不同的AS号。
如果物理分散的CE复用相同的AS号,就应该在PE上配置BGP的AS号替换功能。此功能是BGP的出口策略,在发布路由时有效。
使能了BGP的AS号替换功能后,当PE向指定对等体中的CE发布路由时,如果路由的AS_PATH中有与CE相同的AS号,将被替换成PE的AS号后再发布。
图1-19 BGP AS号替换应用示意图
如图1-19所示,CE 1和CE 2都使用AS号800,在PE 2上使能针对CE 2的AS号替换功能。当CE 1发来的Update信息从PE 2发布给CE 2时,PE 2发现AS_PATH中存在与CE 2相同的AS号800,就把它替换为自己的AS号100,这需要注意的是,如果需要完全的连接性,PE 1上也需要做类似的配置。
表1-29 配置AS号替换功能
操作 |
命令 |
说明 |
进入系统视图 |
system-view |
- |
进入BGP视图 |
bgp as-number |
- |
配置用本地AS号替换AS_PATH属性中指定对等体/对等体组的AS号 |
peer { group-name | ip-address } substitute-as |
必选 缺省情况下,没有用本地AS号替换AS_PATH属性中指定对等体/对等体组的AS号 |
替换AS_PATH属性中的AS号命令仅在特定组网环境下使用,错误的配置会引起路由环路。
表1-30 配置发送BGP更新报文时AS_PATH属性中不携带私有AS号
操作 |
命令 |
说明 |
进入系统视图 |
system-view |
- |
进入BGP视图 |
bgp as-number |
- |
配置发送BGP更新报文时AS_PATH属性中不携带私有AS号 |
peer { group-name | ip-address } public-as-only |
必选 缺省情况下,发送BGP更新报文时,携带私有自治系统号 |
通常情况下,BGP会检查对等体发来的路由的AS_PATH属性。如果第一个AS号不是BGP邻居的AS号,则丢弃此路由。
通过配置ignore-first-as命令,可以忽略对EBGP路由第一个AS号的检测。
表1-31 配置EBGP不检测路由的第一个AS号
操作 |
命令 |
说明 |
进入系统视图 |
system-view |
- |
进入BGP视图 |
bgp as-number |
- |
配置不检测EBGP路由的第一个AS号 |
ignore-first-as |
必选 缺省情况下,系统收到EBGP路由后,会检测路由的第一个AS号 |
在调整和优化BGP网络之前,需要先配置BGP连接。
当对等体间建立了BGP连接后,它们定时向对端发送Keepalive消息,以防止路由器认为BGP连接已中断。若路由器在设定的连接保持时间(Holdtime)内未收到对端的Keepalive消息或Update报文,则认为此BGP连接已中断,从而断开此BGP连接。
用户可以配置当前路由的BGP存活时间间隔与保持时间,也可以配置与指定对等体/对等体组建立连接的存活时间间隔和保持时间:
l 如果当前路由器的保持时间与对等体/对等体组上配置的不一致,则数值较小者作为协商后的保持时间。
l 存活时间间隔为0,协商的保持时间不为0时,以协商的保持时间的三分之一作为存活时间间隔发送keepalive消息。
l 存活时间间隔不为0时,以协商的保持时间的三分之一再与配置的存活时间间隔比较取最小值作为存活时间间隔发送keepalive消息。
表1-32 配置BGP存活时间间隔与保持时间
操作 |
命令 |
说明 |
进入系统视图 |
system-view |
- |
进入BGP视图 |
bgp as-number |
- |
配置BGP的存活时间间隔与保持时间 |
timer keepalive keepalive hold holdtime |
可选 缺省情况下,存活时间间隔为60秒,保持时间为180秒 |
配置指定对等体/对等体组的存活时间间隔和保持时间 |
peer { group-name | ip-address } timer keepalive keepalive hold holdtime |
l 合理的最大Keepalive消息发送间隔为保持时间的三分之一,且该发送间隔不能小于1秒,因此,保持时间如果不为0,则最小为3秒。
l 使用timer命令配置的定时器比使用peer timer命令配置的定时器优先级要低。
l 如果与对等体的邻居关系已经建立,必须要复位BGP连接才能使新配置的存活时间间隔与保持时间生效。
l 配置timer命令后,不会影响已建立的BGP连接,只对新建立的连接生效。
l 配置peer timer命令后,如果新配置的值与之前的配置值不同,会影响已建立的BGP连接:BGP连接会直接断开,再使用新参数重新建立连接。
表1-33 配置发送路由更新报文的时间间隔
操作 |
命令 |
说明 |
进入系统视图 |
system-view |
- |
进入BGP视图 |
bgp as-number |
- |
配置对等体/对等体组发送同一路由更新报文的时间间隔 |
peer { group-name | ip-address } route-update-interval interval |
可选 缺省情况下,向IBGP对等体发送同一路由更新报文的时间间隔为15秒,向EBGP对等体发送同一路由更新报文的时间间隔为30秒 |
BGP的选路策略改变后,为了使新的策略生效,必须复位BGP连接,但这样会造成短暂的BGP连接中断。
如果当前路由器和对等体都支持Route-Refresh功能,通过使能Route-Refresh功能,在策略改变时,系统可以在不中断BGP连接的情况下,自动对BGP路由表进行动态刷新。
如果对等体不支持Route-Refresh功能,则需要将从对等体接收的所有路由更新保存在本地,当选路策略发生改变后,在不中断连接的情况下重新刷新BGP路由表,并应用新的策略。
在对等体支持并使能Route-Refresh功能的情况下,如果BGP的路由策略发生了变化,本地路由器会向BGP对等体发布Router-Refresh消息,收到此消息的对等体会将其路由信息重新发给本地路由器。这样,在不中断BGP连接的情况下,就可以对BGP路由表进行动态更新,并应用新的选路策略。
表1-34 通过使能Route-Refresh实现BGP软复位
操作 |
命令 |
说明 |
进入系统视图 |
system-view |
- |
进入BGP视图 |
bgp as-number |
- |
使能BGP路由刷新功能 |
peer { group-name | ip-address } capability-advertise route-refresh |
可选 缺省情况下,BGP路由刷新功能处于使能状态 |
当对等体不支持Route-Refresh功能时,可通过配置peer keep-all-routes命令将从对等体接收的所有路由更新保存在本地用户,然后再执行refresh bgp命令对保存在本地的所有路由使用路由策略重新过滤一遍。
表1-35 通过将所有路由更新保存在本地实现BGP软复位
操作 |
命令 |
说明 |
进入系统视图 |
system-view |
- |
进入BGP视图 |
bgp as-number |
- |
禁止BGP路由刷新和多协议扩展功能 |
peer { group-name | ip-address } capability-advertise conventional |
必选 缺省情况下,BGP路由刷新和多协议扩展功能处于使能状态 |
保存所有来自对等体/对等体组的原始路由信息 |
peer { group-name | ip-address } keep-all-routes |
必选 缺省情况下,不保存所有来自对等体/对等体组的原始路由信息 |
退回用户视图 |
return |
- |
手工对BGP连接进行软复位 |
refresh bgp { all | ip-address | group group-name | external | internal } { export | import } |
必选 |
如果对端邻居不支持Route-Refresh功能,同时本端又未配置peer keep-all-routes命令,那么在修改BGP路由信息的接收策略后,需要根据策略的影响来决定是否手工断开邻居,重新学习路由。
BGP ORF(Outbound Route Filtering,输出路由过滤)功能是将本地入口策略通过Route-refresh报文发送给邻居,当邻居需要向BGP对等体发送Update更新报文时,通过本地的路由策略后还需要进行ORF策略的过滤,只有通过ORF策略的路由信息才会发给BGP对等体,以达到减少BGP邻居间Update更新报文的交互,节省网络资源的目的。
使能BGP ORF能力后,本地和BGP对等体会通过Open报文协商ORF能力(即收发的报文里是否允许携带ORF信息,如果允许携带,是否可以携带非标准的ORF信息),当协商完毕并成功建立邻居关系后,可以通过特殊的Route-refresh报文交互ORF信息。
ORF能力协商成功需要两端的配置来保证,关于两端参数的选择请参见表1-37。
表1-36 配置BGP ORF能力
操作 |
命令 |
说明 |
进入系统视图 |
system-view |
- |
进入BGP视图 |
bgp as-number |
- |
使能BGP路由刷新功能 |
peer { group-name | ip-address } capability-advertise route-refresh |
必选 缺省情况下,BGP路由刷新功能处于使能状态 |
使能BGP邻居的非标准ORF能力 |
peer { group-name | ip-address } capability-advertise orf non-standard |
可选 缺省情况下,BGP ORF能力支持RFC5291、RFC5292的标准能力 如果对端只支持非标准值的ORF报文,则必须配置该命令 |
使能BGP邻居的ORF能力 |
peer { group-name | ip-address } capability-advertise orf ip-prefix { both | receive | send } |
必选 缺省情况下,BGP对等体/对等体组不使能邻居的ORF能力 |
表1-37 both、send、receive参数选择以及配置效果描述表
本地选择参数 |
对端选择参数 |
协商成功后 |
send |
receive |
本端的ORF发送能力,对端的ORF接收能力 |
both |
||
receive |
send |
本端的ORF接收能力,对端的ORF发送能力 |
both |
||
both |
both |
双向的ORF发送和接收能力 |
通常情况下,设备在与对端设备建立BGP对等体连接关系时会发送BGP Open消息,在消息中的Optional parameters字段携带信息:说明AS号取值占用4字节(即取值范围为1~4294967295)。此时,如果对端设备不支持AS号取值为4字节(比如只支持2字节),则连接关系无法建立。
为了解决上述问题,您可以使能4字节AS号抑制功能:当对端设备不支持AS号取值为4字节时,设备发出的BGP Open消息仍然可以被对端设备正常识别,从而BGP对等体连接关系可以成功建立。
表1-38 使能4字节AS号抑制功能
操作 |
命令 |
说明 |
进入系统视图 |
system-view |
- |
进入BGP视图 |
bgp as-number |
- |
使能4字节AS号抑制功能 |
peer { group-name | ip-address } capability-advertise suppress-4-byte-as |
必选 缺省情况下,设备没有使能4字节AS号抑制功能 |
如果对端设备支持4字节AS号能力时,请不要使能该功能,否则会导致对等体无法建立。
路由器在设定的连接保持时间(Holdtime)内未收到对端的Keepalive消息或Update报文,则认为此BGP连接已中断,从而断开此BGP连接。
通过使能EBGP连接快速复位功能,如果当前路由器与直连的EBGP邻居链路变为down状态,系统将重新建立与该邻居的EBGP会话。
表1-39 使能EBGP连接快速复位功能
操作 |
命令 |
说明 |
进入系统视图 |
system-view |
- |
进入BGP视图 |
bgp as-number |
- |
使能EBGP连接快速复位功能 |
ebgp-interface-sensitive |
可选 缺省情况下,使能EBGP连接快速复位功能处于关闭状态 |
BGP使用TCP做为传输层协议,为提高BGP的安全性,可以配置BGP在建立TCP连接时进行MD5认证,即两台路由器必须配置相同的密码,才能建立TCP连接。
BGP的MD5认证并不能对BGP报文认证,它只是为TCP连接设置MD5认证密码,由TCP完成认证。如果认证失败,则不建立TCP连接。
表1-40 配置BGP建立TCP连接时进行MD5认证
操作 |
命令 |
说明 |
进入系统视图 |
system-view |
- |
进入BGP视图 |
bgp as-number |
- |
配置BGP建立TCP连接时进行MD5认证 |
peer { group-name | ip-address } password { cipher | simple } password |
可选 缺省情况下,BGP在建立TCP连接时不进行MD5认证 |
如果到一个目的地有几条开销相同的路径,可以实现等价路由负载分担,IP报文在这几个链路上负载分担,以提高链路利用率。
该配置用以设置BGP协议的最大等价路由条数。
表1-41 配置BGP负载分担
操作 |
命令 |
说明 |
进入系统视图 |
system-view |
- |
进入BGP视图 |
bgp as-number |
- |
配置进行BGP负载分担的路由条数 |
balance number |
可选 缺省情况下,BGP不进行路由负载分担 |
表1-42 禁止与对等体/对等体组建立会话
操作 |
命令 |
说明 |
进入系统视图 |
system-view |
- |
进入BGP视图 |
bgp as-number |
- |
禁止与对等体/对等体组建立会话 |
peer { group-name | ip-address } ignore |
可选 缺省情况下,允许与BGP对等体/对等体组建立会话 |
在大型BGP网络中,对等体的数目众多,配置和维护极为不便,可以根据组网需要,配置对等体组、团体、路由反射器或联盟,以降低管理难度和提高路由发布效率。
在配置大型BGP网络之前,需完成以下任务:相邻节点的网络层互通。
对等体组是具有相同更新策略的对等体的集合。
在大型BGP网络中,对等体的数量会很多,其中,很多对等体需要配置相同的策略,通过配置对等体组并将对等体加入到对等体组,可以使对等体获得与所在对等体组相同的配置,而且当对等体组的配置改变时,组内成员的配置也相应改变,从而简化配置。
根据对等体所在的AS,对等体组可分为:
l IBGP对等体组:对等体组中的对等体与当前路由器位于同一AS。
l EBGP对等体组:对等体组中的对等体与当前路由器位于不同AS。
需要注意的是,如果对等体组中已经存在对等体,则不能改变该对等体组的AS号,也不能使用undo命令删除已指定的AS号。
创建IBGP对等体组后,系统在将对等体加入IBGP对等体组时,会自动在BGP视图下创建该对等体,并设置其AS号为本地AS号。
表1-43 配置IBGP对等体组
操作 |
命令 |
说明 |
进入系统视图 |
system-view |
- |
进入BGP视图 |
bgp as-number |
- 缺省情况下,系统没有运行BGP |
创建IBGP对等体组 |
group group-name [ internal ] |
必选 |
向对等体组中加入对等体 |
peer ip-address group group-name |
必选 |
根据对等体组中的对等体是否属于同一个外部AS,EBGP对等体组又可以分为纯EBGP对等体组和混合EBGP对等体组;如果对等体组中的对等体属于同一个外部AS,该对等体组就是纯EBGP对等体组;如果对等体组中的对等体属于不同外部AS,该对等体组就是混合EBGP对等体组。
用户有三种方式配置EBGP对等体组:
l 第一种方式是创建对等体组后,先指定AS号,再将对等体加入到对等体组中,该方式下加入的对等体具有相同的AS号;
l 第二种方式是创建对等体组完毕后,先配置对等体的AS号,再将对等体加入对等体组中。
l 第三种方式是创建对等体组完毕后,将对等体加入对等组的同时指定AS号。
表1-44 配置EBGP对等体组(方式一)
操作 |
命令 |
说明 |
进入系统视图 |
system-view |
- |
进入BGP视图 |
bgp as-number |
- |
创建EBGP对等体组 |
group group-name external |
必选 |
设置对等体组的AS号 |
peer group-name as-number as-number |
必选 |
向对等体组中加入对等体 |
peer ip-address group group-name |
必选 |
l 该方式下,对等体加入对等体之前不能配置AS号;
l 该方式下,对等体组中所有对等体的AS号等于对等体组的AS号。
表1-45 配置EBGP对等体组(方式二)
操作 |
命令 |
说明 |
进入系统视图 |
system-view |
- |
进入BGP视图 |
bgp as-number |
- |
创建EBGP对等体组 |
group group-name external |
必选 |
设置对等体的AS号 |
peer ip-address as-number as-number |
必选 |
向对等体组中加入对等体 |
peer ip-address group group-name [ as-number as-number ] |
必选 as-number as-number参数可选可不选,如果选择则必须和peer ip-address as-number as-number命令中配置的一致 |
该方式下,对等体组中对等体的AS号可以相同也可以不同。
表1-46 配置EBGP对等体组(方式三)
操作 |
命令 |
说明 |
进入系统视图 |
system-view |
- |
进入BGP视图 |
bgp as-number |
- |
创建EBGP对等体组 |
group group-name external |
必选 |
向对等体组中加入对等体 |
peer ip-address group group-name as-number as-number |
必选 |
l 该方式下,对等体加入对等体之前不能配置AS号;
l 该方式下,对等体组中对等体的AS号可以相同也可以不同。
团体是一组有相同特征的目的地址的集合,没有物理上的边界,与其所在的AS无关。
用户可以先通过路由策略定义一组目的地址属于某个指定团体,并配置向对等体/对等体组发布团体属性:
l 在向对等体/对等体组发布路由时可以指定发布策略,在发布策略中通过团体属性对发布给对等体/对等体组的路由信息进行过滤;
l 对等体/对等体组在接收路由信息时也可以指定接收策略,在接收策略中通过团体属性对从等体/对等体组接收的路由信息进行过滤。
在路由策略中通过团体来进行路由过滤,可以提高路由策略配置的灵活度,并简化路由策略的管理,从而降低维护管理的难度。
关于路由策略的详细配置,请参见“三层技术-IP路由配置指导”中的“路由策略”。
表1-47 配置BGP团体
操作 |
命令 |
说明 |
|
进入系统视图 |
system-view |
- |
|
进入BGP视图 |
bgp as-number |
- |
|
配置向对等体/对等体组发布团体属性 |
配置向对等体/对等体组发布团体属性 |
peer { group-name | ip-address } advertise-community |
必选 缺省情况下,不将团体属性和扩展团体属性发布给任何对等体/对等体组 |
配置向对等体/对等体组发布扩展团体属性 |
peer { group-name | ip-address } advertise-ext-community |
||
对发布给对等体/对等体组的路由指定路由策略 |
peer { group-name | ip-address } route-policy route-policy-name export |
必选 缺省情况下,不指定对等体/对等体组的路由策略 |
如果同一个AS内有多个BGP路由器,为了减少在同一AS内建立的IBGP连接数,可以把几个BGP路由器划分为一个集群,将其中的一台路由器配置为反射器,其它路由器作为客户机。
为了增加网络的可靠性和防止单点故障,可以在一个集群中配置一个以上的路由反射器,这时,网络管理员必须给位于相同集群中的每个路由反射器配置相同的集群ID,以避免路由循环。
表1-48 配置BGP路由反射器
操作 |
命令 |
说明 |
进入系统视图 |
system-view |
- |
进入BGP视图 |
bgp as-number |
- |
配置将本机作为路由反射器,并将对等体/对等体组作为路由反射器的客户 |
peer { group-name | ip-address } reflect-client |
必选 缺省情况下,没有配置路由反射器及其客户 BGP视图和BGP-VPNv4子地址族视图下均支持peer reflect-client命令。当在BGP视图下配置该命令时,表示本机可以反射公网路由;当在BGP-VPNv4子地址族视图下配置该命令时,表示本机可以反射私网路由。(在BGP视图下使用ipv4-family vpnv4命令可以进入BGP-VPNv4子地址族视图,ipv4-family vpnv4命令的详细介绍请参见“MPLS命令参考”中的“MPLS L3VPN”) |
配置允许客户到客户的路由反射 |
reflect between-clients |
可选 缺省情况下,允许客户到客户的路由反射 |
配置路由反射器的集群ID |
reflector cluster-id cluster-id |
可选 缺省情况下,每个路由反射器是使用自己的Router ID作为集群ID |
l 通常情况下,路由反射器的客户之间不要求是全连接的,路由缺省通过反射器从一个客户反射到其它客户;如果客户之间是全连接的,可以禁止客户间的反射,以便减少开销。
l 通常,一个集群里只有一个路由反射器。此时是由反射器的路由器ID来识别该集群的。设置多个路由反射器可提高网络的稳定性。如果一个集群中配有多个路由反射器,请使用reflector cluster-id命令为所有的路由反射器配置同样的集群ID,以避免路由循环。
联盟(Confederation)是处理AS内部的IBGP网络连接激增的另一种方法,它将一个自治系统划分为若干个子自治系统,每个子自治系统内部的IBGP对等体建立全连接关系,子自治系统之间建立EBGP连接关系。
网络管理员将一个自治系统划分为若干个子自治系统后,如果路由器位于联盟中的某个子自治系统中,需要在路由器上做如下配置:
(1) 首先,启动BGP,并指定该路由器所属的子自治系统号;
(2) 其次,配置联盟ID。在不属于联盟的BGP发言者看来,属于同一个联盟的多个子自治系统是一个整体,联盟ID就是标识联盟这一整体的自治系统号;
(3) 如果该路由器与该联盟的其它子自治系统建立EBGP邻居关系,需要在该路由器上指定该联盟体中除了自己还包含哪些子自治系统。
一个联盟最多可包括32个子自治系统,配置属于联盟的子自治系统时使用的as-number仅在联盟内部有效。
表1-49 配置BGP联盟
操作 |
命令 |
说明 |
进入系统视图 |
system-view |
- |
进入BGP视图 |
bgp as-number |
- |
配置联盟ID |
confederation id as-number |
必选 缺省情况下,未配置联盟的ID |
指定一个联盟体中包含了哪些子自治系统 |
confederation peer-as as-number-list |
必选 缺省情况下,未指定一个联盟体中包含了哪些子自治系统 |
如果其他路由器的联盟实现机制不同于RFC 3065标准,可以通过如下配置与未采用RFC 3065配置的AS联盟兼容。
表1-50 配置联盟兼容性
操作 |
命令 |
说明 |
进入系统视图 |
system-view |
- |
进入BGP视图 |
bgp as-number |
- |
配置与未采用RFC 3065配置的AS联盟兼容 |
confederation nonstandard |
可选 缺省情况下,配置的联盟与RFC 3065一致 |
分别在作为GR Restarter和GR Helper的设备上进行以下配置。
一台设备可以同时具备GR Restarter和GR Helper能力。
操作 |
命令 |
说明 |
进入系统视图 |
system-view |
- |
进入BGP视图 |
bgp as-number |
- |
使能BGP协议的GR能力 |
graceful-restart |
必选 缺省情况下,BGP协议的GR能力处于关闭状态 |
配置对端重建BGP会话连接的最大时间 |
graceful-restart timer restart timer |
可选 缺省情况下,对端重建BGP会话连接的最大时间为150秒 |
配置等待End-Of-RIB标记的时间 |
graceful-restart timer wait-for-rib timer |
可选 缺省情况下,等待End-Of-RIB标记的时间为180秒 |
l 通常情况下,对端重建会话连接的最大时间应小于OPEN消息中的Holdtime时间。接收侧(Receiving Speaker)检测到会话中断后,将等待指定时间以便重新建立会话连接。
l End-Of-RIB(End of Routing-Information-Base,路由信息库结束)标记用来标定路由更新发送的结束。
开启BGP模块的Trap功能后,该模块会生成级别为level4的警告Trap报文,用于报告该模块的重要事件。生成的Trap报文将被发送到设备的信息中心,通过设置信息中心的参数,最终决定Trap报文的输出规则(即是否允许输出以及输出方向)。(有关信息中心参数的配置请参见“网络管理和监控配置指导”中的“信息中心”。)
表1-52 开启Trap功能
操作 |
命令 |
说明 |
进入系统视图 |
system-view |
- |
开启BGP模块的Trap功能 |
snmp-agent trap enable bgp |
可选 缺省情况下,BGP模块的Trap功能处于开启状态 |
表1-53 使能BGP日志功能
操作 |
命令 |
说明 |
进入系统视图 |
system-view |
- |
进入BGP视图 |
bgp as-number |
- 缺省情况下,系统没有运行BGP |
全局使能BGP日志功能 |
log-peer-change |
可选 缺省情况下,全局BGP日志功能处于使能状态 |
记录指定对等体/对等体组的会话状态和事件信息 |
peer { group-name | ip-address } log-change |
可选 记录对等体/对等体组的会话状态和事件信息 |
BGP协议通过存活时间(Keepalive)定时器和保持时间(Holdtime)定时器来维护邻居关系。但这些定时器都是秒级的,而且根据协议规定,设置的保持时间应该至少为存活时间间隔的三倍。这样使得BGP邻居关系的检测比较慢,对于报文收发速度快的接口会导致大量报文丢失。通过配置BGP与BFD联动,使得BFD能够为BGP邻居之间的链路提供更快速的检测。当邻居之间的链路出现故障时,能够加快BGP协议的收敛速度。
表1-54 配置BGP与BFD联动
操作 |
命令 |
说明 |
进入系统视图 |
system-view |
- |
进入BGP视图 |
bgp as-number |
- |
在指定邻居上使能BFD |
peer ip-address bfd |
必选 缺省情况下,BGP的所有对等体邻居上都没有使能BFD链路检测功能 |
l 配置BFD之前,需要使能BGP功能。
l 在BGP使能GR能力后,请慎用BFD。因为当链路故障时,系统可能还没来得及启用GR处理流程,BFD已经检测到链路故障了,从而导致GR失败。如果设备上同时配置了BGP GR和BGP BFD,则在BGP GR期间请勿去使能BGP BFD,否则可能导致GR失败。
l 有关BFD的介绍和基本功能配置,请参见“可靠性配置指导”中的“BFD”。
在完成上述配置后,在任意视图下执行display命令可以显示配置后BGP的运行情况,通过查看显示信息验证配置的效果。
表1-55 BGP配置显示
当BGP路由策略或协议发生变化后,如果需要通过复位BGP连接使新的配置生效,请在用户视图下进行下列配置。
操作 |
命令 |
复位所有BGP连接 |
reset bgp all |
复位与指定AS之间的BGP连接 |
reset bgp as-number |
复位与指定对等体的BGP连接 |
reset bgp ip-address [ flap-info ] |
复位所有EBGP连接 |
reset bgp external |
复位与指定对等体组的BGP连接 |
reset bgp group group-name |
复位所有IBGP连接 |
reset bgp internal |
复位IPv4单播地址族下的所有BGP连接 |
reset bgp ipv4 all |
在用户视图下,执行reset命令可以清除BGP相关统计信息。
操作 |
命令 |
清除路由的衰减信息并释放被抑制的路由 |
reset bgp dampening [ ip-address [ mask | mask-length ] ] |
清除路由的振荡统计信息 |
reset bgp flap-info [ ip-address [ mask-length | mask ] | as-path-acl as-path-acl-number | regexp as-path-regular-expression ] |
如图1-20所示,所有设备均运行BGP协议,Switch A和Switch B之间建立EBGP连接,Switch B和Switch C之间建立IBGP连接。要求Switch C能够访问Switch A直连的8.1.1.0/24网段。
图1-20 BGP基本配置组网图
(1) 配置各接口的IP地址(略)
(2) 配置IBGP连接
l 为了防止端口状态不稳定引起路由震荡,本举例使用Loopback接口来创建IBGP对等体。
l 使用Loopback接口创建IBGP对等体时,因为Loopback接口不是两对等体实际连接的接口,所以,必须使用peer connect-interface命令将Loopback接口配置为BGP连接的源接口。
l 在AS 65009内部,使用OSPF协议,保证Switch B到Switch C的Loopback接口路由可达, Switch C到Switch B的Loopback接口路由可达。
# 配置Switch B。
<SwitchB> system-view
[SwitchB] bgp 65009
[SwitchB-bgp] router-id 2.2.2.2
[SwitchB-bgp] peer 3.3.3.3 as-number 65009
[SwitchB-bgp] peer 3.3.3.3 connect-interface loopback 0
[SwitchB-bgp] quit
[SwitchB] ospf 1
[SwitchB-ospf-1] area 0
[SwitchB-ospf-1-area-0.0.0.0] network 2.2.2.2 0.0.0.0
[SwitchB-ospf-1-area-0.0.0.0] network 9.1.1.1 0.0.0.255
[SwitchB-ospf-1-area-0.0.0.0] quit
[SwitchB-ospf-1] quit
# 配置Switch C。
<SwitchC> system-view
[SwitchC] bgp 65009
[SwitchC-bgp] router-id 3.3.3.3
[SwitchC-bgp] peer 2.2.2.2 as-number 65009
[SwitchC-bgp] peer 2.2.2.2 connect-interface loopback 0
[SwitchC-bgp] quit
[SwitchC] ospf 1
[SwitchC-ospf-1] area 0
[SwitchC-ospf-1-area-0.0.0.0] network 3.3.3.3 0.0.0.0
[SwitchC-ospf-1-area-0.0.0.0] network 9.1.1.0 0.0.0.255
[SwitchC-ospf-1-area-0.0.0.0] quit
[SwitchC-ospf-1] quit
[SwitchC] display bgp peer
BGP local router ID : 3.3.3.3
Local AS number : 65009
Total number of peers : 1 Peers in established state : 1
Peer AS MsgRcvd MsgSent OutQ PrefRcv Up/Down State
2.2.2.2 65009 2 2 0 0 00:00:13 Established
以上显示信息表明Switch B和Switch C之间的IBGP连接已经建立。
(3) 配置EBGP连接
l EBGP邻居关系的两台路由器(通常属于两个不同运营商),处于不同的AS域,对端的Loopback接口一般路由不可达,所以一般使用直连地址建立BGP邻居。
l 因为要求Switch C能够访问Switch A直连的8.1.1.0/24网段,所以,建立EBGP连接后,需要将8.1.1.0/24网段路由通告到BGP路由表中。
# 配置Switch A。
<SwitchA> system-view
[SwitchA] bgp 65008
[SwitchA-bgp] router-id 1.1.1.1
[SwitchA-bgp] peer 3.1.1.1 as-number 65009
[SwitchA-bgp] network 8.1.1.1 24
[SwitchA-bgp] quit
# 配置Switch B。
[SwitchB] bgp 65009
[SwitchB-bgp] peer 3.1.1.2 as-number 65008
[SwitchB-bgp] quit
# 查看Switch B的BGP对等体的连接状态。
[SwitchB] display bgp peer
BGP local router ID : 2.2.2.2
Local AS number : 65009
Total number of peers : 2 Peers in established state : 2
Peer AS MsgRcvd MsgSent OutQ PrefRcv Up/Down State
3.3.3.3 65009 4 4 0 0 00:02:49 Established
3.1.1.2 65008 2 2 0 0 00:00:05 Established
可以看出,Switch B与Switch C、Switch B与Switch A之间的BGP连接均已建立。
# 查看Switch A的BGP路由表。
[SwitchA] display bgp routing-table
Total Number of Routes: 1
BGP Local router ID is 1.1.1.1
Status codes: * - valid, ^ - VPNv4 best, > - best, d - damped,
h - history, i - internal, s - suppressed, S - Stale
Origin : i - IGP, e - EGP, ? - incomplete
Network NextHop MED LocPrf PrefVal Path/Ogn
*> 8.1.1.0/24 0.0.0.0 0 0 i
# 显示Switch B的BGP路由表。
[SwitchB] display bgp routing-table
Total Number of Routes: 1
BGP Local router ID is 2.2.2.2
Status codes: * - valid, ^ - VPNv4 best, > - best, d - damped,
h - history, i - internal, s - suppressed, S - Stale
Origin : i - IGP, e - EGP, ? - incomplete
Network NextHop MED LocPrf PrefVal Path/Ogn
*> 8.1.1.0/24 3.1.1.2 0 0 65008i
# 显示Switch C的BGP路由表。
[SwitchC] display bgp routing-table
Total Number of Routes: 1
BGP Local router ID is 3.3.3.3
Status codes: * - valid, ^ - VPNv4 best, > - best, d - damped,
h - history, i - internal, s - suppressed, S - Stale
Origin : i - IGP, e - EGP, ? - incomplete
Network NextHop MED LocPrf PrefVal Path/Ogn
i 8.1.1.0/24 3.1.1.2 0 100 0 65008i
从路由表可以看出,Switch A没有学到AS 65009内部的任何路由,Switch C虽然学到了AS 65008中的8.1.1.0的路由,但因为下一跳3.1.1.2不可达,所以也不是有效路由。
(4) 配置BGP引入直连路由
在Switch B上配置BGP引入直连路由,以便Switch A能够获取到网段9.1.1.0/24的路由,Switch C能够获取到网段3.1.1.0/24的路由。
# 配置Switch B。
[SwitchB] bgp 65009
[SwitchB-bgp] import-route direct
# 显示Switch A的BGP路由表。
[SwitchA] display bgp routing-table
Total Number of Routes: 4
BGP Local router ID is 1.1.1.1
Status codes: * - valid, ^ - VPNv4 best, > - best, d - damped,
h - history, i - internal, s - suppressed, S - Stale
Origin : i - IGP, e - EGP, ? – incomplete
Network NextHop MED LocPrf PrefVal Path/Ogn
*> 2.2.2.2/32 3.1.1.1 0 0 65009?
* 3.1.1.0/24 3.1.1.1 0 0 65009?
*> 8.1.1.0/24 0.0.0.0 0 0 i
*> 9.1.1.0/24 3.1.1.1 0 0 65009?
以上显示信息表明,在Switch B上引入直连路由后,Switch A新增了到2.2.2.2/32和9.1.1.0/24两条路由。
# 显示Switch C的BGP路由表。
[SwitchC] display bgp routing-table
Total Number of Routes: 4
BGP Local router ID is 3.3.3.3
Status codes: * - valid, ^ - VPNv4 best, > - best, d - damped,
h - history, i - internal, s - suppressed, S - Stale
Origin : i - IGP, e - EGP, ? - incomplete
Network NextHop MED LocPrf PrefVal Path/Ogn
i 2.2.2.2/32 2.2.2.2 0 100 0 ?
*>i 3.1.1.0/24 2.2.2.2 0 100 0 ?
*>i 8.1.1.0/24 3.1.1.2 0 100 0 65008i
* i 9.1.1.0/24 2.2.2.2 0 100 0 ?
以上显示信息表明,到8.1.1.0的路由变为有效路由,下一跳为Switch A的地址。
(5) 结果验证
# 使用Ping进行验证。
[SwitchC] ping 8.1.1.1
PING 8.1.1.1: 56 data bytes, press CTRL_C to break
Reply from 8.1.1.1: bytes=56 Sequence=1 ttl=254 time=2 ms
Reply from 8.1.1.1: bytes=56 Sequence=2 ttl=254 time=2 ms
Reply from 8.1.1.1: bytes=56 Sequence=3 ttl=254 time=2 ms
Reply from 8.1.1.1: bytes=56 Sequence=4 ttl=254 time=2 ms
Reply from 8.1.1.1: bytes=56 Sequence=5 ttl=254 time=2 ms
--- 8.1.1.1 ping statistics ---
5 packet(s) transmitted
5 packet(s) received
0.00% packet loss
round-trip min/avg/max = 2/2/2 ms
公司A的所有设备在AS 65008内,公司B的所有设备在AS 65009内,AS 65008和AS 65009通过设备Switch A和Switch B相连。
现要求实现Switch A能够访问AS 65009内的网段9.1.2.0/24,Switch C能够访问AS 65008内的网段8.1.1.0/24。
图1-21 BGP与IGP交互配置组网图
(1) 配置各接口的IP地址(略)
(2) 配置OSPF
在AS 65009内配置OSPF,使得Switch B能获取到到9.1.2.0/24网段的路由。
# 配置Switch B。
<SwitchB> system-view
[SwitchB] ospf 1
[SwitchB-ospf-1] area 0
[SwitchB-ospf-1-area-0.0.0.0] network 2.2.2.2 0.0.0.0
[SwitchB-ospf-1-area-0.0.0.0] network 9.1.1.0 0.0.0.255
[SwitchB-ospf-1-area-0.0.0.0] quit
[SwitchB-ospf-1] quit
# 配置Switch C。
<SwitchC> system-view
[SwitchC] ospf 1
[SwitchC-ospf-1] import-route direct
[SwitchC-ospf-1] area 0
[SwitchC-ospf-1-area-0.0.0.0] network 9.1.1.0 0.0.0.255
[SwitchC-ospf-1-area-0.0.0.0] quit
[SwitchC-ospf-1] quit
(3) 配置EBGP连接
配置EBGP连接,并在Switch A上将8.1.1.0/24网段通告到BGP路由表中,以便Switch B获取到网段8.1.1.0/24的路由。
# 配置Switch A。
<SwitchA> system-view
[SwitchA] bgp 65008
[SwitchA-bgp] router-id 1.1.1.1
[SwitchA-bgp] peer 3.1.1.1 as-number 65009
[SwitchA-bgp] network 8.1.1.0 24
[SwitchA-bgp] quit
# 配置Switch B。
[SwitchB] bgp 65009
[SwitchB-bgp] router-id 2.2.2.2
[SwitchB-bgp] peer 3.1.1.2 as-number 65008
(4) 配置BGP与IGP交互
l 在Switch B上配置BGP引入OSPF路由,以便Switch A能够获取到到9.1.2.0/24网段的路由。
l 在Switch B上配置OSPF引入BGP路由,以便Switch C能够获取到到8.1.1.0/24网段的路由。
# 在Switch B上配置BGP引入OSPF路由。
[SwitchB-bgp] import-route ospf 1
[SwitchB-bgp] quit
[SwitchB] ospf 1
[SwitchB-ospf-1] import-route bgp
[SwitchB-ospf-1] quit
# 查看Switch A的BGP路由表。
[SwitchA] display bgp routing-table
Total Number of Routes: 3
BGP Local router ID is 1.1.1.1
Status codes: * - valid, ^ - VPNv4 best, > - best, d - damped,
h - history, i - internal, s - suppressed, S - Stale
Origin : i - IGP, e - EGP, ? - incomplete
Network NextHop MED LocPrf PrefVal Path/Ogn
*> 3.3.3.3/32 3.1.1.1 1 0 65009?
*> 8.1.1.0/24 0.0.0.0 0 0 i
*> 9.1.2.0/24 3.1.1.1 1 0 65009?
# 查看SwitchC的路由表。
[SwitchC] display ip routing-table
Routing Tables: Public
Destinations : 9 Routes : 9
Destination/Mask Proto Pre Cost NextHop Interface
2.2.2.2/32 OSPF 10 1 9.1.1.1 Vlan300
3.3.3.3/32 Direct 0 0 127.0.0.1 InLoop0
8.1.1.0/24 O_ASE 150 1 9.1.1.1 Vlan300
9.1.1.0/24 Direct 0 0 9.1.1.2 Vlan300
9.1.1.2/32 Direct 0 0 127.0.0.1 InLoop0
9.1.2.0/24 Direct 0 0 9.1.2.1 Vlan400
9.1.2.1/32 Direct 0 0 127.0.0.1 InLoop0
127.0.0.0/8 Direct 0 0 127.0.0.1 InLoop0
127.0.0.1/32 Direct 0 0 127.0.0.1 InLoop0
(5) 结果验证
# 使用Ping进行验证。
[SwitchA] ping -a 8.1.1.1 9.1.2.1
PING 9.1.2.1: 56 data bytes, press CTRL_C to break
Reply from 9.1.2.1: bytes=56 Sequence=1 ttl=254 time=15 ms
Reply from 9.1.2.1: bytes=56 Sequence=2 ttl=254 time=31 ms
Reply from 9.1.2.1: bytes=56 Sequence=3 ttl=254 time=47 ms
Reply from 9.1.2.1: bytes=56 Sequence=4 ttl=254 time=46 ms
Reply from 9.1.2.1: bytes=56 Sequence=5 ttl=254 time=47 ms
--- 9.1.2.1 ping statistics ---
5 packet(s) transmitted
5 packet(s) received
0.00% packet loss
round-trip min/avg/max = 15/37/47 ms
[SwitchC] ping -a 9.1.2.1 8.1.1.1
PING 8.1.1.1: 56 data bytes, press CTRL_C to break
Reply from 8.1.1.1: bytes=56 Sequence=1 ttl=254 time=2 ms
Reply from 8.1.1.1: bytes=56 Sequence=2 ttl=254 time=2 ms
Reply from 8.1.1.1: bytes=56 Sequence=3 ttl=254 time=2 ms
Reply from 8.1.1.1: bytes=56 Sequence=4 ttl=254 time=2 ms
Reply from 8.1.1.1: bytes=56 Sequence=5 ttl=254 time=2 ms
--- 8.1.1.1 ping statistics ---
5 packet(s) transmitted
5 packet(s) received
0.00% packet loss
round-trip min/avg/max = 2/2/2 ms
所有交换机都配置BGP,Switch A在AS 65008中,Switch B和Switch C在AS 65009中。
Switch A与Switch B、Switch C之间运行EBGP,Switch B和Switch C之间运行IBGP。
在Switch A上配置负载分担的路由条数为2,以提高链路利用率。
图1-22 BGP负载分担配置组网图
(1) 配置各接口的IP地址(略)
(2) 配置BGP连接
l 在Switch A上与Switch B、Switch C分别建立EBGP连接,并将8.1.1.0/24网段的路由通告给Switch B和Switch C,以便Switch B和Switch C能够访问Switch A的内部网络。
l 在Switch B上与Switch A建立EBGP连接,与Switch C建立IBGP连接,并将9.1.1.0/24网段的路由通告给Switch A,以便Switch A能够通过Switch B访问内部网络。同时,在Switch B上配置一条到Switch C Loopback0接口的静态路由(也可以用OSPF等协议来实现),以便使用Loopback接口建立IBGP连接。
l 在Switch C上与Switch A建立EBGP连接,与Switch B建立IBGP连接,并将9.1.1.0/24网段的路由通告给Switch A,以便Switch A能够通过Switch C访问内部网络。同时,在Switch C上配置一条到Switch B Loopback0接口的静态路由(也可以用OSPF等协议来实现),以便使用Loopback接口建立IBGP连接。
# 配置Switch A。
<SwitchA> system-view
[SwitchA] bgp 65008
[SwitchA-bgp] router-id 1.1.1.1
[SwitchA-bgp] peer 3.1.1.1 as-number 65009
[SwitchA-bgp] peer 3.1.2.1 as-number 65009
[SwitchA-bgp] network 8.1.1.1 24
[SwitchA-bgp] quit
# 配置Switch B。
<SwitchB> system-view
[SwitchB] bgp 65009
[SwitchB-bgp] router-id 2.2.2.2
[SwitchB-bgp] peer 3.1.1.2 as-number 65008
[SwitchB-bgp] peer 3.3.3.3 as-number 65009
[SwitchB-bgp] peer 3.3.3.3 connect-interface loopback 0
[SwitchB-bgp] network 9.1.1.0 255.255.255.0
[SwitchB-bgp] quit
[SwitchB] ip route-static 3.3.3.3 32 9.1.1.2
# 配置Switch C。
<SwitchC> system-view
[SwitchC] bgp 65009
[SwitchC-bgp] router-id 3.3.3.3
[SwitchC-bgp] peer 3.1.2.2 as-number 65008
[SwitchC-bgp] peer 2.2.2.2 as-number 65009
[SwitchC-bgp] peer 2.2.2.2 connect-interface loopback 0
[SwitchC-bgp] network 9.1.1.0 255.255.255.0
[SwitchC-bgp] quit
[SwitchC] ip route-static 2.2.2.2 32 9.1.1.1
# 查看Switch A的路由表。
[SwitchA] display bgp routing-table
Total Number of Routes: 3
BGP Local router ID is 1.1.1.1
Status codes: * - valid, ^ - VPNv4 best, > - best, d - damped,
h - history, i - internal, s - suppressed, S - Stale
Origin : i - IGP, e - EGP, ? – incomplete
Network NextHop MED LocPrf PrefVal Path/Ogn
*> 8.1.1.0/24 0.0.0.0 0 0 i
*> 9.1.1.0/24 3.1.1.1 0 0 65009i
* 3.1.2.1 0 0 65009i
l 从BGP路由表中可以看出,到目的地址9.1.1.0/24有两条有效路由,其中下一跳为3.1.1.1的路由前有标志“*>”,表示它是当前有效的最优路由(因为Switch B的路由器ID要小一些);而下一跳为3.1.2.1的路由前只有标志“*”,表示它是当前有效的路由,但不是最优的。
l 使用display ip routing-table命令查看IP路由表项,可以看出到达目的地址9.1.1.0/24的路由只有一条,下一跳地址为3.1.1.1,出接口为Vlan200。
(3) 配置负载分担
因为Switch A有两条路径到达AS 65009的内部网络,所以,在Switch A配置负载分担的路由条数为2,以提高链路利用率。
# 配置Switch A。
[SwitchA] bgp 65008
[SwitchA-bgp] balance 2
[SwitchA-bgp] quit
(4) 结果验证
# 查看Switch A的路由表。
[SwitchA] display bgp routing-table
Total Number of Routes: 3
BGP Local router ID is 1.1.1.1
Status codes: * - valid, ^ - VPNv4 best, > - best, d - damped,
h - history, i - internal, s - suppressed, S - Stale
Origin : i - IGP, e - EGP, ? - incomplete
Network NextHop MED LocPrf PrefVal Path/Ogn
*> 8.1.1.0/24 0.0.0.0 0 0 i
*> 9.1.1.0/24 3.1.1.1 0 0 65009i
*> 3.1.2.1 0 0 65009i
l 从BGP路由表中可以看到,BGP路由9.1.1.0/24存在两个下一跳,分别是3.1.1.1和3.1.2.1,两条路由前都有标志“*>”,表明它们都是当前有效的最优路由。
l 使用display ip routing-table命令查看IP路由表项,可以看出到达目的地址9.1.1.0/24的路由有两条,其中一条的下一跳地址为3.1.1.1,出接口为Vlan200;另一条的下一跳地址为3.1.2.1,出接口为Vlan300。
Switch B分别与Switch A、Switch C之间建立EBGP连接。
通过在Switch A上配置NO_EXPORT团体属性,使得AS 10发布到AS 20中的路由,不再被AS 20向其他AS发布。
图1-23 BGP团体组网图
(1) 配置各接口的IP地址(略)
(2) 配置EBGP
# 配置Switch A。
<SwitchA> system-view
[SwitchA] bgp 10
[SwitchA-bgp] router-id 1.1.1.1
[SwitchA-bgp] peer 200.1.2.2 as-number 20
[SwitchA-bgp] network 9.1.1.0 255.255.255.0
[SwitchA-bgp] quit
# 配置Switch B。
<SwitchB> system-view
[SwitchB] bgp 20
[SwitchB-bgp] router-id 2.2.2.2
[SwitchB-bgp] peer 200.1.2.1 as-number 10
[SwitchB-bgp] peer 200.1.3.2 as-number 30
[SwitchB-bgp] quit
# 配置Switch C。
<SwitchC> system-view
[SwitchC] bgp 30
[SwitchC-bgp] router-id 3.3.3.3
[SwitchC-bgp] peer 200.1.3.1 as-number 20
[SwitchC-bgp] quit
# 查看Switch B的路由表。
[SwitchB] display bgp routing-table 9.1.1.0
BGP local router ID : 2.2.2.2
Local AS number : 20
Paths: 1 available, 1 best
BGP routing table entry information of 9.1.1.0/24:
From : 200.1.2.1 (1.1.1.1)
Original nexthop: 200.1.2.1
AS-path : 10
Origin : igp
Attribute value : MED 0, pref-val 0, pre 255
State : valid, external, best,
Advertised to such 1 peers:
200.1.3.2
可以看出,Switch B把收到的路由发布给了位于AS 30内的Switch C。
# 查看Switch C的路由表。
[SwitchC] display bgp routing-table
Total Number of Routes: 1
BGP Local router ID is 3.3.3.3
Status codes: * - valid, ^ - VPNv4 best, > - best, d - damped,
h - history, i - internal, s - suppressed, S - Stale
Origin : i - IGP, e - EGP, ? - incomplete
Network NextHop MED LocPrf PrefVal Path/Ogn
*> 9.1.1.0/24 200.1.3.1 0 0 20 10i
从路由表可以确认,Switch C从Switch B那里学到了目的地址为9.1.1.0/24的路由。
(3) 配置BGP团体属性
# 配置路由策略。
[SwitchA] route-policy comm_policy permit node 0
[SwitchA-route-policy] apply community no-export
[SwitchA-route-policy] quit
# 应用路由策略。
[SwitchA] bgp 10
[SwitchA-bgp] peer 200.1.2.2 route-policy comm_policy export
[SwitchA-bgp] peer 200.1.2.2 advertise-community
# 查看Switch B的路由表。
[SwitchB] display bgp routing-table 9.1.1.0
BGP local router ID : 2.2.2.2
Local AS number : 20
Paths: 1 available, 1 best
BGP routing table entry information of 9.1.1.0/24:
From : 200.1.2.1 (1.1.1.1)
Original nexthop: 200.1.2.1
Community : No-Export
AS-path : 10
Origin : igp
Attribute value : MED 0, pref-val 0, pre 255
State : valid, external, best,
Not advertised to any peers yet
在Switch B的BGP路由表中可以看到配置的团体属性。此时在Switch C的BGP路由表中已经没有到目的地址9.1.1.0/24的路由。
所有交换机运行BGP协议,Switch A与Switch B建立EBGP连接,Switch C与Switch B和Switch D之间建立IBGP连接。
Switch C作为路由反射器,Switch B和Switch D为Switch C的客户机。
Switch D能够通过Switch C学到路由1.0.0.0/8。
图1-24 配置BGP路由反射器的组网图
(1) 配置各接口的IP地址(略)
(2) 配置BGP连接
# 配置Switch A。
<SwitchA> system-view
[SwitchA] bgp 100
[SwitchA-bgp] router-id 1.1.1.1
[SwitchA-bgp] peer 192.1.1.2 as-number 200
# 通告1.0.0.0/8网段路由到BGP路由表中。
[SwitchA-bgp] network 1.0.0.0
[SwitchA-bgp] quit
# 配置Switch B。
<SwitchB> system-view
[SwitchB] bgp 200
[SwitchB-bgp] router-id 2.2.2.2
[SwitchB-bgp] peer 192.1.1.1 as-number 100
[SwitchB-bgp] peer 193.1.1.1 as-number 200
[SwitchB-bgp] peer 193.1.1.1 next-hop-local
[SwitchB-bgp] quit
# 配置Switch C。
<SwitchC> system-view
[SwitchC] bgp 200
[SwitchC-bgp] router-id 3.3.3.3
[SwitchC-bgp] peer 193.1.1.2 as-number 200
[SwitchC-bgp] peer 194.1.1.2 as-number 200
[SwitchC-bgp] quit
# 配置Switch D。
<SwitchD> system-view
[SwitchD] bgp 200
[SwitchD-bgp] router-id 4.4.4.4
[SwitchD-bgp] peer 194.1.1.1 as-number 200
[SwitchD-bgp] quit
(3) 配置路由反射器
# 配置Switch C。
[SwitchC] bgp 200
[SwitchC-bgp] peer 193.1.1.2 reflect-client
[SwitchC-bgp] peer 194.1.1.2 reflect-client
[SwitchC-bgp] quit
(4) 验证配置效果
# 查看Switch B的BGP路由表。
[SwitchB] display bgp routing-table
Total Number of Routes: 1
BGP Local router ID is 200.1.2.2
Status codes: * - valid, ^ - VPNv4 best, > - best, d - damped,
h - history, i - internal, s - suppressed, S - Stale
Origin : i - IGP, e - EGP, ? - incomplete
Network NextHop MED LocPrf PrefVal Path/Ogn
*> 1.0.0.0 192.1.1.1 0 0 100i
# 查看Switch D的BGP路由表。
[SwitchD] display bgp routing-table
Total Number of Routes: 1
BGP Local router ID is 200.1.2.1
Status codes: * - valid, ^ - VPNv4 best, > - best, d - damped,
h - history, i - internal, s - suppressed, S - Stale
Origin : i - IGP, e - EGP, ? - incomplete
Network NextHop MED LocPrf PrefVal Path/Ogn
i 1.0.0.0 193.1.1.2 0 100 0 100i
可以看出,Switch D从Switch C已经学到了1.0.0.0/8路由。
AS 200中有多台BGP交换机,为了减少IBGP的连接数,现将他们划分为3个子自治系统:AS 65001、AS 65002和AS 65003。其中AS 65001内的三台交换机建立IBGP全连接。
图1-25 配置联盟组网图
设备 |
接口 |
IP地址 |
设备 |
接口 |
IP地址 |
Switch A |
Vlan-int100 |
200.1.1.1/24 |
Switch D |
Vlan-int200 |
10.1.5.1/24 |
|
Vlan-int200 |
10.1.1.1/24 |
|
Vlan-int400 |
10.1.3.2/24 |
|
Vlan-int300 |
10.1.2.1/24 |
Switch E |
Vlan-int200 |
10.1.5.2/24 |
|
Vlan-int400 |
10.1.3.1/24 |
|
Vlan-int500 |
10.1.4.2/24 |
|
Vlan-int500 |
10.1.4.1/24 |
Switch F |
Vlan-int100 |
200.1.1.2/24 |
Switch B |
Vlan-int200 |
10.1.1.2/24 |
|
Vlan-int600 |
9.1.1.1/24 |
Switch C |
Vlan-int300 |
10.1.2.2/24 |
|
(1) 配置各接口的IP地址(略)
(2) 配置BGP联盟
# 配置Switch A。
<SwitchA> system-view
[SwitchA] bgp 65001
[SwitchA-bgp] router-id 1.1.1.1
[SwitchA-bgp] confederation id 200
[SwitchA-bgp] confederation peer-as 65002 65003
[SwitchA-bgp] peer 10.1.1.2 as-number 65002
[SwitchA-bgp] peer 10.1.1.2 next-hop-local
[SwitchA-bgp] peer 10.1.2.2 as-number 65003
[SwitchA-bgp] peer 10.1.2.2 next-hop-local
[SwitchA-bgp] quit
# 配置Switch B。
<SwitchB> system-view
[SwitchB] bgp 65002
[SwitchB-bgp] router-id 2.2.2.2
[SwitchB-bgp] confederation id 200
[SwitchB-bgp] confederation peer-as 65001 65003
[SwitchB-bgp] peer 10.1.1.1 as-number 65001
[SwitchB-bgp] quit
# 配置Switch C。
<SwitchC> system-view
[SwitchC] bgp 65003
[SwitchC-bgp] router-id 3.3.3.3
[SwitchC-bgp] confederation id 200
[SwitchC-bgp] confederation peer-as 65001 65002
[SwitchC-bgp] peer 10.1.2.1 as-number 65001
[SwitchC-bgp] quit
(3) 配置AS 65001内的IBGP连接
# 配置Switch A。
[SwitchA] bgp 65001
[SwitchA-bgp] peer 10.1.3.2 as-number 65001
[SwitchA-bgp] peer 10.1.3.2 next-hop-local
[SwitchA-bgp] peer 10.1.4.2 as-number 65001
[SwitchA-bgp] peer 10.1.4.2 next-hop-local
[SwitchA-bgp] quit
# 配置Switch D。
<SwitchD> system-view
[SwitchD] bgp 65001
[SwitchD-bgp] router-id 4.4.4.4
[SwitchD-bgp] confederation id 200
[SwitchD-bgp] peer 10.1.3.1 as-number 65001
[SwitchD-bgp] peer 10.1.5.2 as-number 65001
[SwitchD-bgp] quit
# 配置Switch E。
<SwitchE> system-view
[SwitchE] bgp 65001
[SwitchE-bgp] router-id 5.5.5.5
[SwitchE-bgp] confederation id 200
[SwitchE-bgp] peer 10.1.4.1 as-number 65001
[SwitchE-bgp] peer 10.1.5.1 as-number 65001
[SwitchE-bgp] quit
(4) 配置AS 100和AS 200之间的EBGP连接
# 配置Switch A。
[SwitchA] bgp 65001
[SwitchA-bgp] peer 200.1.1.2 as-number 100
[SwitchA-bgp] quit
# 配置Switch F。
<SwitchF> system-view
[SwitchF] bgp 100
[SwitchF-bgp] router-id 6.6.6.6
[SwitchF-bgp] peer 200.1.1.1 as-number 200
[SwitchF-bgp] network 9.1.1.0 255.255.255.0
[SwitchF-bgp] quit
(5) 验证配置结果
# 查看Switch B的BGP路由表。
[SwitchB] display bgp routing-table
Total Number of Routes: 1
BGP Local router ID is 2.2.2.2
Status codes: * - valid, ^ - VPNv4 best, > - best, d - damped,
h - history, i - internal, s - suppressed, S - Stale
Origin : i - IGP, e - EGP, ? - incomplete
Network NextHop MED LocPrf PrefVal Path/Ogn
*>i 9.1.1.0/24 10.1.1.1 0 100 0 (65001) 100i
[SwitchB] display bgp routing-table 9.1.1.0
BGP local router ID : 2.2.2.2
Local AS number : 65002
Paths: 1 available, 1 best
BGP routing table entry information of 9.1.1.0/24:
From : 10.1.1.1 (1.1.1.1)
Relay Nexthop : 0.0.0.0
Original nexthop: 10.1.1.1
AS-path : (65001) 100
Origin : igp
Attribute value : MED 0, localpref 100, pref-val 0, pre 255
State : valid, external-confed, best,
Not advertised to any peers yet
# 查看Switch D的BGP路由表。
[SwitchD] display bgp routing-table
Total Number of Routes: 1
BGP Local router ID is 4.4.4.4
Status codes: * - valid, ^ - VPNv4 best, > - best, d - damped,
h - history, i - internal, s - suppressed, S - Stale
Origin : i - IGP, e - EGP, ? - incomplete
Network NextHop MED LocPrf PrefVal Path/Ogn
*>i 9.1.1.0/24 10.1.3.1 0 100 0 100i
[SwitchD] display bgp routing-table 9.1.1.0
BGP local router ID : 4.4.4.4
Local AS number : 65001
Paths: 1 available, 1 best
BGP routing table entry information of 9.1.1.0/24:
From : 10.1.3.1 (1.1.1.1)
Relay Nexthop : 0.0.0.0
Original nexthop: 10.1.3.1
AS-path : 100
Origin : igp
Attribute value : MED 0, localpref 100, pref-val 0, pre 255
State : valid, internal, best,
Not advertised to any peers yet
通过以上显示信息可以看出:
l Switch F只需要和Switch A建立EBGP连接,而不需要和Switch B、Switch C建立连接,同样可以通过联盟将路由信息传递给Switch B和Switch C。
l Switch B和Switch D在同一个联盟里,但是属于不同的子自治域,它们都是通过Switch A来获取外部路由信息,生成的BGP路由表项也是一致的,等效于在同一个自治域内,但是又不需要物理上全连接。
所有交换机都运行BGP协议。Switch A与Switch B和Switch C之间运行EBGP;Switch D与Switch B和Switch C之间运行IBGP。
AS 200中运行OSPF协议。
配置不同的路由策略,使得Switch D优选Switch C学到的1.0.0.0/8路由。
图1-26 配置BGP路径选择的组网图
接口 |
IP地址 |
设备 |
接口 |
IP地址 |
|
Switch A |
Vlan-int101 |
1.0.0.0/8 |
Switch D |
Vlan-int400 |
195.1.1.1/24 |
|
Vlan-int100 |
192.1.1.1/24 |
|
Vlan-int300 |
194.1.1.1/24 |
|
Vlan-int200 |
193.1.1.1/24 |
Switch C |
Vlan-int400 |
195.1.1.2/24 |
Switch B |
Vlan-int100 |
192.1.1.2/24 |
|
Vlan-int200 |
193.1.1.2/24 |
|
Vlan-int300 |
194.1.1.2/24 |
|
(1) 配置各接口的IP地址(略)
(2) 配置Switch B、Switch C和Switch D之间运行OSPF协议
# 配置Switch B。
<SwitchB> system-view
[SwitchB] ospf
[SwitchB-ospf] area 0
[SwitchB-ospf-1-area-0.0.0.0] network 192.1.1.0 0.0.0.255
[SwitchB-ospf-1-area-0.0.0.0] network 194.1.1.0 0.0.0.255
[SwitchB-ospf-1-area-0.0.0.0] quit
[SwitchB-ospf-1] quit
# 配置Switch C。
<SwitchC> system-view
[SwitchC] ospf
[SwitchC-ospf] area 0
[SwitchC-ospf-1-area-0.0.0.0] network 193.1.1.0 0.0.0.255
[SwitchC-ospf-1-area-0.0.0.0] network 195.1.1.0 0.0.0.255
[SwitchC-ospf-1-area-0.0.0.0] quit
[SwitchC-ospf-1] quit
# 配置Switch D。
<SwitchD> system-view
[SwitchD] ospf
[SwitchD-ospf] area 0
[SwitchD-ospf-1-area-0.0.0.0] network 194.1.1.0 0.0.0.255
[SwitchD-ospf-1-area-0.0.0.0] network 195.1.1.0 0.0.0.255
[SwitchD-ospf-1-area-0.0.0.0] quit
[SwitchD-ospf-1] quit
(3) 配置BGP连接
# 配置Switch A。
<SwitchA> system-view
[SwitchA] bgp 100
[SwitchA-bgp] peer 192.1.1.2 as-number 200
[SwitchA-bgp] peer 193.1.1.2 as-number 200
# 将1.0.0.0/8网段通告到Switch A的BGP路由表中。
[SwitchA-bgp] network 1.0.0.0 8
[SwitchA-bgp] quit
# 配置Switch B。
[SwitchB] bgp 200
[SwitchB-bgp] peer 192.1.1.1 as-number 100
[SwitchB-bgp] peer 194.1.1.1 as-number 200
[SwitchB-bgp] quit
# 配置Switch C。
[SwitchC] bgp 200
[SwitchC-bgp] peer 193.1.1.1 as-number 100
[SwitchC-bgp] peer 195.1.1.1 as-number 200
[SwitchC-bgp] quit
# 配置Switch D。
[SwitchD] bgp 200
[SwitchD-bgp] peer 194.1.1.2 as-number 200
[SwitchD-bgp] peer 195.1.1.2 as-number 200
[SwitchD-bgp] quit
(4) 通过配置1.0.0.0/8路由的不同属性值,使得Switch D优选Switch C学到的路由。
l 方法一:在Switch A上对发布给对等体192.1.1.2的1.0.0.0/8路由配置较高的MED属性值,使得Switch D优选Switch C学到的路由。
# 定义编号为2000的ACL,允许路由1.0.0.0/8通过。
[SwitchA] acl number 2000
[SwitchA-acl-basic-2000] rule permit source 1.0.0.0 0.255.255.255
[SwitchA-acl-basic-2000] quit
# 定义两个Route-policy,一个名为apply_med_50,为路由1.0.0.0/8设置MED属性值为50;另一个名为apply_med_100,为路由1.0.0.0/8设置MED属性值为100。
[SwitchA] route-policy apply_med_50 permit node 10
[SwitchA-route-policy] if-match acl 2000
[SwitchA-route-policy] apply cost 50
[SwitchA-route-policy] quit
[SwitchA] route-policy apply_med_100 permit node 10
[SwitchA-route-policy] if-match acl 2000
[SwitchA-route-policy] apply cost 100
[SwitchA-route-policy] quit
# 对发布给对等体193.1.1.2(SwitchC)的路由应用名为apply_med_50的Route-policy,对发布给对等体192.1.1.2(SwitchB)的路由应用名为apply_med_100的Route-policy。
[SwitchA] bgp 100
[SwitchA-bgp] peer 193.1.1.2 route-policy apply_med_50 export
[SwitchA-bgp] peer 192.1.1.2 route-policy apply_med_100 export
[SwitchA-bgp] quit
# 查看Switch D的BGP路由表。
[SwitchD] display bgp routing-table
Total Number of Routes: 2
BGP Local router ID is 194.1.1.1
Status codes: * - valid, ^ - VPNv4 best, > - best, d - damped,
h - history, i - internal, s - suppressed, S - Stale
Origin : i - IGP, e - EGP, ? - incomplete
Network NextHop MED LocPrf PrefVal Path/Ogn
*>i 1.0.0.0 193.1.1.1 50 100 0 100i
* i 192.1.1.1 100 100 0 100i
可以看到,Switch D从Switch C学到1.0.0.0/8的路由是最优的。
l 方法二:在Switch B和Switch C上分别对1.0.0.0/8路由配置不同的本地优先级,使得Switch D优选Switch C学到的路由。
# 在Switch C上定义编号为2000的ACL,允许1.0.0.0/8路由通过。
[SwitchC] acl number 2000
[SwitchC-acl-basic-2000] rule permit source 1.0.0.0 0.255.255.255
[SwitchC-acl-basic-2000] quit
# 在Switch C上定义名为localpref的Route-policy,设置路由1.0.0.0/8的本地优先级为200(缺省的本地优先级为100)。
[SwitchC] route-policy localpref permit node 10
[SwitchC-route-policy] if-match acl 2000
[SwitchC-route-policy] apply local-preference 200
[SwitchC-route-policy] quit
# 为从BGP对等体193.1.1.1的路由应用名为localpref的Router-policy。
[SwitchC] bgp 200
[SwitchC-bgp] peer 193.1.1.1 route-policy localpref import
[SwitchC-bgp] quit
# 查看Switch D的BGP路由表。
[SwitchD] display bgp routing-table
Total Number of Routes: 2
BGP Local router ID is 194.1.1.1
Status codes: * - valid, ^ - VPNv4 best, > - best, d - damped,
h - history, i - internal, s - suppressed, S - Stale
Origin : i - IGP, e - EGP, ? - incomplete
Network NextHop MED LocPrf PrefVal Path/Ogn
*>i 1.0.0.0 193.1.1.1 0 200 0 100i
* i 192.1.1.1 0 100 0 100i
可以看到,Switch D从Switch C学到1.0.0.0/8的路由是最优的。
如图1-27所示,所有路由器均运行BGP协议,Switch A和Switch B之间建立EBGP连接,Switch B和Switch C之间建立IBGP全连接。现要求实现即便Switch B发生主备倒换,也不会影响Switch A和Switch C之间正在进行的数据传输。
图1-27 BGP GR配置组网图
(1) Switch A的配置
# 配置各接口的IP地址(略)。
# 配置Switch A与Switch B的EBGP连接。
<SwitchA> system-view
[SwitchA] bgp 65008
[SwitchA-bgp] router-id 1.1.1.1
[SwitchA-bgp] peer 200.1.1.1 as-number 65009
# 将8.0.0.0/8网段路由通告到BGP路由表中。
[SwitchA-bgp] network 8.0.0.0
# 使能BGP GR功能。
[SwitchA-bgp] graceful-restart
(2) Switch B的配置
# 配置各接口的IP地址(略)。
# 配置Switch B与Switch A的EBGP连接。
<SwitchB> system-view
[SwitchB] bgp 65009
[SwitchB-bgp] router-id 2.2.2.2
[SwitchB-bgp] peer 200.1.1.2 as-number 65008
# 配置Switch B与Switch C的IBGP连接。
[SwitchB-bgp] peer 9.1.1.2 as-number 65009
# 将200.1.1.0/24和9.1.1.0/24网段路由通告到BGP路由表中。
[SwitchB-bgp] network 200.1.1.0 24
[SwitchB-bgp] network 9.1.1.0 24
# 使能BGP GR功能。
[SwitchB-bgp] graceful-restart
(3) Switch C的配置
# 配置各接口的IP地址(略)。
# 配置Switch C与Switch B的IBGP连接。
<SwitchC> system-view
[SwitchC] bgp 65009
[SwitchC-bgp] router-id 3.3.3.3
[SwitchC-bgp] peer 9.1.1.1 as-number 65009
# 使能BGP GR功能。
[SwitchC-bgp] graceful-restart
在Switch A上ping Switch C,同时在Switch B上触发主备倒换,可以发现在整个倒换过程中Switch A都可以ping通Switch C。
l 在AS 200内使用OSPF作为IGP协议;
l Switch A与Switch C建立两条IBGP连接。当Switch A与Switch C之间的两条链路均连通时,Switch C与1.1.1.0/24之间的报文使用Switch A<->Switch B<->Switch C这条路径;当Switch A<->Switch B<->Switch C链路故障时,BFD能够快速检测并通告BGP协议,使得Switch A<->Switch D<->Switch C这条路径能够迅速生效。
图1-28 配置BGP与BFD联动组网图
设备 |
接口 |
IP地址 |
设备 |
接口 |
IP地址 |
Switch A |
Vlan-int100 |
3.0.1.1/24 |
Switch C |
Vlan-int101 |
3.0.2.2/24 |
|
Vlan-int200 |
2.0.1.1/24 |
|
Vlan-int201 |
2.0.2.2/24 |
Switch B |
Vlan-int100 |
3.0.1.2/24 |
Switch D |
Vlan-int200 |
2.0.1.2/24 |
|
Vlan-int101 |
3.0.2.1/24 |
|
Vlan-int201 |
2.0.2.1/24 |
(1) 配置各接口的IP地址(略)
(2) 配置OSPF(略),保证Switch A和Switch C之间路由可达
(3) Switch A上的BGP配置
# 配置Switch A和Switch C建立两条IBGP连接。
<SwitchA> system-view
[SwitchA] bgp 100
[SwitchA-bgp] peer 3.0.2.2 as-number 200
[SwitchA-bgp] peer 2.0.2.2 as-number 200
[SwitchA-bgp] quit
# 配置当Switch A与Switch C之间的两条链路均连通时,Switch C与1.1.1.0/24之间的报文使用Switch A<->Switch B<->Switch C这条路径。(在Switch A上对发布给对等体2.0.2.2的1.1.1.0/24路由配置较高的MED属性值)
l 定义编号为2000的ACL,允许路由1.1.1.0/24通过。
[SwitchA] acl number 2000
[SwitchA-acl-basic-2000] rule permit source 1.1.1.0 24
[SwitchA-acl-basic-2000] quit
l 定义两个Route-policy,一个名为apply_med_50,为路由1.1.1.0/24设置MED属性值为50;另一个名为apply_med_100,为路由1.1.1.0/24设置MED属性值为100。
[SwitchA] route-policy apply_med_50 permit node 10
[SwitchA-route-policy] if-match acl 2000
[SwitchA-route-policy] apply cost 50
[SwitchA-route-policy] quit
[SwitchA] route-policy apply_med_100 permit node 10
[SwitchA-route-policy] if-match acl 2000
[SwitchA-route-policy] apply cost 100
[SwitchA-route-policy] quit
l 对发布给对等体3.0.2.2的路由应用名为apply_med_50的Route-policy,对发布给对等体2.0.2.2的路由应用名为apply_med_100的Route-policy。
[SwitchA] bgp 100
[SwitchA-bgp] peer 3.0.2.2 route-policy apply_med_50 export
[SwitchA-bgp] peer 2.0.2.2 route-policy apply_med_100 export
# 配置当Switch A<->Switch B<->Switch C链路故障时,BFD能够快速检测并通告BGP协议,使得Switch A<->Switch D<->Switch C这条路径能够迅速生效。
[SwitchA-bgp] peer 3.0.2.2 bfd
[SwitchA-bgp] quit
(4) Switch C上的BGP配置。
<SwitchC> system-view
[SwitchC] bgp 100
[SwitchC-bgp] peer 3.0.1.1 as-number 200
[SwitchC-bgp] peer 3.0.1.1 bfd
[SwitchC-bgp] peer 2.0.1.1 as-number 200
[SwitchC-bgp] quit
(5) 配置各路由器接口及BFD参数(该步骤可省略,使用BFD参数的缺省值即可)
# 配置Switch A。
[SwitchA] bfd session init-mode active
[SwitchA] interface vlan-interface 100
l 配置发送BFD控制报文的最小时间间隔为500毫秒。
[SwitchA-Vlan-interface100] bfd min-transmit-interval 500
l 配置接收BFD控制报文的最小时间间隔为500毫秒。
[SwitchA-Vlan-interface100] bfd min-receive-interval 500
l 配置BFD报文最大失效的个数为7。
[SwitchA-Vlan-interface100] bfd detect-multiplier 7
l 配置接口建立BFD会话时需要认证,采用明文认证方式方式,密码为ibgpbfd。
[SwitchA-Vlan-interface100] bfd authentication-mode simple 1 ibgpbfd
[SwitchA-Vlan-interface100] quit
# 配置Switch C。
[SwitchC] bfd session init-mode active
[SwitchC] interface vlan-interface 101
[SwitchC-Vlan-interface101] bfd min-transmit-interval 500
[SwitchC-Vlan-interface101] bfd min-receive-interval 500
[SwitchC-Vlan-interface101] bfd detect-multiplier 7
[SwitchC-Vlan-interface101] bfd authentication-mode simple 1 ibgpbfd
[SwitchC-Vlan-interface101] return
(6) 结果验证
下面以Switch C为例,Switch A和Switch C类似,不再赘述。
# 显示Switch C的BFD信息。
<SwitchC> display bfd session verbose
Total Session Num: 1 Init Mode: Active
IP Session Working Under Ctrl Mode:
Local Discr: 17 Remote Discr: 13
Source IP: 3.0.2.2 Destination IP: 3.0.1.1
Session State: Up Interface: Vlan-interface101
Min Trans Inter: 500ms Act Trans Inter: 500ms
Min Recv Inter: 500ms Act Detect Inter: 3000ms
Recv Pkt Num: 57 Send Pkt Num: 53
Hold Time: 2200ms Connect Type: Indirect
Running Up for: 00:00:06 Auth mode: Simple
Protocol: BGP6
Diag Info: No Diagnostic
以上显示信息表明:Switch A的VLAN接口100和Switch C的VLAN接口101之间已经建立了BFD连接,而且BFD协议运行正常。
# 在Switch C上查看BGP邻居信息,可以看出Switch A和Switch C之间BGP邻居处于Established状态。
<SwitchC> display bgp peer
BGP local router ID : 1.1.1.1
Local AS number : 200
Total number of peers : 2 Peers in established state : 2
Peer AS MsgRcvd MsgSent OutQ PrefRcv Up/Down State
2.0.1.1 200 7 10 0 0 00:01:05 Established
3.0.1.1 200 7 10 0 0 00:01:34 Established
# 在Switch C上查看1.1.1.0/24的路由信息,可以看出Switch A和Switch C是通过Switch B进行通信的。
<SwitchC> display ip routing-table 1.1.1.0 24 verbose
Routing Table : Public
Summary Count : 2
Destination: 1.1.1.0/24
Protocol: BGP Process ID: 0
Preference: 0 Cost: 50
NextHop: 3.0.1.1 Interface: Vlan-interface101
BkNextHop: 0.0.0.0 BkInterface:
RelyNextHop: 3.0.2.1 Neighbor : 3.0.1.1
Tunnel ID: 0x0 Label: NULL
State: Active Adv Age: 00h08m54s
Tag: 0
Destination: 1.1.1.0/24
Protocol: BGP Process ID: 0
Preference: 0 Cost: 100
NextHop: 2.0.1.1 Interface: Vlan-interface201
BkNextHop: 0.0.0.0 BkInterface:
RelyNextHop: 2.0.2.1 Neighbor : 2.0.1.1
Tunnel ID: 0x0 Label: NULL
State: Invalid Adv Age: 00h08m54s
Tag: 0
以上显示信息表明:Switch C到达1.1.1.0/24网段有两条路径:当前生效的是Switch A<->Switch B<->Switch C,Switch A<->Switch D<->Switch C这条路径没有生效。
# 打开Switch C的调试开关。
<SwitchC> debugging bfd scm
<SwitchC> debugging bfd event
<SwitchC> debugging bgp bfd
<SwitchC> terminal monitor
<SwitchC> terminal debugging
# Switch A和Switch B之间的链路发生故障后。可以看到Switch C能够快速检测到链路的变化。
%Nov 5 11:42:24:172 2009 SwitchC BFD/5/BFD_CHANGE_FSM: Sess[3.0.2.2/3.0.1.1, 13/17,VLAN101,Ctrl], Sta: UP->DOWN, Diag: 1
%Nov 5 11:42:24:172 2009 SwitchC BGP/5/BGP_STATE_CHANGED: 3.0.1.1 state is changed from ESTABLISHED to IDLE.
*Nov 5 11:42:24:187 2009 SwitchC RM/6/RMDEBUG: BGP_BFD: Recv BFD DOWN msg, Src IP 3.0.2.2, Dst IP 3.0.1.1, Instance ID 0.
*Nov 5 11:42:24:187 2009 SwitchC RM/6/RMDEBUG: BGP_BFD: Reset BGP session 3.0.1.1 for BFD session down.
*Nov 5 11:42:24:187 2009 SwitchC RM/6/RMDEBUG: BGP_BFD: Send DELETE msg to BFD, Connection type DIRECT, Src IP 3.0.2.2, Dst IP 3.0.1.1, Instance ID 0.
# 在Switch C上查看1.1.1.0/24的路由信息,可以看出Switch A和Switch C是通过Switch D进行通信的。
<SwitchC> display ip routing-table 1.1.1.0 24 verbose
Routing Table : Public
Summary Count : 1
Destination: 1.1.1.0/24
Protocol: BGP Process ID: 0
Preference: 0 Cost: 100
NextHop: 2.0.1.1 Interface: Vlan-interface201
BkNextHop: 0.0.0.0 BkInterface:
RelyNextHop: 2.0.2.1 Neighbor : 2.0.1.1
Tunnel ID: 0x0 Label: NULL
State: Active Adv Age: 00h09m54s
Tag: 0
以上显示信息表明:Switch C到达1.1.1.0/24网段有一条路径:Switch A<->Switch D<->Switch C。
使用display bgp peer命令查看BGP对等体的信息,发现与对端的连接无法进入Established状态。
BGP邻居的建立需要能够使用179端口建立TCP会话,以及能够正确交换Open消息。
(1) 用display current-configuration命令检查邻居的AS号配置是否正确。
(2) 用display bgp peer命令检查邻居的IP地址是否正确。
(3) 如果使用Loopback接口,检查是否配置了peer connect-interface命令。
(4) 如果是物理上非直连的EBGP邻居,检查是否配置了peer ebgp-max-hop命令。
(5) 检查路由表中是否存在到邻居的可用路由。
(6) 使用ping命令检查链路是否畅通。
(7) 使用display tcp status命令检查TCP连接是否正常。
(8) 检查是否配置了禁止TCP端口179的ACL。
不同款型规格的资料略有差异, 详细信息请向具体销售和400咨询。H3C保留在没有任何通知或提示的情况下对资料内容进行修改的权利!