VPN通信协议—L2tp协议的隧道认证原理(结合理论案例讲解)

简介

在开发L2tpv2协议的过程中,隧道认证这部分无论是RFC标准还是网上的资料都讲得很模糊,本人经过研究协议报文,理解了这个过程,现在分享给大家。
先来简单介绍一下隧道认证的理论部分(专业术语见文末附录)。


一、理论部分

L2TP在建立控制连接时,采用了一个简单的、可选的、类似于chap[RFC1994]的隧道认证机制。如果LAC或LNS希望验证正在连接或正在被连接的对等体的身份,则在SCCRQ或SCCRP消息中包含一个Challenge AVP。如果在SCCRQ或SCCRP中收到Challenge AVP,则必须分别在下一个SCCRP或SCCCN中发送Challenge Response AVP。如果期望的响应和从对等体接收到的响应不匹配,则不允许建立隧道。参与隧道验证时,LAC和LNS之间必须存在一个共享密钥。这与AVP加密使用的共享密钥相同。

1.1 Challenge AVP

Challenge AVP(适用于SCCRP, SCCRQ)[RFC2661],属性类型为11,表示发出请求的对等体希望使用CHAP认证机制对隧道端点进行身份验证。
该AVP的属性值字段格式如下:
challenge avp格式
Challenge 是一个或多个8字节的随机数据。这个AVP可以被隐藏(h位可以是0或1),m位必须被设置为1,AVP的长度(隐藏前)是6加上Challenge 的长度。

1.2 Challenge Response AVP

Challenge Response (适用于SCCCN, SCCRP) ,属性类型13,提供对接收到的challenge 的响应[RFC2661]。
该AVP的属性值字段格式如下:
challenge response avp格式
Response 是一个16字节的值,以类似于CHAP[RFC1994]的形式作为对端Challenge的响应。
如果在之前的SCCRQ或SCCRP中收到Challenge,则该AVP必须存在于响应SCCRP或SCCCN中。为了计算CHAP响应中的ID值,使用该消息的消息类型AVP的值(例如,SCCRP为2,SCCCN为3)。
这个AVP可以被隐藏(h位可以是0或1),m位必须被设置为1,长度(隐藏前)是22。

1.3 认证具体流程

具体认证的过程如下,挑战方表示发出Challenge的一端。

(1)确认输入参数

包括消息类型ID(被挑战方发送response avp报文的message type值如SCCRQ-SCCRP环节值为2即SCCRP,SCCRP-SCCCN环节值为3即SCCCN)、共享密钥(即隧道认证密码)、challenge值。

(2)输入参数转化为16进制字符串

其中消息类型ID转化为为2字节hex字符串,共享密钥和challenge值根据实际长度转化为hex字符串。
(16进制转化的目的是统一格式为16进制作为MD5算法输入,同理也可以都转化为文本形式)

(3)拼接字符串

按照“消息类型ID+共享密钥+challenge”格式拼接成一个字符串s。

(4)MD5加密

将s以16进制输入的形式进行MD5加密,即可得到challenge response的正确值。

(5)最终认证

挑战方的理论值与对端提供的challenge response值进行比对,如果不同,则认证失败,本地发送STOPCCN断开连接并清理隧道。

下面给合具体案例帮助大家理解。

二、案例实践

下面的报文是隧道建立过程中的前两个报文SCCRQ&SCCRP,以此作为案例讲解。
在这里插入图片描述
在这里插入图片描述
(1).确定输入参数
Challenge value(hex string):d62c0000ae72000052690000905f0000
消息类型ID:2
Password:nihao(华为路由器通过tunnel password cipher nihao配置)
(2).输入参数转化为16进制字符串
消息类型ID:02
Password:6e6968616f(字符串转16进制)
Challenge value:d62c0000ae72000052690000905f0000
(3).拼接字符串
02+6e6968616f+d62c0000ae72000052690000905f0000
(4).MD5加密
MD5(026e6968616fd62c0000ae72000052690000905f0000)=87adefb0c20690433760222d8a99fcc6
MD5加密可在网上找一个在线工具实验,推荐这个工具:在线MD5工具(记得将工具里的输入类型配置为16进制)
(5).最终认证
本地经过MD5加密计算的response理论值和实际值相同则通过,回复SCCCN继续建立隧道。
在这里插入图片描述
不同则发出STOPCCN给出错误提示并清理隧道。
在这里插入图片描述

