L2TP协议的相关内容

本文详细解析了L2TP协议在网络模型中的位置,涉及控制协议和数据协议的报文结构,以及如何通过UDP承载,包括建立隧道和会话、PPP链路协商、鉴权过程和IP协商。作者还讨论了数据发送和隧道/会话号在消息体中的作用。
摘要由CSDN通过智能技术生成

一、应用背景

        该协议主要用于设备和VPN发送认证信息后并获取服务器分配的IP,后续使用这个IP进行内网资源的访问。

二、L2TP协议位于网络模型中的位置

        一般设备会通过网络进行拨VPN,我们只需要使用tcpdump进行抓包即可:

        随便点开一个数据包,就可以知道他是基于UDP协议的,换句话说,UDP协议就是负责承载它的

后续通过连接上        VPN服务器的设备也是可以看到的

        其次报文封装格式:

        注意:L2TP这里分为控制协议和数据协议,通过相应的报文格式可以知道,他是在上层进行承载PPP数据帧,在PPP数据帧中可以继续封装UDP、TCP等协议,详情请看下面的报文分析

三、想要建立联系

        为什么能够向服务器发送消息?因为你的设备必须是接入公网的,或者你的设备和服务器在同一个内网里面并通过路由器能够实现信息传递

        因为L2tp中需要建立隧道和会话,通过上看到设备和VPN服务器之间建立的UDP端口都是1701,所以猜测这个会话和隧道是在端口之上建立的逻辑,据网上说能实现网络安全加密,这里只是浅浅的做个预判,消息体应该还是透明的,只是由于有了不同的隧道和会话号,就能够别人读不出来我们在隧道中建立的会话用于传递的什么信息

        消息体不会详细列举,只会讲解其中涉及到和服务器交互的一些报文,首先通过抓包是可以抓到这样的一些信息的:

        上图中的框中就是和服务器交互并获得服务器返回隧道号和会话号的过程,流程简化如下:

3.1 各个消息体的作用

        SCCRQ 由设备主动发起向对端发送控制连接请求,用来初始化设备和服务器之间的Tunnel,开始Tunnel的建立过程

        SCCRP 接收对端的连接请求,Tunnel的建立过程可以继续

        SCCCN 对SCCRP的回应,完成Tunnel的建立

        ICRQ 当LAC检测由用户拨入的时候,向LNS发送ICRQ请求在已建立的Tunnel中建立Session

        ICRP 回应ICRQ,标识ICRQ请求成功,服务器会在ICRP中表示L2TP Session必要的参数

        ICCN 回应ICRP,表示L2TP会话建立成功

        (SLI)      PPP会话控制中用于设置链路信息

        跟着上图中的流程走下来,只能说明和服务器那边建立了联系,但是还不能访问服务器内部的一些网络资源,为什么?因为这个过程中,你没有一个符合能够访问他内网网段的一个IP,肯定你发起的所有消息都会被服务器的防火墙就过滤掉了,换句话说,PPP5这样的IP不是在这里建立的,L2TP的使命视乎完成了80%

        其次还有个需要关注的地方:就是好像只有吧隧道和会话都建立成功以后,才能够开启PPP数据帧交互,那是不是可以认为PPP数据帧实际上是被会话/隧道所承载的?然后根据隧道和会话建立的先后关系,不难看出,会话应该也是复用在隧道之上

        后续的会话中也会在L2TP中就会封装对应的隧道号和会话号

        下图作为了解即可:

四、压轴出场--->得到入场券

4.1 协商PPP链路特性,为挑战鉴权做准备

        参看这句话

        这里就是说会话一旦建立完成,就会收到对端发送的PPP帧,我们看看原来的交互报文,前面关于链接的哪里是有一个PPP LCP报文的

        这里的主要是进行PPP链路中的一些参数的协商,前文讲过XL2TP的数据协议是不可靠的,这里发送ZLB的目的如下(保证通信双方的信息可靠传输):可靠信道(reliable control channel)、确认接受数据包(acknowledging packets);

        继续拆解PPP LCP报文:

        注意:这里不是只有这一种鉴权方式:具体方式根据上文中的code来确定

4.2 挑战鉴权正式开始

        服务器发起鉴权

        设备回应

        回复结果

        这上面的过程中的传输的用户名和密码都是会经过一些算法生成消息体在进行传输,不会通过铭文进程传输

        此时应该有一个疑惑,我们认证成功了,不是说还会有一个PPP1或者ppp5这样的IP,他又是怎么得到的?

        带着这个疑问:我们继续分析报文:

4.3 IP协商

        这里也是基于PPP的IPCP协议进行的IP协商:

        1、服务器那边会给你一个IP

        2、设备这边此时没有IP的,他需要发送0.0.0.0这样的默认IP消息体给到对方,让他给予回应

  1. 服务器根据设备回复的消息进行相应的处理

五、数据的发送

        根据前文的分析,得到IP以后,设备是不是就可以想服务器内部的设备发送消息了,但是这个报文怎么封装呢?我们这样想,应用层是基于比如TCP封装的协议,他需要满足以下的封装关系:

        对应的报文

六、调试

 xl2tpd -c /etc/xl2tpd/xl2tpd.conf -D (-D表示进入调试模式))

链接的服务器配置,下面的PPPoptfile里面就是写的用户名和密码

链接 echo 'c vpn-connection' >/var/run/xl2tpd/l2tp-control

断开echo 'd  vpn-connection' >/var/run/xl2tpd/l2tp-control

后记:

        以上内容只是皮毛,只能说将其应用起来能够实现两个网络的联通即可,至于其中的XL2TP和PPP之间是如何配合的这才是难点(因为Xl2TP中的鉴权和IP分配都是通过PPP协议来的),其次就是使用隧道号和会话号实现逻辑链接的消息体传送也是需要体会的,现在修为不够,不敢妄下推断,以上只是自己的个人简介,如有谬误,请帮忙指正出来。 

 

七、参考资料

(Xl2tp源码中的指导文档)

  • 26
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值