Friday, October 20, 2017

虚拟专用网络(VPN)连接基础

远程访问是指通过透明的方式将位于本地网络以外(远程网络)位置上的特定计算机连接到本地网络中的一系列相关技术。当启用远程访问时,远程客户可以通过远程访问技术像直接连接到本地网络一样来使用本地网络中的资源。在Windows服务器操作系统中均包含了远程访问服务,它是作为路由和远程访问服务中的一个组件,远程访问服务支持远程访问客户端使用拨号网络连接和虚拟专用网络连接这两种方式的远程访问:

  • 拨号网络连接远程访问方式:通过拨号远程访问方式,远程访问客户端可以利用电信基础设施(通常情况下为模拟电话线路)来创建通向远程访问服务器的临时物理电路或虚拟电路。一旦这种物理电路或虚拟电路被创建,其余连接参数将通过协商方式加以确定。
  • 虚拟专用网络(VPN)连接远程访问方式:通过虚拟专用网络远程访问方式,VPN客户端可以通过IP网络(例如Internet)与充当VPN服务器的远程访问服务器建立虚拟点对点连接。一旦这种虚拟点对点连接被创建,其余连接参数将通过协商方式加以确定。

由于IP网络的流行,拨号网络连接远程访问方式已经基本不再使用。在此我仅对虚拟专用网络(VPN)连接远程访问方式进行阐述。对于一个完整的VPN远程访问连接,它由以下元素组成:

远程访问VPN客户端

VPN客户端既可以是独立的计算机,也可以是建立站点到站点VPN连接的VPN服务器。而根据VPN客户端类型的不同,VPN分为以下两种连接类型:

  • 远程访问VPN:由一台独立的计算机作为VPN客户端向VPN服务器发起VPN连接,从而此VPN客户端计算机可以访问VPN服务器所连接的内部网络中的资源。Windows XP、Windows 2000、Windows NT 4.0、Windows ME和Windows 98 VPN客户端均可与Windows的VPN服务器或运行其它大多数VPN服务器的远程访问服务器建立VPN连接。这种类型的VPN又称为客户端到服务器VPN。
  • 站点到站点VPN:在连接到不同内部网络的两台VPN服务器之间进行VPN连接,当VPN连接成功建立后,它们所连接的内部网络中均可以相互进行访问,就像直接通过物理链路连接到一起。VPN服务器会将通过VPN连接的数据进行加密和封装,但是本地子网中的客户和VPN服务器之间的通讯并不会进行加密。Windows的VPN服务器均可以和其他VPN服务器创建站点到站点的VPN连接。这种类型的VPN又称为网关VPN或路由器到路由器VPN。

远程访问VPN服务器

基于Windows服务器操作系统的远程访问服务器能够接受基于PPTP或L2TP/IPSec的远程访问VPN连接,或者基于PPTP、L2TP/IPSec或IPSec隧道模式的站点到站点VPN连接。

VPN承载链路

远程访问VPN客户端必须能够通过IP网络访问到远程访问VPN服务器,如果VPN服务器位于某个内部网络而VPN客户端位于Internet之上,那么必须在VPN服务器连接到Internet的网关上为VPN服务器做端口映射。

 

VPN协议

Windows远程访问服务器与客户端支持两种远程访问VPN协议:

  • 端到端隧道协议(PPTP)
  • 第二层隧道协议(L2TP)

而对于站点到站点VPN连接,除了使用上述协议外,你还可以使用IPSec隧道模式。

端到端隧道协议(PPTP)

端到端隧道协议(PPTP)是微软基于PPP协议开发的隧道协议,在RFC 2637中进行定义,在Windows系统中广泛使用。PPTP首先在Windows NT 4.0中提供支持,并且随TCP/IP协议一起自动进行安装。PPTP是对端到端协议(PPP)的一种扩展,它采用了PPP所提供的身份验证、压缩与加密机制,并且通过Microsoft端到端加密(MPPE)技术来对数据包进行加密、封装和隧道传输。

