一、L2TP简介
L2TP(Layer 2 Tunneling Protocol,二层隧道协议)是VPDN(Virtual PrivateDial-up Network,虚拟私有拨号网)隧道协议的一种。
1、保护PPP报文。
2、数据没有加密机制,可通过IPSEC保证数据安全。
3、同3层VPN(IPSec\GRE)有所区别的是,L2TP是将来自用户网络的私有数据从二层PPP头部开始进行封装,而三层VPN是将来自用户网络的私有数据从三
层IP报头开始进行封装
4、主要用途:企业驻外机构和出差人员可从远程经由公共网络,通过虚拟隧道实现和企业总部之间的网络连接。
L2TP报文封装层次结构
IP报文头 (公网地址) | UDP 报文头 | L2TP 报文头 | PPP 报文头 | IP报文头 (私网地址) | Data |
此报文格式是LAC与LNS之间的数据报文。
L2TP报文头是VPN协议报文头,其内封装的是PPP报文,因此L2TP是二层VPN协议。
协议结构:
描述了控制通道以及PPP帧和数据通道之间的关系。PPP帧在不可靠的L2TP数据通道上进行传输,控制消息在可靠的L2TP控制通道内传输。
L2TP报文头格式
L2TP报文头字段说明:
T:消息类型标志位,0为数据报文,1为控制报文。
x:保留位。
S:Ns和Nr标志位,控制报文中此位必须是1。
O:Offset标志位,为1说明Offset有效,控制报文此位必须为0。
P:优先级标志位,数据报文此位为1,表示优先处理;控制报文此位为0。
Ver:必须为2。
Length:消息总长度,单位为字节。
Tunnel ID:控制连接标志符,本端有效。
Session ID:控制连接内的会话标志符,本端有效。
Ns:本消息的序列号。
Nr:在控制消息中,表示预期收到的下一个控制消息的序号;数据消息中无效。
Offset:偏移,如果有效,则数据从偏移后的字节开始。
二、L2TP的关键组件(它们之间通过协商建立隧道)
1、LAC(L2TP Access Concentrator,L2TP 访问集中器)
问服务器),主要用于为PPP 类型的用户提供接入服务。LAC 位于LNS 和远端系统之间,用于在LNS和远端系统之间传递信息包。它把从远
端系统收到的信息包按照L2TP 协议进行封装并送往LNS,同时也将从LNS收到的信息包进行解封装并送往远端系统。LAC 与远端系统之间采
用本地连接或PPP 链路,VPDN 应用中通常为PPP链路。
2、LNS(L2TP Network Server,L2TP 网络服务器)
的对端设备,是LAC 进行隧道传输的PPP 会话的逻辑终止端点。通过在公网中建立L2TP隧道,将远端系统的PPP 连接的另一端由原来
在逻辑上延伸到了企业网内部的LNS。
3、VPN用户:
指通过L2TP协议连入VPN的用户,通常是外地出差员工或办事机构。
三、会话和隧道这两个概念
在一个LNS和LAC对之间存在着两种类型的连接,一种是隧道(Tunnel)连接,一对LAC和LNS中可以有多个L2TP隧道;另一种是会话
(Session)连接,它复用在隧道连接之上,用于表示承载在隧道连接中的每个PPP会话过程。
隧道由一个控制连接和一个或多个会话(Session)组成。会话连接必须在隧道建立(包括身份保护、L2TP版本、帧类型、硬件传输类
等信息的交换)成功之后进行,每个会话连接对应于LAC和LNS之间的一个PPP数据流。控制消息和PPP数据报文都在隧道上传输。
L2TP使用Hello报文来检测隧道的连通性。LAC和LNS定时向对端发送Hello报文,若在一段时间内未收到Hello报文的应答,该隧道连
被断开。
L2TP报文头中包含隧道标识符(Tunnel ID)和会话标识符(SessionID)信息,用来标识不同的隧道和会话。隧道标识相同、会话标
同的报文将被复用在一个隧道上,报文头中的隧道标识符与会话标识符由对端分配。
隧道(tunnel)和会话(session)的关系,如下图所示;可以形象的理解为会话是建立在隧道之中的,隧道想成一个有10个车道的高
路,一台拨号PC的数据流为一个会话,相当于占用了一个车道(告诉公路有多少车道是设备规定好的),这个车道只能跑这个运载这个
PC的报文的卡车。(比如某型号设备每条隧道最多支持1000个会话)。
•session是由LAC发起的,事实上由LNS发起也是合法的,但消息类型有所不同,分别是:
•在一对LAC和LNS中可以存在多条隧道,每条隧道可以包含多个Session,但只有一个控制连接
•Session建立前,必须首先保证控制连接存在,如没有,首先建立控制连接,然后再建立session;如已存在控制连接,直接建立session
•在拆除Session时,如果还有其他Session存在,则控制连接不拆除;如果没有其他Session存在,控制连接随之拆除
L2TP协议
L2TP协议在TCP/IP协议栈中的位置
我们以一个用户侧的IP报文的传递过程来描述VPN工作原理,黄色标示的IP为需要传递的用户数据!
在LAC侧的链路层将用户数据报文作为加上ppp封装,然后传递给L2TP协议,L2TP再封装成UDP报文,UDP再次封装成可以在
Internet上传输的IP报文,此时的结果就是IP报文中又有IP报文,但两个IP地址不同,一般用户报文的IP地址是私有地址,而LAC上的IP地址
为公有地址,至此完成了VPN的私有数据的封装;
在LNS侧,收到L2TP/VPN的IP报文后将IP、UDP、L2TP报文头去掉后就恢复了用户的PPP报文,将PPP报文头去掉就可以得到IP报
文,至此用户IP数据报文得到,从而实现用户ip数据的透明隧道传输,而且整个PPP报头/报文在传递的过程中也保持未变,这也验证了L2TP
是一个二层VPN隧道协议!
L2TP协商交互过程
为了在VPN用户和服务器之间传递数据报文,必须在LAC和LNS之间建立传递数据报文的隧道和会话连接,隧道是保证具有相同会
话连接特性的一组用户可以共享的连接属性所定义的通道,而会话是针对每个用户与企业VPN服务器建立连接的PPP数据通道,多个会话复
用在一个隧道连接上隧道和会话是动态建立与删除的。
会话的建立是由PPP模块触发,如果该会话在建立时没有可用的隧道结构,那么先建立隧道连接,会话建立完毕后开始进行数据传输!
1)L2TP建立流程
L2TP隧道的建立是一个三次握手的过程,首先由LAC发起隧道建立请求SCCRQ,LNS收到请求后进行应答SCCRP,最后LAC在收到应
答后再给LNS返回确认SCCCN;隧道建立。
会话建立的过程与隧道类似,首先由LAC发起会话建立请求ICRQ,LNS收到请求后返回应答ICRP,LAC收到应答后返回确认ICCN,会
话建立!
L2TP的会话建立由PPP触发,隧道建立由会话触发。由于多个会话可以复用在一条隧道上,如果会话建立前隧道已经建立,则隧道不用
重新建立。
2)L2TP隧道的维护
隧道建立后,一直要等到该隧道所属会话全部下线后,再进行拆除,为了确认对端的隧道结构依然存在,需要定时发送与对端的维护报
文,其流程为:LAC或LNS发出Hello报文,对应的LNS或LAC发出确认信息!
3)L2TP隧道拆除
隧道拆除流程比其建立过程要简单,隧道的任何一端发出拆链通知StopCCN,对端返回确认;会话的拆除流程为:会话一端发出拆链通知CDN,对端返回确认即可!
四、AVP简介
一种对属性类型和属性值统一编码的方法;L2TP控制消息通过AVP携带各种参数;首先说明属性类型,然后说明属性值。
格式:
M:强制位,该位置1时,不识别的AVP将导致相应的session或tunnel终止。
H:隐藏标志位,该位置1,表示AVP值被隐藏显示。
rsvd:保留位。
Length:AVP报文长度。
AttributeType:属性类型定义。
AttributeValue:属性值。
属性类型和属性值共同决定了AVP的含义和内容。
AVP的一种加密解密算法:
加密过程:
c1= p1⊕ MD5(AV|S|RV)
c2= p2⊕ MD5(S|c1)
…
ci = pi⊕ MD5(S|ci-1)
其中AV是2字节的属性类型,S是通信双方的共享秘密,RV为随机向量
对应解密过程是:
p1=c1⊕ MD5(AV|S|RV)
p2=c2 ⊕ MD5(S|c1)
…
pi=ci ⊕ MD5(S|ci-1)
其中AV是2字节的属性类型,S是通信双方的共享秘密,RV为随机向量