知识库与软件

L2TP的实现(HiPER ReOS 2008 VPN配置手册)

文档编号:113
浏览:15412 评分:33
最后更新于:2008-08-15

 

 
L2TP(Layer Two Tunneling Protocol),第二层隧道协议:L2TP是一种虚拟专用网络协议,已成为IETF有关二层隧道协议的工业标准。L2TP将PPP(Point-to-Point Protocol)帧封装后,可通过IP,X.25,帧中继或ATM等网络进行传送。
LAC(L2TP Access Concentrator),L2TP访问集中器:LAC作为L2TP隧道的一侧端点,是LNS的对端设备。LAC在LNS和远端系统之间传递信息包,将从远端系统收到的信息包按照L2TP协议进行封装并送往LNS,将从LNS收到的信息包进行解封装并送往远端系统。
LNS(L2TP Network Server),L2TP网络服务器:LNS作为L2TP隧道的另一侧端点,是LAC的对端设备,是被LAC进行隧道传输的PPP会话的逻辑终止端点。
PPP(Point-to-Point Protocol),点对点协议:PPP协议是为在两点之间传输数据包的简单链路设计的,这些链路提供全双工的同时双向操作,而且按顺序传送数据包。
MTU(Maximum Transmission Unit),最大发送单元:物理端口可以发送的最大数据包长度。
MRU(Maximum Receive Unit),最大接收单元:物理端口可以接收的最大数据包长度。
PAP(Password Authentication Protocol),口令验证协议:PPP协议中对通信双方身份认证的安全性协议之一,是一种简单的明文验证协议。PAP认证仅在PPP连接建立时进行。
CHAP(Challenge Handshake Authentication Protocol),质询握手验证协议:PPP协议中对通信双方身份认证的安全性协议之一,是一种加密的验证方式,能够避免建立连接时传送用户的真实密码。CHAP认证可以在整个通信过程中进行。
MS-CHAP(Microsoft- Challenge Handshake Authentication Protocol),微软质询握手验证协议:PPP协议中对通信双方身份认证的安全性协议之一,与CHAP类似,它也是一种加密的验证方式,能够避免建立连接时传送用户的真实密码。MS-CHAP使用基于MPPE(微软点对点加密协议)的数据加密。
Fragment,分段:是指在源主机或路由器处,将一个数据包分割成多个数据包的一种过程。经过分段后,每个包都单独传送,并在目的地(目标主机)处重组。
Reassemble,重组:在数据目的地(目标主机)把所有分段重新组合起来的过程。
Peer,对端设备:在L2TP协议中,对端设备指LAC或LNS中的任意一个。LAC的对端设备是LNS,反之亦然。
Tunnel,隧道:L2TP隧道(Tunnel)建立在LAC和LNS之间,由一个控制连接和n个(n≥0)个会话(Session)组成。控制消息和PPP数据包都在隧道上传输。
Session,会话:会话是建立于LAC和LNS之间的逻辑连接,它必须在隧道建立成功之后(包括身份保护、L2TP版本、帧类型、硬件传输类型等信息的交换)进行。每个会话连接对应于LAC和LNS之间的一个PPP数据流。
虚端口:用户配置完一条L2TP隧道的相关参数后,系统自动生成一个虚端口用来传输数据,该虚端口只能由该用户使用,其他用户不能使用。
监听:虚端口的一种工作状态,在该状态下,LAC和LNS之间并未建立真正的隧道,虚端口一直监听是否有用户的数据包需要传送。
UP隧道处于连接状态时,路由状态为UP状态,表示该路由正在被使用。
DOWN隧道处于未连接状态时,路由状态为DOWN状态,表示该路由未被使用。
MD5(Message Digest 5),消息摘要版本5从任意长度信息和16 字节密钥生成128 位散列(也称作数字签名或信息整理)的算法。所生成的散列(如同输入的指印)用于验证内容和来源的真实性和完整性。
AAA(Authentication Authorization Accounting),认证授权和记帐:AAA提供了一个用来对认证、授权和记帐这三种安全功能进行配置的一致性框架。
RADIUS(Remote Access Dial-In User Service),远程访问拨号用户服务:RADIUS是一个远程访问协议,它通过Internet传送认证、授权和记帐信息到远程用户的主网络中。

