跳到主要内容

1. 引言

1. 引言 (Introduction)​

本文描述一种方法,使服务提供商(Service Provider,简称 SP)能够使用其 IP 骨干网(backbone)为客户建立 IP 虚拟专用网络(Virtual Private Networks,简称 VPN)。该方法采用"对等模型"(peer model):客户边缘路由器(Customer Edge router,简称 CE 路由器)将其路由(route)发送给服务提供商边缘路由器(Provider Edge router,简称 PE 路由器);随后服务提供商使用边界网关协议(Border Gateway Protocol,简称 BGP)[BGP, BGP-MP],在连接到同一个 VPN 的各个 PE 路由器之间交换该 VPN 的路由。即便两个 VPN 的地址空间(address space)相互重叠,这种方式也能确保来自不同 VPN 的路由彼此保持独立与隔离。PE 路由器会把某个 VPN 中其他 CE 路由器的路由分发给该 VPN 内的 CE 路由器。由于 CE 路由器之间并不建立对等关系,VPN 的路由算法(routing algorithm)看不到任何"叠加层"(overlay)。"IP VPN"中的"IP"表示:PE 从 CE 接收 IP 数据报(datagram),检查其 IP 头部(header),并据此进行路由转发。

VPN 内的每一条路由都会被分配一个多协议标签交换(Multiprotocol Label Switching,简称 MPLS)[MPLS-ARCH, MPLS-BGP, MPLS-ENCAPS] 标签(label);当 BGP 分发一条 VPN 路由时,它同时也会为该路由分发一个 MPLS 标签。在客户数据报文(packet)穿越服务提供商骨干网之前,会用一个 MPLS 标签对其进行封装,该标签对应于客户 VPN 中与报文目的地址(destination address)最匹配的路由。随后,这个 MPLS 报文会被进一步封装(例如,再使用一个 MPLS 标签,或使用 IP 或通用路由封装(Generic Routing Encapsulation,简称 GRE)隧道头(tunnel header)[MPLS-in-IP-GRE]),从而通过隧道(tunnel)穿越骨干网抵达正确的 PE 路由器。因此,骨干网核心路由器(backbone core router,即 P 路由器)无需知晓任何 VPN 路由。

该方法的主要目标是支持这样一种情形:客户从一个或多个与其保持合同关系的服务提供商处获取 IP 骨干网服务。客户可以是一个企业、需要外部网(extranet)的一组企业、互联网服务提供商(Internet Service Provider)、应用服务提供商(application service provider),或是使用同一方法向自身客户提供 VPN 的另一个 VPN 服务提供商,等等。该方法让客户能够极其简便地使用骨干网服务;对服务提供商而言,它同样具有良好的可扩展性与灵活性,并允许服务提供商在之上增加价值。

1.1. 虚拟专用网络 (Virtual Private Networks)​

考虑一组连接到某个公共网络的"站点"(site),我们将这个公共网络称为"骨干网"(backbone)。现在施加某种策略(policy),在该站点集合中划分出若干子集,并规定如下规则:只有当某个子集同时包含其中两个站点时,这两个站点才能通过该骨干网建立 IP 互连。

这些子集就是虚拟专用网络(VPN)。只有当存在某个同时包含两个站点的 VPN 时,这两个站点才能通过该公共骨干网获得 IP 连通性(connectivity)。若两个站点不共属任何 VPN,则它们在该骨干网上没有连通性。

如果某个 VPN 内的所有站点都归同一家企业所有,则该 VPN 可视为企业的"内部网"(intranet);如果某个 VPN 内不同站点分属不同企业,则该 VPN 可视为"外部网"(extranet)。一个站点可以属于多个 VPN,例如,同时属于一个内部网和若干个外部网。一般而言,当本文使用"VPN"一词时,并不区分内部网与外部网。

我们将站点的拥有者称为"客户"(customer);将骨干网的拥有者或运营者称为"服务提供商"(Service Provider,简称 SP)。客户从 SP 处获得"VPN 服务"(VPN service)。

一个客户可以是单个企业、一组企业、互联网服务提供商、应用服务提供商、或是向自身客户提供更同类 VPN 服务的另一个 SP,等等。

决定某个站点集合是否构成 VPN 的策略属于客户的策略。某些客户希望这些策略完全由 SP 负责实现;另一些客户则可能希望与 SP 共同承担实现责任。本文规定了可用于实现这些策略的机制。我们所描述的机制具有足够的通用性,既支持由 SP 单独实现,也支持由 VPN 客户与 SP 协作实现;不过,讨论的重点大部分放在前一种情形。

