L2TP协议笔记
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
图
2
是附属在交换网络上的具有PPP 端系统和 L2TP 协议处理能力的设备。
LAC 普通是一 个网络接入服务器 NAS ,主要用于通过 PSTN/ISDN 网络为用户提供接入服务。
是 PPP 端系统上用于处理 L2TP 协议服务器端部份的设备。
指利用公共网络(如 ISDN 和PSTN )的拨号功能及接入网来实现虚拟专用网。
注:如下示例中使用的防火墙(Firewall ,FW )既可以当做 LAC 也可以作为 LNS 使用。
图 1
因为普通都使用用PC---LAC---LNS 组网,且此种组网包含了PC---LNS 的组网形态,故后续描述均已PC---LAC---LNS 为例。
LAC 位于LNS 和主机之间,用于在LNS 和主机之间传递信息包,把从主机收到的信息包按照L2TP 协议进行封装并送往LNS,将从LNS 收到的信息包进行解封装并送往远端系统。
LAC 与主机之间可以采用本地连接或者PPP 链路,VPDN 应用中通常为PPP 链路。
LNS 作为L2TP 隧道的另一侧端点,是LAC 的对端设备,是被LAC 进行隧道传输的PPP 会话的逻辑终止端点。
如下图3 所示,从图中至上而下的分析,为PC 的报文在PPP 内网环境中发送到LAC,由LAC 封装L2TP,再通过外网的报文正常转发给LNS 的报文封装过程。
注:设计的网络环境为PC---LAC 为内网使用PPP 协议,LAC---LNS 为外网使用协议由服务供应商自定。
图3
在一个LNS 和LAC 对之间存在着两种类型的连接,一种是隧道(Tunnel)连接,一对LAC 和LNS 中可以有多个L2TP 隧道;另一种是会话(Session)连接,它复用在隧道连接之上,用于表示承载在隧道连接中的每一个PPP 会话过程。
隧道由一个控制连接和一个或者多个会话 (Session) 组成。
会话连接必须在隧道建立 (包括身份保护、L2TP 版本、帧类型、硬件传输类型等信息的交换)成功之后进行,每一个会话连接对应于LAC 和LNS 之间的一个PPP 数据流。
控制消息和PPP 数据报文都在隧道上传输。
隧道(tunnel)和会话(session)的关系,如图 4 所示;可以形象的理解为会话是建立在隧道之中的,隧道想成一个有10 个车道的高速公路,一台拨号PC 的数据流为一个会话,相当于占用了一个车道 (告诉公路有多少车道是设备规定好的) ,这个车道只能跑这个运载这个PC 的报文的卡车。
(比如某型号设备每条隧道最多支持1000 个会话)。
图4
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 字节字符串,与收到的作比较,相同通过,不同断掉。
当LAC 检测到实用户拨入电话的时候,向LNS 发送ICRQ,请求在已经建立的tunnel 中开始session 的建立,LAC 可以向来等到接收到了LNS 回应的ICRP 后,表明session 可以建立的时候再回答远端(拨号用户)的呼叫,这样LNS 可获得足够的信息来决定是否回答这个远端的呼叫。
LAC 在接收到ICRP 之前,自行先回答远端(拨号用户)的呼叫,代替LNS 与其进行LCP 商议和PPP 认证,用获得的信息来决定选择哪个LNS(此处对应流程图中步骤5),这种情况下LAC 对呼叫的指示和呼叫的回答只是哄骗性质的。
在session 可以建立时,LAC 向LNS
发送ICCN 时会携带着先前与呼叫用户进行的LCP 商议和PPP 认证涉及的特性信息(此处对应流程图中步骤9),包含这些信息的AVP 如下:
为LNS 提供LAC 从PPP 对端(即拨号用户)接收到初始的conf-request。
提供LAC 发送到PPP 对端最后的conf-request。
提供LAC 从PPP 对端接收到的最后的conf-request。
标识是否使用验证代理,验证的类型
0---Reserved
2---PPP CHAP
4---No Authentication
1---Textual username/password exchange
3---PPP PAP
5---Microsoft CHAP Version 1(MSCHAPv1)
验证时客户端响应的名称。
LAC 发送到PPP 对端的Challenge。
为LAC 和PPP 对端的验证定了一个ID。
LAC 从PPP 对端接收到的PPP Authentication Response。
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
16(SLI)Set-Link-Info
7(OCRQ)Outgoing-Call-Request LNS 发向LAC 用来设置PPP 商议的选项,这些选项在call 的生存周期中可以随时变化,因此LAC 有能力在活动的PPP session 上更新内部的呼叫信息和行为。
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(Attribute Value Pair,属性值对)的形式来表示,使协议具有很好的扩展性。
● 开始的6 个bit 是一个位掩码,用来描述AVP 的普通属性,RFC2661 定义了前2 位,其余被保留。
● (M)命令位:用来控制收到不认识的AVP 时必须执行的动作。
如果在一个关联特殊的会话消息中M 位被置为不认识的AVP,这个会话一定会被终止。
如果在一个关联全部通道的消
息中M 位被置为不认识的AVP,整个通道包括通道内的会话一定会被终止。
如果M 为没有被设置,这个不认识的AVP 会被忽略掉。
● (H)隐藏位:用来识别一个AVP 的属性域里的隐藏数据。
●保留位一定要置0,收到一个保留位为1 的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,这个sessionID 只具有本地意义。
LNS 接收ICRQ 后回应ICRP,在ICRP 中也包含了LNS 为这个session 分配的一个具有本地意义的sessionID。
通过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 用来标识客户属于某个特定的组织。
1 、配置LNS 链接PC 的接口的IP 地址
2、把加入untrust 域中(实际加到那个域中根据自己的需求决定)
3、设置域间的包过滤(此处以允许全部包过滤为例,实际根据需求决定)
4、配置本地用户及为用户分配地址用的地址池(此处只建立一个用户为例)
5、配置虚拟接口模板(简称VT,主要就是配置一些作为L2TP 拨号网关的内容)
认证方式,可以试PAP 或
者
CHAP
地址,即用户拨号后,分配的网关地
址
aaa 中建立的
6、把虚拟接口模板VT1加入到trust 域
7、打开防火墙的L2TP 功能
[FW2]L2TP enable
8、创建L2TP 组并绑定VT1
注:(1) name:为PC 时为PC 名
(2) 使用组1 时可以不写retome 名字,其它组必须写
tunnel 认证(默认开启),固然也可以开启,
在后续LAC-LNS 模式中使用隧道认证为例
9 、VPN Client(PC 上使用的L2TP 拨号客户端,也可用系统自带的)
当FW 使用group1 且没设置remote name 时,主机客户端上不写隧道名称,当group1 设置了remote name 时,或者使用其他group 时(除1 以外的任何组均必须写remote name),客户端上必须设置隧道名称为主机名。
1 、配置链接主机的接口IP (LAC 与LNS 之间的通信已实现,相关的接口IP、加入的域等配置此处再也不说明)
2、把加入untrust 域中(实际加到那个域中根据自己的需求决定)
3、设置域间的包过滤(此处以允许全部包过滤为例,实际根据需求决定)
4、配置本地用户(此处只建立一个用户为例)
5、配置虚拟接口模板(简称VT,主要就是配置一些作为L2TP 拨号网关的内容)
[FW1] interface Virtual-Template 1
[FW1-Virtual-Template1] ppp authentication-mode chap //PPP 认证方式,可以试PAP 或者CHAP
6、把虚拟接口模板VT1加入到trust 域(不加入域也可以建立L2TP,但业务是不通的)
7、链接主机的接口的虚拟模板VT1 上使能PPPoE(实际上LAC 此接口可以不配置IP,只要主机上有缺省路由到此设备即可)
[FW1-Ethernet2/0/0] pppoe-server bind virtual-template 1
8、打开防火墙的L2TP 功能
[FW1]L2TP enable
9 、l2tp 组配置
[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 端设置的通道对端名一致
1 、LAC 与LNS 之间的通信已实现,相关的接口IP、加入的域等配置此处再也不说明
2、设置域间的包过滤(此处以允许全部包过滤为例,实际根据需求决定)
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 拨号网关的内容)
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 认为这样不合理)。
地址,即用户拨号后,分配的网关地
址
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 //设置隧道名,只用作显示用。