第 4 章 虚拟专用网络(VPN)技术¶
4.1 概述¶
VPN(Virtual Private Network)即“虚拟专用网络”是企业网在因特网(或其他公共网络)上的扩展。
VPN 在因特网上开辟一条安全的隧道,以保证两个端点(或两个局域网)之间的安全通信。
VPN 构建于廉价的因特网之上,可以实现远程主机与局域网(内网)之间的安全通信,也可以实现任何两个局域网之间的安全连接。
Microsoft Windows 和 Linux 的任何一个版本都可以用作 VPN 客户端,Windows Server 以及 Linux 的服务器版本均可以配置为 VPN 服务器。因此,从经济性和安全性考虑,VPN 是企业实现安全通信的一个很好的选择。
4.1.1 VPN 的功能和原理¶
VPN 的功能是将因特网虚拟成路由器,将物理位置分散的局域网和主机虚拟成一个统一的虚拟企业网。
VPN 综合利用了隧道技术、加密技术、鉴别技术和密钥管理等技术,在公共网络之上建立一个虚拟的安全通道,实现两个网络或两台主机之间的安全连接。
图 1 所示的是企业使用 VPN 的两种典型模式。
图 2 VPN 将因特网虚拟成一个路由器
4.1.2 VPN 的分类¶
根据应用场合,VPN 可以大致分为二类:远程访问 VPN 和网关—网关 VPN。
从应用的观点分类¶
-
远程访问 VPN
它是为企业员工从外地访问企业内网而提供的 VPN 解决方案,如图 1(a) 所示。
当公司的员工出差到外地需要访问企业内网的机密信息时,为了避免信息传输过程中的泄密,他们的主机首先以 VPN 客户端的方式连接到企业的远程访问VPN服务器,此后远程主机到内网主机的通信将加密,从而保证了通信的安全性。
-
网关—网关 VPN
也称为“网络—网络 VPN”,如图 1(b) 所示。
这种方案通过不安全的因特网实现两个或多个局域网的安全互联。在每个局域网的出口处设置 VPN 服务器,当局域网之间需要交换信息时,两个 VPN 服务器之间建立一条安全的隧道,保证其中的通信安全。
这种方式适合企业各分支机构、商业合作伙伴之间的网 络互联。
按隧道协议分类¶
隧道协议(Tunneling Protocol)是一个网络协议的载体。使用隧道的原因是在不兼容的网络上传输数据,或在不安全网络上提供一个安全路径。
隧道协议可能使用数据加密技术来保护所传输的数据。
隧道协议实现在 OSI 模型或 TCP/IP 模型的各层协议栈。根据 VPN 协议在 OSI(7 层)模型的实现层次,VPN 大致可以分为:
- 第 2 层隧道协议
- 第 3 层隧道协议
- 第 4 层隧道协议
-
以及基于第 2、3 层隧道协议(MPLS)之间的 VPN。
-
第 2 层隧道协议
主要包括点到点隧道协议(PPTP)、第二层转发协议(L2F)、第2层隧道协议(L2TP)。主要用于实现远程访问 VPN。
主要是 IP 安全(IPSec),用于在网络层实现数据包的安全封装。
-
第 3 层隧道协议
IPSec 主要用于实现网关—网关 VPN,也可实现主机—主机的安全连接。
-
第 4 层隧道协议(SSL)
在传输层上实现数据的安全封装,主要用于保护两台主机的两个进程间的安全通信。安全的 Web、安全的电子邮件等均使用了第 4 层隧道协议。
-
基于第 2、3 层隧道协议
也称为 2.5 层隧道协议,是利用 MPLS 路由器的标签特性实现的 VPN
隧道协议与 OSI 分层协议模型¶
4.2 基于第 2 层隧道协议的 VPN¶
第 2 层隧道协议在数据链路层对数据报进行封装,主要用于远程访问 VPN。
目前常用的有点到点隧道协议(PPTP)、第二层转发协议(L2F)、第 2 层隧道协议(L2TP)。
4.2.1 PPTP VPN¶
点对点隧道协议(Point to Point Tunneling Protocol,缩写为PPTP)是实现虚拟专用网(VPN)的方式之一。PPTP 使用传输控制协议(TCP)创建控制通道来传送控制命令,以及利用通用路由封装(GRE)通道来封装点对点协议(PPP)数据包以传送数据。
这个协议最早由微软等厂商主导开发,但因为它的早期版本加密方式容易被破解,微软已经不再建议老版本的 Windows 系统使用这个协议。新版本的 Windows 系统已经对安全进行了增强,安全性能有保障,可以使用。
PPTP 协议¶
PPTP 的协议规范本身并未描述加密或身份验证的部份,它依靠点对点协议(PPP)来实现这些安全性功能。
因为 PPTP 协议内置在微软 Windows 家族的各个产品中,在微软点对点协议(PPP)协议堆栈中,提供了各种标准的身份验证与加密机制来支持 PPTP。
在微软 Windows 中,它可以搭配 PAP、CHAP、MS-CHAP v1/v2 或 EAP-TLS 来进行身份验证。通常也可以搭配微软点对点加密(MPPE)或 IPSec 的加密机制来提高安全性。
在 Windows 或 Mac OS 平台之外,Linux 与 FreeBSD 等平台也提供开放源代码的版本。
PPTP 是由微软、Ascend Communications(现在属于 Alcatel-Lucent 集团)、3Com 等厂商联合形成的产业联盟开发。1999 年 7 月出版的 RFC 2637 是第一个正式的 PPTP 规格书。
PPTP 以通用路由封装(GRE)协议向对方作一般的点对点传输。通过 TCP 1723 端口来发起和管理 GRE 状态。因为 PPTP 需要 2 个网络状态,因此会对穿越防火墙造成困难。很多防火墙不能完整地传递连接,导致无法连接。
在 Windows 或 Mac OS 平台,通常 PPTP 可搭配 MSCHAP-v2 或 EAP-TLS 进行身份验证 ,也可配合微软点对点加密(MPPE)进行连接时的加密。
PPTP 的实现¶
PPTP 因为易于设置和使用而流行。自 Microsoft Windows 95 OSR2 开始的 Windows 系统包含 PPTP 客户端,而自 Windows NT 开始的服务器版本在其“路由和远程访问服务”中实现了 VPN 服务。
以往,Linux 缺乏完整的 PPTP 支持,这是因为 MPPE 是软件专利。但是,自从在 2005 年 10 月 28 日发布的 Linux 2.6.14 开始,Linux 核心提供完整的 PPTP 支持(包含对 MPPE 的支持)。
4.2.2 L2TP VPN¶
第二层隧道协议(Layer Two Tunneling Protocol,缩写为 L2TP) 是一种由 RFC 2661 定义的数据链路层隧道协议,是一种虚拟隧道协议,通常用于虚拟专用网。
互联网工程任务组于 1999 年 8 月发布 RFC 2661,制定了 L2TP 协议的标准。2005 年,互联网工程任务组发布 RFC 3931,制定了该协议标准的新版本——L2TPv3。
L2TP 协议自身不提供加密与可靠性验证的功能,可以和安全协议搭配使用,从而实现数据的加密传输。经常与 L2TP 协议搭配的加密协议是 IPsec,当这两个协议搭配使用时,通常合称 L2TP/IPsec。
L2TP 支持包括 IP、ATM、帧中继、X.25 在内的多种网络。在 IP 网络中,L2TP 协议使用了 UDP 1701 端口。因此,在某种意义上,尽管 L2TP 协议的确是一个数据链路层协议,但在 IP 网络中,它又的确是一个会话层协议。
4.2.3 基于第 2 层隧道协议的 VPN 实例¶
用 Windows 2003 实现远程访问 VPN¶
基于第 2 层隧道协议的 PPTP VPN 用于实现主机到企业内网的远程访问。PPTP VPN 由 PPTP VPN 客户端和 PPTP VPN 服务器组成。Windows 系统的桌面版本如 Windows XP、Windows Vista、Windows 7、Windows 8、Windows 10 以及 Windows 的服务器版本均包含了 PPTP VPN 客户端软件,而 Windows 的服务器版本包含了 PPTP VPN 服务器软件。
在此以 Windows XP 和 Windows Server 2003 为例说明 PPTP VPN 的配置及使用方法。
教程此处省略
4.3 基于第 3 层隧道协议的 IPSec VPN¶
互联网安全协议(Internet Protocol Security,缩写为 IPsec),是通过对 IP 协议(互联网协议)的分组进行加密和认证来保护 IP 协议的网络传输协议族(一些相互关联的协议的集合)。
第一版 IPsec 协议在 RFC 2401-2409 中定义。第二版 IPsec 协议的标准文档在 2005 年发布,新的文档定义在 RFC 4301-RFC 4309 中。
IPsec 协议工作在 OSI 模型的第三层(网络层或 TCP/IP 模型的 IP 层),使其在单独使用时适于保护基于 TCP 或 UDP 的协议(如安全套接子层(SSL)就不能保护 UDP 层的通信流)。这就意味着,与传输层或更高层的协议相比,IPsec 协议必须处理可靠性和分片的问题,这同时也增加了它的复杂性和处理开销。
相对而言,SSL/TLS 依靠更高层的 TCP(OSI 的第四层)来管理可靠性和分片。
4.3.1 IPSec 的组成和工作模式¶
IPSec 是一个开放的标准,由一序列的协议组成,其中最重要的协议有三个:
- 认证头 AH (Authentication Headers):AH 为 IP 数据报实现无连接的完整性和数据源认证功能,并能抵抗重放攻击。
- 封装安全有效载荷 ESP (Encapsulating Security Payloads):ESP 实现保密性、数据源认证、无连接的完整性、抵抗重放攻击的服务(一种形式的部分序列完整性)和有限的网络流的保密性。
- 安全联盟 SA (Security Associations):SA给出算法和数据的集合,以向 AH 或 ESP 的操作提供必须的参数。安全联盟和密钥管理协议 ISAKMP(Internet Security Association and Key Management Protocol)提供了认证和密钥交换的框架。该框架支持手工配置的预共享密钥以及通过其他方法获得的密钥,这些方法包括:Internet 密钥交换(IKE 和 IKEv2 协议)、KINK(Kerberized Internet Negotiation of Keys)、IPSECKEY DNS 记录。
IPSec 有两种工作模式:传输模式和隧道模式。
- 传输模式用于两台主机之间的连接,在 IP 层封装主机—主机的分组;
- 隧道模式用于两个网关之间的连接,在 IP 层封装网关—网关的分组,可穿过公共网络(如 Internet)实现局域网之间的互联。AH 和 ESP 均支持传输模式和隧道模式,实现认证和(或)加密等安全功能。
4.3.2 认证协议 AH¶
IP 认证头 AH(IP Authentication Header)定义在 RFC 4302 中,实现 IP 数据报的认证、完整性和抗重放攻击。
AH 数据报直接封装在 IP 数据报中,如果 IP 数据包的协议字段为 51,表明 IP 头之后是一个 AH 头。
AH 和 ESP 同时保护数据时,在顺序上,AH 头在 ESP 头之后。
-
传输模式 AH:新 IP 头拷贝自原 IP 头,将协议字段改为 51,原协议字段拷贝到 AH 头的下一个头字段。
图 5(a) AH 的传输模式 -
隧道模式 AH:重建 IP 头,新 IP 头的 IP 地址改成网关的 IP 地址,协议字段为 51,AH 头中的下一个头为 4 或 41(对于 IPv6),原始数据包拷贝到 AH 头之后。
图 5(b) AH 的隧道模式
AH 头的格式¶
- 下一个头(Next Header):8-bits,标识 AH 头后的载荷(协议)类型。在传输模式下可为 6(TCP)或 17(UDP);在隧道模式下将是 4(IPv4)或 41(IPv6)。
- 载荷长度(Payload Length):8-bits,表示AH头本身的长度,以32-bits为单位。
- 保留(Reserved):16-bits,保留字段,未使用时必须设为0。
- 安全参数索引 SPI(Security Parameters Index):32-bits,接收方用于标识对应的安全关联(SA)。
- 序列号(Sequence Number):32-bits,是一个单向递增的计数器,提供抗重播功能(anti-replay)。
- 完整性验证数据 ICV(Integrity Check Value):这是一个可变长度(必须是 32 比特的整数倍)的域,长度由具体的验证算法决定。完整性验证数据 ICV 验证 IP 数据包的完整性,因此 ICV 的计算包含了整个 IP 数据包。
4.3.3 封装安全载荷 ESP¶
IP 封装安全载荷 ESP(IP Encapsulating Security Payload)定义在 RFC 4303 中,实现 IP 数据报的认证、完整性、抗重放攻击和加密。
ESP 可以实现 AH 的所有功能,然而由于 AH 比 ESP 出现得更早,AH 至今未被废弃。
与 AH 协议一样,ESP 的数据报也直接封装在 IP 数据报中,如果 IP 数据包的协议字段为 50,表明 IP 头之后是一个 ESP 数据报。
ESP 数据报由四部分组成,分别是:头部、加密数据(包括 ESP 尾)和 ESP 验证数据。
-
传输模式 ESP:新 IP 头拷贝自原 IP 头,将协议字段改为 50,原协议字段拷贝到 ESP 尾的下一个头。
图 7(a) 传输模式的 ESP -
隧道模式 ESP:重建 IP 头,新 IP 头的 IP 地址改成网关的 IP 地址,协议字段为 50,ESP 尾中的下一个头为 4 或 41(对于 IPv6),原始数据包和 ESP 尾加密后拷贝到 ESP 头之后
图 7(b) 隧道模式的 ESP
ESP 的数据报格式¶
- 安全参数索引 SPI(32-bits):在IKE交换过程中由目标主机选定,与 IP 头之前的目标地址以及协议结合在一起,用来标识用于处理数据包的特定的那个安全关联。SPI 经过验证,但并未加密。
- 序列号(32-bits):它是一个唯一的单向递增的计数器,与 AH 类似,提供抵抗重播攻击的能力。
- 填充项(0~255 bytes):由具体的加密算法决定。
- 填充长度(8-bits):接收端可以据此恢复载荷数据的真实长度。
- 下一个头(8-bits):标识受 ESP 保护的载荷的(协议)类型。在传输模式下拷贝自原 IP 数据报头中的协议值;在隧道模式下可为 4(IPv4)或 41(IPv6)。
- 验证数据(完整性校验值 ICV):一个经过密钥处理的散列值,验证范围包括 ESP 头部、被保护的数据以及 ESP 尾部。其长度与具体的验证算法有关,但必须是 32 bits 的整数倍。
4.3.4 安全关联与安全策略¶
在 AH 和 ESP 头中有一个 32 bits 的安全参数索引 SPI,用于标识通信的两端采用的 IPSec 安全关联 SA(Security Associations)。
SA 保存于通信双方的安全关联数据库中,SA 根据安全策略手工或自动创建,安全策略保存在安全策略数据库中。安全关联 SA 与安全策略定义在 RFC 4301 中。
(1) 安全关联与安全关联数据库¶
安全关联(SA)是两个通信实体协商建立起来的一种安全协定,例如,IPSec 协议(AH 或 ESP)、IPSec 的操作模式(传输模式和隧道模式)、加密算法、验证算法、密钥、密钥的存活时间等。安全关联SA是单工的(即单向的),输出和输入都需要独立的 SA。
SA 是通过 IKE 密钥管理协议在通信双方之间来协商的,协商完成后,通信双方都会在它们的安全关联数据库(SAD)中存储该 SA 参数。
一个安全关联由下面三个参数唯一确定:
- 安全参数索引号(SPI):一个与 SA 相关的位串,由 AH 和 ESP 携带,使得接收方能选择合适的 SA 处理数据包。
- IP 目的地址:目前只允许使用单一地址,表示 SA 的目的地址。
- 安全协议标识:标识该 SA 是 AH 安全关联或 ESP 安全关联。
安全关联(SA)的参数¶
- 序列号计数器:一个 32 位的值,用于生成 AH 或 ESP 头中的序号字段,在数据包的“外出”处理时使用。
- 序列号溢出:用于输出包处理,并在序列号溢出的时候加以设置,安全策略决定了一个 SA 是否仍可用来处理其余的包。
- 抗重放窗口:用于确定一个入栈的 AH 或 ESP 包是否是重放。
- AH 信息:AH 认证算法、密钥、密钥生存期和其他AH的相关参数。
- ESP 信息:ESP 认证和加密算法、密钥、初始值、密钥生存期和其他 ESP 的相关参数。
- SA 的生存期:一个 SA 最长能存在的时间。到时间后,一个 SA 必须用一个新的 SA 替换或终止。
- IPSec 协议模式:隧道、传输、通配符(隧道模式、传输模式均可)。
- 路径 MTU:在隧道模式下使用 IPSec 时,必须维持正确的 PMTU 信息,以便对这个数据包进行相应的分段。
(2) 安全策略和安全策略数据库 SPD¶
安全策略决定了为一个数据包提供的安全服务,它保存在安全策略数据库 SPD 中。SPD 中的每一个安全策略条目由一组 IP 和上层协议字段值组成,即下面提到的选择符。
安全策略数据库(SPD)记录了对 IP 数据流(根据源 IP、目的 IP、上层协议以及流入还是流出)采取的安全策略。每一安全策略条目可能对应零条或多条 SA 条目,通过使用一个或多个选择符来确定某一个 SA 条目。
IPSec 允许的选择符¶
- 目的 IP 地址:可以是主机地址、地址范围或者通配符。
- 源 IP 地址:可以是主机地址、地址范围或者通配符。
- 源/目的端口。
- 用户 ID:操作系统中的用户标识。
- 数据敏感级别。
- 传输层协议。
- IPSec 协议(AH,ESP,AH/ESP)。
- 服务类型(TOS)。
4.4 Windows 环境下的 VPN¶
目前流行的 Windows 系统各版本均支持远程访问 VPN 客户端,Windows Server 支持远程访问服务及 IPSec 服务。
本节详细介绍网关—网关VPN在Windows环境下的配置使用方法。
4.4.2 用 Windows 2003 实现网关—网关 VPN¶
- 目的
-
用 IPsec 隧道方式配置网关—网关 VPN,连接被 Internet 隔开的两个局域网(VMnet1 和 VMnet3),使之进行安全通信,实现信息的保密和完整。
- 设计
-
用 VMware 或 VirtualBox 模拟两个局域网和一个广域网(用路由器模拟)。每个局域网含若干台客户机和一台 Windows Server 2003 组成。具体设计和规划如下图:

虚拟网卡 VMnet1 和 VMnet2 分别模拟两个局域网,VMnet5、VMnet6 和 Router 模拟因特网,ServerA 和 ServerB 模拟互联网上的远程服务器(边界路由器),建立 IPSec 隧道以连接两个局域网,并保证通信安全。
此处省略大量图片