VPN基础知识.docx
- 文档编号:17725941
- 上传时间:2023-08-03
- 格式:DOCX
- 页数:26
- 大小:35.75KB
VPN基础知识.docx
《VPN基础知识.docx》由会员分享,可在线阅读,更多相关《VPN基础知识.docx(26页珍藏版)》请在冰点文库上搜索。
VPN基础知识
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。
LAC侧封装过程-------->
--------------------------------------------------
|IP包(私有IP)|PPP|L2TP|UDP|IP包(共有IP)|
--------------------------------------------------
<-----------LNS侧解封装过程
L2TP的配置任务及命令
LAC侧的配置:
->配置AAA认证和本地用户:
验证和授权可以在本地路由器上配置,但是计费一定要在第三方服务器上操作,如果不希望计费,一定要配置计费可选。
另外如果验证和授权如果是在本地完成的话就必须完成本地数据库的构建。
在验证的时候可以采用两种方式做验证,一种是采用全用户名的方式做验证,也就是配置本地用户名作为VPN的全名,口令就是VPN用户的注册口令,第二种方式是采用特定域名的方式来做验证,特定域名方式做验证的时候本地用户名就是一个域名。
->启动VPDN:
[Quidway]l2tpenable
vpdn缺省情况下在路由器上是关闭的,只有启动了VPDN才可以让VPDN的配置参数生效,才能发挥路由器上VPDN的功能,如果我们禁止了VPDN,既是我们配置了VPDN的相关参数,他也不会生效。
->创建VPDN组:
[Quidway]l2tp-groupgroup-number
如果要想进行相关的命令配置,一定要创建这个组,配置这个组一方面能够让VPDN的功能配置到路由器里面,另一方面能够很方便的实现lac和多个lns之间的对应关系(通过不同的组号做唯一性区别)。
有了这个组呢就能很方便的实现有关LAC和LNS之间一对一、一对多、多对一、多对多的对应关系,这些对应关系主要是由他的一些相关配置比如说隧道对端的名称、l2tp连接请求的一些地址等来保持着个对等关系的一一印射。
创建了组织后,就可以在组下面进行跟组的相关的一些操作。
->配置发起l2tp连接请求及LNS地址
startl2tp{ipip-address(对端lns地址)[ipip-address...(最多配置5个lns地址)]}{(验证方式)domaindomain-name|dnisdialed-number(被叫号码)|fullusernameuser-name}
lns侧的配置:
->配置本地VPDN用户:
跟LAC端配置是一样的,但是当LAC端采用域名方式做验证的时候,那么LNS这边配置的本地用户数据库必须是用户名加上域名的机制。
lac把用户名密码发给lns后,lns先进行本地认证然后RADIUS验证的顺序验证用户的身份,这样可以确保这个用户是不是一个合法的VPN的用户,如果本地验证通过,那就省略RADIUS认证,只有通过认证的client才可以访问有关内部的资源。
->启动VPDN
->创建vpdn组
->创建虚拟接口模板并为用户分配IP地址
interfacevirtual-templatevirtual-template-number
remoteaddresspool[pool-name]
client和lns之间要实现的是一一印射的关系或者一个点到点的虚通道的连接,那既然要实现连接要访问内网资源,那就必须要有地址,而l2tp的隧道可以认为是一个逻辑上的点到点的连接,因此这个点到点的隧道必须要有一个IP地址,因此我们是通过创建虚借口这样的方式给他指定ip,这个虚接口是一个逻辑接口,需要在LNS这边指定一个固定的IP地址,而LAC和客户端就是由LNS这边给它分配分发。
->配置接受呼叫的隧道对端的名称:
这是相当于做一个关联~
allowl2tpvirtual-templatevirtual-template-number[remoteremote-name]
l2tp的可选参数配置:
->配置本端名称:
tunnelnamename:
针对隧道的名字作唯一性的识别,如果没有制定,那么缺省情况下隧道的名字就是路由器的主机名。
->启用隧道验证和配置密码
用户可以选择是否启用在数据传输前是开启隧道验证,验证方式有三种,一种是lac对lns做验证,一种是lns对lac做验证,还有一种是双方互相做验证
tunnelauthentication
tunnelpasswork{simple|cipher}password
->配置隧道hello报文发送的时间间隔
tunneltimerhellohello-interval
因为隧道是需要维护的,隧道在维护的时候肯定会有时间间隔,一般情况下这个时间缺省是60秒。
如果三次发送hello报文对方都没有回应,则认为这个隧道应该断开,并清除相关资源
->配置域名分隔符及查找顺序
这主要在LAC上做这个命令,LAC如果存在大量的l2tp接入用户的情况下我们在做有关的用户查找匹配的时候很费时间,因此可以在lac这边配置一些必要的查找策略,这个查找策略采用前缀分隔符或者后缀分割符来做有关的区别,华为路由器上可用的分隔符为@、#、&、\这四种类型,前缀一般说来是一个用户名,后缀可以是一个域名。
缺省情况下,查找可以有4种,一种是dnisdomain(先按照被叫号码来查找,然后再按照域名方式来查找),第二种是dnisonly(仅按照被叫号码来查找),第三种是domaindnis(先按照域名方式查找然后再按照被叫号码来查找),最后一种是domainonly(仅按照域名方式查找)
l2tpdomain{prefix-separator|suffix-separator}delimiters
另外还有些用在LNS的可选参数:
->做强制的chap验证:
mandatory-chap
->配置强制的LCP重新协商:
mandatory-lcp
对用户的验证有三种方式,优先级别最高的是强制lcp重新协商,其次是强制的chap验证,然后才是缺省的代理验证。
->可以配置隧道流控接收窗口的大小
tunnelflow-controlreceive-windowsize
这个流控相当于对这个点对点链路做一个qos。
->配置l2tp最大会话数
l2tpsession-limitsession-number
L2TP隧道和会话的验证过程
这是为了了解l2tp的代理验证和强制chap验证的机制。
用户端--------pstn/isdn-------lac----------internet----lns------server
用户首先发起一个拨号连接请求,lac接受了它的呼叫,然后对他做有关的验
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VPN 基础知识