本章节下载(1.1 MB)
目 录
3.4.2 采用GRE隧道的BGP/MPLS VPN配置举例
4.6.2 ATM信元透传one-to-one的VCC模式配置
4.6.3 ATM信元透传one-to-one的VPC模式配置
4.8.4 Kompella方式MPLS L2VPN的典型配置举例
MPLS(Multiprotocol Label Switching)是多协议标签交换的简称,它用短而定长的标签来封装网络层分组。MPLS从各种链路层(如PPP、ATM、帧中继、以太网等)得到链路层服务,又为网络层提供面向连接的服务。MPLS能从IP路由协议和控制协议中得到支持,同时,还支持基于策略的约束路由,它路由功能强大、灵活,可以满足各种新应用对网络的要求。这种技术起源于IPv4,但其核心技术可扩展到多种网络协议(IPv6、IPX等)。
MPLS最初是为提高路由器的转发速度而提出一个协议,但是,它的用途已不仅仅局限于此,而是广泛地应用于流量工程(Traffic Engineering)、VPN、QoS等方面,从而日益成为大规模IP网络的重要标准。
FEC(Forwarding Equivalence Class)是MPLS中的一个重要概念。MPLS实际上是一种分类转发技术,它将具有相同转发处理方式(目的地相同、使用转发路径相同、具有相同的服务等级等)的分组归为一类,称为转发等价类。一般来说,划分分组的FEC是根据他的网络层目的地址。属于相同转发等价类的分组在MPLS网络中将获得完全相同的处理。
标签为一个长度固定、具有本地意义的短标识符,用于标识一个FEC(Forwarding Equivalence Class)。当分组到达MPLS网络入口时,它将按一定规则被划归不同的FEC,根据分组所属的FEC,将相应的标签封装在分组中,这样,在网络中,按标签进行分组转发即可。
标签的结构如图1-1所示。
![]()
标签位于链路层包头和网络层分组之间,长度为4个字节。标签共有4个域:
Label:标签值字段,长度为20bits,用于转发的指针。
Exp:3bits,保留,协议中没有明确规定,通常用于COS。
S:1bit,MPLS支持标签的分层结构,即多重标签。值为1时表明为最底层标签。
TTL:8bits,和IP分组中的TTL意义相同。
(1) 标签映射
标签映射分为两种,一种是入口路由器处的标签映射,另一种是MPLS域内的标签映射。
入口路由器处的标签映射为ingress LSR依据一定的原则对输入分组进行划分,得到多个FEC,接着将有关标签与这些FEC进行映射,并记录在相应的数据库LIB(Label Information Base)中。简单地说,就是将一个标签指派给FEC,就称为“标签映射”。
MPLS域内的标签映射又称为输入标签映射ILM(Incoming Label Map),即将每个输入标签映射到一系列NHLFE(Next Hop Label Forwarding Entry)上,然后,根据映射结果,将分组沿各通路进行转发。
(2) 标签的封装
标签在各种介质中的封装如下图所示:

对于以太网、PPP的分组,标签堆栈象“垫层”一样,位于二层报头与数据之间,对于ATM信元模式的分组,借用VPI/VCI来作为标签使用。
(3) 标签分配和分发
标签分发是为某FEC建立相应标签交换路径LSP的过程。
在MPLS体系中,将特定标签分配给特定FEC(即标签绑定)的决定由下游LSR作出,下游LSR随后通知上游LSR。即标签由下游指定,分配的标签按照从下游到上游的方向分发。
MPLS中使用的标签分发方式有两种:下游自主标签分发方式(DU,Downstream Unsolicited)和下游按需标签分发方式(DoD,Downstream On Demand)。
l 对于一个特定的FEC,LSR无须从上游获得标签请求消息即进行标签分配与分发的方式,称为下游自主标签分配。
l 对于一个特定的FEC,LSR获得标签请求消息之后才进行标签分配与分发的方式,称为下游按需标签分配。
具有标签分发邻接关系的上游LSR和下游LSR之间,必须对使用哪种标签分发方式达成一致。
LSR将标签分发给其对等体时,可以采用LDP消息进行传送,也可以将标签搭载在其他路由协议消息上。
& 说明:
上游和下游是相对而言的,对于一个报文转发过程来说,发送方的路由器是上游LSR,接收方是下游LSR。
(4) 标签分配控制方式
标签分配控制方式分为两种:独立(Independent)标签分配控制方式和有序(ordered)标签分配控制方式。
当使用独立标签分配控制方式时,每个LSR可以在任意时间向和它连接的LSR通告标签映射。
当使用有序标签分配控制方式时,只有当LSR收到某一特定FEC下一跳的特定标签映射消息或者LSR是LSP的出口节点时,LSR才可以向上游发送标签映射消息。
(5) 标签保持方式
标签保持方式分为两种:自由标签保持方式和保守标签保持方式。
假设两台路由器Ru,Rd,对于特定的一个FEC,如果LSR Ru收到了来自LSR Rd的标签绑定,当Rd不是Ru的下一跳时,如果Ru保存该绑定,则称Ru使用的是自由标签保持方式;如果Ru丢弃该绑定,则称Ru使用的是保守标签保持方式。
当要求LSR能够迅速适应路由变化时,可使用自由标签保持方式;当要求LSR中保存较少的标签数量时,可使用保守标签保持方式。
标签分发协议LDP(Label Distribution Protocol)是MPLS中的信令控制协议,是控制LSR之间交换标签与FEC绑定,协调LSR间工作的一系列规程。
MPLS网络的基本构成单元是标签交换路由器LSR(Label Switching Router),主要运行MPLS控制协议和第三层路由协议,并负责与其他LSR交换路由信息来建立路由表,实现FEC和IP分组头的映射,建立FEC和标签之间的绑定,分发标签绑定信息,建立和维护标签转发表等工作。
由LSR构成的网络叫做MPLS域,位于区域边缘的LSR称为边缘LSR(LER,Labeled Edge Router ),主要完成连接MPLS域和非MPLS域以及不同MPLS域的功能,并实现对业务的分类、分发标签(作为出口LER)、剥去标签等。其中入口LER叫Ingress,出口LER叫Egress。
位于区域内部的LSR则称为核心LSR,核心LSR可以是支持MPLS的路由器,也可以是支持MPLS标签交换的LSR,它提供标签分发、交换功能(Label Swapping)。带标签的分组沿着由一系列LSR构成的标签交换路径LSP(Label Switched Path)传送。
图1-3 MPLS基本原理
LSP的建立其实就是将FEC和标签进行绑定,并将这种绑定通告LSP上相邻LSR的过程。这个过程是通过标签分发协议LDP来实现的。LDP规定了LSR间的消息交互过程和消息结构,以及路由选择方式。有关LDP的详细描述,请参见下一节。
MPLS支持LSP隧道技术。在一条LSP路径上,LSR Ru和LSR Rd互为上下游,但LSR Ru和LSR Rd之间的路径,可能并不是路由协议所提供路径的一部分,MPLS允许在LSR Ru和LSR Rd间建立一条新的LSP路径<Ru R1...Rn Rd>,LSR Ru和LSR Rd分别为这条LSP的起点和终点。LSR Ru和LSR Rd间的LSP就是LSP隧道,它避免了传统的网络层封装隧道。当隧道经由的路由和逐跳与从路由协议取得的路由一致时,这种隧道叫逐跳路由隧道;若不一致,则这种隧道叫显式路由隧道。

图1-4 LSP隧道
在上图中,LSP<R2 R21 R22 R3>就是R2、R3间的一条隧道。
在MPLS中,分组可以携带多个标签,这些标签在分组中以“堆栈”的形式存在,对堆栈的操作按“后进先出”的原则,决定如何转发分组的标签始终是栈顶标签。标签入栈是指向输出分组中加入一个标签,使标签栈的深度加1,同时,分组的当前标签就变为此新加入的标签;标签出栈是指从分组中去掉一个标签,使标签栈的深度减1,同时,分组的当前标签将变为原来处于下一层的标签。
在LSP隧道中会使用多层标签栈。当分组在LSP隧道中传送时,分组的标签就会有多层。在每一隧道的入口和出口处,要进行标签栈的入栈和出栈操作,每发生一次入栈操作,标签就会增加一层。MPLS对标签栈的深度没有限制。
标签栈按照“后进先出”方式组织标签,MPLS从栈顶开始处理标签。
若一个分组的标签栈深度为m,则位于栈底的标签为1级标签,位于栈顶的标签为m级标签。未打标签的分组可看作标签栈为空(即标签栈深度为零)的分组。
在Ingress,将进入网络的分组根据其特征划分成转发等价类FEC。一般根据IP地址前缀或者主机地址来划分FEC。属于相同FEC的分组在MPLS区域中将经过相同的路径(即LSP)。LSR对到来的FEC分组分配一个短而定长的标签,然后从相应的接口转发出去。
在LSP沿途的LSR上,都已建立了输入/输出标签的映射表(该表的元素叫下一跳标签转发条目,简称NHLFE,Next Hop Label Forwarding Entry)。对于接收到的标签分组,LSR只需根据标签从表中找到相应的NHLFE,并用新的标签来替换原来的标签,然后,对标签分组进行转发,这个过程叫输入标签映射ILM(Incoming Label Map)。
MPLS在网络入口处指定特定分组的FEC,后续P路由器只需简单的转发即可,比常规的网络层转发要简单得多,转发速度得以提高。
& 说明:
TTL处理:
标签化分组时必须将原IP分组中的TTL值拷贝到标签中的TTL域。LSR在转发标签化分组时,要对栈顶标签的TTL域作减一操作。标签出栈时,再将栈顶的TTL值拷贝回IP分组或下层标签。
但是,当LSP穿越由ATM-LSR或FR-LSR构成的非TTL LSP段时,域内的LSR无法处理TTL域。这时,需要在进入非TTL LSP段时对TTL进行统一处理,即一次性减去反映该非TTL LSP段长度的值。
在MPLS网络中,当报文的长度超过了路由器出接口所设置的MTU值时,若想使报文顺利的传输,需要将MPLS报文的标签剥去,对IP报文进行分片,然后分别为每一个分片都封装原有的标签后进行传输。
但如果IP报文中设置了不允许分片的标记,则向发送报文的源端回送ICMP Unreach报文,并丢弃源报文。出接口的MTU将被填入ICMP报文中,如果设备上配置了mtu label-including命令,在生成报文的时候,应将报文中的出接口MTU字段减去MPLS标签长度(可能有多层标签)。