(二)、L2TP实现概述           

       L2TP协议的基本功能是在IP网络中传送采用PPP封装的用户的数据包。L2TP客户端(L2TP Access Concentrator(LAC))负责接收用户的原始数据并封装用户的原始数据包到PPP数据包,然后LAC与LNS建立L2TP隧道传送该PPP数据包。
       如图1所示,典型的应用通常是LAC部署在远程分支机构或移动办公用户的个人电脑软件中,他们用来发起L2TP隧道;L2TP服务器(L2TP Network Server(LNS))部署在企业中心或办公室,用来接收来自L2TP客户端LAC的呼叫,当LNS与LAC建立隧道后,LNS接收来自LAC的PPP数据包,并还原出用户的数据包,然后把还原后的数据包发送到最终用户的电脑设备上。
 
 
 
                      
                     
                                             图1 HiPER L2TP典型应用
      
 
  
  HiPER可以工作LAC或LNS模式下;或者同时作为LNS和LAC工作,在这种情况下,LNS一方面接收来自LAC的数据包,另一方面将接收到的数据包发送到其他LNS设备中。   如图2所示,对于移动用户来说,HiPER作为LNS 接收移动用户的数据,同时HiPER又作为LAC与公司总部LNS相连,从而实现整个企业内部网络的互连。
 
 
                            图2 HiPER L2TP移动用户解决方案
 
       HiPER中的L2TP协议使用UDP数据端口1701来传输用户数据和隧道控制消息(如隧道建立、维护及终止等),为了使HiPER L2TP隧道正常工作,需要以下基本条件:
1.         L2TP客户端和L2TP服务器必须有IP连接, 也就是常说的IP路由可达。
2.         IP网络中的防火墙设备必须配置为允许UDP 1701端口的数据包通过。
 
       HiPER中L2TP隧道是通过生成“虚端口”实现的。用户一旦正确的配置了一条L2TP的隧道的相关参数,HiPER系统会使用该配置自动生成一个“虚端口”用来传输数据,该“虚端口”只能由该用户使用,其他用户不能使用。
       新生成的端口缺省工作在“监听”(ptpdial)状态下,在该状态下,LAC和LNS之间并未真正建立隧道,以节省系统资源。“监听”状态下的端口一直监听是否有用户的数据包需要传送。

CLI方式中,可使用show ip route table命令来查看ptpdial端口是否建立,处于监听状态。如表1所示,与该隧道对应路由条目的“IfId”(虚端口标识)处显示为“ptpdial0”,表示ptpdial端口已经建立。

WEBUI方式中,可在路由表信息列表(可在系统状态—>路由和端口信息中查看)来查看ptpdial端口是否建立。如表2所示,与该隧道对应路由条目的“端口号”处显示为“ptpdial0”,表示ptpdial端口已建立。

 
 
  
                           表1  CLI中路由表(部分)

 
 
                       
                        2  WEBUI中路由表(部分)
 
 
  当收到第一个用户数据包的时候,LAC会向LNS发出建立隧道传送的请求,LAC和LNS为用户建立隧道的过程中,会经历两次认证过程:
 
1.  首先,LNS要确认LAC是否是一个合法的发起人,这一阶段叫做“隧道认证”。
CLI方式中,可使用show session history命令来查看隧道认证是否通过。如图3所示,在历史信息中有“L2tp UP”相关信息显示,表示隧道认证通过。
WEBUI方式中,可在系统历史记录(可在系统状态—>系统信息中查看)来查看隧道认证是否通过。如图4所示,在系统历史记录中有“L2tp UP”相关信息显示,表示隧道认证通过。
 
 
                      
       
 
   
                          
 
 
2.  其次,通过隧道认证之后再对需要建立隧道的用户进行身份认证,通常叫做“用户认证”。
两次认证通过后,LNS将接收该呼叫,此时LAC和LNS间就建立了一条L2TP隧道。用户数据就由LAC通过该隧道发送到LNS上,然后LNS把数据发送到接收者所在的网络上,虚端口的状态由“监听”(ptpdial)状态变为“传输”(ptp)状态,与该端口对应的路由也由“DOWN”状态变为“UP”状态。
CLI方式中,可使用show ip route table命令来查看虚端口是否已由“监听”状态变为“传输”状态。如表2-3所示,与该隧道对应路由条目的“IfId”(虚端口标识)处显示为“ptp87”(87为虚端口号),表示l2tp端口已建立,即虚端口已由“监听”状态变为“传输”状态。
WEBUI方式中,可在路由表信息列表(可在系统状态—>路由和端口信息中查看)来查看虚端口是否已由“监听”状态变为“传输”状态。如表4所示,与该隧道对应路由条目的“端口号”处显示为“ptp87”(87为虚端口号),表示ptp端口已建立,即虚端口已由“监听”状态变为“传输”状态。
3 CLI中路由表(部分)
 
 
 
                         4 WEBUI中路由表(部分)
 
  CLI方式中,可使用show session userInfo来查看L2TP用户信息。如图2-5所示,srv 显示为“L2TP”, 表示用户正在使用L2TP协议连接。显示信息“Totoal Active users:1”,表示当前有一个L2TP用户。需要注意的是此命令可以查看PPPoE, PPTP, L2TP 等用户的信息,“Totoal Active users”显示的是总用户数量。
WEBUI方式中,无此功能。
 

 
                        5 CLI中L2TP用户信息
 
 
WEB UI方式中,可在“VPN信息列表”(在VPN配置—>PPTP和L2TP中)里面查看L2TP用户信息。如表5所示,“状态”显示为“已连接”,表示L2TP隧道已连接。
 
 
 
 
 
 
如果LNS验证LAC失败或用户认证失败,LNS将拒绝该呼叫,由于没有合适的隧道传送该数据包,用户的数据最终被LAC丢弃。
CLI方式中,可使用show ip route table命令来查看虚端口状态。如表2-6所示,与该隧道对应路由条目的“IfId”(虚端口标识)处显示为“ptpdial0”,表示虚端口仍处在“ptpdial”状态,验证失败。
WEBUI方式中,可在路由表信息列表(在系统状态—>路由和端口信息中)里面查看虚端口状态。如表2-7所示,与该隧道对应路由条目的“端口号”处显示为“ptpdial0”,表示虚端口仍处在“ptpdial”状态,验证失败。
 
 
 
                    
 7 WEBUI中路由表(部分)
      
  由于在系统中维持一条隧道需要消耗一定的资源,HiPER采取了一些优化设计。HiPER LAC/LNS可以被配置成:当没有用户数据需要传送的时候,也就是说该隧道“空闲”(此时虚端口也为“空闲”状态)一段时间后,它将主动拆除已经处在“传输”状态的L2TP隧道,虚端口就由“空闲”状态变为“监听”状态,同时相关的路由也变成“DOWN”状态,处在该状态下的隧道不能发送用户数据。
CLI方式中,通过使用命令set connection/xxx dial idleTimeout xxx来修改“空闲时间”(即idleTimeout),从而控制隧道空闲后虚端口保持“传输”状态的时间(由“传输”状态变为“监听”状态之前)。
WEBUI方式中,通过修改界面参数“空闲时间”(可在VPN配置—>PPTP和L2TP中修改),来控制隧道空闲后虚端口保持“传输”状态的时间(由“传输”状态变为“监听”状态之前)。
由上,从开始配置L2TP隧道参数、到隧道建立、再到隧道断开的整个过程中,相应的虚端口的状态的变化如图6所示。
 
 
                     
 
提示:虽然LNS中也配置了虚端口,但是该端口只能工作在“监听”状态下。即使有数据需要向LAC发送,LNS也不会主动发起建立隧道的请求,这是由于LAC的IP地址通常都是变化的,因此LNS无法确定LAC的地址,也就无法发起呼叫请求建立隧道。
 
1).      L2TP客户端(LAC)数据流
 
 
 
                                                                                                7 HiPER L2TP隧道数据流
 
 
)如图7所示,L2TP隧道建立及数据传输的整个过程中,L2TP客户端(LAC)将依次通过以下数据流:
Ø 隧道配置完成,LAC建立虚端口监听(图中(1));
Ø LAC监听端口收到用户数据(图中(3));
Ø LAC发起建立隧道请求(图中(4));
Ø LAC收到LNS验证LAC身份(LAC名/口令)请求,回复此请求(图中(7));
Ø LAC收到LNS验证用户身份(用户名/口令)请求,回复此请求(图中(9));
Ø LNS与LAC协商建立L2TP隧道(图中(10));
Ø LAC使用PPP帧封装用户数据(图中(11));
Ø LAC通过隧道发送用户数据(PPP封装)(图中(12));
Ø LAC接收来自LNS通过隧道传输的数据,解封装处理(图中(17));
Ø LAC发送解封后的数据到最终用户(图中(18));
Ø 隧道空闲一段时间或用户主动请求断开隧道,关闭已建立隧道(图中(19));
Ø 隧道断开,LAC返回监听状态(图中(20))。
 
 
2) .      L2TP服务器(LNS)数据流
如图 7所示,L2TP隧道建立及数据传输的整个过程中,L2TP服务器(LNS)将依次通过以下数据流:
Ø 隧道配置完成,LNS建立虚端口监听(此端口只能响应用户的呼叫请求,不能发起呼叫请求)(图中(2));
Ø LNS监听端口收到LAC建立隧道请求(图中(5);
Ø LNS要求验证LAC身份(LAC名/口令)(图中(6));
Ø LNS要求验证用户身份(用户名/口令)(图中(8));
Ø LNS与LAC协商建立L2TP隧道(图中(10);
Ø LNS接收来自LAC通过隧道传输的数据,解封装处理(图中(13));
Ø LNS发送解封后的数据到最终用户(图中(14));
Ø LNS接收来自最终用户的数据,使用PPP帧封装用户数据(图中(15));
Ø LNS通过隧道发送用户数据(PPP帧封装)(图中(16));
Ø 隧道空闲一段时间或用户主动请求断开隧道,关闭已建立隧道(图中(19));
Ø 隧道断开,LNS返回监听状态(图中(21))。
 
 
       L2TP中LAC和LNS之间建立隧道的过程中可以选择进行隧道认证,这时只有隧道认证通过后才会对拨号用户进行认证。隧道认证通过在LAC和LNS之间配置“设备ID/共享密钥”来实现。在“隧道认证”过程中,通过MD5消息摘要算法来保证数据传输和认证过程本身的安全。
       HiPER中L2TP的实现缺省是不进行L2TP隧道认证,这也是绝大部分设备的出厂设置。采用这种配置,可以提高系统的VPN处理能力,加快系统建立VPN隧道的速度。
CLI方式中,可以使用命令set ip vpn L2tpAuth enabled改变缺省设置,使得L2TP实现需要进行L2TP隧道认证。
         WEBUI方式中,无此功能。
       HiPER在VPN“拨出”用户中使用“unitname”(主机名)作为LAC身份标识,如果“unitname”没有设置,将使用HiPER的MBID来作为LAC身份标识;同时增加密码设置。
CLI方式中,可以使用命令set system unitname xxx来设置主机名;可以使用命令set conncetion/xxx tunnel secret xxx来设置密码。
WEBUI方式中,无此功能。
HiPER 作为 LNS验证LAC用户时候,使用user表中的用户名/口令来验证LAC是否为合法的LAC。
CLI方式中,可以使用命令new user/xxx来设置用户名;可以使用命令set user/xxx passwd xxx来设置用户口令;
WEBUI方式中,无此功能。
对于支持AAA功能的产品,如果本地没有配置用户,HiPER LNS将会向AAA服务器(通常是RADIUS服务器)验证LAC的身份信息(根据产品型号决定)。
 
       除了需要隧道认证外,实现L2TP还需进行用户认证,在这里采用的是PPP协议的验证方式。根据实际需要,用户可以选择PAP或CHAP方式或PPP支持的其他验证方式,值得注意的是,必须为同一对LNS和LAC配置匹配的用户认证方式。
    对于LAC(“拨出”用户),可以选择PAP、CHAP或MS-CHAP中的一种作为其用户认证方式。对于LNS(“拨入”用户),可以选择PAP、CHAP或MS-CHAP中的一种作为其用户认证方式,LNS缺省配置可以接受上述的任何一种验证方式。
CLI方式中,可以使用命令set connection/xxx encaps send authtype pap/chap/mschap设置LAC或LNS的用户认证方式为PAP、CHAP或MS-CHAP中的一种。
WEBUI方式中,可以选择“密码验证方式”为“PAP”、“CHAP”或“MS-CHAP”设置LAC或LNS的用户认证方式为PAP、CHAP或MS-CHAP中的一种(在VPN配置—>PPTP和L2TP中设置)。
 
 
       L2TP协议在传输过程中并不提供数据加密的功能。L2TP协议是利用PPP协议具有的数据压缩/加密功能(如CCP,PPE等方式)或利用IPSec的加密功能来保护L2TP数据的 。
 
六、   MTU与分段数据传输
L2TP协议在工作过程中使用了数据封装技术,当用户数据包本身比较大的时候(如ERP软件和FTP通常会使用比较大的数据包传输数据,MSN/QQ等聊天软件发送的数据包比较小),封装后的数据可能会超过发送物理端口最大发送单元MTU(例如以太网接口的最大发送单元MTU是1500字节,超过1500字节大小的数据包将被强制分成多个数据包发送,以确保每个数据包可以被物理端口正确发送),此时数据只能分段传输。在接收方,收到分段后的数据必须组装还原为原来的数据包以后才能进行下一步协议处理,在接收到最后一个分段之前该数据包一直处在待处理状态。如果中间有一个分段丢弃,则整个数据包都被丢弃。
数据分段传输会严重影响系统的性能,所以传输过程中的再分段传输应当尽量避免。为解决此问题,L2TP协议在隧道建立过程中通过协商PPP协议的MRU/MTU参数来避免在随后的隧道传输过程中发生数据再分段的情况。
在HiPER中可以设置L2TP隧道的缺省MTU(即tunnelmtu,缺省值为1400)来调整发送包的大小,超过该MTU大小的数据包会主动先分段,然后再发送。同时HiPER通过设置每条隧道的MTU/MRU(用户MTU/MRU)参数来协商该隧道的MTU/MRU。正确的配置是tunnelmtu <用户MTU≤用户MRU <最终物理端口的MTU。
CLI方式中,可以使用命令set ip vpn tunnelmtu xxx设置隧道的缺省MTU。
WEBUI方式中,无此功能。
CLI方式中,可以使用命令set connection/xxx encaps mtu xxx设置用户的MTU;可以使用命令set connection/xxx encaps mru xxx设置用户的MRU。
WEBUI方式中,可以通过设置参数“最大接收单元”的值来设置用户的MRU(在VPN配置—>PPTP和L2TP中设置),不能设置用户的MTU。
下面给出L2TP隧道的MTU(tunnelmtu)的计算实例:
如图8和如图9所示,为固定接入和PPPoE拨号时,在L2TP隧道中传输的封装数据包格式,其中以太网MTU及各封装包头大小分别为:
以太网MTU:       1500字节;
IP包头:            20字节;
UDP包头:          8字节;
L2TP包头(最大): 30字节;
PPPoE包头:        8字节。
                               8 L2TP隧道数据包格式(固定IP接入)
 
                            9 L2TP隧道数据包格式(PPPoE拨号)
 
因此,固定IP接入时(如图8),最大tunnelmtu不能大于l442=1500-20-8-30,单位为字节;如果中间使用PPPoE线路(如图9),还要减去PPPoE的包头(8字节),即不能大于1434=1442-8,单位为字节。
HiPER中的L2TP隧道MTU(tunnelmtu)缺省值是1400,可以满足绝大部分应用的要求,一般无须修改。
 
 
 (三)、L2TP会话数量限制
针对不同的产品型号,HiPER中支持L2TP VPN隧道的会话数量是不一样的。L2TP会话数量根据具体的产品规格说明书确定,超过系统支持能力的会话将拒绝。当VPN会话数已达最大值时,如果尝试建立新的会话,系统会显示如下信息:
2-10 对话框— VPN会话数达到最大
 
CLI方式中,可使用命令show session history查看相关信息,如图2-11所示,有“Max VPN sessions。Cannot set up a new L2TP session。”相关信息显示,无法再建立新的L2TP会话。
WEBUI方式中,可在系统历史记录(系统状态—>系统信息中)来查看相关信息。如图2-12所示,在系统历史记录中有“Max VPN sessions。Cannot set up a new L2TP session。”相关信息显示,无法再建立新的L2TP会话。
 
2-11 CLI中无法建立新的L2TP会话信息
 
 
2-12 WEBUI中无法建立新的L2TP会话信息
 
*提示:系统保留一个虚端口为拨入用户使用,实际可配L2TP隧道相应减少一条。

 

   2024 ©上海艾泰科技有限公司 版权所有 沪ICP备05037453号-1

   

      沪公网安备 31011702003579号