PPTP具有以下特性:

  • PPTP帧通过通用路由封装(Generic Routing Encapsulation,GRE,协议ID 47)报头和IP报头(TCP 1723)进行封装,在IP报头中提供了与VPN客户端和VPN服务器相对应的源IP地址和目标IP地址;
  • 使用Microsoft端到端加密(MPPE)技术来对多种协议的数据包进行加密、封装和在IP网络上进行隧道传输;
  • PPTP隧道连接协商身份验证、压缩与加密;
  • PPTP支持VPN客户端IP地址的动态分配;
  • MPPE使用RSA/RC4算法和40位、56位或128位的密钥进行加密;
  • MPPE将通过由MS-CHAP、MS-CHAP v2或EAP-TLS身份验证过程所生成的加密密钥对PPP帧进行加密,因此为对PPP帧中所包含的有效数据进行加密,虚拟专用网络客户端必须使用MS-CHAP、MS-CHAP v2或EAP-TLS身份验证协议;PPTP将利用底层PPP加密功能并直接对原先经过加密的PPP帧进行封装;
  • 初始加密密钥在用户身份验证时产生并且定期刷新;
  • 在PPTP数据包中,只有数据负载才进行了加密。

如果使用PPTP协议的VPN客户端部署在NAT网关之后,那么要求NAT网关具有理解PPTP协议的NAT编辑器,否则VPN客户将不能创建VPN连接。目前的绝大部分NAT网关中都具有PPTP NAT编辑器,均可以很好的支持PPTP协议。

第二层隧道协议(L2TP)

第二层隧道协议(L2TP)是微软PPTP隧道协议和CISCO第二层转发协议(L2F)的结合体,在RFC 2661中进行定义(最新的版本是L2TPv3,在RFC 3931中定义)。与PPTP利用MPPE进行数据包加密不同,L2TP依靠Internet协议安全性(IPSec)技术提供加密服务。L2TP与IPSec的结合产物称为L2TP/IPSec,VPN客户端与VPN服务器都必须支持L2TP和IPSec才能使用L2TP/IPSec。L2TP将随同路由与远程访问服务一起自动进行安装。

在IPSec数据包基础上所进行的L2TP封装由两个层次组成:

  • L2TP封装: PPP帧(IP或IPX数据包)将通过L2TP报头和UDP报头进行封装。
  • IPSec封装: 上述封装后所得到的L2TP报文将通过IPSec封装安全性有效载荷(ESP)报头、用以提供消息完整性与身份验证的IPSec身份验证报尾以及IP报头再次进行封装。IP报头中将提供与VPN客户端和VPN服务器相对应的源IP地址和目标IP地址。IPSec加密机制将通过由IPSec身份验证过程所生成的加密密钥对L2TP报文进行加密。

L2TP具有以下特性:

  • L2TP隧道数据可以在任何支持点对点传输的网络中进行传输,例如IP、帧中继、ATM网络等等;
  • L2TP使用UDP协议来进行隧道管理;
  • L2TP基于UDP协议发送封装的PPP数据包;
  • 负载数据可以被加密和压缩;
  • 使用IPSec封装安全性有效载荷(ESP)进行加密,IPSec ESP在RFC 3193中进行定义;
  • 虽然L2TP/IPSec提供了用户验证机制,但是同样要求计算机进行验证。计算机验证是相互的,每一端的计算机都必须向对方进行验证;
  • 对于计算机验证,要求计算机证书。VPN客户端和VPN服务器(远程访问VPN)、或两端的VPN服务器(站点到站点VPN)都必须具有有效的证书。你可以配置使用预共享的L2TP密钥,这样就无需计算机证书,但是由于所有VPN客户都必须配置相同的预共享密钥,这样带来的后果是极大的降低了L2TP的安全性。
  • 每一端都必须能够验证另一端提供的证书是否有效,如果计算机证书是由不同的证书权威颁发,那么会出现问题。

