基本BGP/MPLS IP VPN
定义
通过扩展的BGP协议传输路由报文;
使用MPLS LSP为公网隧道对私网数据报文进行封装传输;
PE、P、CE设备不兼容其它功能(没有一台设备既是PE,又是CE)。
相关概念
Site
在介绍VPN时经常会提到“site”,site(站点)的含义可以从下述几个方面理解:
site是指相互之间具备IP连通性的一组IP系统,并且这组IP系统的IP连通性不需通过服务提供商网络实现。
如图7-3所示,左半边的网络中,A市X公司总部网络是一个site;B市X公司分支机构网络是另一个site。Site内部IP设备的互通不需要通过运营商网络。
Site的划分是根据设备的拓扑关系,而不是地理位置,尽管在大多数情况下一个site中的设备地理位置相邻。地理位置隔离的两组IP系统,如果它们使用专线互联,不需要通过服务提供商网络就可以互通,那么这两组IP系统也组成一个site。
如图7-3所示,右半边网络,如果B市的分支机构网络不通过服务提供商网络,而是通过专线直接与A市的总部相连,那么A市的总部网络与B市的分支机构网络构成了一个site。
一个site中的设备可以属于多个VPN,换言之,一个site可以属于多个VPN。
如图7-4所示,X公司位于A市的决策部网络(Site A)允许与位于B市的研发部网络(Site B)和位于C市的财务部网络(Site C)互通。但是不允许Site B与Site C互通。这种情况下,可以构建两个VPN(VPN1和VPN2),Site A和Site B属于VPN1,Site A和Site C属于VPN2。这样,Site A就属于多个VPN。
Site通过CE连接到服务提供商网络,一个site可以包含多个CE,但一个CE只属于一个site。
根据site的情况,建议CE设备选择方案如下:
如果site只是一台主机,则这台主机就作为CE设备;
如果site是单个子网,则使用交换机作为CE设备;
如果site是多个子网,则使用路由器作为CE设备。
对于多个连接到同一服务提供商网络的site,通过制定策略,可以将它们划分为不同的集合(set),只有属于相同集合的site之间才能通过服务提供商网络互访,这种集合就是VPN。
地址空间重叠
VPN是一种私有网络,不同的VPN独立管理自己的地址范围,也称为地址空间(Address Space)。不同VPN的地址空间可能会在一定范围内重合,例如,VPN1和VPN2都使用10.110.10.0/24网段地址,这就发生了地址空间的重叠(Address Spaces Overlapping)。
以下两种情况允许VPN使用重叠的地址空间:
两个VPN没有共同的site;
两个VPN有共同的site,但此site中的设备不与两个VPN中使用重叠地址空间的设备互访。
VPN实例
CE设备属于用户设备,无需感知到公网和其他的私网的存在,因此CE只需要将本地私网路由传输给PE即可。运营商的PE设备一般会与多个不同私网的CE相连,所以PE设备会收到来自不同私网的路由。由于各个私网可能会使用重叠的地址空间,导致这些私网路由会携带相同的目的地址。如果PE只维护一张路由转发表,将使这些地址重叠的路由相互覆盖造成路由丢失。因此为了避免这种情况发生,VPN技术中产生了VPN实例(VPN-instance)这个概念。
VPN实例也称为VPN路由转发表VRF(VPN Routing and Forwarding table)。PE上存在多个路由转发表,包括一个公网路由转发表,以及一个或多个VPN路由转发表。也就是说,PE上存在多个实例,包括一个公网实例和一个或多个VPN实例,如图7-5所示。各个VPN实例维护各自VPN的路由,公网实例维护公网路由,这样防止了路由因目的地址重叠而在PE上丢失。
公网路由转发表与VPN路由转发表存在以下不同:
公网路由表包括所有PE和P设备的IPv4路由,由骨干网的路由协议或静态路由产生。
VPN路由表包括属于该VPN实例的所有site的路由,通过CE与PE之间或者两个PE之间的VPN路由信息交互获得。
公网转发表是根据路由管理策略从公网路由表提取出来的最小转发信息;而VPN转发表是根据路由管理策略从对应的VPN路由表提取出来的最小转发信息。
可以看出,PE上的各VPN实例之间相互独立,并与公网路由转发表相互独立。
可以将每个VPN实例看作一台虚拟的设备:维护独立的地址空间并有连接到该设备的接口。
在相关标准(BGP/MPLS IP VPNs)中,VPN实例被称为per-site forwarding table,顾名思义,VPN实例与site对应。更准确的描述是:每条CE与PE的连接对应一个VPN实例(但不是一一对应关系),实现这种对应关系的方法是将VPN实例和PE上与CE直接相连的接口关联(或称为绑定),这需要手工设置。
VPN实例通过路由标识符RD(Route Distinguisher)实现地址空间独立,通过VPN Target属性实现直连site及远端site的VPN成员关系和路由规则控制。
VPN、Site和VPN实例的关系
VPN、Site、VPN实例之间的关系如下:
VPN是多个site的组合。一个site可以属于多个VPN。
每一个site在PE上都关联一个VPN实例。VPN实例综合了它所关联的site的VPN成员关系和路由规则。多个site根据VPN实例的规则组合成一个VPN。
RD和VPN-IPv4地址
传统BGP无法正确处理地址空间重叠的VPN的路由。假设VPN1和VPN2都使用了10.110.10.0/24网段的地址,并各自发布了一条去往此网段的路由。虽然本端PE通过不同的VPN实例可以区分地址空间重叠的VPN的路由,但是这些路由发往对端PE后,由于不同VPN的路由之间不进行负载分担,因此对端PE将根据BGP选路规则只选择其中一条VPN路由,从而导致去往另一个VPN的路由丢失。
产生上述问题的原因是BGP无法区分不同VPN中相同的IP地址前缀,为解决这一问题,BGP/MPLS IP VPN使用了VPN-IPv4地址族。
VPN-IPv4地址共有12个字节,包括8字节的路由标识符RD(Route Distinguisher)和4字节的IPv4地址前缀,如图7-6所示。
其中RD用于区分使用相同地址空间的IPv4前缀。RD的结构使得每个服务供应商可以独立地分配RD,但为了在CE双归属的情况下保证路由正常,必须保证RD全局唯一。增加了RD的IPv4地址称为VPN-IPv4地址。PE从CE接收到IPv4路由后,转换为全局唯一的VPN-IPv4路由,并在公网上发布。
VPN Target
BGP/MPLS IP VPN使用64位的BGP扩展团体属性-VPN Target(也称为Route Target)来控制VPN路由信息的发布。
每个VPN实例关联一个或多个VPN Target属性。有两类VPN Target属性:
Export Target(ERT):本地PE从直接相连site学到IPv4路由后,转换为VPN IPv4路由,并为这些路由设置Export Target属性。Export Target属性作为BGP的扩展团体属性随路由发布。
Import Target(IRT):PE收到其它PE发布的VPN-IPv4路由时,检查其Export Target属性。当此属性与PE上某个VPN实例的Import Target匹配时,PE就把路由加入到该VPN实例的路由表。
也就是说,VPN Target属性定义了一条VPN路由可以为哪些site所接收,以及PE可以接收哪些site发送来的路由。
当收到直连CE传过来的路由时,PE将该路由与一个或多个Export Target属性关联。Export Target属性将和VPN-IPv4路由一起由BGP发布给其他相关的PE。当这些相关的PE收到该VPN-IPv4路由时,将其Export Target属性与本设备所有的VPN实例的Import Target属性值比较。如果相等,就将该路由注入到该VPN路由表。
使用VPN Target而不直接用RD作为BGP扩展团体属性的原因在于:
一条VPN-IPv4路由只能有一个RD,但可以关联多个VPN Target属性;BGP如果携带多个扩展团体属性,可以提高网络的灵活性和可扩展性。
VPN Target用于控制同一PE上不同VPN之间的路由发布。即,同一PE上的不同VPN之间可以设置匹配的VPN Target来实现路由的互相引入。
在同一PE上,不同VPN具有不同的RD,而BGP携带的扩展团体属性是有限的,如果直接用RD作为BGP扩展团体属性来实现路由的互相引入,势必影响网络的扩展。
在BGP/MPLS IP VPN网络中,通过VPN Target属性来控制VPN路由信息在各site之间的发布和接收。VPN Export Target和Import Target的设置相互独立,并且都可以设置多个值,能够实现灵活的VPN访问控制,从而实现多种VPN组网方案。
MP-BGP
传统的BGP-4相关标准只能管理IPv4的路由信息,无法正确处理地址空间重叠的VPN的路由。
为了正确处理VPN路由,VPN使用相关标准(Multiprotocol Extensions for BGP-4)中规定的MP-BGP,即BGP-4的多协议扩展。MP-BGP实现了对多种网络层协议的支持,在Update报文中,将网络层协议信息反映到NLRI(Network Layer Reachability Information)及下一跳。
MP-BGP采用地址族(Address Family)来区分不同的网络层协议,既可以支持传统的IPv4地址族,又可以支持其它地址族(比如VPN-IPv4地址族、IPv6地址族等)。关于地址族的一些取值可以参考相关标准(Assigned Numbers)。
BGP/MPLS IP VPN路由发布过程
本地CE到入口PE的路由信息交换
CE与直接相连的PE建立邻居或对等体关系后,把本站点的IPv4路由发布给PE。CE与PE之间可以使用静态路由、RIP、OSPF、IS-IS或BGP。无论使用哪种路由协议,CE发布给PE的都是标准的IPv4路由。
为了防止私网间地址空间重叠的问题,PE上各VPN路由转发表(VPN实例)之间相互隔离,并与公网路由转发表相互独立。PE从CE学习路由信息时,PE需要区分该路由应注入哪个路由转发表。通常的静态路由和路由协议自身并不具备这种区分能力,必须使用手工配置实现。
入口PE到出口PE的路由信息交换
入口PE到出口PE的路由信息交换过程可分为两部分:
PE从CE学到VPN路由信息后,存放到VPN实例中。同时,为这些标准IPv4路由增加RD,形成VPN-IPv4路由。
入口PE通过MP-BGP把VPN-IPv4路由发布给出口PE。Update报文中还携带VPN-Target属性及MPLS标签。
BGP发布的VPN-IPv4路由,要通过BGP路由策略(VRF出口策略和peer出口策略)的过滤,才能被下一跳PE接收到。
出口PE收到VPN-IPv4路由后,在下一跳可达并且通过BGP的peer入口策略的情况下进行私网路由交叉(交叉过程中要通过VRF入口策略)、隧道迭代和路由优选,决定是否将该路由加入到VPN实例的路由表。从其他PE接收的路由将被根据VPN-Target属性被加入到对应的VPN路由表中,同时本地PE为其保留如下信息以供后续转发报文时使用:
MP-BGP Update消息中携带的MPLS标签值
隧道迭代成功后的Tunnel ID
出口PE到远端CE的路由信息交换
远端CE有多种方式可以从出口PE学习VPN路由,包括静态路由、RIP、OSPF、IS-IS和BGP,与本地CE到入口PE的路由信息交换相同。此处不再赘述。值得注意的是,出口PE发布给远端CE的路由是普通IPv4路由。
PE上对于来自本地CE的属于不同VPN的路由,如果其下一跳直接可达或可迭代成功,PE也将其与本地的其他VPN实例的Import Target属性匹配,该过程称为本地路由交叉。在进行本地路由交叉时要通过VRF入口策略,该入口策略用来过滤部分路由并为通过过滤的路由修改属性。
BGP/MPLS IP VPN的报文转发过程
在BGP/MPLS IP VPN骨干网中,P设备并不知道VPN路由信息,VPN报文通过隧道在PE之间转发。以图7-7为例说明BGP/MPLS IP VPN报文的转发过程。图7-7是CE1发送报文给CE2的过程。其中,I-L表示内层标签,O-L表示外层标签。外层标签用来指示如何到达BGP下一跳,内层标签表示报文的出接口或者属于哪个VPN。
- CE1向Ingress PE发送一个VPN报文。
- Ingress PE从绑定了VPN实例的接口上接收VPN数据包后进行如下操作:
- 先根据绑定的VPN实例的RD查找对应VPN的转发表。
- 匹配目的IPv4前缀,查找对应的Tunnel-ID。
- 将报文打上对应的标签(I-L),根据Tunnel-ID找到隧道。
- 将报文从隧道发送出去。此例的隧道是LSP,并打上公网(外层)MPLS标签头(O-L1)。
- 报文携带两层标签穿越骨干网。骨干网的每台P设备都对该报文进行外层标签交换。
- Egress PE收到该携带两层标签的报文,交给MPLS协议处理。MPLS协议将去掉外层标签。
此例最后的外层标签是O-L2,但如果应用了倒数第二跳弹出,则此标签会在到达Egress PE之前的一跳弹出,Egress PE只能收到带有内层标签的报文。
- Egress PE将处于栈底的内层标签剥离。
- Egress PE将报文从对应出接口发送给CE2。此时报文为纯IP报文。
这样报文就成功地从CE1传到CE2了。CE2按照普通的IP转发过程将报文传送到目的地。
使用价值
- 实现客户不同地理区域的网络互通。
- 保障客户私有网络数据在公网传输过程中的安全性。