图1-5 ICMP Need Frag差错报文回送示意图
如上图所示,在MPLS网络中对于P设备和PE设备收到大于其出接口MTU的报文后回送ICMP差错报文的方式有所不同,下面将分别介绍。
(1) PE设备的处理方式
PE1收到CE1发来的报文,报文目的地址为CE2,且该报文携带不可分片标记。PE1将对此报文进行转发处理,封装MPLS标签,生成MPLS报文后进行转发。
此时如果报文的长度超过了出接口的MTU时,PE1会给CE1回送ICMP Unreach报文,并丢弃源报文。
(2) P设备的处理方式
P1收到一份MPLS报文需要进行标签交换,该报文为CE1发往CE2的报文,携带不可分片标记。
完成标签交换后,如果发现报文的长度超过了出接口的MTU,此时,由于P1设备上可能没有到CE1的路由,P1会将MPLS报文中封装的IP报文取出,根据这个IP报文生成ICMP Unreach报文,然后重新封装标签发往PE2方向。
当PE2收到此ICMP报文时,将此报文转发到CE1的方向。
LDP协议规定标签分发过程中的各种消息以及相关的处理进程。
通过LDP,LSR可以把网络层的路由信息直接映射到数据链路层的交换路径上,进而建立起网络层上的LSP。LSP既可以建立在两个相邻的LSR之间,也可以终止于网络出口节点,从而在网络中所有中间节点上都使用标签交换。
LDP对等体是指相互之间存在LDP会话、使用LDP来交换标签/FEC映射关系的两个LSR。
两个LDP对等体可以同时通过一个LDP会话获得对方的标签映射消息,即,LDP协议是双向的。
LDP会话用于在LSR之间交换标签映射、释放等消息。LDP会话可以分为两种类型:
l 本地LDP会话(Local LDP Session):建立会话的两个LSR之间是直连的;
l 远端LDP会话(Remote LDP Session):建立会话的两个LSR之间是非直连的;
LDP协议主要使用四种消息:
l 发现(Discovery)消息:用于通告和维护网络中LSR的存在;
l 会话(Session)消息:用于建立、维护和终止LDP对等体之间的会话连接;
l 通告(Advertisement)消息:用于创建、改变和删除标记—FEC绑定;
l 通知(Notification)消息:用于提供建议性的消息和差错通知。
LDP对等体之间分配标签的范围称为标签空间。可以为LSR的每个接口指定一个标签空间,也可以整个LSR使用一个标签空间。
LDP标识符用于标识特定LSR的标签空间范围,是一个六字节的数值,格式如下:
<IP地址>:<标签空间序号>
其中,四字节的IP地址是LSR的IP地址,标签空间序号占两字节。
下图为LDP标签分发示意。

在一条LSP上,沿数据传送的方向,相邻的LSR分别称为上游LSR和下游LSR。例如,在上图中的LSP1,LSR B为LSR C的上游LSR。
标签的分发过程有下游按需标签分发DoD和下游自主标签分发DU两种模式,它们的主要区别在于标签映射的发布是上游请求还是下游主动发布。下面分别描述这两种模式的标签分发过程:
(1) DoD(downstream-on-demand)模式
上游LSR向下游LSR发送标签请求消息(包含FEC的描述信息),下游LSR为此FEC分配标签,并将绑定的标签通过标签映射消息反馈给上游LSR。
下游LSR何时反馈标签映射消息,取决于该LSR采用独立标签控制方式还是有序标签控制方式。采用有序标签控制方式时,只有收到它的下游返回的标签映射消息后,才向其上游发送标签映射消息;采用独立标签控制方式时,不管有没有收到它的下游返回的标签映射消息,都立即向其上游发送标签映射消息。
上游LSR一般是根据其路由表中的信息来选择下游LSR。在图1-4中,LSP1沿途的LSR都采用有序标签控制方式,LSP2上的LSR F则采用独立标签控制方式。
(2) DU(downstream unsolicited)模式
下游LSR在LDP会话建立成功后,主动向其上游LSR发布标签映射消息。上游LSR保存标签映射信息,并根据路由表信息来处理收到的标签映射信息。
按照先后顺序,LDP的操作主要包括以下四个阶段:
l 发现阶段
l 会话建立与维护
l LSP建立与维护
l 会话撤销
在这一阶段,希望建立会话的LSR向相邻LSR周期性地发送Hello消息,通知相邻节点本地对等关系。通过这一过程,LSR可以自动发现它的LDP对等体,而无需进行手工配置。
LDP有两种发现机制:
l 基本发现机制
基本发现机制用于发现本地的LDP对等体,即通过链路层直接相连的LSR,建立本地LDP会话。
这种方式下,LSR向特定端口周期性发送LDP链路hello消息,并携带特定端口所属标签空间的LDP标识符以及其它相关信息。如果LSR在特定端口收到LDP链路hello消息,则表明可能存在一个可达的对等LSR。通过hello消息携带的信息,LSR还可获知在特定端口使用的标签空间。
l 扩展发现机制
扩展发现机制用于发现远端的LDP对等体,即不通过链路层直接相连的LSR,建立远端LDP会话。
这种方式下,LSR向某一特定IP地址周期地发送LDP目标hello消息(targeted hello)。
LDP目标hello消息以UDP分组的形式发往特定地址的知名LDP发现端口,LSR发送的LDP目标消息带有LSR希望使用的标签空间和其它可选信息。
对等关系建立之,LSR开始建立会话。这一过程又可分为两步:
l 首先建立传输层连接,即,在LSR之间建立TCP连接;
l 随后对LSR之间的会话进行初始化,协商会话中涉及的各种参数,如LDP版本、标签分发方式、定时器值、标签空间等。
LSP的建立过程实际就是将FEC和标签进行绑定,并将这种绑定通告LSP上相邻LSR。这个过程是通过LDP实现的,主要步骤如下:
(1) 当网络的路由改变时,如果有一个边缘节点发现自己的路由表中出现了新的目的地地址,并且这一地址不属于任何现有的FEC,则该边缘节点需要为这一目的地址建立一个新的FEC。边缘LSR决定该FEC将要使用的路由,向其下游LSR发起标签请求消息,并指明是要为哪个FEC分配标签;
(2) 收到标签请求消息的下游LSR记录这一请求消息,根据本地的路由表找出对应该FEC的下一跳,继续向下游LSR发出标签请求消息;
(3) 当标签请求消息到达目的节点或MPLS网络的出口节点时,如果这些节点尚有可供分配的标签,并且判定上述标签请求消息合法,则该节点为FEC分配标签,并向上游发出标签映射消息,标签映射消息中包含分配的标签等信息;
(4) 收到标签映射消息的LSR检查本地存储的标签请求消息状态。对于某一FEC的标签映射消息,如果数据库中记录了相应的标签请求消息,LSR将为该FEC进行标签分配,并在其标签转发表中增加相应的条目,然后向上游LSR发送标签映射消息;
(5) 当入口LSR收到标签映射消息时,它也需要在标签转发表中增加相应的条目。这时,就完成了LSP的建立,接下来就可以对该FEC对应的数据分组进行标签转发了。
LDP通过检测会话连接上传输的LDP PDU来判断会话的完整性。
LSR为每个会话建立一个“生存状态”定时器,每收到一个LDP PDU时刷新该定时器。如果在收到新的LDP PDU之前定时器超时,LSR认为会话中断,对等关系失效。LSR将关闭相应的传输层连接,终止会话进程。
在MPLS域中建立LSP也要防止产生环路,LDP环路检测机制可以检测LSP环路的出现,并避免标签请求等消息发生环路。
LDP环路检测有两种方式:
在传递标签绑定的消息中包含跳数信息,每经过一跳该值就加一。当该值超过规定的最大值时认为出现环路,终止LSP的建立过程。
在传递标签绑定的消息中记录路径信息,每经过一跳,相应的LSR就检查自己的ID是否在此记录中。如果没有,将自己的ID添加到该记录中;如果有,说明出现了环路,终止LSP的建立过程。
MPLS还支持基于约束路由的LDP机制(CR-LDP,Constrain-based Routing LDP)。所谓CR-LDP,就是入口节点在发起建立LSP时,在标签请求消息中对LSP路由附加了一定的约束信息。这些约束信息可以是对沿途LSR的精确指定,即逐一指定LSP上的LSR,此时叫严格的显式路由;也可以是对选择下游LSR的模糊限制,即只指定LSP上的个别LSR,此时叫松散的显式路由。
LDP通过逐跳方式建立LSP时,要利用沿途各LSR路由转发表中的信息来确定下一跳,而路由转发表中的信息一般是通过IGP、BGP等路由协议收集的。但是,LDP并不直接和各种路由协议有关联,只是间接使用路由信息。
另一方面,虽然LDP是专门用来实现标签分发的协议,但LDP并不是唯一的标签分发协议。对BGP、RSVP等已有协议进行扩展,也可以支持MPLS标签的分发。MPLS的一些应用也需要对某些路由协议进行扩展。例如,基于MPLS的VPN应用就需要对BGP协议进行扩展,以便BGP协议能传播VPN的路由信息;基于MPLS的流量工程TE(Traffic Engineering)需要对OSPF或IS-IS协议进行扩展,以便携带链路状态信息。
资源预留协议RSVP(Resource Reservation Protocol)经扩展后可以支持MPLS标签的分发,同时,在传送标签绑定消息时,还能携带资源预留的信息。通过这种方法建立的LSP可以具有资源预留功能,即沿途的LSR可以为该LSP分配一定的资源,使在此LSP上传送的业务得到保证。
RSVP协议的扩展主要是在其Path消息和Resv消息中增加新的对象,这些新对象除了可以携带标签绑定信息外,还可以携带对沿途LSR寻径时的限制信息,从而支持LSP约束路由的功能。扩展的RSVP协议还支持快速重路由,即在一定条件下LSP需要改变时,可以在不中断用户业务的同时,将原来的业务流重新路由到新建立的LSP上。
传统的VPN一般是通过GRE、L2TP、PPTP等隧道协议来实现私有网络间数据流在公网上的传送。LSP本身就是公网上的隧道,用MPLS来实现VPN有天然的优势。基于MPLS的VPN就是通过LSP将私有网络在地域上的不同分支联结起来,形成一个统一的网络。基于MPLS的VPN还支持不同VPN间的互通。