和PPTP协议不一样,如果基于L2TP/IPSec协议的VPN客户端部署在NAT网关之后,只有VPN服务器和VPN客户端支持IPSec NAT穿越(NAT-T)时,VPN客户端才能和VPN服务器成功创建VPN连接。NAT-T在RFC 3947中进行定义,它描述了IPSec协议如何穿越NAT服务器。和L2TP/IPSec使用UDP端口500、1701不同,NAT-T使用UDP 4500端口。Windows Server 2003、Microsoft L2TP/IPSec VPN客户端软件和L2TP/IPSec NAT-T更新后的Windows XP和Windows 2000支持NAT-T。

但是,微软不推荐在NAT网关后的Windows server 2003上使用IPSec NAT-T,并且修改了Windows XP SP2中的IPSec通讯行为,使其默认情况下不再支持NAT网关后的IPSec NAT-T。详情请参见KB885348,IPSec NAT-T is not recommended for Windows Server 2003 computers that are behind network address translatorsKB885407,The default behavior of IPsec NAT traversal (NAT-T) is changed in Windows XP Service Pack 2

 

IPSec隧道模式

对于站点到站点VPN连接,除了上述的PPTP和L2TP/IPSec外,你还可以使用IPSec隧道模式。IPSec隧道模式单独使用IPSec来创建一个加密的隧道,通常用于和不支持L2TP/IPSec或PPTP协议的非Windows VPN服务器之间创建加密通讯。和L2TP、PPTP不同,IPSec隧道模式不需要验证用户账户,它具有以下特性:

  • IP数据包通过IPSec进行加密,并在IP网络上进行隧道传输;
  • IPSec隧道模式只能用于站点到站点的VPN类型;
  • IPSec隧道模式需要额外的IPSec安全策略配置;

选择远程访问VPN协议

PPTP和L2TP/IPSec的区别主要有:

  • PPTP使用MPPE进行加密,L2TP/IPSec和IPSec隧道模式使用IPSec ESP进行加密。
  • PPTP加密在PPP身份验证通过后处理连接时开始,因此,身份验证过程没有被MPPE加密。L2TP/IPSec会先进行安全协商再进行身份验证,并对PPP身份验证数据包进行加密,因此L2TP/IPSec比PPTP提供了更高的安全性。
  • PPTP使用MMPE和RC4,而L2TP/IPSec使用DES或3DES;
  • PPTP和L2TP/IPSec均要求用户使用基于PPP的身份验证协议进行身份验证;
  • L2TP/IPSec还要求使用计算机证书进行计算机验证。因此,L2TP/IPSec提供了更强壮的身份验证过程。但是,带来的不便之处是L2TP/IPSec需要公共密钥基础服务(PKI)或预共享的连接密钥,而PPTP则无需PKI。
  • IPSec ESP要求基于数据包的数据源验证和数据完整性验证,另外,IPSec ESP提供了中继保护,这防止了数据包的重现攻击;而PPTP没有提供这些保护。
  • IPSec ESP和PPTP(通过使用MPPE)提供了基于每个数据包的加密。
  • 你可以将基于PPTP的VPN服务器部署在NAT网关后,但是不建议将基于L2TP/IPSec、IPSec的VPN服务器部署在NAT网关后。
  • L2TP/IPSec比PPTP更耗费CPU性能。

