MPLS/BGP VPN简介

时间:2013-08-16 11:00来源:网络整理 作者:采集侠 点击:


  当前,越来越多的企业已开始寻求利用Internet作为主要的广域网连接手段,来取代现有的基于桢中继或T1租用线的传输网。这样作的主要好处在于端到端的IP应用集成以及低廉的网络连接成本。对于企业用户而言,传输网络的安全性也是相当重要的考虑因素之一,这也是早期用户选择桢中继或T1租用线技术的基本出发点。然而,随着虚拟专用网(VPN)技术的日趋成熟,通过数据隧道技术(Tunneling),在Internet上同样也可以建立安全的链路,为Internet在企业网架构中的应用提供了技术工具。目前的VPN主要是建立于第二层网络技术如桢中继或ATM之上的,其优越性在于:1)可以提供安全的数据隧道;2)有效的抵御“服务拒绝”(DoS)攻击或网络入侵;3)能保证不同网络的地址与路由信息分离。但是,二层VPN的一个严重的缺陷在于其可扩展性不高,因为随着网络规模的增加,为了达到路由最优化而需要的虚拟连接数量将呈几何级数增长,这大大增加了大型网络的建网成本与管理复杂性。同时,在二层VPN中的流量工程也难以在网络的全局范围内实现。

  基于BGP与MPLS结合的第三层VPN在确保安全性的基础上为解决骨干网络的可扩展性问题提供了一种有效的技术手段。MPLS技术为IP骨干网提供了安全,高速的数据传输隧道以及流量工程控制的能力;而BGP则负责骨干网中的路由信息与控制信息的传递,通过BGP的扩展属性而实现VPN网络的地址与路由信息分离。图1中给出了一个典型的三层VPN网络结构。其中,MPLS的运营商网络边界路由器(PE)负责用户的接入管理,PE之间通过信令协议建立LSP而实现互联;BGP协议则在MPLS核心网络中进行PE间VPN路由信息的交换,两种技术的结合大大提高了网络的可扩展性


