第⼆层隧道协议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验证),它不考虑对⽹络的信任以及任何⼈对公司活动窃听的问题。
tcp ip协议有哪几层
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建设⽅⾯。
查看原⽂:www.linuxerhome/archives/53