VPN总结讲解.docx
《VPN总结讲解.docx》由会员分享,可在线阅读,更多相关《VPN总结讲解.docx(46页珍藏版)》请在冰豆网上搜索。
VPN总结讲解
VPN总结
●VPN分类
VPN技术分为二层和三层,二层VPN包括PPTP和L2TP,以及CISCO的L2F,三层VPN包括IPSEC,GREVPN技术
●二层VPN技术
1.PPTP
PPTP特色
◆PPTP支持MPPC,对PPP的载荷部分进行压缩。
◆PPTP支持MPPE,使用RSA的RC4算法对PPP的载荷部分进行加密。
◆通过PPP来支持用户验证,支持PAP、CHAP、MS-CHAP
◆PPTP使用PPP封装用户数据,使用PPTP头部封装PPP帧,因此支持多种网络层协议。
◆PPTP使用PPP的NCP阶段来支持网络层地址的分配和协商。
PPTP阶段
◆阶段一:
LCP协商,如协商采用何种认证协议,测试魔术字,是否启用MPPC/MPPE,是否支持PPP多链路等;
◆阶段二:
验证,根据第一阶段协商的结果,采用相应的认证协议进行用户验证,如果成功,则进入第三阶段,否则进入链路终止阶段;
◆阶段三:
回拨,CBCP回拨控制协议可以在一定程度上防止号码被冒用,并且可以降低拨号用户的费用,但此阶段一般都是可选的;如果没有在第一阶段协商回拨,则跳到阶段四;
◆阶段四:
NCP协商,如协商IP地址,TCP/IP头部压缩等,PPTP针对每一种网络层协议都有相应的NCP协议,如IPCP、IPXCP等。
PPTP网络构成
◆PPTP采用C/S结构,PAC负责建立到PNS的PPTP隧道,PNS是PPTP隧道的端接点,负责从PPTP中解封装得到PPP帧,并转发PPP帧中的载荷部分;
◆PPTP中,PAC和PNS之间有两种连接,一种是控制连接,用于拨号的呼叫控制,并建立、维持、终结PPTP隧道,控制连接的建立必须依托TCP协议,端口1723;另一种连接是数据连接,PPTP通过使用一种修改版的GRE协议来封装PPP帧,从而建立一条专门用来传输用户实际数据的数据连接,并依靠修改版的GRE协议来实现流量和拥塞控制
PPTP控制报文类型
PPTP整个隧道建立使用了如下类型的报文:
◆开始_控制_连接_请求报文
◆开始_控制_连接_回应报文
◆保活_应答_请求报文
◆保活_应答_回应报文
◆停止_控制_连接_请求报文
◆停止_控制_连接_回应报文
◆出站_呼叫_请求报文
◆出站_呼叫_回应报文
◆入站_呼叫_请求报文
◆入站_呼叫_回应报文
◆入站_呼叫_已连接报文
◆设置_链路_消息报文
◆呼叫_消除_请求报文
◆呼叫_断开_通知报文
PPTP隧道建立详细过程
PPTP先在PAC和PNS之间建立控制连接,再在PAC和PNS之间建立数据连接;其中控制连接通过TCP1723端口通信,负责传输上面描述的控制报文,这些报文的目的是用来建立、维持、拆除整个PPTP隧道;数据连接使用GRE封装PPP,使得PPTP支持多种协议,且借助GRE实现流量和拥塞控制:
控制连接的建立
控制连接的建立,发起者发送“开始_控制_连接_请求”报文,接收者使用“开始_控制_连接_回应”报文给予回应;但值得提醒的是,PAC和PNS都可以主动发起控制连接的建立请求,在这种情况下,IP地址最高的一端初始化连接,对端发起的连接将被拆除。
维持控制连接
Keepalive类报文是一种维持PAC和PNS之间连接的保活消息,它包含“保活_应答_请求”报文和“保活_应答_回应”报文;PAC和PNS都可以发送keepalive类报文,如果某端超过60秒依然没有收到对端的任何控制类型的报文,则向对端发送“保活_应答_请求”报文,对端收到后必须给予“保活_应答_回应”报文,如果接收不到对端的回应,则进入控制连接的终止阶段。
终止控制连接
控制连接可以终止任何数据连接,以及它自身,整个终止过程包括“停止_控制_连接_请求”报文和“停止_控制_连接_回应”报文,PAC和PNS都可以主动发起终止连接,同时也将终止任何数据连接。
数据连接的建立
在控制连接建立完成后,就进入数据连接的建立过程,整个数据连接的建立可能会用到这些报文:
◆出站_呼叫_请求报文
◆出站_呼叫_回应报文
◆入站_呼叫_请求报文
◆入站_呼叫_回应报文
◆入站_呼叫_已连接报文
在PNS主动建立数据连接时,PNS生成“出站_呼叫_请求”报文给PAC,PAC收到后发送“出站_呼叫_回应”报文给PNS,表示PAC同意建立数据连接。
在PAC主动建立数据连接时,PAC生成“出站_呼叫_请求”报文给PNS,PNS收到后发送“出站_呼叫_回应”报文给PAC,表示PNS同意建立数据连接,PAC收到PNS的“入站_呼叫_回应”报文后,发送“入站_呼叫_已连接”报文给PNS,表示数据连接成功建立。
维持数据连接
PAC和PNS使用“设置_链路_消息”报文来共享链路当前的设置信息,如窗口大小;一般的,PNS将发送这个报文给PAC,通知PAC任何有关隧道的配置变化。
拆除隧道连接
当不再需要隧道时,交换“呼叫_消除_请求”报文和“呼叫_断开_通知”报文;PAC发送“呼叫_消除_请求”报文给PNS,PNS收到后发送“呼叫_断开_通知”报文回应PAC,此时PPTP的数据连接已经拆除;PAC发送“停止_控制_连接_请求”报文给PNS,PNS收到后发送“停止_控制_连接_回应”报文回应PAC,此时PPTP的控制连接已经拆除。
PPTP隧道建立完整过程
⑴PAC使用TCP1723端口,经过TCP三次握手过程建立与PNS的TCP连接
⑵PAC通过这个TCP连接,向PNS发送一个“开始_控制_连接_请求”报文
⑶PNS收到后向PAC发送一个“开始_控制_连接_回应”报文,这时PPTP的控制连接已经建立
⑷PAC发送一个“外出_呼叫_请求”报文给PNS,该报文中包含用来标识隧道的CallerID号,PAC通过该报文向PNS请求建立数据连接
⑸PNS发送一个“外出_呼叫_回应”报文给PAC,该报文中包含了PNS选中的PEERCallerID号,表示同意该PAC的数据连接
⑹PAC发送一个“设置_链路_消息”报文,指定该隧道的的选项,数据连接建立完成,以后将发生基于PPTP数据连接上的PPP会话协商过程
⑺如果在控制连接上60秒内没有收到任何控制报文,PNS会给PAC发送“保活_应答_请求”报文,如果PAC是可达的,PAC会向PNS发送回应报文,否则就进入隧道拆除阶段
⑻假设PAC主动要求断开PPTP隧道,则PAC首先发送一个具有隧道配置参数的“设置_链路_消息”报文,接着再发送一个LCP终止请求,表示要求关闭PPP会话
⑼PNS收到LCP终止请求后,向PAC也先发送一个“设置_链路_消息”报文,再接着发送一个LCPAck报文来确认LCP终止请求,此时PPP会话已经先被拆除
⑽PAC发送一个“清除_呼叫_请求”报文给PNS
⑾PNS用“呼叫_断开_通知”报文回应PAC,此时PPTP的数据连接已经拆除
⑿PAC向PNS发送“停止_控制_连接_请求”报文
⒀PNS使用“停止_控制_连接_回应”报文给PAC,此时PPTP控制连接已经拆除,PPTP隧道完全终止
PPTPVPN示例实验
拓扑结构
详细配置
R1:
routerrip
version2
network61.0.0.0
network82.0.0.0
noauto-summary
R2:
routerrip
version2
network61.0.0.0
network202.100.1.0
noauto-summary
R3:
aaanew-model//开启AAA
aaaauthenticationpppdefaultlocal//对PPP协议采用本地认证
vpdnenable//开启VPN拨号
vpdn-grouppptp_vpdn_group//建立pptp_vpdn_group拨号组
accept-dialin//配置接收拨入属性
protocolpptp//定义拨号协议为PPTP
virtual-template1//定义拨号模板号,即定义VPN网关端口
usernamepptp_user1password0cisco//建立PPTP拨号用户账户
interfaceFastEthernet0/0
ipaddress192.168.1.1255.255.255.0
ipnatinside
interfaceSerial1/1
ipaddress202.100.1.10255.255.255.0
ipnatoutside
interfaceVirtual-Template1//建立模板接口
ipaddress10.1.1.1255.255.255.0//定义PPTPVPN网关IP
peerdefaultipaddresspoolpptp_address_pool//定义对端IP
compressmppc//启用MPPC压缩PPP载荷
pppencryptmppeauto//启用MPPE加密PPP载荷
pppauthenticationms-chap-v2ms-chapchap//定义PPP认证协议
pppipcpmask255.255.255.0//指定IPCP协商给客户端的掩码
routerrip
version2
network202.100.1.0
noauto-summary
iplocalpoolpptp_address_pool10.1.1.110.1.1.254//建立地址池
iproute0.0.0.00.0.0.0Serial1/1
ipnatinsidesourcelistinside_pat_listinterfaceSerial1/1overload
ipaccess-listextendedinside_pat_list
denyip192.168.1.00.0.0.25510.1.1.00.0.0.255
permitip192.168.1.00.0.0.255any
移动用户:
包截取图:
2.L2TP
L2TP特色
◆L2TP是CISCO的L2F和PPTP的结合,它使用依然使用PPP封装用户数据,因此具有支持多协议的特点。
◆在PPP的压缩方面,也是采用的MPPC,但是在数据安全上,L2TP可以被封装到IPSEC中传输,当然也可以直接传输,因此L2TP经常和IPSEC结合使用。
◆L2TP结合IPSEC,可以获得IPSEC的新特性,如用户扩展认证,地址分配等。
◆L2TP的控制和数据都使用相同的UDP1701连接,在格式上是一致的。
◆L2TP支持两种类型的隧道,一种是“自愿隧道”,即移动用户的计算机LAC和LNS是隧道的两端;另一种是“强制隧道”,即用户计算机前方的FEP设备和LNS为隧道的两端,内部用户计算机通过PPPOE拨号到FEP,FEP激活L2TP隧道至LNS,当所有内部用户断开至FEP的PPPOE会话,FEP则断开L2TP。
L2TPoverIPsec
当L2TP依靠IPSEC提供数据安全时,IPSEC必选首先在LAC/FEP和LNS之间建立,L2TP整个报文都封装在ESP内部,成为ESP的载荷。
L2TP控制连接
◆L2TP使用UDP1701封装数据,在同一个连接上实现控制消息和数据消息的传递,在L2TP控制消息中,L2TP使用NextReceived字段和NextSend字段来实现类似TCP中的流量控制和排序功能,但是实际上LNS收到乱序的报文都是丢弃的。
◆在L2TP中,LNS和多个LAC之间的每个隧道连接都用一个唯一的TunnelID值来区分,当LNS和LAC之间采用强制隧道时,多个LAC共享FPE和LNS之间的隧道,这时采用CALLID来在同一个Tunnel上区分不同的用户
◆L2TP使用和PPTP大部分相同的消息类型
L2TP数据连接
L2TP数据连接和L2TP控制连接走同一个传输层UDP1701端口,当LNS收到一个L2TP数据时,先解封装掉外层的IP承载协议头,接着使用最尾部的“ESP认证尾部”中的数字签名(HASH)来验证完整性和源认证,再解密ESP载荷部分,得到原始明文;此时在明文中使用UDP1701段头,从而将剩余的部分发送给L2TP进程,L2TP进程接收到后,通过识别L2TP头部中的TunnelID和CallID来确认该L2TP数据来自哪个隧道连接,此后将PPP解封装,PPP载荷部分进入下一步处理。
L2TP和PPTP比较
◆加密过程:
PPTP使用MPPE加密PPP的载荷部分,但是PPP头部,以及其他外层头部都是明文的;L2TP依靠IPSEC提供安全性,整个L2TP数据包都被IPSECESP加密,使用IPSEC的传输模式来发送数据;MPPE使用基于RSA的RC-4算法,密钥长度为40位、56位、128位,IPSEC使用ESP协议,ESP可以使用DES、3DES、AES等加密算法。
◆用户验证:
PPTP使用PPP支持的用于用户验证方法,如PAP、CHAP等;L2TP可以使用PPP的用于验证方法,而且也支持IPSEC的设备验证
PPTP优点
◆PPTP工作机制比L2TP更为简单,易于排错。
◆PPTP控制连接采用TCP1723封装,可以被NAT/PAT;数据连接采用GRE封装,采用GRE头部中的“CallID”值做NAT/PAT转换。
L2TP/IPSEC可以采用NAT-T、CISCOipsecoverTCP、CISCOipsecoverudp等方法来支持NAT/PAT,但如果LAC不是FPE,而是用户的计算机,即“自愿隧道”下用户的计算机直接建立L2TP/IPSEC隧道到LNS,这时WINDOWS操作系统是不支持使用NAT-T的,因此无法和NAT/PAT设备协调工作;如果LAC是FPE设备,即“强制隧道”下FPE前端设备和LNS建立L2TP/IPSEC隧道,这时FPE设备是支持这些NAT穿越技术的,用户产生的PPP报文很容易穿越FPE前方的NAT/PAT设备。
L2TP/IPSEC优点
◆L2TP和IPSEC搭配使用时,可以借助IPSEC实现证书认证或者EAP认证,这比PPTP的PAP、CHAP要安全得多。
◆L2TP借助IPSEC,可以实现数据加密、数据完整性、源认证、抗重放攻击;PPTP只能通过PPP的MPPE提供加密。
◆IPSEC会加密整个L2TP报文,当然也包括PPP;PPTP工作时,只会加密PPP的载荷部分,而且PPP在LCP协商阶段时,PPP载荷部分(LCP消息)是没有被MPPE加密的。
L2TP实验示例
拓扑结构
详细配置
R1:
interfaceFastEthernet0/0
ipaddress61.187.191.1255.255.255.0
interfaceSerial1/0
ipaddress202.100.1.1255.255.255.252
R2:
aaanew-model//启动AAA
aaaauthenticationpppdefaultlocal//配置对PPP的本地认证
vpdnenable//开启VPDN
vpdn-groupl2tpgroup//建立l2tpgroupVPN拨号组
accept-dialin//配置拨入属性
protocoll2tp//指定改组使用的协议为L2TP
virtual-template1//指定调用VPN网关接口配置来自模板接口1
nol2tptunnelauthentication//关闭L2TP隧道密钥认证,改由IPSEC提供
usernamel2tp_user1password0123qwe!
//建立拨号用户密码
cryptoisakmppolicy1//建立IPSECIKE策略
encr3des
hashmd5
authenticationpre-share
group2
cryptoisakmpkeyciscoaddress0.0.0.00.0.0.0//配置IPSEC隧道认证时用的密钥
cryptoipsectransform-setl2tp_vpn_setesp-3desesp-md5-hmac//配置IPSEC数据连接上使用的传输模式集
modetransport//指定IPSEC使用传输模式传输被加密的L2TP报文
cryptodynamic-mapdy-map1//配置动态加密图
settransform-setl2tp_vpn_set//绑定传输模式集
cryptomapl2tp_vpn_map1ipsec-isakmpdynamicdy-map//从动态加密图中映射出静态加密图
interfaceFastEthernet0/0
ipaddress192.168.1.1255.255.255.0
ipnatinside
interfaceSerial1/0
ipaddress202.100.1.2255.255.255.252
ipnatoutside
cryptomapl2tp_vpn_map//在S1/0上启用IPSEC加密图,开启IPSEC
interfaceVirtual-Template1//配置模板接口
ipaddress10.1.1.1255.255.255.0
peerdefaultipaddresspooll2tp_address_pool
compressmppc
pppauthenticationms-chap-v2ms-chapchappap
pppipcpmask255.255.255.0
iplocalpooll2tp_address_pool10.1.1.210.1.1.254
iproute0.0.0.00.0.0.0Serial1/0
ipnatinsidesourcelistpatlistinterfaceSerial1/0overload
ipaccess-listextendedpatlist
denyip192.168.1.00.0.0.25510.1.1.00.0.0.255
permitip192.168.1.00.0.0.255any
移动用户:
●三层VPN技术
3.IPSEC
IPSEC特色
◆IPSEC是个基于IP的安全框架,可以针对IPV4或者IPV6提供“数据机密性”、“数据完整性”、“数据源验证”、“抗重放攻击”、“隧道认证”等安全机制
◆IPSEC支持多种类型的结构,如“站点到站点”、“远程访问”;“远程访问”又可以分为“软件客户端”和“硬件客户端”
◆IPSEC通过使用Diffie-HellMan来共享密钥,避免了密钥直接发送至广域网链路上
IPSEC协议簇
◆ISAKMP是互联网SA和KEY管理协议,通过这个协议来协商安全策略,建立控制连接和数据连接。
◆AH是认证头协议,它负责对用户数据进行“数据完整性”和“数据源认证”的功能
◆ESP是封装安全载荷协议,他负责对用户数据进行“数据机密性”和“数据源认证”,以及“数据完整性”和“抗重放攻击”等功能
密钥技术
为了保证数据在链路上传输的安全性,很多情况下我们会将数据加密,数据加密的过程至少需要两个组成部分,第一个部分就是被加密的原始数据,第二个部分就是用来加密原始数据的密码,即密钥;根据密钥的组成和加密机制的不同,密钥技术分为“对称密钥”和“非对称密钥”:
◆对称密钥:
对称密钥技术是指加密方使用的加密密钥和解密方使用的解密密钥是同一个密钥,这种密钥技术是最原始的密钥技术,该密钥技术最大的问题就是――你作为加密方,如何才能让对方了解到这个密钥,方便对方解密;一般的,可以通过打电话通知给对方,或者通过电子邮件,再或者直接通过互联网明文发送给对方,但是都是效率不高、安全性太差、也不实际的方法。
目前来说,如果需要在两个对等体间共享一个对称密钥,一般通过手动配置,或者DH算法来交换。
◆非对称密钥:
非对称密钥技术是指加密方使用的加密密钥和解密方使用的解密密钥不是同一个密钥;在非对称密钥技术中,通信的每个对等体都会生成一对密钥,一个是私钥,另一个是公钥;私钥不公开,私自保存,任何对等体都不知道对端的私钥,公钥公开,任何对等体都知道通信对端的公钥,公钥在正式通信前会被发送给对端。
公钥和私钥是一对密钥,相互相成,一个私钥只对应一个公钥,一个公钥也只对应一个私钥,却无法从私钥推算出公钥,也无法从公钥推算出私钥,用公钥加密的数据只能由该公钥对应的私钥解密,同样私钥加密的数据只能由该私钥对应的公钥解密。
密钥交换算法
在通信过程中,无论你是采用“对称密钥”还是“非对称密钥”技术,其目的都是为了使用密钥加密数据或者解密数据,这时加密方需要在完成加密数据后,让对方了解到解密的密钥,这个解密的密钥可能来自加密方的直接发送,也有可能是通过某种“密钥交换算法”让加密方能够在不直接发送解密密钥的前提下,把解密的密钥暗示给对端解密方,DH算法就是用来“共享”或者说是“交换”密钥的一种特殊算法。
◆Diffie-HellMan:
DH算法用来在两个对等体之间交换“对称密钥”,DH算法的机制确保了“对称密钥”本身不会在链路上传输,保证了“对称密钥”的安全性。
以上图为例讲解AB两个对等体是如何通过DH算法交换“对称密钥X”。
⑴第一步,假设A需要将“对称密钥X”共享给B,对等体A和B都先各自产生自己的公钥和私钥。
⑵第二步,A将自己的公钥【简称A公钥】发送给B,B也将自己的公钥【简称B公钥】发送给A。
⑶第三步,A收到B公钥后,用A私钥和B公钥作为数据输入DH算法,DH算法会产生一个“临时密钥K”;B收到A公钥后,用B私钥和A公钥作为数据输入DH算法,DH算法会产生一个“临时密钥K”;这两个“临时密钥K”是一样的。
⑷第四步,A将“对称密钥X”作为对象,使用“临时密钥K”来加密“对称密钥X”,并将“被加密后的对称密钥X”发送给B;B收到“被加密后的对称密钥X”后,因为也有“临时密钥K”,于是使用“临时密钥K”解密“被加密后的对称密钥X”,从而得到明文的“对称密钥X”,完成了“对称密钥X”从A到B的共享交换,但密钥本身没有直接在链路上传输。
从这个过程中,可以认为DH算法其实是基于“非对称密钥”技术.
加密算法
无论通过什么方式得到密钥,也无论得到的密钥是对称密钥,还是非对称密钥,得到密钥的目的就是加密数据,因此加密算法很重要;如果只有密钥没有算法,就好比你有车钥匙却不知道如何开车;就算你知道如何开车,那开车方法还得分“卡车