在选择VPN协议时,你应考虑以下几点:

  • 是否存在公共密钥基础服务(PKI),如果不存在则选择PPTP;强烈建议不要在商用网络中通过预共享的连接密钥来使用L2TP,这样会极大的降低L2TP的安全性;
  • 如果要求最高的安全级别,选择L2TP/IPSec;
  • 只有在特别需要时才使用IPSec隧道模式;
  • 如果企业安全策略要求DES或3DES,则使用L2TP/IPSec;
  • 如果使用IPSec导致CPU负荷过重,使用PPTP;
  • 如果VPN服务器部署在NAT网关后,选择PPTP;
  • 部署PPTP比部署IPSec更为简单。
  •  

    对于VPN客户的身份验证、访问授权和记账,你可以选择两种不同的方式:Windows或RADIUS。你可以为这三种功能选择一种方式,也可以选择一种方式用于身份验证和授权,而另一种用于记账。

    当使用Windows验证时,如果VPN服务器是独立服务器,则使用本地账户(SAM)来验证VPN客户;如果VPN服务器是域成员服务器,则使用活动目录数据库来验证VPN客户。如果使用RADIUS进行身份验证,那么就算VPN服务器是独立服务器,也可以通过RADIUS使用活动目录数据库来进行验证。在Windows服务器中同样提供了RADIUS服务器组件,不过被称为Internet验证服务器(IAS),关于Internet验证服务器更详细的信息,请参见Internet验证服务使用指南一文。

    PPTP和L2TP/IPSec均要求用户进行身份验证,并且对于L2TP/IPSec,你必须配置用户身份验证和计算机身份验证。Windows VPN服务器支持的身份验证方式有:

    • 可扩展身份验证协议(EAP)
    • Microsoft质询式握手身份验证协议(MS-CHAP)
    • MS-CHAP第2版(MS-CHAP v2)
    • 质询式握手身份验证协议(CHAP)
    • Shiva式口令身份验证协议(SPAP)
    • 可扩展身份验证协议(EAP,包含EAP-MD5、EAP-TLS、EAP/MS-CHAPv2等等)

    它们之间的详细区别请参考Windows的帮助,常用的身份验证方式是MS-CHAP、MS-CHAP v2和EAP-TLS。

    当VPN客户通过身份验证时,VPN服务器将通过拨入VPN的用户账户的拨入属性来决定是否允许它的远程访问,

    其中:

    允许访问:显式允许VPN客户的远程访问;

    拒绝访问:显式拒绝VPN客户的远程访问;

    通过远程访问策略控制访问:根据VPN服务器配置的授权方式的不同(Windows还是RADIUS),通过自己的远程访问策略(Windows方式)或RADIUS服务器的远程访问策略(RADIUS方式)来决定是否允许VPN客户的访问。远程访问策略是定义是否授权VPN客户远程访问的一系列规则集合,VPN服务器按照从上到下的顺序执行第一个匹配VPN客户连接请求的远程访问策略。如果VPN客户匹配某个授权访问的远程访问策略,则VPN服务器允许VPN客户的拨入,如果VPN客户不匹配任何授权访问的远程访问策略或者匹配某个拒绝访问的远程访问策略,则VPN服务器拒绝VPN客户端的访问。

    如果此RRAS服务器属于活动目录,你需要提升域功能级为Windows 2000 Native或者Windows server 2003后,才能使用通过远程访问策略控制访问选项。并且此RRAS服务器的计算机账户必须加入到域本地安全组RAS and IAS Servers组中,否则该RRAS服务器不能读取域用户的拨入权限设置。在启用路由和远程访问服务时,会自动加入到RAS and IAS Servers组中,如果没有自动加入,你可以手动进行添加或者在路由和远程访问服务器上运行Netsh ras add registeredserver命令。

    当VPN服务器允许VPN客户拨入VPN时,将会为VPN客户分配一个IP地址。你可以配置VPN服务器通过内部网络中的DHCP服务器来为VPN客户分配一个IP地址,也可以手动配置一个静态IP地址范围来为VPN客户进行分配。但是,如果配置使用和内部网络不一致的子网来用于VPN客户的地址分配时,你必须添加内部网络通过VPN服务器到达VPN客户的路由。关于VPN客户的地址分配更详细的信息,请参见网络专家Gable Guy的文章“IP 地址分配与“路由和远程访问”服务”以及ISA中文站中我的文章关于ISA防火墙中VPN服务的一些补充说明

    当VPN客户创建VPN拨号连接时,默认会启用远程网络上的默认网关,即把VPN连接作为自己的默认网关。这将导致VPN客户不能访问除自己本地子网外的其他本地网络,也不能通过本地网络连接到Internet。关于此选项的详细信息,请参见网络专家Gable Guy的文章“针对并行访问Internet和Intranet的分割隧道功能”。

Leave a Reply

Your email address will not be published. Required fields are marked *