图1-7 基于MPLS的VPN
图1-7给出了基于MPLS的VPN的基本结构。CE(Customer Edge)是用户边缘设备,可以是路由器,也可以是交换机,甚至是一台主机;PE(Provider Edge)是服务商边缘路由器,位于骨干网络;PE负责对VPN用户进行管理、建立各PE间LSP连接、同一VPN用户各分支间路由分派。
PE间的私有网络路由分派通常是用扩展的BGP协议实现的。基于MPLS的VPN支持不同VPN间IP地址复用和不同VPN间互通,和传统的路由相比,VPN路由中需要增加分支和VPN的标识信息,这就需要对BGP协议进行扩展才能携带VPN的路由信息。
为了能够在IP网络上支持语音,视频等实时业务,需要有QoS的支持,以便保证重要的、敏感或者实时性较强的数据流在网络中得到优先处理。H3C设备支持基于MPLS的Diff-serv特性,在保证网络高效利用率的同时,又能根据不同数据流的优先级实现差别服务,从而为语音,视频数据流提供有带宽保证的、低延时、低丢包率的服务。由于目前全网实施流量工程的难度比较大,因此,在实际的组网方案中,往往倾向于使用差分服务模型来实施QoS。
Diff-Serv的基本机制是:在网络边缘,根据业务的服务质量要求,将该业务映射到一定的业务类别中,利用IP分组中的DS字段(由TOS域而来)唯一的标记该类业务,然后,骨干网络中的各节点根据该字段对各种业务采取预先设定的服务策略,保证相应的服务质量。Diff-Serv的这种对服务质量的分类和标签机制和MPLS的标签分配十分相似,事实上,基于MPLS的Diff-Serv就是通过将DS的分配融入MPLS的标签分配过程来实现的。
Diff-Serv对不同的服务类别规定了一致的处理方法,包括队列选择、排队、丢弃等操作,这些处理组合就叫PHB(Per Hop Behavior)。同时,属于同一PHB的分组又可以有不同的丢弃优先级。PHB和丢弃优先级信息通过为分组分配不同的DS编码来表示,这些DS编码又称DSCP(Diff-Serv Code Point)。关于Diff-Serv的详细介绍,请参见本手册的QoS配置部分。
为了支持基于Diff-Serv模型的端到端的QoS服务,提供如下几种技术手段:
l 基于流量的IP优先级分类
IP 优先级分类在网络边缘进行,利用IPv4包头的Type-of-Service 3个比特对每一个IP包依据其地址进行优先级分类。在核心利用不同的队列技术对不同等级的流量进行不同的处理,使得不同的服务级别得到体现。为实现语音、图象、数据流的差分服务,对不同的业务流在进行标签交换时,即PE在给报文加Label时,会把IP报文携带的TOS值映射到标签的CoS域,这样,原来由IP携带的类型信息,现在由标签携带。在PE路由器之间,根据标签的CoS域,进行有差别的调度(PQ、CQ、WFQ、CBQ等)。
l 用TP实现承诺带宽及限制带宽的功能
在PE上与CE相连的链路上配置TP(Traffic Policing)可以实现该功能。同时,TP还提供了承诺的带宽和限制带宽的功能。
l 用WRED进行拥塞避免
WRED在网络的瓶颈处监视并缓解网络的拥塞。一般在接入层出现拥塞的概率比较大。WRED监视网络的负载,当拥塞刚开始出现时,它就开始有选择地丢弃一些包以降低流量。WRED丢包的策略为:低优先级的流先丢,以保证高优先级的流可以顺畅通过。在可能发生拥塞的端口运行WRED,是避免拥塞的较好选择。
在具体实现中,为了达到最好的效率,需要对任务进行分工。因为QoS是一个需要消耗很多处理器资源的应用,所以,这一任务应分配在边缘和核心路由器上运行,以减少对单独路由器的压力。
综上所述,实现基于CoS的差分服务结构需要4个步骤:
l MPLS边缘路由器上实现入口的带宽限制和完成入口流量的分类。
l 边缘设备也需要承担带宽管理的工作,采用TP。
l MPLS核心路由器完成CoS的管理工作,进行有差别的服务质量保证。
l 出口设备,像入口设备一样,完成带宽限制工作。入口、出口设备对带宽的限制保护了网络免于拥塞,使得网络具有很高的可扩展性。
详细内容请参见QoS部分。
MPLS提供了比较完全的MPLS基本能力:
l 基本MPLS转发
Comware支持基本MPLS转发功能。除标签报文的转发之外,还提供了TTL处理等功能。
l LDP会话建立和LSP路径维护
支持LDP会话;支持最大跳数和路径向量两种方式的环路检测;提供静态LSP的建立、删除功能。
支持松散和严格的显式路由;可以人工指定LSP路径。
Comware除提供MPLS基本功能外,还提供了性能监视和故障检测工具。
要使一台路由器具有基本的MPLS功能,一般的配置过程如下:
(1) 配置LSR的标识ID
(2) 使能MPLS
(3) 使能LDP协议
(4) 进入接口模式,使能接口的LDP功能。
经过上述的基本配置,路由器即可提供MPLS转发和LDP信令功能。
如果要修改一些缺省参数,或者实现一些特殊的MPLS功能,如手工建立LSP、建立显式路由等,则可以根据配置列表提供的方法来配置。有些复杂的功能,可能需要多个配置的组合才能实现。
目前支持的的串口协议包括:ppp、fr、hdlc。其他链路类型,如atm,以太网,vlan均支持mpls。
MPLS基本配置中必须的配置项包括:
l 配置MPLS LSR ID
l 使能MPLS,并进入MPLS视图
MPLS基本配置中可选的配置项包括:
l 配置拓扑驱动建立LSP的建立策略
l 配置静态LSP
l 配置上报统计信息的间隔时间
在配置其他MPLS命令之前,必须首先为LSR配置ID。LSR ID一般采用IP地址的格式,并且要保证域内唯一。
请在系统视图下进行下列配置。
|
操作 |
命令 |
|
指定LSR的LSR ID |
mpls lsr-id ip-address |
|
删除LSR的LSR ID |
undo mpls lsr-id |
缺省未指定LSR ID。
在系统视图下,mpls命令用来进入MPLS视图。在进入MPLS视图后,可以进行MPLS相关配置。
|
操作 |
命令 |
|
进入MPLS视图 |
mpls |
|
在全局下关闭MPLS功能 |
undo mpls |
然后,在接口视图下,mpls命令用来使能接口的MPLS能力。
在不支持广播报文的链路层协议,如X.25、帧中继、ATM上,必须要使用命令protocol ip { ip-address [ ip-mask ] | default | inarp [ minutes ] } [ broadcast ] 配置broadcast属性,以支持广播和组播报文的传递。
配置拓扑驱动建立LSP的建立策略,指定过滤策略为all和ip-prefix策略。
请在MPLS视图下进行下列配置。
表2-3 配置拓扑驱动建立LSP的建立策略
|
操作 |
命令 |
|
配置拓扑驱动建立LSP的建立策略 |
lsp-trigger { all | ip-prefix ip-prefix } |
|
取消参数所指定的过滤条件,任何路由都不允许触发建立LSP |
undo lsp-trigger { all | ip-prefix [ ip-prefix ] } |
可以手工设置某LSR为一条LSP上的一个节点,并可以对该LSP上承载的数据流进行限制。根据在MPLS域中的不同位置,LSR有三种节点情况:入节点(Ingress)、中间节点(Transit)、出节点(Egress)。值得注意的是,必须对指定LSP沿途的LSR均作了相应配置,这条LSP才能正常工作。
undo static-lsp用于删除一个用手工方式建立的LSP。
请在MPLS视图下进行下列配置。
表2-4 设置本LSR为指定LSP的节点
|
操作 |
命令 |
|
设置本LSR为指定LSP的入口节点 |
static-lsp ingress lsp-name { destination dest-addr { addr-mask | mask-length } | l2vpn } { nexthop next-hop-addr | outgoing-interface interfac-type interfac-num } out-label out-label-value |
|
undo static-lsp ingress lsp-name [ l2vpn ] |
|
|
设置本LSR为指定LSP的中间节点 |
static-lsp transit lsp-name [ l2vpn ] incoming-interface interface-type interface-num } in-label in-label-value { nexthop next-hop-addr | outgoing-interface interface-type interface-num } out-label out-label-value |
|
undo static-lsp transit lsp-name [ l2vpn ] |
|
|
设置本LSR为指定LSP的出口节点 |
static-lsp egress lsp-name [ l2vpn ] incoming-interface interfac-type interfac-num in-label in-label-value |
|
undo static-lsp egress lsp-name [ l2vpn ] |
MPLS标签中包含一个8位的TTL域,其含义与IP头中的TTL域相同。TTL除了用于防止产生路由环路外,也用于实现tracert功能。
根据RFC3031中的描述,LSR节点在对分组打标签时,需要将原IP分组或上层标签中的TTL值拷贝到新增加标签的TTL域。LSR在转发标签分组时,对栈顶标签的TTL域作减一操作。标签出栈时,再将栈顶的TTL值拷贝回IP分组或下层标签。
如果LSP穿越由ATM-LSR或FR-LSR构成的非TTL LSP段时,由于域内的LSR无法处理TTL域,需要在进入非TTL LSP段时,对TTL进行统一处理。即,一次性减去反映该非TTL LSP段长度的值。
在MPLS VPN应用中,出于网络安全的考虑,MPLS骨干网络的结构可能需要隐藏,这种情况下,对于私网报文,Ingress节点上就不能使用TTL的复制功能。
请在MPLS视图下进行下列配置。
表2-5 配置MPLS的IP TTL复制功能
|
操作 |
命令 |
|
对报文使能MPLS的IP TTL复制功能 |
ttl propagate { public | vpn } |
|
对报文禁止MPLS的IP TTL复制功能 |
undo ttl propagate { public | vpn } |
缺省情况下,对公网报文使能MPLS的IP TTL复制功能,对VPN报文则不使能此功能。
在Ingress节点使能IP TTL复制功能后,报文在LSP中经过的每一跳都体现为IP TTL逐跳递减,tracert的结果将反映报文实际经过的路径;
如果不在Ingress节点使能TTL复制功能,则报文在LSP中经过的跳数不会导致IP TTL递减,tracert的结果不包括MPLS骨干网络中每一跳,就好像Ingress路由器与Egress路由器是直连的。
关于MPLS的IP TTL复制功能,需要注意以下几点:
l 在MPLS域内部,MPLS报文多层标签之间的TTL值总是互相复制。
l MPLS的IP TTL复制功能对本地发送报文没有影响,本地发送报文都将进行TTL复制,从而保证本地管理员能够使用tracert检测网络。
l 在Egress节点使能IP TTL复制功能后,系统将MPLS标签的TTL域值复制到IP头的TTL域,作为IP头的TTL值,并执行减一操作。
l 如果在Ingress路由器上配置ttl propagate vpn命令使能对VPN报文的IP TTL复制功能,则必须在Egress路由器上也使能对VPN报文的IP TTL复制功能。反之,如果不使能则都不使能。否则,traceroute的结果不能真实的反映网络的情况。建议在所有相关PE上都使能此功能,以保证从不同的PE执行tracert得到的结果一致。
l 所有的P路由器都不需要配置ttl propagate。
在MPLS VPN网络中,P路由器无法对MPLS承载的IP报文进行路由。当MPLS报文的TTL超时时,ICMP响应报文将按照LSP继续传送,到达LSP终点路由器后,再根据IP路由转发ICMP响应报文。这种处理方式增加了网络流量和报文转发的不确定性。
对于仅有一层标签的MPLS报文,可以配置当TTL超时时,直接使用IP路由返回ICMP响应报文。
请在MPLS视图下进行下列配置。
表2-6 配置MPLS使用IP路由返回ICMP响应报文
|
操作 |
命令 |
|
使用IP路由返回ICMP响应报文 |
ttl expiration pop |
|
使用LSP返回ICMP响应报文 |
undo ttl expiration pop |
缺省情况下,对于一层标签的MPLS TTL超时报文,将根据本地IP路由返回ICMP报文。
对于ASBR路由器以及HoVPN组网应用中的SPE(包括嵌套应用中的SPE),其承载VPN报文的MPLS报文也可能只有一层标签,这种情况下,如果希望对VPN私网进行tracert操作以查看公网路由器的转发路径,需要进行两部分配置:
(1) 在所有相关PE上配置ttl propagate vpn命令;
(2) 在ASBR和SPE上配置undo ttl expiration pop命令,以保证ICMP响应报文按照原LSP转发。
在进行MPLS转发时,若系统计算MTU时把MPLS标签长度计算在内,则链路层承载的报文长度就会超过接口的最大MTU(缺省为1500字节),而报文同时不允许分片,则报文将被丢弃。
通过mtu label-including命令可以设置在MTU计算时是否将标签长度计算在内。
请在MPLS视图下进行下列配置。
表2-7 配置出接口MTU计算是否计算MPLS标签长度
|
操作 |
命令 |
|
配置出接口进行MTU计算时包括MPLS标签长度 |
mtu label-including |
|
配置出接口进行MTU计算时不包括MPLS标签长度 |
undo mtu label-including |
缺省情况下,出接口在进行MTU计算时不计算MPLS标签长度。
LDP协议配置中必须的配置包括:
l 使能LDP协议
l 在接口上使能LDP协议
LDP协议配置中可选的配置包括:
l 配置LDP扩展发现模式
l 在出口节点配置倒数第二跳的标签
l 配置会话参数
l 配置环路检测
l 配置LDP的验证方式
要进行LDP的配置,首先要使能LDP协议。
请在系统视图下进行下列配置。
表2-8 使能/去使能LDP协议
|
操作 |
命令 |
|
使能LDP协议 |
mpls ldp |
|
禁止LDP协议 |
undo mpls ldp |
缺省情况下LDP协议未激活。
要使接口具有LDP功能,必须在该接口模式下,对接口进行LDP使能。使能后的接口即开始建立LDP会话,在拓扑驱动方式时,开始建立LSP。
禁止端口LDP功能,会导致接口下的所有LDP会话中断,基于这些会话的所有LSP也将被删除,建议用户谨慎使用此命令。
请在接口视图下进行下列配置。
|
操作 |
命令 |
|
允许接口LDP功能 |
mpls ldp enable |
|
禁止接口LDP功能 |
mpls ldp disable |
缺省情况下禁止接口的LDP功能。
配置remote-peer,主要用于扩展发现模式,以便与链路不直接相连的对等体建立会话。
请在系统视图下进行下列配置。
|
操作 |
命令 |
|
进入扩展发现模式 |
mpls ldp remote-peer index |
|
删除相应的remote-peer |
undo mpls ldp remote-peer index |
无缺省的remote-peer。
可以指定remote-peer的任何一个使能了LDP的接口地址或发布了路由的LSR的loopback地址,作为remote-peer的地址。
请在remote-peer视图下进行下列配置。
|
操作 |
命令 |
|
配置remote-peer的地址 |
remote-ip ip-address |
无缺省的remote-peer。
接口上的LDP实体周期性的发出Hello报文,来发现LDP对等体,已经建立的LDP会话,也必须靠定期的消息来维持其存在(如果没有LDP消息报文,则须发送Keepalive报文)。
& 说明:
修改session-holdtime参数,不会改变原有会话的session-holdtime值,而是作用于之后新建立的会话。这里的会话指的是链路会话,而非remote会话。
请在接口视图下进行下列配置。
|
操作 |
命令 |
|
配置会话保持时间 |
mpls ldp timer { session-hold session-holdtime | hello hello-holdtime } |
|
恢复会话保持时间为缺省值 |
undo mpls ldp timer { session-hold | hello } |
session-holdtime的缺省值为60秒,hello-holdtime的缺省值为15秒。
& 说明:
对于ATM,接口相关配置命令只支持在point-to-point模式的ATM子接口下进行配置。
在不支持广播报文的链路层协议,如帧中继、ATM上,必须要配置broadcast属性,以支持广播和组播报文的传递。
这里的传输地址就是hello消息的传输地址TLV中携带的地址。通常情况下,传输地址为本LSR的MPLS LSR ID,但是,有些应用需要灵活的配置。
请在接口视图下进行下列配置。
表2-13 配置hello传输地址
|
操作 |
命令 |
|
配置hello传输地址 |
mpls ldp transport-ip { interface | ip-address } |
|
恢复hello传输地址为默认值 |
undo mpls ldp transport-ip |
缺省传输地址为本LSR的MPLS LSR ID。
当两个LSR邻居之间有多条链路直接相连并且都使能mpls ldp时,要求使能mpls ldp的多个链路必须配置相同的传输地址,建议采用缺省的lsr-id作为传输地址,否则将可能导致ldp会话无法稳定建立。
用于控制在LDP信令过程中是否使用环路检测功能,环路检测有最大跳数和路径向量两种方式。
最大跳数方式是在传递标签绑定的消息中包含跳数信息,每经过一跳,该值就加一,当该值超过规定的最大值时,就认为出现了环路,从而终止LSP的建立过程。
路径向量方式是在传递标签绑定的消息中记录路径信息,每经过一跳,相应的路由器就检查自己的ID是否在此记录中,如果没有,就将自己的ID添加到该记录中,若有,就说明出现了环路,终止LSP的建立过程。
请在系统视图下进行下列配置。
|
操作 |
命令 |
|
允许进行环路检测 |
mpls ldp loop-detect |
|
禁止进行环路检测 |
undo mpls ldp loop-detect |
缺省为不允许环路检测。
当环路检测采用最大跳数方式时,可以规定跳数的最大值,超过该最大值即认为出现了环路,LSP建立失败。
请在系统视图下进行下列配置。
|
操作 |
命令 |
|
设置环路检测的最大跳数 |
mpls ldp hops-count hop-number |
|
恢复最大跳数的缺省值 |
undo mpls ldp hops-count |
缺省的最大值为32。
当环路检测采用路径向量方式时,也需要规定LSP路径的最大值。这样,在以下条件之一时,即认为出现了环路,LSP建立失败:
(1) 路径向量记录表中已有本LSR的记录
(2) 路径的跳数超过这里设定的最大值
请在系统视图下进行下列配置。
|
操作 |
命令 |
|
设置路径向量的最大跳数 |
mpls ldp path-vectors pv-number |
|
恢复路径向量最大跳数的缺省值 |
undo mpls ldp path-vectors |
路径向量最大跳数的缺省值为32。
请在接口视图或remote-peer视图下进行下列配置。
表2-17 配置LDP验证方式
|
操作 |
命令 |
|
配置LDP验证方式 |
mpls ldp password { cipher | simple } password |
|
取消LDP的验证。 |
undo mpls ldp password |
在出口节点处,指明倒数第二跳分发怎样的标签。
请在MPLS视图下进行下列配置。
|
操作 |
命令 |
|
出口节点处指明倒数第二跳分发怎样的标签 |
mpls label advertise { implicit-null | explicit-null | non-null } |
|
恢复缺省值 |
undo mpls label advertise { implicit-null | explicit-null | non-null } |
explicit-null-label:在出口处指定向倒数第二跳分配显式空标签。
implicit-null-label:在出口处指定向倒数第二跳分配隐式空标签。
non-null-label:在出口处指定向倒数第二跳分配普通标签。
如果倒数第二跳分配了显式空标签,则显示空标签只能位于标签栈底。
缺省为隐式标签。
MPLS提供了丰富的显示与调试命令,可以监控LDP会话状态、隧道配置情况、所有LSP及其状态等,是调试、诊断的有力工具。
在完成上述配置后,在所有视图下,执行display命令,可以显示全部或单个静态LSP的运行情况,通过查看显示信息,验证配置的效果。
|
操作 |
命令 |
|
显示静态LSP的信息 |
display mpls static-lsp [ verbose] [ include text ] |
在所有视图下执行display命令,在用户视图下执行reset命令,可以显示/清除全部或单个LSP的统计信息。
表2-20 显示/清除MPLS统计数据
|
操作 |
命令 |
|
显示MPLS统计数据 |
display mpls statistics { interface { all | interface-type interface-num } } | { lsp [ lsp-index | all | name lsp-name ] } } |
|
清除MPLS统计数据 |
reset mpls statistics { interface { all | interface-type interface-num } | lsp {lsp-index | all | name lsp-name } } |
& 说明:
display mpls statistics命令显示的紧围公网LSP的统计信息,对于仅携带私网标签的报文,不在该命令的统计范围之内。
在任意视图下执行display命令,在用户视图下执行reset命令,可以显示/清除MPLS快速转发信息。
表2-21 显示/清除MPLS快速转发信息
|
操作 |
命令 |
|
显示MPLS快速转发信息 |
display mpls fast-forwarding cache |
|
清除MPLS快速转发信息 |
reset mpls fast-forwarding cache |
在完成上述配置后,在所有视图下执行display命令,可以显示所有使能了MPLS能力的接口的相关信息,通过查看显示信息,验证配置的效果。
表2-22 显示使能了MPLS的接口信息
|
操作 |
命令 |
|
显示使能MPLS的接口信息 |
display mpls interface |
在所有视图下执行下列命令,可以显示MPLS LSP的相关信息。
表2-23 显示MPLS LSP的相关信息
|
操作 |
命令 |
|
显示LSP的信息 |
display mpls lsp [ verbose] [ include text ] |
在用户视图下,执行debugging命令,可对所有使能了MPLS能力的接口的相关信息进行调试。
打开调试开关对路由器性能有一定影响,建议慎用此命令。该命令的undo形式关闭相应的调试开关。
表2-24 打开MPLS的调试信息开关
|
操作 |
命令 |
|
打开MPLS的各种调试信息的开关 |
debugging mpls lspm { all | packet | event | process | agent | interface | policy | vpn } |
|
关闭MPLS的各种调试信息的开关 |
undo debugging mpls lspm { all | packet | event | process | agent | interface | policy | vpn } |
|
复位接口上某一个指定的LDP会话 |
mpls ldp reset-session peer-address |
使能MPLS的LSP/LDP建立过程的TRAP功能。
请在系统视图下进行操作。
表2-25 使能MPLS的TRAP功能
|
操作 |
命令 |
|
使能MPLS的LDP TRAP功能 |
snmp-agent trap enable ldp |
|
去使能MPLS的LDP TRAP功能 |
undo snmp-agent trap enable ldp |
|
使能MPLS的LSP TRAP功能 |
snmp-agent trap enable lsp |
|
去使能MPLS的LSP TRAP功能 |
undo snmp-agent trap enable lsp |
Comware提供了丰富的MPLS监控操作命令,可以监控LSR状态、LDP会话状态、接口状态、对等体状态等,是调试、诊断的有力工具。
在完成上述配置后,在所有视图下,执行display命令,可以显示配置后LDP的运行情况,通过查看显示信息,验证配置的效果。
表2-26 LDP监控命令
|
操作 |
命令 |
|
显示LD协议信息 |
display mpls ldp |
|
显示LDP的buffer信息。 |
display mpls ldp buffer-info |
|
显示LDP使能的接口信息 |
display mpls ldp interface |
|
显示LDP保存的标签信息 |
display mpls ldp lsp |
|
显示LDP会话的所有对等体信息 |
display mpls ldp peer |
|
显示LDP会话的远端对等体信息 |
display mpls ldp remote |
|
显示LDP会话状态和参数 |
display mpls ldp session |
在用户视图下,执行debugging命令,可对LDP的各种消息进行调试。
|
操作 |
命令 |
|
打开MPLS诊断开关 |
debugging mpls ldp { { all | main | advertisement | session | pdu | notification } [ interface interface-type interface-number ] | remote } |
|
关闭MPLS诊断开关 |
undo debugging mpls ldp {{ all | main | advertisement | session | pdu | notification | remote } [ interface interface-type interface-number ] | remote } |
all:显示所有和LDP相关的调试信息。
main:显示LDP主任务的调试信息。
advertisement:显示处理LDP通告消息过程中的调试信息。
session:显示处理LDP会话过程中的调试信息。
pdu:显示处理PDU数据包过程中的调试信息。
notification:显示处理通知消息过程中的调试信息。
remote:显示所有remote peer的调试信息。
图2-1给出一个由四台Router路由器组成的网络,其中RouterB和RouterC间通过SDH连接,RouterB和RouterA、RouterD间通过以太网连接。
四台路由器均支持MPLS,任意路由器之间都可以建立LSP,运行的路由协议为OSPF。LDP利用OSPF的路由信息建立LSP。