图1 第三层VPN网络结构

  基于IP技术的Internet自身是不安全的,因为Internet是一个公众主干网络,所有用户的地址与路由信息都在同一网络上传递,随时可能被恶意用户获取而发动网络入侵攻击。因此,在第三层VPN技术体系中首要的问题就是实现不同用户的地址与路由信息分离。为此,CISCO,ATT,JUNIPER等公司的专家在互联网工程组的协调下共同讨论制定了一个技术规范草案,即draft-ietf-ppvpn-rfc2547bis-00.txt (简称RFC2547bis)。在这一技术规范中详细说明了如何利用BGP的扩展属性来分离地址与路由信息,以及如何在MPLS骨干网中完成相关的BGP控制信息与用户数据流的传输。

  规范中所提出的技术主要是基于以下网络模型:运营商拥有骨干网络并提供VPN服务,用户直接从运营商那里购买VPN服务。运营商端与用户交互的网络设备称为运营商网络边界路由器(PE),而用户端的边界设备则称为CE。一个PE可以连接多个CE从而支持多个VPN用户(如图1中所示),一个CE也可以连接到多个PE以保证接入的冗余及由此而来的可靠性。

  由于PE上连接了多个CE(即多个VPN用户共享一个PE),用户不希望其它用户知道自己的内部网络拓扑与地址分配方案,因此就需要分离不同用户的网络地址以及路由信息来保证安全性。具体来说,与传统路由器上单一的路由与转发表不同,在PE上建立并维护了多个虚拟路由与转发信息表(称为VRF)。每一个VRF对应于一个VPN用户,当PE上收到从CE发来的数据包时,通过查询与VPN用户对应的VRF来得到数据包的转发途径。如果在PE上有到达同一VPN用户站点的多个链路,则这将反映在该用户的VRF中。BGP的扩展属性则用于支持PE上的多个VRF,并可以通过路由信息的过滤技术来保证只有连接到同一VPN用户的PE时间可以互相交换有关这一VPN的路由信息。这样,就实现了路由信息的分离。

  在PE设备上,用户CE的连接接口直接映射到VRF上,多个接口可以映射到一个VRF上,表示于该CE存在着多个连接,可以实现负载均衡。反之,一个接口则不能映射到多个VRF上,即一个接口不能同时用于两个VPN用户的接入,这有利于保证地址与路由信息的物理分离。同时,VPN用户可以在自己的内部网络中采用私有地址的地址分配方案,这样在同一MPLS骨干网中的两个VPN用户可能采用了同样的私有地址空间而造成地址重复。对此,在三层VPN中引入了VPN-IP地址的概念。与4字节的IP地址不同的是,VPN-IP地址有12字节,前8个字节称为路由器识别码(RD),后4个字节才是原有的IP地址。RFC2547bis中定义了RD的格式与内容,简单来说,RD是在网络内与VPN用户唯一对应的,不同的RD则用于区别不同的VPN网络。通过BGP属性扩展可以在BGP中实现对VPN-IP地址的支持,从而达到分离网络地址的目的。前面提到了,BGP的扩展属性可以支持路由信息的分离,这也是基于RD这一概念的。在BGP的路由信息发布过程中,利用RD可以控制连接到不同VPN的PE设备可以用RD来过滤路由的导出与导入。

  另外,在这一网络结构中,只有与用户直接相连的PE设备需要维护VRF信息,而骨干网络中的核心设备(即不直接与用户端设备连接的路由器)仍将按照传统路由器那样仅维护一个路由表,这将保证VRF相关的信息不会泄露到核心设备上。这样就提高了网络的可扩展性,因为用户数量的增加不会影响到网络核心的变化,而只需新增PE设备或在PE设备上新增与CE的连接。进一步,运营商还可以配置PE设备以支持PE的自动发现,即PE设备可以自动识别属于同一VPN的其它PE设备并建立连接。这更加简化了网络的管理并提高了可扩展性。

  数据包在网络中的传输依赖于MPLS的标签以及标签交换路径(LSP)为技术基础的。运营商根据VPN用户的分布情况对相应的PE设备进行有关配置,在连接同一VPN的PE设备间建立满足数据流传输需求(带宽,QoS)的LSP,并在PE内的标签交换信息表内建立标签与RD的关联。当PE的用户接口上收到数据包时,首先根据接口与VRF的映射来查找相应的VRF以得到路由选径结果;其次,选择合适的LSP并查找对应的标签。与一般的MPLS标签交换不同,这里PE设备将在数据包内插入两个堆叠的标签。外层的标签用于LSP的识别,而内层的标签则用于VPN的识别。数据包根据外层的标签在骨干网内部进行高速传输,在数据包到达另一端的PE设备时,外层的标签被移去,而PE根据内层的标签来识别数据包属于哪一个VPN,并将移去内层的标签而将原始的数据包发送到VPN所对应的接口上。为了保证不同厂商的PE设备之间的互操作性,基于IETF标准的标签分配信令协议如RSVP-TE或CR-LDP被用于LSP的建立以及标签的分配过程。

  从用户的角度来看,第三层VPN仍是建立在IP技术体系的地址空间与路由协议之上的,因此用户端的网络可以采用已有的技术而不需任何改动。在用户端网络与PE设备的连接中也可以采用多种的路由方式,如静态路由或动态路由协议如OSPF,ISIS,BGP等。

  至此,我们已简要介绍了第三层VPN技术方案框架。基于MPLS技术与BGP技术有效结合,第三层VPN可以提供与传统的二层VPN相当的安全特性,同时在网络的可扩展性方面比二层VPN更具优越性,因此,成为当前骨干网运营商的筛选首选技术。下面给出一个BGP/MPLS VPN的配置举例。

  假设一个ISP拥有AS 888,并为客户A与B提供基于BGP/MPLS技术的intranet VPN服务。 ISP为客户A创建一个VRF,名为vrf00001,并关联到RD 888:1 (这里只是一个简化形式,具体配置中RD共有8个字节,888为前两个字节的十进制表示形式,后面6个字节除了最后一个其它为全0). 另外,ISP在PE路由器上根据BGP扩展属性设置相应的导入,导出规则。同样的,ISP为客户B创建VRF vrf00002,并关联到RD 888:2。 同时,在VRF vrf00002中还创建了一个名为vrf00002-import-map 的路由映射(route map),并据此设置导入规则,从而使得VRF vrf00002的用户可以访问客户A的intranet VPN中的部分子网。这样,客户A与B之间就形成了extranet伙伴关系。VRF的配置命令如下:
ip vrf vrf00001
rd 888:1
route-target both 888:1
ip vrf vrf00002
rd 888:2
route-target both 888:2
route-target import 888:1
import map vrf00002-import-map
route-map vrf00002-import-map permit 10
match ...

  值得说明的是,这里的路由映射只是为了更加细化导入导出规则,而一般情况下,通过BGP扩展属性的导入导出就已经足够了。BGP扩展属性提供了基本的安全性保证,而利用路由映射则可以更进一步的限制到extranet伙伴的访问连接。

  VRF在定义后,还需要与相应的路由器接口进行关联,具体命令如下:
interface Fastethernet 0/2
ip vrf forwarding vrf00001
ip address ...
interface Fastethernet 0/3
ip vrf forwarding vrf00002
ip address ...
interface Fastethernet 0/4
ip vrf forwarding vrf00002
ip address ...

  这里在两个快速以太网接口上配置了与VRF vrf00002的关联,每一个接口分别连接了客户B的一个子网。

  另外,PE路由器之间需要运行MBGP协议以支持VPN-IPv4路由信息的传递。这里需要注意的是,PE之间不需要运行普通的BGP,网络可达性信息可以通过BGP路由反射器(route reflectors)或是iMBGP全网状连接。

router bgp 888
no synchronization
no bgp default ipv4-activate
neighbor 10.60.0.5 remote-as 888
neighbor 10.61.0.1 remote-as 888
address-family vpnv4 unicast
neighbor 10.60.0.5 activate
neighbor 10.61.0.1 activate
exit-address-family

  PE与CE之间的路由信息传递可以通过运行eBGP或是配置静态路由。下面显示了静态路由的配置例子:

address-family ipv4 unicast vrf vrf00001
redistribute static
redistribute connected
neighbor 10.20.1.1 remote-as 65535 ! private AS number
neighbor 10.20.1.1 activate
no auto-summary
exit-address-family
address-family ipv4 unicast vrf vrf00002
redistribute static
redistribute connected
neighbor 10.20.2.2 remote-as 65535
neighbor 10.20.2.2 activate
no auto-summary
exit-address-family
ip route vrf vrf00001 15.0.0.0 255.0.0.0 e0/2 10.20.1.1

  至此,就完成了全部配置过程。这里略去了有关MPLS的配置,具体命令可以参考路由器设备的使用手册。

  最后,我们总结一下BGP/MPLS VPN组网方案的优点:
· 网络的高可扩展性
· 用户端可以不必负责路由管理,这时,只需在CE与PE之间配置静态路由即可。
· 多个VPN客户共享ISP的骨干网络服务,降低成本
· 为了增强数据安全性,还可选择支持IPSec
· 通过BGP扩展属性与路由映射实现的安全性与访问限制
· 通过子接口 (subinterfaces)可以连接多个VPN子网

  值得一提的是,前面提到了利用RD可以实现私有地址空间的分离。但是,在这种情况下,两个拥有重复的私有地址空间的站点之间无法进行互相访问。也就是说,如果一个VPN用户网络的地址为10.1.1.0,则从这里无法连接到另外一个也采用了10.1.1.0的VPN网络。对于这个问题的解决办法则是采用网络地址翻译(NAT--Network Address Translation)。

分享到: