资源描述
L2TP协议笔记---L2TP主要协议报文分析
窗体顶端
一、L2TP实现的两种方式
名词解释:
LAC(L2TP Access Concentrator L2TP访问集中器)
是附属在交换网络上的具有PPP端系统和L2TP协议处理能力的设备。LAC一般是一个网络接入服务器NAS,主要用于通过PSTN/ISDN网络为用户提供接入服务。
LNS(L2TP Network Server L2TP网络服务器)
是PPP端系统上用于处理L2TP协议服务器端部分的设备。
VPDN(Virtual Private Dial Network,虚拟私有拨号网)
指利用公共网络(如ISDN和PSTN)的拨号功能及接入网来实现虚拟专用网。
注:如下示例中使用的防火墙(Firewall,FW)既可以当做LAC也可以作为LNS使用。
1、PC直接拨号到LNS,组网如图1所示
图1
2、PC通过LAC拨号连接到LNS,组网如图2所示
图2
因为一般都使用用PC---LAC---LNS组网,且此种组网包含了PC---LNS的组网形态,故后续描述均已PC---LAC---LNS为例。
LAC位于LNS和主机之间,用于在LNS和主机之间传递信息包,把从主机收到的信息包按照L2TP协议进行封装并送往LNS,将从LNS收到的信息包进行解封装并送往远端系统。LAC与主机之间可以采用本地连接或PPP链路,VPDN应用中通常为PPP链路。LNS作为L2TP隧道的另一侧端点,是LAC的对端设备,是被LAC进行隧道传输的PPP会话的逻辑终止端点。
二、L2TP封装位置分析
如下图3所示,从图中至上而下的分析,为PC的报文在PPP内网环境中发送到LAC,由LAC封装L2TP,再通过外网的报文正常转发给LNS的报文封装过程。
注:设计的网络环境为PC---LAC为内网使用PPP协议,LAC---LNS为外网使用协议由服务供应商自定。
图3
三、理解L2TP几个重要的概念
1、隧道和会话的概念
在一个LNS和LAC对之间存在着两种类型的连接,一种是隧道(Tunnel)连接,一对LAC和LNS中可以有多个L2TP隧道;另一种是会话(Session)连接,它复用在隧道连接之上,用于表示承载在隧道连接中的每个PPP会话过程。
隧道由一个控制连接和一个或多个会话(Session)组成。会话连接必须在隧道建立(包括身份保护、L2TP版本、帧类型、硬件传输类型等信息的交换)成功之后进行,每个会话连接对应于LAC和LNS之间的一个PPP数据流。控制消息和PPP数据报文都在隧道上传输。
· L2TP使用Hello报文来检测隧道的连通性。LAC和LNS定时向对端发送Hello报文,若在一段时间内未收到Hello报文的应答,该隧道连接将被断开。
· L2TP报文头中包含隧道标识符(Tunnel ID)和会话标识符(Session ID)信息,用来标识不同的隧道和会话。隧道标识相同、会话标识不同的报文将被复用在一个隧道上,报文头中的隧道标识符与会话标识符由对端分配。
隧道(tunnel)和会话(session)的关系,如图4所示;可以形象的理解为会话是建立在隧道之中的,隧道想成一个有10个车道的高速公路,一台拨号PC的数据流为一个会话,相当于占用了一个车道(告诉公路有多少车道是设备规定好的),这个车道只能跑这个运载这个PC的报文的卡车。(比如某型号设备每条隧道最多支持1000个会话)。
图4
2、控制消息和数据消息的概念
L2TP中存在两种消息:控制消息和数据消息。
· 控制消息:用于隧道和会话连接的建立、维护以及传输控制;控制消息的传输是可靠传输,并且支持对控制消息的流量控制和拥塞控制。
· 数据消息:用于封装PPP帧并在隧道上传输;数据消息的传输是不可靠传输,若数据报文丢失,不予重传,不支持对数据消息的流量控制和拥塞控制。
控制消息和数据消息共享相同的报文头。
四、L2TP隧道的呼叫建立流程
1、L2TP隧道的呼叫建立流程
图5
(1) 用户端PC机发起呼叫连接请求;
(2) PC机和LAC端进行PPP LCP协商;
(3) LAC对PC机提供的用户信息进行PAP或CHAP认证;
(4) LAC将认证信息(用户名、密码)发送给RADIUS服务器进行认证;
(5) RADIUS服务器认证该用户,如果认证通过则返回该用户对应的LNS地址等相关信息,并且LAC准备发起Tunnel连接请求;
(6) LAC端向指定LNS发起Tunnel连接请求;
(7) LAC端向指定LNS发送CHAP challenge信息,LNS回送该challenge响应消息CHAP response,并发送LNS侧的CHAP challenge,LAC返回该challenge的响应消息CHAP response;
(8) 隧道验证通过;
(9) LAC端将用户CHAP response、response identifier和PPP协商参数传送给LNS;
(10) LNS将接入请求信息发送给RADIUS服务器进行认证;
(11) RADIUS服务器认证该请求信息,如果认证通过则返回响应信息;
(12) 若用户在LNS侧配置强制本端CHAP认证,则LNS对用户进行认证,发送CHAP challenge,用户侧回应CHAP response;
(13) LNS再次将接入请求信息发送给RADIUS服务器进行认证;
(14) RADIUS服务器认证该请求信息,如果认证通过则返回响应信息;
(15) 验证通过,用户访问企业内部资源。
注:此节如下附加内容涉及到报文协商,前面没有介绍,可以先了解L2TP笔记2中关于报文格式与协商的相关内容,再回头深入分析此节,此节放在这里是为了便于对于整体协商过程进行深入分析。
附加:2、针对流程中步骤7、步骤12的Challenge验证过程的分析
(1)LAC向LNS发SCCRQ请求消息时,会产生一个随机的字符串做为本端CHAP Challenge发给LNS。
(2)LNS收到这个Challenge后,再加上本端配置的密码及SCCRP产生一个新的字符串,用MD5算出一个16个字节的Response,在SCCRP消息中发给LAC。
同时也产生一个随机的字符串(LNS Challenge)放在SCCRP中一起发给LAC。
(3)LAC将自己的CHAP Challenge加上本端配置的密码,再加上SCCRP产生一个新字符串,用MD5算出一个16字节的字符串,并与LNS发来的SCCRP中带的LNS CHAP Response比较,相同通过,不同断掉。
(4)同理LNS也要验证LAC,LAC用在SCCRP中发现的LNS CHAP Challenge加上本端密码和SCCCN组合,再用MD5算出一个16字节的字符串做为LAC CHAP Response在SCCCN中发给LNS。
(5)LNS用自己发的Challenge+本端密码+SCCCN用MD5算出一个16字节字符串,与收到的作比较,相同通过,不同断掉。
附加:3、LAC代LNS与PC协商LCP(即认证代理)和用于认证的AVPS
正常用户认证方式:
当LAC检测到有用户拨入电话的时候,向LNS发送ICRQ,请求在已经建立的tunnel中开始session的建立,LAC可以一直等到接收到了LNS回应的ICRP后,表明session可以建立的时候再回答远端(拨号用户)的呼叫,这样LNS可获得足够的信息来决定是否回答这个远端的呼叫。
LAC代LNS与PC协商LCP(即认证代理):
LAC在接收到ICRP之前,自行先回答远端(拨号用户)的呼叫,代替LNS与其进行LCP协商和PPP认证,用获得的信息来决定选择哪个LNS(此处对应流程图中步骤5),这种情况下LAC对呼叫的指示和呼叫的回答只是哄骗性质的。在session可以建立时,LAC向LNS发送ICCN时会携带着先前与呼叫用户进行的LCP协商和PPP认证涉及的特性信息(此处对应流程图中步骤9),包含这些信息的AVP如下:
①Inital Received LCP CONFREQ(ICCN\属性26):为LNS提供LAC从PPP对端(即拨号用户)接收到初始的conf-request。
②Last Sent LCP CONFREQ(ICCN\属性27):提供LAC发送到PPP对端最后的conf-request。
③Last Received LCP CONFREQ(ICCN\属性28):提供LAC从PPP对端接收到的最后的conf-request。
④Proxy Authen Type(ICCN\属性29):标识是否使用验证代理,验证的类型
0---Reserved 1---Textual username/password exchange
2---PPP CHAP 3---PPP PAP
4---No Authentication 5---Microsoft CHAP Version 1(MSCHAPv1)
⑤Proxy Authen Name(ICCN\属性30):验证时客户端响应的名称。
⑥Proxy Authen Challenge(ICCN\属性31):LAC发送到PPP对端的Challenge。
⑦Proxy Authen ID(ICCN\属性32):为LAC和PPP对端的验证定了一个ID。
⑧Proxy Authen Response(ICCN\属性33):LAC从PPP对端接收到的PPP Authentication Response。
五、L2TP的Tunnel和Session建立过程
① 1(SCCRQ)Start-Control-Connection-Request
控制链接发起请求,由LAC或LNS向对端发送,用来初始化LAC和LNS之间的tunnel,开始tunnel的建立过程。
② 2(SCCRP)Strat-Control-Connection-Reply
表示接受了对端的连接请求,tunnel的建立过程可以继续。
③ 3(SCCCN)Start-Control-Connection-Connected
对SCRRP的回应,完成tunnel的建立。
④ ZLB
零长度消息报文,一般为查询报文,LAC可以用Hello报文进行恢复,也可以直接丢弃。
⑤ 10(ICRQ)Incoming-Call-Request
当LAC检测到有用户拨入电话的时候,向LNS发ICRQ,请求在已建立的tunnel中建立session。
⑥ 11(ICRP)Incoming-Call-Reply
用来回应ICRQ,表示ICRQ成功,LNS也会在ICRP中标识L2TP session必要的参数。
⑦ 12(ICCN)Incoming-Call-Connected
用来回应ICRP,L2TP session建立完成。
六、其它主要控制消息了解
控制报文: 0(reserved)
1(SCCRQ)
2(SCCRP)
3(SCCCN)
4(STOPCCN)Stop-Control-Connection-Notification
由LAC或LNS发出,通知对端tunnel将要停止,控制链接将要关闭。另外,所有活动的会话都会悄悄的被清除,原因会显示在Result Code AVP中。
5(reserved)
6(HELLO)
会话报文:
8(OCRP)Outgoing-Call-Reply
9(OCCN)Outgoing-Call-Connected
10(ICRQ)
11(ICRP)
12(ICCN)
13(reserved)
14(CDN)Call-Disconnect-Notify
由LAC或LNS发出,通知对端session将要停止。
错误报告报文:15(WEN)WAN-Error-Notify
PPP链接控制报文:16(SLI)Set-Link-Info
7(OCRQ)Outgoing-Call-Request LNS发向LAC用来设置PPP协商的选项,这些选项在call的生存周期中可以随时变化,因此LAC有能力在活动的PPP session上更新内部的呼叫信息和行为。
七、L2TP报文头格式
Type(T):标识消息的类型,0表示是数据消息,1表示控制消息。
Length(L):置1时,说明Length域的值是存在的,对于控制消息L位必须置1。
X bit:保留位,所有保留位均置0。
Sequence(S):置1时,说明Ns和Nr是存在的,对于控制消息S必须置1。
Offset(O):置1时,说明Offset Size域是存在的,对于控制消息O必须置0。
Priority(P):只用于数据消息,对于控制消息P位置0,当数据消息此位置1时,说明该消息在本列队和传输时应得到优先处理。
Ver:必须是2,表示L2TP数据报头的版本。
Length:标识整个报文的长度(以字节为单位)。
Tunnel ID:标识L2TP控制链接,L2TP Tunnel标识符只有本地意义,一个Tunnel两端被分配的Tunnel ID可能会不同,报头中的Tunnel是指接收方的Tunnel ID,而不是发送方的。本端的Tunnel ID在创建Tunnel时分配。通过Tunnel ID AVPs和对端交换Tunnel ID信息。
Session ID:标识Tunnel中的一个session,只有本地意义,一个session两端Session ID可能不同。
Ns:标识发送数据或控制消息的序号,从0开始,以1递增,到216再从0开始。
Nr:标识下一个期望接收到的控制消息。Nr的值设置成上一个接收到的控制消息的Ns+1。这样是对上一个接收到的控制消息的确认。数据消息忽略Nr。
Offset Size:如果值存在的话,标识有效载荷数据的偏移。
八、 AVP介绍及其格式
1、AVP介绍
控制消息中要携带的相关参数,使用AVP(Attribute Value Pair,属性值对)的形式来表示,使协议具有很好的扩展性。
2、AVP格式
● 开始的6个bit是一个位掩码,用来描述AVP的普通属性,RFC2661定义了前2位,其余被保留。
● (M)命令位:用来控制收到不认识的AVP时必须执行的动作。如果在一个关联特殊的会话消息中M位被置为不认识的AVP,这个会话一定会被终止。如果在一个关联全部通道的消息中M位被置为不认识的AVP,整个通道包括通道内的会话一定会被终止。如果M为没有被设置,这个不认识的AVP会被忽略掉。
● (H)隐藏位:用来识别一个AVP的属性域里的隐藏数据。
● 保留位一定要置0,收到一个保留位为1的AVP,会把收到的AVP当做不认识。
九、部分主要AVP含义
(1) Control Connection Management AVP
(2) Protocol Version AVP :标识L2TP协议的版本。
(3) Framing Capabilities AVP :倒数第二bit位A置1,标识支持帧异步;倒数第二bit位S置1,标识支持帧同步。
(4) Beaer Capabilities AVP :
(5) Tie Breaker AVP
标识发送者希望在LAC和LNS之间只存在一个tunnel;如果LAC和LNS同时都发起了SCCRQ,那么需要选择一个单一的tunnel。接收到SCCRQ端检查自己是不是向对端发送了SCCRQ,如果已经发送了,就比较Tie Breaker值的大小,值小的继续tunnel建立,值大的必须放弃tunnel。如果两个值相等,都放弃。
(6) Host name AVP :标识发送端的主机名称。
(7) Assigned Tunnel ID :本端(发送端)分配的tunnel ID。
(8) Receive Window Size :
标识接收窗口的大小:如果没有发送这个AVP,对端必须假设接收窗口是4,远端在发送指定数量的控制消息后,必须等待对方确认。
(9) Challenge :标识发送端希望对tunnel对端进行CHAP认证。
(10) Challenge Response :对接收到Challenge的响应。
(11) Assigned Session ID :
本端分配的Session ID,当LAC检测到用户呼叫的时候,向LNS发送ICRQ,请求在已经
存在的tunnel中建立session链接,LAC在本端为需要建立的session分配一个session ID,这个session ID只具有本地意义。LNS接收ICRQ后回应ICRP,在ICRP中也包含了LNS为这个session分配的一个具有本地意义的session ID。通过ICRQ和ICRP,本地就可以获得对端为这条session分配的session ID了。
注意:在L2TP包头中的session ID是指对端对session分配的session ID。
(12)Minimum BPS :标识呼叫链接可接受的最低的连接速率。
(13)Maximum BPS :标识呼叫链接可接受的最高的连接速率。
(14)Bearer Type :标识呼叫连接的是模拟信道还是数字信道。
(15)Framing Type :标识支持帧同步还是帧异步,如果A和S都置位说明都支持或者是不清除。
(16)Called Number :被呼叫方的电话号码。
(17)Calling Number :呼叫方的电话号码。
(18)Rx Connect Speed :LAC的接收速率,可能和发送速率是不对称的。
(19)Private Group ID :LAC用来标识客户属于某个特定的组织。
十 基于华为系设备的L2TP配置
一、PC直连LNS配置
1、 配置LNS链接PC的接口Ethernet 2/0/0的IP地址
[FW2] interface Ethernet 2/0/0
[FW2-Ethernet2/0/0] ip address 192.168.1.1 24
2、把Ethernet 2/0/0加入untrust域中(实际加到那个域中根据自己的需求决定)
[FW2] firewall zone untrust
[FW2-zone-untrust] add interface Ethernet2/0/0
3、设置域间的包过滤(此处以允许全部包过滤为例,实际根据需求决定)
[FW2] firewall packet-filter default permit all
4、配置本地用户及为用户分配地址用的地址池(此处只建立一个用户为例)
[FW2] aaa
[FW2-aaa] local-user user1 password simple password1
[FW2-aaa] local-user user1 service-type ppp
[FW2-aaa] ip pool 1 192.168.1.2 192.168.1.100
5、配置虚拟接口模板(简称VT,主要就是配置一些作为L2TP拨号网关的内容)
[FW2] interface Virtual-Template 1
[FW2-Virtual-Template1] ppp authentication-mode chap //PPP认证方式,可以试PAP或CHAP
[FW2-Virtual-Template1] ip address 192.168.1.1 24 //ip地址,即用户拨号后,分配的网关地址
[FW2-Virtual-Template1] remote address pool 1 //指定给用户分配地址的地址池,刚刚在aaa中建立的
6、把虚拟接口模板VT1加入到trust域
[FW2] firewall zone trust
[FW2-zone-trust] add interface virtual-template 1
7、打开防火墙的L2TP功能
[FW2]L2TP enable
8、创建L2TP组并绑定VT1
[FW2] l2tp-group 1
[FW2-l2tp1]allow l2tp virtual-template 1 remote name
注:(1) name:为PC时为PC名
(2) 使用组1时可以不写retome名字,其它组必须写
[FW2-l2tp1]undo tunnel authentication //关闭tunnel认证(默认开启),当然也可以开启,在后续LAC-LNS模式中使用隧道认证为例
9、VPN Client(PC上使用的L2TP拨号客户端,也可用系统自带的)
当FW使用group1且没设置remote name时,主机客户端上不写隧道名称,当group1设置了remote name时,或使用其他group时(除1以外的任何组均必须写remote name),客户端上必须设置隧道名称为主机名。
二、PC---LAC---LNS配置
LAC端配置(前提是PC---LAC---LNS之间的基本通信可以保证(包括基本的路由),即可以ping通)
1、 配置链接主机的接口IP(LAC与LNS之间的通信已实现,相关的接口IP、加入的域等配置此处不再说明)
[FW1] interface Ethernet 2/0/0
[FW1-Ethernet2/0/0] ip address 192.168.1.1 24
2、把Ethernet 2/0/0加入untrust域中(实际加到那个域中根据自己的需求决定)
[FW1] firewall zone untrust
[FW1-zone-untrust] add interface Ethernet2/0/0
3、设置域间的包过滤(此处以允许全部包过滤为例,实际根据需求决定)
[FW1] firewall packet-filter default permit all
4、配置本地用户(此处只建立一个用户为例)
[FW1] aaa
[FW1-aaa] local-user user1 password simple password1
[FW1-aaa] local-user user1 service-type ppp
5、配置虚拟接口模板(简称VT,主要就是配置一些作为L2TP拨号网关的内容)
[FW1] interface Virtual-Template 1
[FW1-Virtual-Template1] ppp authentication-mode chap //PPP认证方式,可以试PAP或CHAP
6、把虚拟接口模板VT1加入到trust域(不加入域也可以建立L2TP,但业务是不通的)
[FW1] firewall zone trust
[FW1-zone-trust] add interface virtual-template 1
7、链接主机的接口的虚拟模板VT1上使能PPPoE(实际上LAC此接口可以不配置IP,只要主机上有缺省路由到此设备即可)
[FW1-Ethernet2/0/0] pppoe-server bind virtual-template 1
8、打开防火墙的L2TP功能
[FW1]L2TP enable
9、l2tp组配置
[FW1] l2tp-group 1
[FW1-l2tp1] Start l2tp ip 3.2.1.1 fullname pc1 //配置对端LNS地址,鉴别用户是否是VPN用户,此处也可以指定域名,指定域名后,此域中的用户都会触发L2TP隧道建立
[FW1-l2tp1] Tunnel authentication //启动隧道认证
[FW1-l2tp1] Tunnel password simple hello //设置l2tp隧道认证密码,与LNS端一致
[FW1-l2tp1] Tunnel name lac //设置隧道名,与LNS端设置的通道对端名一致
LNS端配置
1、LAC与LNS之间的通信已实现,相关的接口IP、加入的域等配置此处不再说明
2、设置域间的包过滤(此处以允许全部包过滤为例,实际根据需求决定)
[FW1] firewall packet-filter default permit all
3、配置本地用户及为用户分配地址用的地址池(此处只建立一个用户为例)
[FW2] aaa
[FW2-aaa] local-user user1 password simple password1 //用户与lac中相同
[FW2-aaa] local-user user1 service-type ppp
[FW2- aaa] ip pool 1 192.168.1.2 192.168.1.100
4、配置虚拟接口模板(简称VT,主要就是配置一些作为L2TP拨号网关的内容)
[FW2] interface Virtual-Template 1
[FW2-Virtual-Template1] ppp authentication -mode chap //可选,PPP认证方式,可以试PAP或CHAP,与强制LCP重协商结合使用
[FW2-Virtual-Template1] mandatory-lcp //可选,强制本端CHAP验证,使PC在L2TP拨号过程中,在LNS处再次CHAP认证。
[FW2-Virtual-Template1] mandatory-chap //可选,使PC在L2TP拨号过程中,在LNS处再次以LNS VT中指定的chap或pap进行一次认证。
注:
(1) LNS如果以上两种均没配置,则使用代理认证,即LAC将它从用户得到的所有验证信息和LAC配置的验证方式传给LNS,LNS会利用这些信息和LAC端传来的验证方式对用户进行验证,并不是不验证了。
(2)代理认证和VT上配置的验证方式也存在关系,如果LAC发过来的验证方式是PAP,而LNS得VT上位CHAP,此时会认证不通过(PPP认为这样不合理)。
[FW2-Virtual-Template1] ip address 192.168.1.1 24 //ip地址,即用户拨号后,分配的网关地址
[FW2-Virtual-Template1] remote address pool 1 //指定给用户分配地址的地址池,刚刚在aaa中建立的
注:此地址池只为非域用户指定地址,域用户不需要此命令,FW会自动从域中的地址池按顺序分配地址
5、打开防火墙的L2TP功能
[FW2]L2TP enable
6、 l2tp组配置
[FW2]l2tp-group 1
[FW2-l2tp1] allow l2tp virtual-template 1 [remote lac] //指定接收呼叫时隧道对端的名字(与LAC端配置的隧道名称对应)和使用的VT
[FW2-l2tp1] Tunnel authentication //启动隧道认证
[FW2-l2tp1] Tunnel password simple hello //设置l2tp隧道认证密码,与LAC端一致
[FW2-l2tp1] Tunnel name lns //设置隧道名,只用作显示用
展开阅读全文