(1) RouterA上的配置
# 配置RouterA的LSR ID,并使能MPLS及LDP
[H3C] interface loopback 0
[H3C-LoopBack0] ip address 1.1.1.1 32
[H3C-LoopBack0] quit
[H3C] mpls lsr-id 1.1.1.1
[H3C] mpls
[H3C-mpls] quit
[H3C] mpls ldp
# 配置以太网接口的IP地址,并对接口使能MPLS及LDP
[H3C] interface ethernet 8/0/0
[H3C-Ethernet8/0/0] ip address 168.1.1.1 255.255.0.0
[H3C-Ethernet8/0/0] MPLS
[H3C-Ethernet8/0/0] mpls ldp enable
# 在RouterA与RouterB相连的接口上运行OSPF
[H3C] router id 1.1.1.1
[H3C] ospf
[H3C-ospf-1] area 0
[H3C-ospf-1-area-0.0.0.0] network 168.1.0.0 0.0.255.255
[H3C-ospf-1-area-0.0.0.0] network 1.1.1.1 0.0.0.0
(2) Router B上的配置
# 配置Router B的LSR ID,并使能MPLS及LDP
[H3C] interface loopback 0
[H3C-LoopBack0] ip address 2.2.2.2 32
[H3C-LoopBack0] quit
[H3C] mpls lsr-id 2.2.2.2
[H3C] mpls
[H3C-mpls] quit
[H3C] mpls ldp
# 配置以太网接口1/0/0的IP地址,并对接口使能MPLS及LDP
[H3C] interface ethernet 1/0/0
[H3C-Ethernet1/0/0] ip address 168.1.1.2 255.255.0.0
[H3C-Ethernet1/0/0] mpls
[H3C-Ethernet1/0/0] mpls ldp enable
# 置以太网接口1/0/1,并对接口使能MPLS及LDP
[H3C] interface ethernet 1/0/1
[H3C-Ethernet1/0/1] ip address 172.17.1.1 255.255.0.0
[H3C-Ethernet1/0/1] mpls
[H3C-Ethernet1/0/1] mpls ldp enable
# 置SERIAL接口2/0/1,并对接口使能MPLS及LDP
[H3C] interface serial 2/0/1
[H3C-Serial2/0/1] ip address 100.10.1.2 255.255.255.0
[H3C-Serial2/0/1] mpls
[H3C-Serial2/0/1] mpls ldp enable
[H3C-Serial2/0/1] quit
# 分别在RouterB与RouterA、RouterD、RouterC相连的接口上运行OSPF
[H3C] router id 2.2.2.2
[H3C] ospf
[H3C-ospf-1] area 0
[H3C-ospf-1-area-0.0.0.0] network 168.1.0.0 0.0.255.255
[H3C-ospf-1-area-0.0.0.0] network 172.17.0.0 0.0.255.255
[H3C-ospf-1-area-0.0.0.0] network 100.10.1.0 0.0.0.255
[H3C-ospf-1-area-0.0.0.0] network 2.2.2.2 0.0.0.0
[H3C-ospf-1-area-0.0.0.0] quit
(3) Router C上的配置
# 配置loopback接口。
[H3C] interface loopback 0
[H3C-LoopBack0] ip address 3.3.3.3 32
[H3C-LoopBack0] quit
# 配置OSPF。
[H3C] ospf
[H3C-ospf-1] area 0
[H3C-ospf-1-area-0.0.0.0] network 172.16.1.2 0.0.0.0
[H3C-ospf-1-area-0.0.0.0] network 3.3.3.3 0.0.0.0
# 配置Router C的LSR ID,并使能MPLS及LDP
[H3C] mpls lsr-id 3.3.3.3
[H3C] mpls
[H3C-mpls] quit
[H3C] mpls ldp
# 配置SERIAL接口1/0/0的IP地址,并对接口使能MPLS及LDP
[H3C] interface serial 1/0/0
[H3C-Serial1/0/0] ip address 100.10.1.1 255.255.255.0
[H3C-Serial1/0/0] mpls
[H3C-Serial1/0/0] mpls ldp enable
[H3C-Serial1/0/0] quit
# 在RouterC与RouterB相连的接口上运行OSPF
[H3C] router id 3.3.3.3
[H3C] ospf
[H3C-ospf-1] area 0
[H3C-ospf-1-area-0.0.0.0] network 100.10.1.0 0.0.0.255
(4) Router D上的配置
# 配置RouterD的LSR ID,并使能MPLS及LDP
[H3C] interface loopback 0
[H3C-LoopBack0] ip address 4.4.4.4 32
[H3C-LoopBack0] quit
[H3C] mpls lsr-id 4.4.4.4
[H3C] mpls
[H3C-mpls] quit
[H3C] mpls ldp
# 配置以太网接口2/0/1的IP地址,并对接口使能MPLS及LDP
[H3C] interface ethernet 2/0/1
[H3C-Ethernet2/0/1] ip address 172.17.1.2 255.255.0.0
[H3C-Ethernet2/0/1] mpls
[H3C-Ethernet2/0/1] mpls ldp enable
# 在RouterD与RouterB相连的接口上运行OSPF
[H3C] router id 4.4.4.4
[H3C] ospf
[H3C-ospf-1] area 0
[H3C-ospf-1-area-0.0.0.0] network 172.17.0.0 0.0.255.255
[H3C-ospf-1-area-0.0.0.0] network 4.4.4.4 0.0.0.0
故障现象:接口使能LDP协议后,不能与对端建立会话。
故障排除:
原因之一:环路检测配置不同。
解决方法:检查本地和对端的配置,是否一端配了环路检测,而另一端没有配,如果是这样,就会导致会话协商不通过。
原因之二:如果本机得不到对方的LSR ID的路由,就不能建立TCP连接,会话就不可能建立。
解决方法:建立会话时默认的传输地址是MPLS LSR ID,本机必须将LSR ID的路由(一般为loopback地址)发布出去,同时,要学到对端的LSR ID的路由。
传统VPN使用第二层隧道协议(L2TP、L2F和PPTP等)或者第三层隧道技术(IPSec、GRE等),获得了很大成功,被广泛应用。但是,随着VPN范围的扩大,传统VPN在可扩展性和可管理性等方面的缺陷越来越突出。
通过MPLS(Multiprotocol Label Switching,多协议标签交换)技术可以非常容易地实现基于IP技术的VPN业务,而且可以满足VPN可扩展性和管理的需求。利用MPLS构造的VPN,通过配置,可将单一接入点形成多种VPN,每种VPN代表不同的业务,使网络能以灵活方式传送不同类型的业务。
Comware目前提供比较完全的BGP/MPLS VPN组网能力:
l 地址隔离,允许不同VPN之间和VPN与公网之间的地址重叠。
l 支持MP-BGP协议穿越公网发布VPN的路由消息,构建BGP/MPLS VPN。
l 通过MPLS LSP转发VPN的数据流。
l 提供了MPLS VPN的性能监视和故障检测工具。