本文讨论的机制能够实现范围广泛的策略。例如,在某个给定 VPN 内,可以允许每个站点都拥有到其他每个站点的直接路由("全互连",full mesh);也可以强制某些站点对之间的流量(traffic)经由第三个站点路由。例如,若希望一对站点之间的流量通过防火墙(firewall),且该防火墙位于第三个站点,这种方式就非常有用。

在本文中,我们将讨论限定在客户明确从某个 SP、或一组已约定协作提供 VPN 服务的 SP 处购买 VPN 服务的情形。也就是说,客户并非仅仅从某个 SP 购买互联网接入(Internet access),VPN 流量也不会经由一组随机互连的 SP 网络(networks)。

我们还将讨论限定在骨干网向客户提供 IP 服务(而非例如帧中继(Frame Relay)、异步传输模式(Asynchronous Transfer Mode,简称 ATM)、以太网(ethernet)、高级数据链路控制(High Level Data Link Control,简称 HDLC)或点对点协议(Point-to-Point Protocol,简称 PPP)等二层(layer 2)服务)的情形。客户可以通过这些(或其他)二层服务之一连接到骨干网,但该二层服务在骨干网的"边缘"(edge)处终止,在那里客户的 IP 数据报会从任何二层封装(encapsulation)中被取出。

在本引言的其余部分,我们先规定 VPN 应具备的一些属性;本文其余部分规定了一组可部署的机制,用于提供具备所有这些属性的 VPN 模型(model)。本节还介绍了本文其余部分用到的一些技术术语。

1.2. 客户边缘与提供商边缘 (Customer Edge and Provider Edge)​

路由器(router)可以通过多种不同方式相互连接,或连接到终端系统(end system):PPP 连接、ATM 虚电路(Virtual Circuit,简称 VC)、帧中继 VC、以太网接口、以太网接口上的虚拟局域网(Virtual Local Area Network,简称 VLAN)、GRE 隧道、第二层隧道协议(Layer 2 Tunneling Protocol,简称 L2TP)隧道、IPsec 隧道,等等。我们将使用"连接电路"(attachment circuit)一词来泛指连接到路由器的此类手段。连接电路可以是通常被视为"数据链路"(data link)的那种连接,也可以是某种隧道;关键在于两个设备能够经由该连接电路成为网络层(network layer)对等体(peer)。

每个 VPN 站点必须包含一个或多个客户边缘(Customer Edge,简称 CE)设备(device)。每个 CE 设备通过某种连接电路连接到一个或多个提供商边缘(Provider Edge,简称 PE)路由器。

SP 网络中不连接 CE 设备的路由器称为"P 路由器"(P router)。

CE 设备可以是主机(host)或路由器。在典型情形下,一个站点包含一个或多个路由器,其中一些连接到 PE 路由器。连接到 PE 路由器的站点路由器即为 CE 设备,或称"CE 路由器"。不过,也没有什么能阻止一个不执行路由功能的主机直接连接到 PE 路由器——在这种情况下,该主机就是一个 CE 设备。

有时,物理连接到 PE 路由器的是一台二层交换机(layer 2 switch)。在这种情况下,我们不将该二层交换机称为 CE 设备;相反,CE 设备是通过该二层交换机与 PE 路由器通信的主机和路由器,二层基础设施(infrastructure)是透明的。如果二层基础设施提供多点(multipoint)服务,则多个 CE 设备可以通过同一个连接电路连接到 PE 路由器。

CE 设备在逻辑上属于客户的 VPN;PE 与 P 路由器在逻辑上属于 SP 的网络。

报文从 CE 发往 PE 时所经过的连接电路称为该报文的"入向连接电路"(ingress attachment circuit),该 PE 称为该报文的"入向 PE"(ingress PE);报文从 PE 发往 CE 时所经过的连接电路称为该报文的"出向连接电路"(egress attachment circuit),该 PE 称为该报文的"出向 PE"(egress PE)。

如果某个 PE 路由器连接到了某个 VPN 的某个站点中的 CE 设备,我们就说该 PE 路由器"连接到这个特定 VPN";类似地,如果某个 PE 路由器连接到了某个站点中的 CE 设备,我们就说该 PE 路由器"连接到这个特定站点"。

