VPN的英文是VirtualPrivateNetwork,这是近几年随着Internet的发展而迅猛发展起来的技术,这种技术本身是通过公共网络来实现私人专有网络的搭建,在vpn之前要构建私人专有网络只能通过专线,专线的好处是任何时刻该线路都是私人的,同时也保证了数据传输的可靠性,因为它本身就是条私有链路,任何时候都是可靠的,它的最大缺点是费用太高昂。
虚拟专用网本身是通过额外的技术来实施的,所以在物理上不用更改联网的一些特征,而是在逻辑上针对这个网络连接作了一些额外的定义,所以这种组网是非常灵活的,我们可以很方便的添加或者删除一个连接,那么一些异地办事处和出差员工就很容易的通过私有专网接入公司总部。
VPN要搭建起来,有两个重要的概念:
*隧道:隧道是在公共网上实现类似于专线连接的链路,这条链路当然是虚拟的链路,在这个链路里面它具备了专线链路的所有特征,并且我们在这个隧道里面传递数据的时候,其他的同样在公网中传递的用户或者黑客他没有跟这个隧道建立联系的话是没办法窃听到隧道里面的数据的。
*加密:毕竟这个隧道也是个逻辑上的链路,这个逻辑上的通道也有可能被一些人所窃取,为了保证传输数据的安全性,所以要对隧道中的数据进行加密。
VPN的分类:
VPN有很多种类型,对于我们tcp/ip的网络环境下,ip的vpn是通过利用ip设施(公共的internet或者专用的ip骨干网络)来实现广域网专线业务。
按照应用类型来分类:
*AccessVPN:主要面向与出差的流动的员工,还有一些远程的办公室搭建VPN连接,它主要借助于拨号网络(PSTN、ISDN)来实现,连接的时候它又有两种类型,也就是通过发起的源或者发起vpn连接的起点不同可分为两种类型,第一种是由客户端发起的(CLIENTAccessVPN),第二种是由接入服务器发起的(NASVPN),这种连接跟第一种的区别是它只在pap和公司路由器之间建立了虚拟专用网连接,而用户到PAP之间的连接是不能保证其安全性的。第二种灵活性更高,第一种安全性更高。
*IntranetVPN:一般用于总部加上一些大型的分支机构,是同一个公司或同一个企业内部的各个分支结构的连接,我们叫它内联网,
*ExtranetVPN:一般用于总部加上一些合作伙伴,公司跟合作伙伴之间有频繁的业务,需要类似专线的连接来保证业务的安全传递,他和intranetvpn实际上没有什么区别,只是名称上的不同,我们叫他外联网
按照VPN实现的层次来分类;
VPN必然涉及到隧道和加密机制,隧道是用来衡量这个VPN连接究竟是哪一种层次的vpn的重要标准,vpn的隧道可以架构在数据链路层,也可以架构在网络层,如果是架构在数据链路层的vpn我们把它叫做二层隧道VPN,如果是架构在网络层的VPN我们把它叫做三层隧道VPN。
典型的二层vpn是通过PPTP(Point-to-PointTunnelingProtocol)、L2TP(Layer2TunnelingProtocol)、L2F(Layer2Forwarding)协议实现的隧道
典型的三层VPN是通过GRE(GenericRoutingEncapsulation),IPSec(IPSecurity)协议实现的隧道
VPDN
AccessVPN也叫VPDN(VirtualPrivateDialNetwork):他是通过拨号链路来实现的,比如像中国电信中国网通在每个地方都会有个本地的拨号接入存在点叫做PAP(拨号存在点),PAP呢会有一个设备叫做拨号服务介入设备,这种通过拨号连结和总部连接的VPN我们叫他VPDN,由于它的速率比较慢,因此它的适用范围为出差员工或者一些小型的异地办公室。
对于VPDN来说,大部分情况下采用的隧道协议都是L2TP协议。
IntranetVPN
对于构建IntranetVPN采用的隧道协议,通常适用IPSec,还有GRE,这样的协议建立隧道更加灵活并且更加有安全性保障。
ExtranetVPN
技术上跟IntranetVPN完全一样,只是参与的对象并不局限于同一公司或者企业,而是还有其合作伙伴和供应商等的参与。有关的隧道协议还是采用IPSec或者GRE。
对很多大型企业来说,都是采用VPDN和IntranetVPN的结合方式,采用这种更为灵活的组网方案能够大大降低企业成本。
按照实现层次分类:
有二层VPN和三层VPN,二层VPN主要是由其隧道协议来体现的,二层VPN上一般说来是PPP的数据封装,在传输的时候它在PPP的数据包前面封装了二层的封装包头。二层协议主要有:
L2TP:l2tp主要是有IETF制定的,并且已经成为了标准,它由RFC2661所定义,l2tp既可以实现VPDN的连接,也可以实现专线连接的业务。
pptp:支持ppp协议,ppp封装的数据包都可以在PPTP的链路里面直接传播,它本身就是一个呼叫控制和管理协议,它使用了增强的GRE,这里说的增强,是说他借用了GRE的一些技术,来增强它的流控能力和拥塞的调控能力,并不是说它比GRE工作的层面更高,所以整体上来说pptp还是一个工作在第二层的协议。
l2f:第二层转发协议,它由思科和北电共同研发制定。他支持对更高层协议链路层的隧道封装,并且实现了拨号服务器和拨号协议连接在物理位置上的分离。
三层vpn,所谓三层,是说他这个隧道是建立在网络层上的,它和应用层无关,也和链路协议无关,因此灵活性更高,三层隧道协议主要有:
GRE:也叫通用路由封装协议,用于实现任意一种网络层协议在另一种网络层上的封装,也就是说可以实现不同协议环境下数据的穿越,比如ipx的数据要通过ip来传递的话,我们可以先在IP的环境下搭建一个GRE的通道来传递ipx报文,这个时候虽然ip和ipx本身都是第三层的协议,但现在ipx的数据包封装在ip之上,那ip把ipx的数据当作一个传输层以上的数据,当作一些普通数据来传递,它不会去识别这个数据是不是符合我ip规范的数据,它不是管这个东西的,所以体现了通用的意义。是指有多网络协议的时候要实现他们之间的穿越传递的时候可以通过借助于GRE来实现。GRE是一个纯粹的隧道协议,它本身没有任何的数据加密的操作。
IPSec:他并不是一个单独的协议,它实际上是一整套的框架体系架构,它具体有AH(AuthenticationHeader)头标验证协议、ESP(EncapsulatingSecurityPayload)、IKE(InternetKeyExchange)这些协议来协同它的工作。AH主要是验证数据的完整性和真实性,而ESP完成的是数据的私密性的验证,而IKE是完成隧道协议上的时候、数据加密的时候它的密钥交换。
三层隧道协议的灵活性远远高于二层隧道协议,因为它本身独立于介质也独立于应用,另外对二层协议来说,因为它本身跟链路相关,所以有可能存在根据不同链路选择不同协议的问题,所以在架构的时候它由他的局限性,而且二层隧道协议很容易受到一些中间人攻击,所以安全性也不会有太高的保障。
另外从安全方面考虑,因为二层隧道一般中止在用户端的设备上,对于用户网的安全以及防火墙技术都提出了十分严峻的挑战,而三层隧道一般中止在ISP的网关,因此不会对用户网构成任何的威胁。
从扩展性来说,二层隧道封装了整个ppp数据帧,这可能会导致传输效率太低的问题,而且二层隧道中止在用户这边,所以用户端必须保存大量的ppp会话和信息,因此会对整网的性能产生非常大的影响,也会影响到系统的扩展性。而且链路层是采用lcp和ncp的协商,采用了隧道之后,lcp和ncp的协商将会变得非常非常的敏感,可能会造成会话超时。而三层隧道中止在isp网关,所以用户端不需要管理和维护会话,因此减轻了系统负荷。当然二层隧道实现起来比三层隧道简单一些。
VPN的设计原则
对于一个VPN来说,他首先要考虑的是安全性问题,这个安全性是VPN设计时候的第一个问题也是最主要的问题,对于这个安全,主要体现在两个方面:
->隧道的建立和数据的加密机制
因为安全完全是依赖于这样一条虚拟链路,那么这个隧道可不可靠、隧道里面传输的数据是否有了加密机制保护阿就显得尤其重要。
隧道可以实现多个协议的封装,并且可以增加有关VPN应用的灵活性,可以在无连接的IP网上提供点到点的逻辑通道,在对安全性要求更高的场合里面,我们必须应用加密机制,这些加密机制是针对那些可以传输在隧道中的数据提供了进一步的数据私密性的保护,使得黑客即使图突破了隧道也没办法篡改原始数据。
->数据验证
为了防止数据被篡改,就必须要有签名或者验证机制来验证这些数据有没有被篡改过,也就是所谓的完整性验证机制,比如md5机制。
->用户验证
也就是说使得该VPN可以让合法用户可以访问他们所需的网络资源,同时还禁止未授权用户的非法访问,一般是借助于AAA来实现。
->除了安全性外,在VPN构建的时候还要考虑防火墙的攻击和检测机制,一般大型的网络我们都会部属防火墙,防火墙有两种,一种是ACL的软体防火墙,一种是针对实际硬件的防火墙,这个防火墙有没有部属和他的有关策略、规则部属的怎么样,还有针对一些可能受到的攻击的检测的机制,来避免一些不必要的一些攻击。
VPN设计的可靠性
因为VPN构建的环境是公网,不同于我们传统上的专线广域网,那么用户对这个网络的控制能力大大降低,他基本上是不可控的,所以可靠的运行VPN是我们必须要考虑的。
VPN设计的经济性
也就是说在保证可靠性的同时不能过多的增加操作成本。
VPN设计的扩展性
是说这个VPN的管理需要增对日益增多的客户和合作伙伴做出迅捷的一些反映。
L2TP协议:
L2TP:Layer2TunnelProtocol第二层隧道协议,是为在用户和企业的服务器之间透明传输PPP报文而设置的隧道协议。L2TP是由IETF制订的,这个协议是在PPTP和L2F的基础上发展起来的,它吸收了pptp和l2f的优点,同时也扩大了应用范围,因此它是现在应用最广泛的在点到点上实现隧道的协议。
l2tp的特征:
->灵活的身份验证机制以及高度的安全性:配合ppp模块支持本地或者远端的身份验证,针对有关用户的身份,可以是用户的全名、用户的域名、或者一些特殊号码;对l2tp来说,它有高度的安全性,可以借助IPSec这样一些数据加密的协议,在用户数据报文发往Internet之前就对数据报文进行加密,也可以在VPN的lac(l2tp的接入集中器)侧来进行加密。
->可以实现多协议传输,这个多谢以传输是什么概念呢,是说它本身是作为一个第二层隧道协议,它独立于网络层,那么网络层的很多协议都可以借助于第二层隧道来实现传输,所以很方便各种不同的操作系统之间和各种不同的网络之间私密数据的传递任务。
->支持RADIUS服务器得验证:借助RADIUS还可以完成对用户的一些授权和记费
->支持内部地址的分配:用户和企业之间的数据可以实现透明传输,也就是说私有数据可以穿越隧道到达另外一个网络,也就是说支持在隧道里面来完成私有数据的传递,它的原有地址可以是私有地址,接入后,可以是公司内部动态分配的地址。
->网络记费的灵活性:记费的灵活性也是数据RADIUS的一个操作。
->可靠性:这个可靠性是由l2tp本身在和internet协商时候的可靠性来保障的。
使用l2tp构建vpdn
在使用l2tp构建vpdn的时候它有很多种灵活方式来实现用户到总部的接入,这个方式大体上分为两种,
第一种方式是隧道模式的VPDN,用户首先通过isdn或者pstn的一些网络接入ISP的LAC,然后再由LAC发起去往总部的隧道连接,总部的网络接入设备我们叫他LNS,这种接入方式在用户和LAC之间是没有任何加密数据保障的。这种方式接入对于用户来说是透明的,用户只需要登陆一次就可以接入企业网,用户本身不需要安装任何VPN的客户端软件,因此它的操作平台可以非常非常灵活。这种接入方式有个问题就是你必须确保isp要支持VPDN,这就并不是任何得LAC或者POP或者接入服务器都可以满足条件的,因此可能会限制了isp得选择面。
第二种方式是传输模式的VPDN,员工直接拨号到POP,pop在这里只是完成有关数据服务,用户直接在Client这边采用vpdn的拨号软件和总部直接建立隧道。也就是说隧道建立在用户和企业的lns之间。这种方式用户上网的时间和地点没有限制,但是要客户端支持VPDN的拨号。
不管是哪种方式,都需要一些消息数据包来实现VPDN的传输,l2tp存在两种消息类型,第一种是控制类型消息,主要用于隧道和会话的建立、维护和删除,第二种是数据消息,也就是当已经建立了隧道,实现了ppp会话之后呢,就可以通过这个隧道实现ppp数据得端到端的传输。
下面来介绍一个相关概念:
LAC:L2TPAccessConcentratorL2TP服务接入集中器,提供各种用户接入AAA的一些服务,具有发起隧道和会话连接的一些功能以及对vpn用户代理认证的一些功能,这些LAC一般是由ISP来提供接入设备。
LNS:L2TPNetworkServerL2TP的网络服务器,它是VPN企业侧的服务器,这个服务器也可以完成对用户的最终授权和验证,并且可以接受来自LAC的隧道连接请求并且更具连接请求来实现和用户之间的ppp的会话通道。在有关验证的时候,用户数据可以采用RADIUS服务器来保存。
L2TP隧道和会话得建立流程
L2TP的会话建立是由PPP来触发的,隧道的建立由会话触发,由于多个会话可以复用在一条隧道上,如果会话建立前隧道已经建立,则隧道不用重新建立。
这里所探讨的隧道和会话建立流程主要是指LAC和LNS之间的建立流程,而Client与LNS建立的过程因操作系统和软件的不同而不同,而且过程更加简单一些。
如果在LAC和LNS之间直接建立传输报文的隧道,那这个隧道就必须涉及到有关传输会话的操作,因此隧道本身必须具备具有相同会话连接特性的一组用户可以共享连接属性所定义的一个通道。而会话是针对每个用户与企业VPN服务器建立连接ppp的数据通道,同一个LAC与LNS之间指可以建立一个L2TP的隧道,但是在这个隧道种可以传递多个会话,不管是隧道也好会话也好,他们都可以动态的建立维护以及删除。
由于隧道的建立是一个三次握手的流程,类似于TCP连接的建立,三次握手保证了有关隧道的可靠性,隧道建立的三次握手过程如下:
首先由LAC端像LNS端发起一个建立隧道的请求:SCCRQ
然后LNS端会针对请求分配一些资源,分配好后给源端做出一个回应:SCCRP
LAC端收到回应之后要对它做一个确认:SCCCN,这就表示隧道已经完全建立了。
有了隧道后,会话就可以在隧道里面来传递,在触发建立了隧道之后,那么后续得一些同一对LAC和LNS之间的会话就会复用在这条隧道里面。
会话的建立流程同样也是三次握手,会话的建立本身是由PPP模块来触发的,如果在会话之前没有可用会话呢,它会首先建立隧道连接,建立之后在实现有关的会话,而会话建立完成之后就可以完成数据的传输。
首先由LAC端发起会话请求:ICRQ
LNS收到这个ICRQ之后会对它做一个应答:ICRP
然后LAC端在收到这个应答后会对它做一个确认:ICCN
除了建立之外,隧道和会话的维护和拆除也有那么一个流程
隧道建立之后,一直要等所属会话全部下线之后才可以拆除,为了确认对端隧道依然存在,必须定时发送一些维护报文,其流程为LAC端或者LNS端互相发出Hello报文进行查询,对应的LNS或者LAC发出ZLB(Zero-LengthBody:零长度实体报文)进行确认。ZLB只有一个L2TP的报文头。
如果这个隧道已经没有必要在进行维护下去了(比如会话已经全部中断了),即进行拆除行为,先由任意一端发出拆除链接通知StopCCN(Stop-Control-Connection-Notification),另外一端回应ZLB报文。
同样会话的拆除也是由一端发出拆除通知CDN(Call-Disconnect-Notify),另外一端返回zlb
隧道拆除是一定要在会话完全拆除之后才能拆除的。
L2TP协议栈结构及数据包的封装过程
用户端的IP报文数据,首先封装成PPP的数据,通过物理层发送到LAC端,发送到LAC端之后会传递给L2TP隧道协议,来完成对数据的进一步的处理,这个处理实际上就是叫做封装,LAC收到报文后,首先还原成p2p的数据,然后传递给l2tp,l2tp这个协议会封装在ppp的前面,然后通过udp协议这个传输介质来传递,因此要封装成UDP的数据包,因为首先要在公网上传递,所以必须具有ip地址,因此在udp报头前面加上一个ip报头,然后通过链路层打上帧头帧尾传递给物理层,转换为二进制传输出去。
经过internet传输之后到达对端LNS,收到该报文后,就会有一个解封装的过程,跟LAC端的封装过程相反,解封装后,它就已经跟总部内网实现通讯了,这个时候会封装一个新的链路层发往总部的server。
【编辑推荐】