总结

总体而言,认证的关键在于共享密钥。认证的三个参数中,除了密钥之外都是公开在报文中的,只有隧道两端设备配置的密钥相同,才能建立隧道成功。
最后,欢迎大家讨论交流,创作不易,喜欢的话记得点赞收藏,您的支持是我学习和分享的动力。
乘风起-xwm

附录 (专业术语)

术语术语全名说明
L2TPLayer 2 Tunneling Protocol第二层隧道协议
LACLink Aggregation ConcentratorL2TP访问集中器(LAC)。一个L2TP隧道终端的节点,是L2TP网络服务器(LNS)的对端。LAC位于LNS和一个远端系统,并在之间转发报文。从LAC发向LNS的报文需要使用L2TP协议封装。LAC提供对L2TP网络服务器(LNS)的访问。从LAC到远端系统的连接,也可以是本地(LAC客户端)或者一个PPP连接。
LNSL2TP Network ServerL2TP网络服务器(LNS)。一个L2TP隧道终端的节点,是L2TP访问集中器(LAC)的对端。LNS是由LAC在远端系统封装的PPP会话的逻辑终止点。
NASNetwork Access Server一种通过远程接入网络(如PSTN)向用户提供本地网络接入的设备。NAS可以同时作为LAC和LNS,也可以同时作为LAC和LNS。
AVPAttribute Value Pair属性值对(AVP):唯一属性(整数类型)可变长度的连接,包含由属性标识的实际的值。多个AVP组成用于建立,维持,拆除隧道连接的控制消息。
Analog Channel-在每个方向传输3.1kHz的音频的交换线路。
Call-在一个远端系统和一个LAC之间的一个连接(或者尝试连接),例如,一个通过PSTN的电话呼叫。相关联的L2TP会话在LAC和LNS建立好的隧道之上成功连接,一个Call(Incoming或者Outgoing)在一个远端系统和LAC的成功建立。
被叫号码-被叫号码: 一个Call中的接收者的ID,呼叫者用来联系接收者的电话号码。
呼叫号码-用于接收者标识呼叫者的电话号码。
Incoming Call-一个由LAC发起,发现LNS的Call。
Outgoing Call-一个由LNS发起的Call。
隧道-一个隧道存在于成对的LAC和LNS之间。隧道是由控制连接和0个以及以上的L2TP会话组成,隧道在LAC和LNS之间发送PPP封装和控制消息。
会话-一个被封装的PPP会话,也被称作一个Call。L2TP是面向连接的协议,LNS和LAC维持每个Call的状态,包括LAC发起或者应答的Call。当端到端的PPP连接在一个远端系统和LNS建立时,一个L2TP会话在LAC和LNS之间建立。PPP连接相关的报文在LAC和LNS之间发送。L2TP会话和Call之间是一对一的对应关系。
LCCEL2TP Control Connection Endpoint控制连接终点LCCE(L2TP Control Connection Endpoint):L2TP控制连接隧道任意一端的L2TP节点。它既可以是LAC,也可以是LNS。取决于在数据链路层还是在网络层处理隧道帧。若在数据链路层处理隧道帧,则LCCE是LAC;若在网络层处理隧道帧,则LCCE是LNS。
PWPseudowire伪线PW(Pseudowire):一条从本地AC接口到对端AC接口之间的虚拟的、直接相连的数据通道,能够完成用户的二层数据透明传输。每个L2TPv3会话对应一条PW。
AC接口-连接用户侧设备的接口,用于接收和发送用户侧流量。
PW接口-连接对端LCCE的接口,用于LCCE接收和发送L2TPv3协议报文和网络侧数据报文。
静态隧道-静态隧道是指直接通过命令行配置指定本端和对端的参数,不需要经过报文协商过程就直接进行数据转发。一个接口下只有一个隧道,一个隧道只支持一个会话。不同的接口下可以配置多个隧道。
  • 45
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值