当 CE 设备是路由器时,它是其所连接的 PE(或各 PE)的路由对等体,但不是其他站点中 CE 路由器的路由对等体。不同站点中的路由器并不直接相互交换路由信息(routing information);实际上,它们甚至完全无需知道彼此的存在。因此,客户没有需要管理的骨干网或"虚拟骨干网"(virtual backbone),也不必处理任何站点间路由(inter-site routing)问题。换言之,在本文描述的方案中,VPN 并不是叠加在 SP 网络之上的"叠加层"(overlay)。

关于边缘设备的管理,SP 与其客户之间保持着清晰的管理边界。客户无需出于管理目的访问 PE 或 P 路由器,SP 也无需出于管理目的访问 CE 设备。

1.3. 地址空间重叠的 VPN (VPNs with Overlapping Address Spaces)​

如果两个 VPN 没有共同的站点,则它们可以拥有重叠的地址空间。也就是说,某个给定地址在 VPN V1 中可用作系统(system)S1 的地址,而在 VPN V2 中用作完全不同的系统 S2 的地址。当各 VPN 都使用 RFC 1918 私有地址空间(private address space)时,这是常见情形。当然,在每个 VPN 内部,每个地址必须无歧义。

即使两个 VPN 确实有共同站点,只要不需要在具有此类地址的系统与共同站点中的系统之间进行任何通信,它们也可以拥有重叠的地址空间。

1.4. 到同一系统具有不同路由的 VPN (VPNs with Different Routes to the Same System)​

虽然一个站点可以属于多个 VPN,但到该站点中某个给定系统的路由并不一定在所有 VPN 中都相同。例如,假设我们有一个由站点 A、B、C 组成的内部网,以及一个由 A、B、C 和"外部"(foreign)站点 D 组成的外部网。假设站点 A 上有一台服务器(server),我们希望来自 B、C 或 D 的客户端(client)都能使用该服务器。再假设站点 B 上有一个防火墙。我们希望从站点 D 到该服务器的所有流量都经过该防火墙,以便对来自外部网的流量进行访问控制。但是,我们不希望从 C 到该服务器的流量经过防火墙,因为那是内部网流量。

可以为该服务器设置两条路由。一条路由由站点 B 和 C 使用,将流量直接送往站点 A;第二条路由由站点 D 使用,改为将流量送往站点 B 的防火墙。如果防火墙允许该流量通过,那么该流量随后看起来就像是来自站点 B 的流量,并沿着通往站点 A 的路由被转发。

1.5. SP 骨干网路由器 (SP Backbone Routers)​

SP 的骨干网由 PE 路由器以及其他不连接 CE 设备的路由器(即"P 路由器")组成。

如果 SP 骨干网中的每台路由器都必须维护该 SP 所支持的全部 VPN 的路由信息(routing information),就会出现严重的可扩展性问题——可支持的站点数量将受限于单台路由器所能保存的路由信息量。因此,关键在于:关于某个特定 VPN 的路由信息只需存在于连接到该 VPN 的 PE 路由器中。特别地,P 路由器完全不需要任何"逐 VPN"的路由信息。(在考虑组播路由(multicast routing)时,这一条件或许需要放宽;本文不再进一步讨论,但 [VPN-MCAST] 对其进行了探讨。)

因此,正如 VPN 拥有者没有需要管理的骨干网或"虚拟骨干网"一样,SP 自身也无需为每个 VPN 管理单独的骨干网或"虚拟骨干网"。骨干网中的站点间路由是最优的(在用于构建 VPN 的策略约束范围内),且不受任何人为的隧道"虚拟拓扑"(virtual topology)以任何方式限制。

第 10 节将讨论当骨干网跨越多个服务提供商时出现的一些特殊问题。

1.6. 安全性 (Security)​

本文讨论的这类 VPN,即便不使用加密安全措施,也旨在提供与使用二层骨干网(例如帧中继)时可获得的安全级别相当的安全性。也就是说,在不存在错误配置、也未被故意将不同 VPN 互连的情况下,一个 VPN 中的系统不可能访问另一个 VPN 中的系统。当然,本文描述的方法本身并不会为了保密而对数据进行加密,也不提供判断数据在传输途中是否被篡改的手段。如果需要这些能力,必须另行应用加密措施。(参见例如 [MPLS/BGP-IPsec]。)第 13 节将更详细地讨论安全性。