vpn技术详解(中)
吕晓波
隧道技术基础
隧道技术是一种通过使用互联网络的基础设施在网络之间传递数据的方式。使用隧道传递的数据(或负载)可以是不同协议的数据桢(此字不正确)或包。隧道协议将这些其它协议的数据桢或包重新封装在新的包头中发送。新的包头提供了路由信息,从而使封装的负载数据能够通过互联网络传递。
被封装的数据包在隧道的两个端点之间通过公共互联网络进行路由。被封装的数据包在公共互联网络上传递时所经过的逻辑路径称为隧道。一旦到达网络终点,数据将被解包并转发到最终目的地。注意隧道技术是指包括数据封装,传输和解包在内的全过程。
隧道所使用的传输网络可以是任何类型的公共互联网络,本文主要以目前普遍使用internet为例进行说明。此外,在企业网络同样可以创建隧道。隧道技术在经过一段时间的发展和完善之后,目前较为成熟的技术包括:
1.ip网络上的sna隧道技术
当系统网络结构(systemnetworkarchitecture)的数据流通过企业ip网络传送时,sna数据桢将被封装在udp和ip协议包头中。
2.ip网络上的novellnetwareipx隧道技术
当一个ipx数据包被发送到netware服务器或ipx路由器时,服务器或路由器用udp和ip包头封装ipx数据包后通过ip网络发送。另一端的ip-to-ipx路由器在去除udp和ip包头之后,把数据包转发到ipx目的地。
近几年不断出现了一些新的隧道技术,本文将主要介绍这些新技术。具体包括:
1.点对点隧道协议(pptp)
pptp协议允许对ip,ipx或netbeui数据流进行加密,然后封装在ip包头中通过企业ip网络或公共互联网络发送。
2.第2层隧道协议(l2tp)
l2tp协议允许对ip,ipx或netbeui数据流进行加密,然后通过支持点对点数据报传递的任意网络发送,如ip,x.25,桢中继或atm。
3.安全ip(ipsec)隧道模式
ipsec隧道模式允许对ip负载数据进行加密,然后封装在ip包头中通过企业ip网络或公共ip互联网络如internet发送。
隧道协议
为创建隧道,隧道的客户机和服务器双方必须使用相同的隧道协议。
隧道技术可以分别以第2层或第3层隧道协议为基础。上述分层按照开放系统互联(osi)的参考模型划分。第2层隧道协议对应osi模型中的数据链路层,使用桢作为数据交换单位。pptp,l2tp和l2f(第2层转发)都属于第2层隧道协议,都是将数据封装在点对点协议(ppp)桢中通过互联网络发送。第3层隧道协议对应osi模型中的网络层,使用包作为数据交换单位。ip overip以及ipsec隧道模式都属于第3层隧道协议,都是将ip包封装在附加的ip包头中通过ip网络传送。
隧道技术如何实现
对于象pptp和l2tp这样的第2层隧道协议,创建隧道的过程类似于在双方之间建立会话;隧道的两个端点必须同意创建隧道并协商隧道各种配置变量,如地址分配,加密或压缩等参数。绝大多数情况下,通过隧道传输的数据都使用基于数据报的协议发送。隧道维护协议被用来作为管理隧道的机制。
第3层隧道技术通常假定所有配置问题已经通过手工过程完成。这些协议不对隧道进行维护。与第3层隧道协议不同,第2层隧道协议(pptp和l2tp)必须包括对隧道的创建,维护和终止。
隧道一旦建立,数据就可以通过隧道发送。隧道客户端和服务器使用隧道数据传输协议准备传输数据。例如,当隧道客户端向服务器端发送数据时,客户端首先给负载数据加上一个隧道数据传送协议包头,然后把封装的数据通过互联网络发送,并由互联网络将数据路由到隧道的服务器端。隧道服务器端收到数据包之后,去除隧道数据传输协议包头,然后将负载数据转发到目标网络。
隧道协议和基本隧道要求
因为第2层隧道协议(pptp和l2tp)以完善的ppp协议为基础,因此继承了一整套的特性。
1.用户验证
第2层隧道协议继承了ppp协议的用户验证方式。许多第3层隧道技术都假定在创建隧道之前,隧道的两个端点相互之间已经了解或已经经过验证。一个例外情况是ipsec协议的isakmp协商提供了隧道端点之间进行的相互验证。
2.令牌卡(tokencard)支持
通过使用扩展验证协议(eap),第2层隧道协议能够支持多种验证方法,包括一次性口令(one-timepassword),加密计算器(cryptographic calculator)和智能卡等。第3层隧道协议也支持使用类似的方法,例如,ipsec协议通过isakmp/oakley协商确定公共密钥证书验证。
3.动态地址分配
第2层隧道协议支持在网络控制协议(ncp)协商机制的基础上动态分配客户地址。第3层隧道协议通常假定隧道建立之前已经进行了地址分配。目前ipsec隧道模式下的地址分配方案仍在开发之中。
4.数据压缩
第2层隧道协议支持基于ppp的数据压缩方式。例如,微软的pptp和l2tp方案使用微软点对点加密协议(mppe)。ietp正在开发应用于第3层隧道协议的类似数据压缩机制。
5.数据加密
第2层隧道协议支持基于ppp的数据加密机制。微软的pptp方案支持在rsa/rc4算法的基础上选择使用mppe。第3层隧道协议可以使用类似方法,例如,ipsec通过isakmp/oakley协商确定几种可选的数据加密方法。微软的l2tp协议使用ipsec加密保障隧道客户端和服务器之间数据流的安全。
6.密钥管理
作为第2层协议的mppe依靠验证用户时生成的密钥,定期对其更新。ipsec在isakmp交换过程中公开协商公用密钥,同样对其进行定期更新。
7.多协议支持
第2层隧道协议支持多种负载数据协议,从而使隧道客户能够访问使用ip,ipx,或netbeui等多种协议企业网络。相反,第3层隧道协议,如ipsec隧道模式只能支持使用ip协议的目标网络。
点对点协议
因为第2层隧道协议在很大程度上依靠ppp协议的各种特性,因此有必要对ppp协议进行深入的探讨。ppp协议主要是设计用来通过拨号或专线方式建立点对点连接发送数据。ppp协议将ip,ipx和netbeui包封装在pp桢内通过点对点的链路发送。ppp协议主要应用于连接拨号用户和nas。 ppp拨号会话过程可以分成4个不同的阶段。分别如下:
阶段1:创建ppp链路
ppp使用链路控制协议(lcp)创建,维护或终止一次物理连接。在lcp阶段的初期,将对基本的通讯方式进行选择。应当注意在链路创建阶段,只是对验证协议进行选择,用户验证将在第2阶段实现。同样,在lcp阶段还将确定链路对等双方是否要对使用数据压缩或加密进行协商。实际对数据压缩/加密算法和其它细节的选择将在第4阶段实现。
阶段2:用户验证
在第2阶段,客户会pc将用户的身份明发给远端的接入服务器。该阶段使用一种安全验证方式避免第三方窃取数据或冒充远程客户接管与客户端的连接。大多数的ppp方案只提供了有限的验证方式,包括口令验证协议(pap),挑战握手验证协议(chap)和微软挑战握手验证协议(mschap)。
1.口令验证协议(pap)
pap是一种简单的明文验证方式。nas要求用户提供用户名和口令,pap以明文方式返回用户信息。很明显,这种验证方式的安全性较差,第三方可以很容易的获取被传送的用户名和口令,并利用这些信息与nas建立连接获取nas提供的所有资源。所以,一旦用户密码被第三方窃取,pap无法提供避免受到第三方攻击的保障措施。
2.挑战-握手验证协议(chap)
chap是一种加密的验证方式,能够避免建立连接时传送用户的真实密码。nas向远程用户发送一个挑战口令(challenge),其中包括会话id和一个任意生成的挑战字串(arbitrary challengestring)。远程客户必须使用md5单向哈希算法(one-wayhashingalgorithm)返回用户名和加密的挑战口令,会话id以及用户口令,其中用户名以非哈希方式发送。
chap对pap进行了改进,不再直接通过链路发送明文口令,而是使用挑战口令以哈希算法对口令进行加密。因为服务器端存有客户的明文口令,所以服务器可以重复客户端进行的操作,并将结果与用户返回的口令进行对照。chap为每一次验证任意生成一个挑战字串来防止受到再现攻击(replay attack).在整个连接过程中,chap将不定时的向客户端重复发送挑战口令,从而避免第3方冒充远程客户(remoteclient impersonation)进行攻击。
3.微软挑战-握手验证协议(ms-chap)
与chap相类似,ms-chap也是一种加密验证机制。同chap一样,使用ms-chap时,nas会向远程客户发送一个含有会话id和任意生成的挑战字串的挑战口令。远程客户必须返回用户名以及经过md4哈希算法加密的挑战字串,会话id和用户口令的md4哈希值。采用这种方式服务器端将只存储经过哈希算法加密的用户口令而不是明文口令,这样就能够提供进一步的安全保障。此外,ms-chap同样支持附加的错误编码,包括口令过期编码以及允许用户自己修改口令的加密的客户-服务器(client-server)附加信息。使用ms-chap,客户端和nas双方各自生成一个用于随后数据加密的起始密钥。ms-chap使用基于mppe的数据加密,这一点非常重要,可以解释为什么启用基于mppe的数据加密时必须进行ms-chap验证。
在第2阶段ppp链路配置阶段,nas收集验证数据然后对照自己的数据库或中央验证数据库服务器(位于nt主域控制器或远程验证用户拨入服务器)验证数据的有效性。
阶段3:ppp回叫控制(callbackcontrol)
微软设计的ppp包括一个可选的回叫控制阶段。该阶段在完成验证之后使用回叫控制协议(cbcp)如果配置使用回叫,那么在验证之后远程客户和nas之间的连接将会被断开。然后由nas使用特定的电话号码回叫远程客户。这样可以进一步保证拨号网络的安全性。nas只支持对位于特定电话号码处的远程客户进行回叫。
阶段4:调用网络层协议
在以上各阶段完成之后,ppp将调用在链路创建阶段(阶段1)选定的各种网络控制协议(ncp).例如,在该阶段ip控制协议(ipcp)可以向拨入用户分配动态地址。在微软的ppp方案中,考虑到数据压缩和数据加密实现过程相同,所以共同使用压缩控制协议协商数据压缩(使用mppc)和数据加密(使用mppe)。
