Chinaunix首页 | 论坛 | 博客
  • 博客访问: 201427
  • 博文数量: 42
  • 博客积分: 1455
  • 博客等级: 上尉
  • 技术积分: 365
  • 用 户 组: 普通用户
  • 注册时间: 2006-03-19 10:20
文章分类

全部博文(42)

文章存档

2016年(1)

2013年(8)

2012年(7)

2011年(2)

2010年(1)

2008年(4)

2007年(13)

2006年(6)

我的朋友

分类: 系统运维

2012-10-24 17:59:20

L2TP隧道协议解析
1、引言 隧道技术是建立安全VPN的基本技术之一,类似于点对点连接技术,在公用网建立一条数据遂道,让数据包通过这条隧道传输。隧道是由隧道协议形成的,分为第二、三层隧道协议。第二层隧道协议有L2F、PPTP和L2TP等,是先把各种网络协议封装到PPP中,再把整个数据包装入隧道协议中。这种双层封装方法形成的数据包靠第二层协议进行传输。第三层隧道协议有GRE、IPSEC等。第二层隧道协议和第三层隧道协议的本质区别在于在隧道内用户的数据包是被封装在哪种数据包中进行传输的。 L2TP隧道协议是典型的被动式隧道协议,它结合了L2F和PPTP的优点,可以让用户从客户端或访问服务器端发起VPN连接。L2TP是把链路层PPP帧封装在公共网络设施如IP、ATM、帧中继中进行隧道传输的封装协议。 L2TP主要由LAC(L2TP Access Concentrator) 和LNS(L2TP Network Server) 构成,LAC支持客户端的L2TP,用于发起呼叫、接收呼叫和建立隧道;LNS是所有隧道的终点,LNS终止所有的PPP流。在传统的PPP连接中,用户拨号连接的终点是LAC,L2TP使得PPP协议的终点延伸到LNS。 L2TP的好处在于支持多种协议,用户可以保留原有的IPX、Appletalk等协议或公司原有的IP地址。L2TP还解决了多个PPP链路的捆绑问题,PPP链路捆绑要求其成员均指向同一个NAS(Network Access Server),L2TP可以使物理上连接到不同NAS的PPP链路,在逻辑上的终结点为同一个物理设备。L2TP还支持信道认证,并提供了差错和流量控制。 L2TP利用IPsec增强了安全性,支持数据包的认证、加密和密钥管理。L2TP/IPSec因此能为远程用户提供设计精巧并有互操作性的安全隧道连接。这对安全的远程访问和安全的网关之间连接来说,它是一个很好的解决方案。因此,安全的VPN需要同时解决好L2TP和IPSec这两个不同的问题。L2TP协议解决了穿过IP网络的不同用户协议的转换问题;IPSec协议(加密/解密协议)解决了通过公共网络传输信息的保密问题。 2、 应用L2TP技术的网络拓扑结构 该网络结构中将IPSec SGW(安全网关)和LNS合并成一个系统,即安全远程访问服务器SRAS(Secure Remote Access Server)。这样,远程访问客户将访问唯一的节点SRAS,该节点既是NAS服务的PPP终端,也是进入企业的安全网关节点。 至于远程访问,好处是对于穿过Internet的端到端IP包,将IPSec安全性当作适合企业请求的可信任模型。这样,你可以简单地使用AH,它不存在对外来窃听的担心,你只需要验证包数据(包括包的来源);你也可以使用ESP(包括ESP验证),它不考虑对网络的信任以及任何人对公司活动窃听的问题。 SRAS的操作要求配置防火墙允许UDP包进入SRAS节点,该节点将依次只处理L2TP包并丢弃其它包。而且,SRAS将要求所有嵌入在PPP内的IP包封装成AH和ESP包之一,并指向它自身。另外,为了执行IKE协商和动态生成IPSec密钥,SRAS也将允许IKE UDP包指向它自身。企业通过只允许安全远程访问包进入企业来实施安全策略,它将丢弃所有其它嵌入PPP内的IP包。当一个PPP会话被丢弃时,与远程访问用户相关的IPSec和ISAKMP的SAs(安全关联)也从SRAS内被丢弃。这样,在捆绑SRAS后,SGW和LNS相分离的网络结构的所有缺点都不存在了。图1给出了应用L2TP技术的网络拓扑结构。

3、 L2TP报头格式 L2TP使用两种类型的消息:控制消息和数据消息。控制消息用于隧道和呼叫的建立、维护和清除,它使用L2TP内的可靠控制通道来保证传送。数据消息用于封装隧道传输的PPP帧,当发生包丢失时不再传送数据消息。 PPP帧先由L2TP报头封装,再由一种包传输机制(如UDP、帧中继、ATM等)封装之后在一个不可靠的数据通道上传输。但是,控制消息在一个可靠的L2TP控制通道上传送,这个控制通道在同一包传输机制上传送包。在所有的控制消息中都需要有序列号,序列号还用于提供控制通道上的可靠传送。数据消息可以使用序列号来重新排序数据包和检测包的丢失。 控制通道和数据通道的L2TP数据包的报头格式相同(如图2所示)。在该报头格式中,当一个可选字段未被选中时,在消息中不为这个字段预留空间。注意:当数据消息的可选项Ns在消息中出现(即被选中)则可选项Nr必须出现在所有控制消息中。

T:消息类型,1 bit。 0 数据消息;1 控制消息。 L:长度字段出现,1 bit,可选。 如果设置了这一位,则长度字段出现。控制消息中必须设置这一位。 S:序列号出现,1 bit。 如果设置了这一位,则Ns和Nr字段出现。控制消息中必须设置这一位。 O:偏移字段出现,1 bit。 如果设置了这一位,则 Offset Size字段出现。控制消息中必须设置这一位。 P:优先权,1 bit。 这一特征只是对数据消息而言,控制消息都必须设置这一位。如果设置了这一位,则在本地排队和传输中将优先处理这个数据消息。 Version:4 bits。 指明L2TP协议的版本,必须被设置为2。保留值1用作允许对L2F数据包的检测,判断是否与L2TP数据包一起到达。当接收到一个版本值未知的数据包时,必须丢弃这个数据包。 Length:16 bits。 指明消息的总长度,用字节表示。 Tunnel ID:16 bits。指明控制连接的标识符。L2TP遂道由只有本地意义的标识符命名;即,同一隧道在隧道的每一端都有不同的Tunnel IDs。每一个消息中的Tunnel ID 都是预定接收者而不是发送者的Tunnel ID。在隧道创建期间,Tunnel IDs的选择和交换都是作为Assigned Tunnel ID AVPs(Attribute-Value Pair)进行的。 Session ID,16 bits。 指明一个隧道内的一次会话的标识符 。L2TP 会话由只有本地意义的标识符命名;即,同一个会话在会话的每一端有不同的Session IDs。每一个消息中的Tunnel ID 都是预定接收者而不是发送者的Session ID。在会话创建期间,Session IDs的选择和交换都是作为AssignedSession ID AVPs进行的。 Ns:16 bits,可选。 指明数据消息或控制消息的序列号。从0开始每发送一个消息加1。 Nr:16 bits,可选。 表明所要收到的下一个控制消息中"预定"的序列号0。因此,Nr被设为所接收到的最后一个消息的Ns加1。若在数据消息中保留Nr,则接收时必须忽略。 Offset Size:16 bits,可选。 如果出现,则指定了L2TP报头之后的字节数,因为载荷数据从这里开始(即载荷数据的字节数)。如果offset字段出现,则L2TP header在offset padding的最后一个字节之后结束。 Offset Pad:偏移填充,可变长度,可选。 Data:可变长度。 4、 相关技术与应用 4.1 用L2TP控制消息维护隧道 与PPTP不同,L2TP隧道的维护不在独立的TCP连接上进行。L2TP呼叫控制和管理业务在L2TP客户和服务器之间以UDP消息的形式发送。在Windows 2000中,L2TP客户和服务器都使用UDP端口1701。值得注意的是,Windows 2000的 L2TP服务器也支持使用的其他UDP端口(UDP端口不为1701)的L2TP客户。 IP上的 L2TP控制消息以UDP数据包的形式发送。在 Windows 2000实现中,这样的L2TP控制消息作为IPSec ESP的加密载荷发送, 如图3所示:

因为没有使用TCP连接,L2TP使用消息序列确保L2TP消息的传输。L2TP控制消息中,Nr和Ns字段都用于保持控制消息的次序,违反次序的数据包将被丢弃。Nr和Ns字段也可用于隧道数据的顺序传送和流控制。 L2TP的每一个隧道都支持多个呼叫。L2TP控制消息和报头中有隧道数据的Tunnel ID--用于指定隧道和Call ID--用于指定这个隧道中的一次呼叫。 4.2 L2TP数据的隧道传输 L2TP数据的隧道传输是通过多级封装实现的。图4为IPSec隧道数据进行L2TP封装之后产生的结构。

其中,Data-Link Layer封装是为了在LAN或 WAN 连接上传送,IP数据包用数据链路层的报头和报尾封装。例如,以太网接口上发送的IP数据报用以太网报头和报尾封装。当IP数据报在点到点WAN链路(如模拟电话线或 ISDN)上传送时,IP数据报用一个PPP报头和报尾来封装。 接收到L2TP封装的IPSec隧道数据后,L2TP客户或L2TP服务器将进行L2TP的分离处理,过程如下: 处理并剥去数据链路层报头和报尾; 处理并剥去IP header; 使用IPSec ESP Auth trailer认证IP载荷和IPSec ESP报头; 使用IPSec ESP header解密数据包的加密部分; 处理UDP header并将L2TP数据包发给L2TP; L2TP使用L2TP header 中的Tunnel ID和Call ID确定特定的L2TP遂道; 使用PPP header确定PPP载荷,并将它转发给适当的协议驱动器进行处理。 4.3 在Windows 2000网络体系结构中利用L2TP技术实现VPN 图5说明了隧道传输数据在Windows 2000网络体系结构中从一个VPN客户使用一个模拟MODEM在远程访问VPN经过的过程:

一个IP数据报、IPX 数据报、或NetBEUI帧由适当的协议发送到虚拟接口上,使用NDIS(网络驱动器接口标准)表示VPN连接。 NDIS向NDISWAN提交一个数据包(可以是压缩过的)并提供一个只包含PPP协议ID字段的PPP报头,不添加Flag和FCS字段。 NDISWAN向L2TP协议驱动器提供PPP帧,由L2TP协议驱动器用一个L2TP报头封装PPP帧。在L2TP报头中,将Tunnel ID和Call ID设置成适当的值以确定L2TP隧道。 然后L2TP协议驱动器向TCP/IP协议驱动器提交产生的数据包,同时还要提交将L2TP数据包以UDP消息形式从UDP端口1701发送到UDP端口1701,同时提交的还有VPN客户和服务器的IP地址。 TCP/IP协议驱动器用适当的IP报头和UDP报头构建一个IP数据包;然后IPSec分析这个IP数据包找出与之相匹配的 IPSec。IPSec根据这个策略的设置,使用适当的ESP 报头和报尾封装和加密IP数据包中的UDP消息部分;将Protocol字段设为50的源IP header添加到ESP数据包前面。 然后TCP/IP协议驱动器向使用UDIS表示到本地ISP的拨号连接的接口提交所产生的数据包。 NDIS向NDISWAN提交这个数据包。 NSIDWAN提供PPP报头和报尾,并将产生的PPP帧提交给适当的、表示拨号硬件的WAN miniport驱动器。 应当注意到,拨号连接可以和ISP协商一个加密的PPP连接,但是不必要也不推荐这样做,因为所发送的专用数据或隧道传输的PPP帧已经用IPSec加密了,不需要其他层的加密,而且这些加密会影响性能。 5、 结束语 目前,L2TP的标准化进程已接近尾声,几家大公司的相关产品也进行了互通测试。L2TP定义了利用公共网络基础设施(如IP网络、ATM和帧中继网络)封装传输链路层PPP帧的方法。现在,Internet中的拨号网络只支持IP协议,而且必须使用注册IP地址,而L2TP可以让拨号用户支持多种协议,如IP、IPX、AppleTalk,且可以使用保留网络地址,包括保留IP地址。可见,L2TP的应用前景广泛,尤其是在VPN建设方面。
阅读(7341) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~