如上图所示,MPLS VPN模型中,包含三个组成部分:CE、PE和P。
l CE(Customer Edge)设备:是用户网络边缘设备,有接口直接与服务提供商相连,可以是路由器或是交换机等。CE“感知”不到VPN的存在。
l PE(Provider Edge)路由器:即运营商边缘路由器,是运营商网络的边缘设备,与用户的CE直接相连。MPLS网络中,对VPN的所有处理都发生在PE路由器上。
l P(Provider)路由器:运营商网络中的骨干路由器,不和CE直接相连。P路由器需要支持MPLS能力。
CE和PE的划分主要是从运营商与用户的管理范围来划分的,CE和PE是两者管理范围的边界。
(1) vpn-instance
vpn-instance是MPLS VPN中实现VPN路由的重要概念。在MPLS VPN的实现中,每个Site在PE上对应一个专门的vpn–instance(vpn –instance通过与接口绑定实现与Site的关联)。如果一个Site中的用户同时属于多个VPN,则该Site对应的vpn-instance中将包括所有这些VPN的信息。
具体来说,vpn-instance的信息中包括:标签转发表、IP路由表、与vpn-instance绑定的接口以及vpn-instance的管理信息(包括RD、路由过滤策略VPN Target、成员接口列表等)。可以认为,它综合了该Site的VPN成员关系和路由规则。
PE负责更新和维护vpn-instance与VPN的关联关系。为了避免数据泄漏出VPN之外,同时防止VPN之外的数据进入,在PE上,每个vpn-instance有一套相对独立的路由表和标签转发表,报文转发信息存储在该vpn-instance的IP路由表和标签转发表中。
(2) MP-BGP
MP-BGP(multiprotocol extensions for BGP-4,请参见RFC2283)在PE路由器之间传播VPN组成信息和路由。MP-BGP向下兼容,既可以支持传统的IPv4地址族,又可以支持其他地址族(比如VPN-IPv4地址族)。使用MP-BGP确保VPN的私网路由只在VPN内发布,并实现MPLS VPN成员间的通信。
(3) VPN-IPv4地址族
由于VPN网络是一个私用网络,不同的Site可以使用相同的IP地址来表示。而PE路由器之间使用MP-IBGP来发布与之相连的CE的路由时,是假定IP地址是全球唯一的,二者之间不同的含义会导致路由错误。为了解决这个问题,在发布路由之前MP-BGP需要实现IPv4地址到VPN-IPv4地址族的转换,使之成为全球唯一的地址(故PE路由器需要支持MP-BGP)。
一个VPN-IPv4地址有12个字节,开始是8字节的RD(Route Distinguisher,路由识别符),下面是4字节的IPv4地址。服务供应商可以独立地分配RD,但是,需要把他们专用的AS(Autonomous System—自治系统)号作为RD的一部分。通过这样的处理以后,即使VPN-IPv4地址中包含的4字节IPv4地址重叠,VPN-IPv4地址仍可以保持全局唯一。RD纯粹是为了区别不同的路由,仅在运营商网络内部使用,RD为零的VPN-IPv4地址相当于普通的IPv4地址。
PE从CE接收的路由是IPv4路由,需要引入vpn-instance路由表中,此时需要附加一个RD。在我们的实现中,为来自于同一个用户Site的所有路由设置相同的RD。
VPN Target属性是MP-BGP扩展团体属性之一,主要用来限制VPN路由信息发布。它标识了可以使用某路由的Site的集合,即该路由可以被哪些Site所接收,通过它,可以明确每一个PE路由器可以接收哪些Site传送来的路由。与VPN Target中指明的Site相连的PE路由器,都会接收到具有这种属性的路由。
PE路由器存在两个VPN Target属性集合:一个集合称为Export Targets,在发布本地路由到远端PE路由器时,附加到从某个直连的Site上接收到的路由上;另一个集合称为Import Targets,在接收远端PE发布的路由时,决定哪些路由可以引入此Site的VPN路由表中。
当通过匹配路由所携带的VPN Target属性来过滤PE路由器接收的路由信息时,如果Export VPN Target集合与Import VPN Target集合存在相同项,则该路由被安装到VPN路由表中,进而发布给相连的CE;如果Export VPN Target集合与Import VPN Target集合没有相同项,则该路由被拒绝。

图3-2 通过匹配VPN Target属性过滤路由
& 说明:
通过VPN Target属性来过滤PE路由器接收的路由信息,使得其他VPN的路由不会出现在本VPN路由表中(在VPN之间不需互通的情况下),所以,CE发送的数据只会在所属的VPN内转发,不会被转发到外部。
BGP/MPLS VPN的主要原理是:利用BGP在运营商骨干网上传播VPN的私网路由信息,用MPLS来转发VPN业务流。
下面从VPN路由信息的发布和VPN报文转发两个方面介绍BGP/MPLS VPN的实现。
(1) CE到PE间的路由信息交换
PE可以通过静态路由、RIP(应支持多实例)、OSPF(应支持多实例)或EBGP学习到与它相连的CE的路由信息,并将此路由安装到VPN-instance中。
(2) 入口PE到出口PE的路由信息交换
入口PE路由器利用MP-IBGP穿越公网,把它从CE学习到的路由信息发布给出口PE(带着MPLS标签),同时,获得出口PE学习到的CE路由信息。
PE之间通过IGP(如RIP、OSPF)来保证VPN内部节点之间的连通性,故应在所有互联接口及loopback接口上运行IGP。
(3) PE之间的LSP建立
为了使用MPLS LSP转发VPN的数据流量,一定在PE之间建立公网LSP。从CE接收报文并建立私网标签栈的PE路由器是ingress LSR,BGP的下一跳(即出口PE路由器)是egress LSR。可以使用LDP建立尽力转发的LSP,也可以使用RSVP建立支持特定QoS的LSP或基于流量工程的LSP。使用LDP建立LSP将在PE之间形成全连接的LSP,本章只讨论这种情况。
(4) PE到CE间的路由信息交换
CE可以通过静态路由、RIP、OSPF、或EBGP,从相连的PE上学习远端的VPN路由。
经过以上的步骤,CE之间将建立可达的路由,完成VPN私网路由信息在公网上的传播。
VPN报文在入口PE路由器上形成两层标签栈:
内层标签,也称MPLS标签,是由出口PE向入口PE发布路由时分配的(安装在VPN转发表中),在标签栈中处于栈底位置。当从公网上发来的VPN报文到达出口PE时,根据标签查找MPLS转发表就可以从指定的接口将报文发送到指定的CE或者Site。
外层标签,也称LSP的初始化标签,指示了从入口PE到出口PE的一条LSP,在标签栈中处于栈顶位置。VPN报文利用这层标签的交换,就可以沿着LSP到达对端PE。
以下图为例:

图3-3 VPN报文转发示意图
(1) Site1发出一个目的地址为1.1.1.2的IPv4报文到达CE1,CE1查找IP路由表,根据匹配的表项将IPv4报文发送至PE1。
(2) PE1根据报文到达的接口及目的地址查找VPN-instance表项,获得内层标签、外层标签、BGP下一跳(PE2)、输出接口等。进行标签封装后,PE1通过输出接口转发MPLS报文到LSP上的第一个P。
(3) LSP上的每一个P路由器利用交换报文的外层标签转发MPLS报文,直到报文传送到倒数第二跳路由器,即到PE2前的P路由器。倒数第二跳路由器将外层标签弹出,并转发MPLS报文到PE2。
(4) PE2根据内层标签和目的地址查找VPN转发表,确定标签操作和报文的出接口,最终弹出内层标签并由出接口转发IPv4报文至CE2。
(5) CE2查找路由表,根据正常的IPv4报文转发过程将报文传送到Site2。
(1) 分层模型与平面模型
在BGP/MPLS VPN解决方案中,PE设备最为关键,它完成两方面的功能:首先是为用户提供接入功能,这需要PE具有大量接口;然后是管理和发布VPN路由,处理用户报文,这需要PE设备具有大容量内存和高转发能力。
目前的网络设计大多采用经典的分层结构,例如,城域网的典型结构是三层模型:核心层、汇聚层、接入层。从核心层到接入层,对设备的性能要求依次下降,网络的规模则依次扩大。
而BGP/MPLS VPN是一种平面模型,对网络中所有PE设备的性能要求相同,当网络中某些PE在性能和可扩展性方面存在问题时,整个网络的性能和可扩展性将受到影响。
由于BGP/MPLS VPN的平面模型与典型的分层网络模型不相符,在每一个层次上部署PE都会遇到扩展性问题,不利于大规模部署VPN。
(2) HoVPN
为解决可扩展性问题,BGP/MPLS VPN必然要从平面模型转变为分层模型。
在MPLS L3VPN领域,H3C公司提出了分层VPN(Hierarchy of VPN,简称HoVPN)解决方案,将PE的功能分布到多个PE设备上,多个PE承担不同的角色,并形成层次结构,共同完成一个PE的功能。
HoVPN对处于较高层次的设备的路由能力和转发性能要求较高,而对处于较低层次的设备的相应要求也较低,符合典型的分层网络模型。
(1) HoVPN的基本结构

图3-4 HoVPN的基本结构
在上图中,直接连结用户的设备称为下层PE(Underlayer PE)或用户侧PE(User-end PE),简写为UPE;连结UPE并位于网络内部的设备称为上层PE(Superstratum PE)或运营商侧PE(Service Provider-end PE),简写为SPE。
多个UPE与SPE构成分层式PE,共同完成传统上一个PE的功能。
& 说明:
HoVPN把PE的功能分层实现,因此,这种解决方案有时也被称为分层PE(Hierarchy of PE,HoPE)。
SPE与UPE的分工是:
l UPE主要完成用户接入功能。UPE维护其直接相连的VPN Site的路由,但不维护VPN中其它远程Site的路由或仅维护它们的聚合路由;UPE为其直接相连的Site的路由分配内层标签,并通过MP-BGP随VPN路由发布此标签给SPE;
l SPE主要完成VPN路由的管理和发布。SPE维护其通过UPE连接的VPN所有路由,包括本地和远程Site的路由,但SPE不发布远程Site的路由给UPE,只发布VPN实例的缺省路由或聚合路由给UPE,并携带标签。
由于分工的不同,对SPE和UPE的要求也不同:SPE的路由表容量大,转发性能强,但接口资源较少;UPE的路由容量和转发性能较低,但接入能力强。HoVPN充分利用了SPE的性能和UPE的接入能力。
需要说明的是,SPE和UPE是相对的概念。在多个层次的PE结构中,上层PE相对于下层就是SPE,下层PE相对于上层就是UPE。
分层式PE从外部来看同传统上的PE没有区别,可以同普通PE共存于一个MPLS网络。
(2) SPE-UPE
SPE和UPE之间运行MP-BGP,可以是MP-IBGP,也可以是MP-EBGP,这取决于UPE和SPE是否属于同一个AS。
采用MP-IBGP时,为了在IBGP对等体之间通告路由,SPE将作为路由反射器,把来自IBGP对等体UPE的VPN路由发布给IBGP对等体SPE,但SPE不作为其它PE的路由反射器。
(3) HoVPN的嵌套与扩展
HoVPN支持分层式PE的嵌套:
l 一个分层式PE可以作为UPE,同另一个SPE组成新的分层式PE;
l 一个分层式PE可以作为SPE,同多个UPE组成新的分层式PE;
l 以上这种嵌套可以多次进行。
通过分层式PE的嵌套,在理论上可以将VPN无限扩展与延伸。

图3-5 分层式PE的嵌套
上图是一个三层的分层式PE,称中间的PE为MPE(Middle-level PE)。SPE和MPE之间,以及MPE和UPE之间,均运行MP-BGP。
& 说明:
“MPE”这种说法只是为了表述方便,在HoVPN模型中并没有MPE的概念。
MP-BGP为下层PE发布上层PE的VPN实例缺省路由以使UPE不需要维护大量的路由。发送默认路由的结果是UPE下的一个VPN Site可以访问其它所有PE/UPE下的同一VPN。
而在某些情况下,用户希望禁止同一VPN下某些Site间的互访,这就需要SPE向UPE发送详细路由,而不是默认路由。
从CE进入PE的报文的VPN属性由入接口绑定的VPN决定,这样,就实质上决定了由同一个入接口经过PE转发的所有CE设备必须都属于同一个VPN。但是,在实际组网环境中,存在一个CE设备经过一个物理接口访问多个VPN的需求,这种需求也许可以通过设置不同的逻辑接口来实现,但是这种折中的解决方式会增加额外的配置负担,使用起来也有很大的局限性。为了解决该问题,利用多角色主机的构思,通过配置针对IP地址的策略路由来区分报文对不同VPN的访问,而从PE到CE的下行数据流,是通过静态路由来实现的,多角色主机情形下的静态路由跟普通的不一样,是通过一个VPN里面的静态路由指定其他VPN中的接口作为出接口来实现的,从而达到在一个逻辑接口访问多个VPN的目的。
OSPF是目前应用最为广泛的IGP路由协议之一,因此许多VPN将会使用OSPF作为其内部路由协议。如果在PE-CE链路上也使用OSPF将会非常便利:CE路由器只需要支持OSPF协议,不需要支持更多的协议;同时,网络管理员也只需要了解OSPF协议;另外,如果客户需要将传统的OSPF骨干区域转换为BGP/MPLS VPN服务,那么在PE和CE之间使用OSPF可以简化这种转换。
为了在BGP/MPLS VPN应用中将OSPF作为PE-CE间的路由协议,此时,PE路由器必须支持同时运行多个OSPF实例,此时,每一个OSPF实例与一个VPN-Instance相对应,拥有自己独立的接口、路由表,并且使用BGP/OSPF交互通过MPLS网络传送VPN的路由信息。
下面具体介绍在PE-CE间配置OSPF需要了解的知识。
(1) PE和CE间的OSPF区域配置
PE与CE之间的OSPF区域可以是非骨干区域,也可以是骨干区域。
在OSPF VPN扩展应用中,MPLS VPN骨干网被看作是骨干区域area 0。由于OSPF要求骨干区域连续,因此,所有VPN节点的area 0必须与MPLS VPN骨干网相连。
即:如果VPN节点存在OSPF area 0,则CE接入的PE必须通过area 0与这个VPN节点的骨干区域相连(可以通过Virtual-link实现逻辑上的连通)。
(2) BGP/OSPF交互
在PE-CE间运行OSPF后,PE与PE通过BGP发布VPN路由,PE通过OSPF向CE发布VPN路由。
以下图为例,PE1和PE2通过MPLS骨干网相连,CE11、CE21和CE22都属于VPN1。假设图中所有路由器属于同一个自治系统,即,CE11、CE21、CE22属于同一个OSPF域(OSPF domain)。
VPN1路由的发布过程大致可以描述为:首先在PE1上将CE11的OSPF路由引入BGP;然后通过BGP将这些VPN路由发布给PE2;在PE2上将BGP的VPN路由引入到OSPF,再发布给CE21和CE22。

图3-6 OSPF在VPN中的使用
如果使用标准的BGP/OSPF交互过程,PE2将把BGP VPN路由通过Type5 LSAs,即ASE LSAs,发布给CE21和CE22。但CE11与CE21、CE22是同一个OSPF域,它们之间的路由发布应该使用Type3 LSAs,即区域间路由。
为了避免上述情况的发生,PE使用一种经过修改的BGP/OSPF交互过程(简称为BGP/OSPF互操作功能),发布从一个Site到另一个Site的路由,并区分这种路由与真正的AS-External路由。这一过程需要BGP使用扩展团队属性,携带可以标识OSPF属性的信息。
在Comware的实现中,要求每个OSPF域有一个可配置的域ID(Domain ID)。一般建议:与每个VPN实例相关的网络中的所有OSPF实例要么配置一个相同的域ID,要么都使用缺省的0作为域ID。这样在收到BGP的VPN路由时,域ID相同的是来自同一VPN实例的路由。
(3) 路由环的检测
假设PE与CE之间通过OSPF骨干区域相连,且同一个VPN节点(Site)连接到不同的多个PE。这种情况下,当一个PE通过LSA向VPN节点发布从MPLS/BGP学的BGP VPN路由时,LSA可能被另一个PE接收到,造成路由环。
为了防止产生路由环,对于从MPLS/BGP学到的BGP VPN路由,无论PE与CE间是否通过OSPF骨干区域相连,PE在生成Type3 LSA时,都会设置标志位DN。PE路由器的OSPF进程在进行路由计算时,忽略DN置位的Type3 LSAs。
如果PE需要向CE发布一条来自其它OSPF域的路由,则PE应表明自己是ASBR,并将该路由作为Type5 LSA发布。为OSPF实例配置的VPN Route Tag包含在Type5或Type7的LSA中。PE路由器的OSPF进程在进行路由计算时,如果Type5或Type7的LSA的tag值与PE路由器上配置的route tag相同,则忽略此LSA。
支持OSPF多实例后,在一个路由器上可以运行多个OSPF 进程,不同的进程可以绑定不同的VPN-Instance。在实际应用中,可以针对每种业务建立一个OSPF实例,采用OSPF多实例实现不同业务传输的完全隔离,低成本地解决传统局域网的安全性问题,极大的满足客户的需求。而OSPF多实例通常是运行在PE路由器上的,对于这种在局域网中运行OSPF多实例的路由器,通常也称之为Multi-VPN-Instance CE。目前,局域网不同业务的隔离一般是通过交换机的VLAN功能实现的。OSPF Multi-VPN-Instance CE提供了在路由器上实现业务隔离的方案。

图3-7 Multi-VPN-Instance CE在解决传统局域网安全性中的应用
如下图所示,在OSPF的PE-CE连接中,假设同一个OSPF区域中有两个Site连接到不同的PE,两个Site之间存在一条区域内的OSPF链路(这种链路称为backdoor),并且这两个Site属于同一个VPN。这种情况下,通过PE连接两个Site的路由将作为区域间路由(Inter-Area Route),由于其优先级低于经过backdoor链路的区域内路由(Intra-Area Route),不会被OSPF优选。

图3-8 sham link应用示意图
某些情况下,可能需要优先使用经过MPLS VPN骨干网的路由,这时,可以在PE路由器之间建立sham link链路,使经过MPLS VPN骨干网的路由也成为OSPF区域内路由。
sham link作为区域内的一条unnumbered点到点链路,包含在Type1 LSA中发布。用户可以通过调整度量值metric在sham link和backdoor之间进行选路。
sham link被看成是两个VPN实例之间的链路,每个VPN实例中必须有一个sham link的端点地址,它是PE路由器上VPN地址空间中的一个有32位掩码的loopback接口地址。同一个OSPF进程的sham link可以共用端点地址,但不同OSPF进程不能拥有两条端点地址完全相同的sham link。
sham link的端点地址被BGP作为VPN-IPv4地址发布。如果路由经过了sham link,它就不能再以VPN-IPv4路由的形式被引入到BGP。
sham link可以在任何区域配置。在Comware中,sham link需要手工配置。并且,本端VPN实例中必须有到sham link目的地址的路由。
实际组网应用中,某用户一个VPN的多个Site可能会连接到使用不同AS号的多个服务提供商,或者连接到一个服务提供商的多个AS。这种VPN跨越多个自治系统的应用方式被称为跨域VPN(Multi-AS BGP/MPLS VPN)。
RFC2547bis中提出了三种跨域VPN解决方案,分别是:
l VPN-INSTANCE-to-VPN-INSTANCE:ASBR间使用子接口管理VPN路由,也称为Inter-Provider Backbones Option A;
l EBGP Redistribution of labeled VPN-IPv4 routes:ASBR间通过MP-EBGP发布标签VPN-IPv4路由,也称为Inter-Provider Backbones Option B;
l Multihop EBGP redistribution of labeled VPN-IPv4 routes:PE间通过Multi-hop MP-EBGP发布标签VPN-IPv4路由,也称为Inter-Provider Backbones Option C。
Comware支持上述三种解决方案。
这种方式下,两个AS的PE路由器直接相连,PE路由器同时也是各自所在自治系统的边界路由器ASBR。
作为ASBR的PE之间通过多个子接口相连,两个PE都把对方作为自己的CE设备对待,使用传统的EBGP方式向对端发布IPv4路由。每个子接口对应一个VPN,需要将ASBR的子接口绑定在对应的vpn-instance下,但不需要使能MPLS。报文在AS内部作为VPN报文,采用两层标签转发方式;在ASBR之间则采用普通IP转发方式。
理想情况下,每个跨域的VPN都有一对子接口,用来交换VPN路由信息。

图3-9 ASBR间使用子接口管理VPN路由组网图
使用子接口实现跨域VPN的优点是实现简单:两个作为ASBR的PE之间不需要为跨域进行特殊配置。
缺点是可扩展性差:作为ASBR的PE需要管理所有VPN路由,为每个VPN创建VPN实例。这将导致PE上的VPN-IPv4路由数量过于庞大。并且,为每个VPN单独创建子接口也提高了对PE设备的要求。
这种方式下,两个ASBR通过MP-EBGP交换它们从各自AS的PE路由器接收的标签VPN-IPv4路由。
路由发布过程可分为以下步骤:
(1) AS100内的PE先通过MP-IBGP方式把标签VPN-IPv4路由发布给AS100的边界路由器PE,或发布给为ASBR PE反射路由的路由反射器;
(2) 作为ASBR的PE通过MP-EBGP方式把标签VPN-IPv4路由发布给AS200的PE(也是AS200的边界路由器);
(3) AS200的ASBR PE再通过MP-IBGP方式把标签VPN-IPv4路由发布给AS200内的PE,或发布给为PE反射路由的路由反射器。
这种方式的ASBR需要对标签VPN-IPv4路由进行特殊处理,因此也称为ASBR扩展方式。

图3-10 ASBR间通过MP-EBGP发布标签VPN-IPv4路由组网图
在可扩展性方面,通过MP-EBGP发布标签VPN-IPv4路由优于ASBR间通过子接口管理VPN。
采用MP-EBGP方式时,需要注意:
l ASBR之间不对接收的VPN-IPv4路由进行VPN Target过滤,因此,交换VPN-IPv4路由的各AS服务提供商之间需要就这种路由交换达成信任协议;
l VPN-IPv4路由交换仅发生在私网对等点之间,不能与公网交换VPN-IPv4路由,也不能与没有达成信任协议的MP-EBGP对等体交换VPN-IPv4路由。
前面介绍的两种方式都需要ASBR参与VPN-IPv4路由的维护和发布。当每个AS都有大量的VPN路由需要交换时,ASBR就很可能成为阻碍网络进一步扩展的瓶颈。
解决上述可扩展性问题的方案是:ASBR不维护或发布VPN-IPv4路由,PE之间直接交换VPN-IPv4路由。
两个ASBR通过MP-IBGP向各自AS内的PE路由器发布标签IPv4路由。
ASBR上不保存VPN-IPv4路由,相互之间也不通告VPN-IPv4路由。
ASBR保存AS内PE的32位掩码带标签的IPv4路由,并通告给其它AS的对等体。过渡自治系统中的ASBR也通告带标签的IPv4路由。这样,在入口PE和出口PE之间建立起一条LSP。
不同AS的PE之间建立Multihop方式的EBGP连接,交换VPN-IPv4路由。

图3-11 PE间通过Multi-hop MP-EBGP发布标签VPN-IPv4路由组网图
为提高可扩展性,可以在每个AS中指定一个路由反射器RR(Route Reflector),由RR保存所有VPN-IPv4路由,与AS的PE交换VPN-IPv4路由信息。两个AS的RR之间建立跨域VPNv4连接,通告VPN-IPv4路由。如图3-12所示:

图3-12 采用RR的跨域VPN OptionC方式组网图
& 说明:
当同时配置了L2VPN业务和L3VPN业务时,以L2VPN业务为准;若此时去掉L2VPN业务,可以继续使用L3VPN业务。
要实现BGP/MPLS VPN的功能一般需要完成以下步骤:在PE、CE、P上配置基本信息;然后建立PE到PE的具有IP能力的逻辑或物理的链路;发布、更新VPN信息。
CE设备的配置比较简单,只需配置静态路由、RIP、OSPF或EBGP等,与相连的PE交换VPN路由信息。不需要配置MPLS。
PE设备的配置比较复杂,完成MPLS/BGP VPN的核心功能,大致可分为以下几个部分:
l 配置MPLS基本能力,与P设备和其它PE设备共同维护LSP;
l 配置BGP/MPLS VPN Site,即有关vpn-instance的配置;
l 配置静态路由、RIP、OSPF或MP-EBGP,与CE交换VPN路由信息;
l 配置IGP,实现PE内部的互通;
l 配置MP-IBGP,在PE之间交换VPN路由信息。
P设备的配置比较简单,主要是配置MPLS基本能力,提供MPLS转发能力和对LDP的支持。
下面CE对、PE、P的配置进行分析。
CE路由器作为用户端设备,仅需要做一些基本的配置,使之能够实现与PE设备进行路由信息的交换。目前可选择的路由交换方式有:静态路由、RIP、OSPF、EBGP、VLAN子接口等。
如选择静态路由作为CE-PE间的路由交换方式,则应在CE上配置一条指向PE端的私网静态路由。
请在系统视图下进行下列配置。
表3-1 定义/清除vpn-instance路由表的静态路由
|
操作 |
命令 |
|
创建一条指定的vpn-instance的静态路由 |
ip route-static ip-address { mask | mask-length } { interface-type interface-number | gateway-address } [ preference preference-value ] [ reject | blackhole ] |
|
删除一条指定的vpn-instance的静态路由 |
undo ip route-static ip-address { mask | mask-length } [ interface-type interface-number | gateway-address ] [ preference preference-value ] |
每个静态路由都有缺省的优先值60。配置静态路由时,可以指定一条静态路由的优先级。
如选择RIP作为CE-PE间的路由交换方式,则应在CE上配置RIP。有关RIP配置步骤的详细说明,请参阅本手册路由协议中的RIP配置部分。
如选择OSPF作为CE-PE间的路由交换方式,则应在CE上配置OSPF。OSPF的一般配置方法请参见《Comware V3 操作手册》的“路由协议”部分。
如选择BGP作为CE-PE间的路由交换方式,则应在CE上配置EBGP对等体,并应引入直连路由、静态路由及其他IGP路由,以便BGP能够将VPN路由全部发布给PE。
MPLS基本能力配置包括配置MPLS的LSR ID,全局使能MPLS并在所使用的接口视图下使能MPLS。
具体配置请参考MPLS基本配置部分。
(1) 创建并进入VPN实例视图
vpn-instance在实现中与Site关联,一个Site的VPN成员关系和路由规则等均在vpn-instance的配置下体现。
该命令用来创建新的vpn-instance或进入已有的VPN实例视图。如果该vpn-instance已存在,则直接进入该vpn-instance的视图下,进行相应的配置。
请在系统视图下进行下列配置。
表3-2 创建并进入VPN实例视图
|
操作 |
命令 |
|
创建并进入VPN实例视图 |
ip vpn-instance vpn-instance-name |
|
删除vpn-instance |
undo ip vpn-instance vpn-instance-name |
缺省情况下,没有定义vpn-instance。
(2) 配置VPN-instance的RD
在PE路由器上配置RD,当从CE学习到的一条VPN路由引入BGP时,MP-BGP将RD附加到IPv4前面,使之转换为VPN IPv4地址,使原来在VPN中的全局不唯一的IPv4地址成为全局唯一的VPN IPv4地址,以便在VPN中实现正确的路由。
请在VPN实例视图下进行下列配置。
|
操作 |
命令 |
|
配置VPN-instance的RD |
route-distinguisher route-distinguisher |
参数无缺省值,一个vpn-instance只有配置了RD才能起作用。在配置RD之前,除了描述信息以外,不能配置vpn-instance的其他任何参数。
(3) 为vpn-instance配置描述信息
为VPN实例配置描述信息,请在VPN实例视图下进行下列配置。
表3-4 为vpn-instance配置描述信息
|
操作 |
命令 |
|
为vpn-instance配置描述信息 |
description vpn-instance-description |
|
删除vpn-instance描述信息 |
undo description |
(4) 配置vpn-instance的vpn-target属性
VPN-target用来控制VPN路由信息的发布,该属性是BGP的扩展团体属性。
VPN路由的发布控制过程如下:
l 当从CE学习到的一条VPN路由引入BGP时,BGP为它关联一个VPN-Target扩展团体属性列表,通常,这个列表是与CE相关联的VPN-instance的输出路由属性列表。
l VPN-instance根据VPN-target中import-extcommunity定义输入路由属性列表,定义可被接受并引入此VPN-instance的路由范围。
l VPN-instance根据VPN-target中的export-extcommunity对向外发布的路由进行VPN-Target属性的修改。
像RD一样,一个扩展团体或者是由一个自治系统号和一个任意的数组成,或者是由一个IP地址和一个任意的数组成。有以下两种格式:
与自治系统号(ASN)相关,形式为16位自治系统号(ASN):32位用户自定义数,例如:100:1。
与IP地址相关,形式为32位IP地址:16位用户自定义数,例如:172.1.1.1:1。
请在VPN实例视图下进行下列配置。
表3-5 为vpn-instance创建vpn-target扩展团体
|
操作 |
命令 |
|
为vpn-instance创建vpn-target扩展团体 |
vpn-target vpn-target-extcommunity [ import-extcommunity | export-extcommunity | both ] |
|
从vpn-instance关联的vpn-target列表中删除指定的vpn-target属性 |
undo vpn-target vpn-target-extcommunity [ import-extcommunity | export-extcommunity | both ] |
系统缺省值为both。一情况下VPN中的所有Site都可以互通,此时import-extcommunity和export-extcommunity属性相同,配both即可。
一条命令最多只能配置16个vpn-target;一个vpn-instance最多只能配置256个vpn-target。
(5) 限制一个vpn-instance中最大路由数
该命令可以限制一个vpn-instance中最大路由数,防止从一个Site引入的路由数量过多。
请在VPN实例视图下进行下列配置。
表3-6 限制一个vpn-instance中最大路由数
|
操作 |
命令 |
|
限制一个vpn-instance中最大路由数 |
routing-table limit threshold-value { warn-threshold | syslog-alert } |
|
取消最大路由数限制 |
undo routing-table limit |
& 说明:
改变VPN-instance的路由数目限制,不会影响已存在的路由表,如果需要新配置的路由限制立即生效,应重建相应的路由协议,或对相关接口进行shutdown/undo shutdown的操作。
(6) 将接口(含VLAN子接口)与vpn-instance关联
vpn-instance通过与接口绑定实现与直接连接的Site相关联。当SIte发来的报文经此接口进入PE路由器,即可查找相应的vpn-instance获得路由信息(包括下一条、标签、输出接口等信息)。同理,当CE通过VLAN子接口连接到PE时,应在VLAN子接口下将子接口与vpn-instance关联。
该命令将一个vpn-instance与一个接口关联起来。
请在接口或子接口视图进行下列配置。
|
操作 |
命令 |
|
将接口或子接口与vpn-instance关联 |
ip binding vpn-instance vpn-instance-name |
|
取消接口或子接口与vpn-instance关联 |
undo ip binding vpn-instance vpn-instance-name |
注意:
在实施接口或子接口与vpn-instance的绑定时,需要在接口或子接口上先执行ip binding vpn-instance命令,再配置IP地址,否则,已经配置的IP地址会因为执行ip binding vpn-instance命令而被删除。
目前PE与CE间的路由交换方式有:静态路由、RIP、OSPF、EBGP、VLAN子接口等。
(1) 在PE上配置静态路由
可以在PE上配置一条指向CE端的静态路由,使PE通过静态路由的方式向CE学习VPN路由。
请在系统视图下进行下列配置。
表3-8 定义/清除vpn-instance路由表的静态路由
|
操作 |
命令 |
|
创建一条指定的vpn-instance的静态路由 |
ip route-static vpn-instance vpn-instance-name1 vpn-instance-name2 …destination-address { mask | mask-length } { interface-type interface-number [ nexthop-address ] | vpn-instance vpn-nexthop-name vpn-nexthop-address | nexthop-address [ public ]} [ preference preference-value ] [ reject | blackhole ] |
|
删除一条指定的vpn-instance的静态路由 |
undo ip route-static vpn-instance vpn-instance-name1 vpn-instance-name2 …destination-address { mask | mask-length } { interface-type interface-number [ vpn-instance vpn-nexthop-name vpn-nexthop-address | nexthop-address [ public ] } [ preference preference-value ] |
每个静态路由都有缺省的优先值60。配置静态路由时,可以指定一条静态路由的优先级。
(2) 在PE上配置RIP多实例
在PE和CE之间配置RIP时,需要在PE上指定RIP实例的运行环境。使用该命令进入路由实例的配置视图,并在此视图下配置RIP路由实例的引入、发布等。
请在RIP视图下进行下列配置。
表3-9 配置PE、CE间的RIP路由协议实例
|
操作 |
命令 |
|
创建PE、CE间的RIP路由协议实例 |
ipv4-family [ unicast ] vpn-instance vpn-instance-name |
|
取消PE、CE间的RIP路由协议实例 |
然后配置RIP多实例引入IBGP路由。
有关RIP配置步骤的详细说明,请参阅本手册路由协议中的RIP配置部分。
(3) 在PE上配置EBGP
PE与CE之间运行EBGP,应在MP-BGP的VPN-instance视图下,为每个VPN配置邻居,并引入CE的IGP路由。
第一步:配置对等体组
请在配置VPN-instance视图下配置对等体所隶属的对等体组。
|
操作 |
命令 |
|
创建一个对等体组 |
group group-name [ internal | external ] |
|
删除指定的对等体组 |
undo group group-name |
配置时,如果不指定对等体组的配置类型,缺省为internal。因为当PE、CE选用BGP进行路由交换时,一般属于不同的AS,此时,应选用external,建立EBGP对等体。
第二步:指定邻居AS号并向对等体组中加入组员
在PE和CE之间可以通过EBGP来交换路由信息,应为每个对应CE的vpn-instance分别指定邻居的AS号。
请在MP-BGP的vpn-instance 视图下进行下列配置。
|
操作 |
命令 |
|
配置指定邻居的AS号 |
peer { group-name | [peer-address group group-name ] } as-number as-number |
|
删除邻居的AS号 |
undo peer { group-name | [peer-address group group-name ] } as-number as-number |
第三步:配置MP-BGP引入IGP路由
为了正确地在公网上传播VPN路由信息,PE必须将与它直接相连的CE的VPN路由引入自己的MBGP路由表中,以发布给建立了BGP邻居关系的其它PE。
举例来讲:如果PE与CE间使用静态路由,则PE需要在MBGP的VPN-instance视图下引入静态路由(import-route static);如果PE与CE间运行RIP,则PE需要在MBGP的VPN-instance视图下引入RIP路由(import-route rip),如果PE与CE之间运行BGP,则MBGP直接引入直连路由即可。
请在MBGP的VPN-instance视图下进行下列配置。
表3-12 引入IGP协议的路由信息
|
操作 |
命令 |
|
配置BGP引入IGP协议的路由 |
import-route protocol [ process-id ] [ med med ] |
|
取消BGP引入IGP协议的路由 |
undo import-route protocol |
第四步:配置BGP的同步方式为不同步
请在MBGP的VPN-instance视图下进行下列配置。
表3-13 配置允许BGP与IGP不同步
|
操作 |
命令 |
|
配置允许BGP与IGP不同步 |
undo synchronization |
目前,不同步方式为缺省配置。
第五步:Hub&Spoke组网中允许路由环路配置(选配)。
一般来说,配置PE-CE的步骤通过指定邻居AS号后就可以完成,其余的配置保留系统默认值即可。
在标准BGP情况下,BGP是通过AS号来检测路由循环,避免产生路由环路。但在Hub&Spoke组网方式下,如果在PE和CE之间运行EBGP协议,当PE将路由信息通告给CE时带上本自治系统的AS号。然后再从CE接收路由更新时,路由更新消息中就会带有本自治域系统的AS号,这样PE就不会接收这条路由更新信息。
通过配置peer allow-as-loop可以使PE路由器仍然接收从CE发送的包含本AS号的路由更新信息。
请在IPv4地址族子视图下进行下列配置。
表3-14 配置允许/禁止路由环路
|
操作 |
命令 |
|
配置允许路由环路 |
peer { group-name | peer-address } allow-as-loop [ number ] |
|
配置禁止路由环路 |
undo peer { group-name | peer-address }allow-as-loop |
默认情况下,对于接收到的路由更新信息不允许产生环路信息。
第六步:配置BGP相关特性。
在PE上配置MP-IBGP协议,使得PE之间能够交互VPN-IPv4路由。
下列各项配置可在BGP视图或VPN实例视图下进行。
(1) 配置IBGP
一般情况下,需要配置以下各项:
第一步:配置BGP的同步方式为不同步
第二步:配置BGP邻居
注意,应用loopback接口建立BGP的邻居关系,且子网掩码应为32位。
第三步:配置允许内部BGP会话使用任何可操作的TCP连接接口
一般情况下,BGP是使用最佳本地地址进行TCP连接的;但为使接口在出现问题时该TCP连接还有效,可配置允许内部BGP会话使用任何可与对端建立TCP连接的接口,这条命令通常与Loopback接口一起配置。
表3-15 配置允许内部BGP会话使用任何可操作的TCP连接接口
|
操作 |
命令 |
|
配置允许内部BGP会话使用任何可操作的TCP连接的接口 |
peer { peer-address | group-name } connect-interface interface-type interface-number |
|
恢复使用最佳本地地址进行TCP连接 |
undo peer { peer-address | group-name } connect-interface interface-type interface-number |
BGP可以使用指定接口和对端建立BGP邻居,一般来说都是指定LoopBack环回接口。因为这个接口永远处于up状态,可以减少由于网络震荡带来的冲击。
(2) 配置MP-IBGP
第一步:进入协议地址族视图
请在BGP视图下进行下列配置。
|
操作 |
命令 |
|
进入MBGP的vpnv4视图 |
ipv4-family vpnv4 [ unicast ] |
|
删除MBGP的VPNv4地址族视图的配置 |
undo ipv4-family vpnv4 [ unicast ] |
第二步:配置MBGP邻居。
在MBGP的vpnv4视图下配置MBGP的internal邻居。
第三步:配置激活对等体(组)。
由于缺省情况下,BGP邻居处于激活状态,MBGP邻居处于非激活状态。用户应在vpnv4视图下激活MBGP邻居。
第四步:配置在发布路由时将自身地址作为下一跳(可选)
该配置命令缺省为没有配置,在跨域VPN配置B方式下,对域内的IBGP对等体必需要配置该命令。
|
操作 |
命令 |
|
配置发布路由时将自身地址作为下一跳 |
peer { peer-address | group-name } next-hop-local |
|
取消发布路由时将自身地址作为下一跳 |
undo peer { peer-address | group-name } next-hop-local |
第五步:配置传送BGP更新报文时不携带私有自治系统号(可选)
表3-18 配置发送BGP更新报文时不携带私有自治系统号
|
操作 |
命令 |
|
配置发送BGP更新报文时不携带私有自治系统号 |
peer { peer-address | group-name } public-as-only |
|
配置发送BGP更新报文时携带私有自治系统号 |
undo peer { peer-address | group-name } public-as-only |
本节介绍OSPF VPN扩展的三种应用配置,包括:
l 在PE-CE间运行OSPF
l 配置Multi-VPN-Instance CE
l 配置sham link
(1) 在PE上配置OSPF多实例
在PE上运行OSPF与CE交换路由信息,需要OSPF支持多实例配置。其他配置,如MPLS基本配置、vpn-instance的配置不变。需要注意的是,在vpn-instance下应引入OSPF路由及直连路由,在OSPF下也应引入BGP路由。这里对OSPF多实例的配置进行详细描述。
第一步:配置OSPF进程。
请在系统视图下进行下列配置。
|
操作 |
命令 |
|
配置一个OSPF进程 |
ospf process-id [ router-id router-id-number ] [ vpn-instance vpn-instance-name ] |
|
删除一个OSPF进程 |
undo ospf process-id |
缺省进程号为1。
注意:
一个OSPF进程只能属于一个vpn实例,一个实例可以包含多个OSPF进程。缺省状态下OSPF进程属于公网。
router-id唯一标识一个OSPF进程。用户在启动OSPF进程时,可以使用命令中的参数router-id指定进程的router-id。
如果在一台路由器上启动了多个进程,需要为不同进程指定不同的router-id,否则,有可能出现多个进程使用相同的router-id,这种情况下,它们的OSPF邻居无法分辨这两个不同的OSPF进程。OSPF将可能出现问题。
第二步:配置domain-id。
Domain ID用来标识不同的