本章节下载(692.59 KB)
目 录
虚拟私有网(Virtual Private Network)简称VPN,是近年来随着Internet的广泛应用而迅速发展起来的一种新技术,用以实现在公用网络上构建私人专用网络。“虚拟”主要指这种网络是一种逻辑上的网络。
伴随企业和公司的不断扩张,员工出差日趋频繁,驻外机构及客户群分布日益分散,合作伙伴日益增多,越来越多的现代企业迫切需要利用公共Internet资源来进行促销、销售、售后服务、培训、合作及其它咨询活动,这为VPN的应用奠定了广阔市场。
l VPN有别于传统网络,它并不实际存在,而是利用现有公共网络,通过资源配置而成的虚拟网络,是一种逻辑上的网络。
l VPN只为特定的企业或用户群体所专用。从VPN用户角度看来,使用VPN与传统专网没有区别。VPN作为私有专网,一方面与底层承载网络之间保持资源独立性,即在一般情况下,VPN资源不会被承载网络中的其它VPN或非该VPN用户的网络成员所使用;另一方面,VPN提供足够安全性,确保VPN内部信息不受外部的侵扰。
l VPN不是一种简单的高层业务。该业务建立专网用户之间的网络互联,包括建立VPN内部的网络拓扑、路由计算、成员的加入与退出等,因此VPN技术就比各种普通的点对点的应用机制要复杂得多。
l 在远端用户、驻外机构、合作伙伴、供应商与公司总部之间建立可靠的安全连接,保证数据传输的安全性。这一优势对于实现电子商务或金融网络与通讯网络的融合将有特别重要的意义。
l 利用公共网络进行信息通讯,一方面使企业以明显更低的成本连接远地办事机构、出差人员和业务伙伴,另一方面极大的提高了网络的资源利用率,有助于增加ISP(Internet Service Provider,Internet服务提供商)的收益。
l 只需要通过软件配置就可以增加、删除VPN用户,无需改动硬件设施。这使得VPN的应用具有很大灵活性。
l 支持驻外VPN用户在任何时间、任何地点的移动接入,这将满足不断增长的移动业务需求。
l 构建具有服务质量保证的VPN(如MPLS VPN),可为VPN用户提供不同等级的服务质量保证,通过收取不同的业务使用费用可获得更多的利润。有关MPLS VPN的原理及相关介绍请参见MPLS配置章节。
VPN是由若干Site组成的集合。Site可以同时属于不同的VPN,但是必须遵循如下规则:两个Site只有同时属于一个VPN定义的Site集合,才具有IP连通性。按照VPN的定义,一个VPN中的所有Site都属于一个企业,称为Intranet;如果VPN中的Site分属不同的企业,则称为Extranet。

图1-1 VPN组成示意图
上图显示了有5个Site分别构成了3个VPN:
l VPN1---Site2、Site4
l VPN2---Site1、Site3、Site4
l VPN3---Site1、Site5
以某企业为例,通过VPN建立的企业内部网如图1-2所示:

图1-2 VPN组网示意图
从上图可以看出,企业内部资源享用者通过PSTN/ISDN网或局域网就可以连入本地ISP的POP(Point of Presence)服务器,从而访问公司内部资源。而利用传统的WAN组建技术,相互之间要有专线相连才可以达到同样的目的。虚拟网组成后,远端用户和外地客户甚至不必拥有本地ISP的上网权限就可以访问企业内部资源,这对于流动性很大的出差员工和分布广泛的客户来说是很有意义的。
企业开设VPN业务所需的设备很少,只需在资源共享处放置一台支持VPN的服务器(如一台Windows NT服务器或支持VPN的路由器)就可以了。资源享用者通过PSTN/ISDN网或局域网连入本地POP服务器后,直接呼叫企业的远程服务器(VPN服务器),呼叫接续过程由ISP的接入服务器(Access Server)与VPN服务器共同完成。

图1-3 VPN接入示意图
如上图所示,VPN用户通过PSTN/ISDN网拨入ISP的NAS(Network Access Server)服务器,NAS服务器通过用户名或接入号码识别出该用户为VPN用户后,就和用户的目的VPN服务器建立一条连接,称为隧道(Tunnel),然后将用户数据包封装成IP报文后通过该隧道传送给VPN服务器,VPN服务器收到数据包并拆封后就可以读到真正有意义的报文了。反向的处理也一样。隧道两侧可以对报文进行加密处理,使Internet上的其它用户无法读取,因而是安全可靠的。对用户来说,隧道是其PSTN/ISDN链路的逻辑延伸,操作起来和实际物理链路相同。
隧道可以通过隧道协议来实现。根据是在OSI模型的第二层还是第三层实现隧道,隧道协议分为第二层隧道协议和第三层隧道协议。
第二层隧道协议是将整个PPP帧封装在内部隧道中。现有的第二层隧道协议有:
l PPTP(Point-to-Point Tunneling Protocol):点到点隧道协议,由微软、Ascend和3COM等公司支持,在Windows NT 4.0以上版本中支持。该协议支持点到点PPP协议在IP网络上的隧道封装,PPTP作为一个呼叫控制和管理协议,使用一种增强的GRE(Generic Routing Encapsulation,通用路由封装)技术为传输的PPP报文提供流控和拥塞控制的封装服务。
l L2F(Layer 2 Forwarding)协议:二层转发协议,由北方电信等公司支持。L2F协议支持对更高级协议链路层的隧道封装,实现了拨号服务器和拨号协议连接在物理位置上的分离。
l L2TP(Layer 2 Tunneling Protocol):二层隧道协议,由IETF起草,微软等公司参与,结合了上述两个协议的优点,为众多公司所接受,并且已经成为标准RFC。L2TP既可用于实现拨号VPN业务,也可用于实现专线VPN业务。
第三层隧道协议的起点与终点均在ISP内,PPP会话终止在NAS处,隧道内只携带第三层报文。现有的第三层隧道协议主要有:
l GRE(Generic Routing Encapsulation)协议:这是通用路由封装协议,用于实现任意一种网络层协议在另一种网络层协议上的封装。
l IPSec(IP Security)协议:IPSec协议不是一个单独的协议,它给出了IP网络上数据安全的一整套体系结构,包括AH(Authentication Header)、ESP(Encapsulating Security Payload)、IKE(Internet Key Exchange)等协议。
GRE和IPSec主要用于实现专线VPN业务。
第三层隧道与第二层隧道相比,优势在于它的安全性、可扩展性与可靠性。从安全性的角度看,由于第二层隧道一般终止在用户侧设备上,对用户网的安全及防火墙技术提出十分严峻的挑战;而第三层隧道一般终止在ISP网关上,因此一般情况下不会对用户网的安全技术提出较高要求。
从扩展性的角度看,第二层隧道内封装了整个PPP帧,这可能产生传输效率问题。其次,PPP会话贯穿整个隧道并终止在用户侧设备上,导致用户侧网关必须要保存大量PPP会话状态与信息,这将对系统负荷产生较大的影响,也会影响到系统的扩展性。此外,由于PPP的LCP及NCP协商都对时间非常敏感,这样隧道的效率降低会造成PPP对话超时等等一系列问题。相反,第三层隧道终止在ISP的网关内,PPP会话终止在NAS处,用户侧网关无需管理和维护每个PPP对话的状态,从而减轻了系统负荷。
一般地,第二层隧道协议和第三层隧道协议都是独立使用的,如果合理地将这两层协议结合起来使用,将可能为用户提供更好的安全性(如将L2TP和IPSec协议配合使用)和更佳的性能。
IP VPN是指利用IP设施(包括公用的Internet或专用的IP骨干网)实现WAN设备专线业务(如远程拨号、DDN等)的仿真。IP VPN可有以下几种分类方法:
(1) CPE-based VPN(Customer Premises Equipment based VPN)
用户不但要安装价格昂贵的设备及专门认证工具,还要负责繁杂的VPN维护(如通道维护、带宽管理等)。这种方式组网复杂度高、业务扩展能力弱。
(2) Network-based VPN(NBIP-VPN)
将VPN的维护等外包给ISP实施(也允许用户在一定程度上进行业务管理和控制),并且将其功能特性集中在网络侧设备处实现,这样可以降低用户投资、增加业务灵活性和扩展性,同时也可为运营商带来新的收入。
(1) Intranet VPN(企业内部虚拟专网)
Intranet VPN通过公用网络进行企业内部各个分布点互联,是传统的专线网或其它企业网的扩展或替代形式。
(2) Access VPN(远程访问虚拟专网)
Access VPN向出差流动员工、远程办公人员和远程小办公室提供了通过公用网络与企业的Intranet和Extranet建立私有的网络连接。Access VPN的结构有两种类型,一种是用户发起(Client-initiated)的VPN连接,另一种是接入服务器发起(NAS-initiated)的VPN连接。
(3) Extranet VPN(扩展的企业内部虚拟专网)
Extranet VPN是指利用VPN将企业网延伸至供应商、合作伙伴与客户处,使不同企业间通过公网来构筑VPN。
(1) 虚拟租用线(VLL)
VLL(Virtual Leased Line)是对传统租用线业务的仿真,通过使用IP网络对租用线进行模拟,提供非对称、低成本的“DDN”业务。从虚拟租用线两端的用户来看,该虚拟租用线近似于过去的租用线。
(2) 虚拟专用拨号网络(VPDN)
VPDN(Virtual Private Dial Network)是指利用公共网络(如ISDN和PSTN)的拨号功能及接入网来实现虚拟专用网,从而为企业、小型ISP、移动办公人员提供接入服务。
(3) 虚拟专用LAN网段(VPLS)业务
VPLS(Virtual Private LAN Segment)借助IP公共网络实现LAN之间通过虚拟专用网段互连,是局域网在IP公共网络上的延伸。
(4) 虚拟专用路由网(VPRN)业务
VPRN(Virtual Private Routing Network)借助IP公共网络实现总部、分支机构和远端办公室之间通过网络管理虚拟路由器进行互连,业务实现包括两类:一种是使用传统VPN协议(如IPSec、GRE等)实现的VPRN,另外一种是MPLS方式的VPRN。
(1) L3VPN:包括BGP/MPLS VPN、IPSec VPN、GRE VPN、DVPN等。
(2) L2VPN:包括Martini方式的MPLS L2VPN、Kompella方式的MPLS L2VPN、SVC方式MPLS L2VPN、VPLS以及静态CCC配置。
(3) VPDN:L2TP、PPTP等。
VPDN(Virtual Private Dial Network,虚拟私有拨号网)是指利用公共网络(如ISDN和PSTN)的拨号功能及接入网来实现虚拟专用网,从而为企业、小型ISP、移动办公人员提供接入服务。
VPDN采用专用的网络加密通信协议,在公共网络上为企业建立安全的虚拟专网。企业驻外机构和出差人员可从远程经由公共网络,通过虚拟加密隧道实现和企业总部之间的网络连接,而公共网络上其它用户则无法穿过虚拟隧道访问企业网内部的资源。
VPDN有下列两种实现方式:
(1) NAS通过隧道协议,与VPDN网关建立通道的方式。这种方式将客户的PPP连接直接连到企业的网关上,目前可使用的协议有L2F与L2TP。其好处在于:对用户是透明的,用户只需要登录一次就可以接入企业网络,由企业网进行用户认证和地址分配,而不占用公共地址,用户可使用各种平台上网。这种方式需要NAS支持VPDN协议,需要认证系统支持VPDN属性,网关一般使用路由器或VPN专用服务器。
(2) 客户机与VPDN网关建立隧道的方式。这种方式由客户机先建立与Internet的连接,再通过专用的客户软件(如Win2000支持的L2TP客户端)与网关建立通道连接。其好处在于:用户上网的方式和地点没有限制,不需ISP介入。缺点是:用户需要安装专用的软件(一般都是Win2000平台),限制了用户使用的平台。
VPDN隧道协议可分为PPTP、L2F和L2TP三种,目前使用最广泛的是L2TP。
PPP协议定义了一种封装技术,可以在二层的点到点链路上传输多种协议数据包,这时,用户与NAS之间运行PPP协议,二层链路端点与PPP会话点驻留在相同硬件设备上。
L2TP协议提供了对PPP链路层数据包的通道(Tunnel)传输支持,允许二层链路端点和PPP会话点驻留在不同设备上,并且采用包交换网络技术进行信息交互,从而扩展了PPP模型。L2TP协议结合了L2F协议和PPTP协议的各自优点,成为IETF有关二层隧道协议的工业标准。
使用L2TP协议构建的VPDN应用的典型组网如图2-1所示:

图2-1 应用L2TP构建的VPDN服务
其中,LAC表示L2TP访问集中器(L2TP Access Concentrator),是附属在交换网络上的具有PPP端系统和L2TP协议处理能力的设备。LAC一般是一个网络接入服务器NAS,主要用于通过PSTN/ISDN网络为用户提供接入服务。LNS表示L2TP网络服务器(L2TP Network Server),是PPP端系统上用于处理L2TP协议服务器端部分的设备。
LAC位于LNS和远端系统(远地用户和远地分支机构)之间,用于在LNS和远端系统之间传递信息包,把从远端系统收到的信息包按照L2TP协议进行封装并送往LNS,将从LNS收到的信息包进行解封装并送往远端系统。LAC与远端系统之间可以采用本地连接或PPP链路,VPDN应用中通常为PPP链路。LNS作为L2TP隧道的另一侧端点,是LAC的对端设备,是被LAC进行隧道传输的PPP会话的逻辑终止端点。
(1) L2TP协议结构

图2-2 L2TP协议结构
上图所示L2TP协议结构描述了PPP帧和控制通道以及数据通道之间的关系。PPP帧在不可靠的L2TP数据通道上进行传输,控制消息在可靠的L2TP控制通道内传输。
通常L2TP数据以UDP报文的形式发送。L2TP注册了UDP 1701端口,但是这个端口仅用于初始的隧道建立过程中。L2TP隧道发起方任选一个空闲的端口(未必是1701)向接收方的1701端口发送报文;接收方收到报文后,也任选一个空闲的端口(未必是1701),给发送方的指定端口回送报文。至此,双方的端口选定,并在隧道保持连通的时间段内不再改变。
(2) 隧道和会话的概念
在一个LNS和LAC对之间存在着两种类型的连接,一种是隧道(Tunnel)连接,它定义了一个LNS和LAC对;另一种是会话(Session)连接,它复用在隧道连接之上,用于表示承载在隧道连接中的每个PPP会话过程。在同一对LAC和LNS之间可以建立多个L2TP隧道,隧道由一个控制连接和一个或多个会话(Session)组成。会话连接必须在隧道建立(包括身份保护、L2TP版本、帧类型、硬件传输类型等信息的交换)成功之后进行,每个会话连接对应于LAC和LNS之间的一个PPP数据流。控制消息和PPP数据报文都在隧道上传输。
L2TP使用Hello报文来检测隧道的连通性。LAC和LNS定时向对端发送Hello报文,若在一段时间内未收到Hello报文的应答,该隧道将会被拆除。
(3) 控制消息和数据消息的概念
L2TP中存在两种消息:控制消息和数据消息。控制消息用于隧道和会话连接的建立、维护以及传输控制;数据消息则用于封装PPP帧并在隧道上传输。控制消息的传输是可靠传输,并且支持对控制消息的流量控制和拥塞控制;而数据消息的传输是不可靠传输,若数据报文丢失,不予重传,不支持对数据消息的流量控制和拥塞控制。
控制消息和数据消息共享相同的报文头。L2TP报文头中包含隧道标识符(Tunnel ID)和会话标识符(Session ID)信息,用来标识不同的隧道和会话。隧道标识相同、会话标识不同的报文将被复用在一个隧道上,报文头中的隧道标识符与会话标识符由对端分配。
远端系统或LAC客户端(运行L2TP协议的主机)与LNS之间的隧道模式如图2-3所示:

图2-3 两种典型的L2TP隧道模式
(1) 由远程拨号用户发起。远程系统通过PSTN/ISDN拨入LAC,由LAC通过Internet向LNS发起建立通道连接请求。拨号用户地址由LNS分配;对远程拨号用户的验证与计费既可由LAC侧的代理完成,也可在LNS侧完成。
(2) 直接由LAC客户(指可在本地支持L2TP协议的用户)发起。此时LAC客户可直接向LNS发起通道连接请求,无需再经过一个单独的LAC设备。此时,LAC客户地址的分配由LNS来完成。
L2TP应用的典型组网如下图所示:

图2-4 L2TP应用的典型组网
L2TP隧道的呼叫建立流程可如下图所示:

图2-5 L2TP隧道的呼叫建立流程
L2TP隧道的呼叫建立流程过程为:
(1) 用户端PC机发起呼叫连接请求;
(2) PC机和LAC端(RouterA)进行PPP LCP协商;
(3) LAC对PC机提供的用户信息进行PAP或CHAP认证;
(4) LAC将认证信息(用户名、密码)发送给RADIUS服务器进行认证;
(5) RADIUS服务器认证该用户,如果认证通过则返回该用户对应的LNS地址等相关信息,并且LAC准备发起Tunnel连接请求;
(6) LAC端向指定LNS发起Tunnel连接请求;
(7) LAC端向指定LNS发送CHAP challenge信息,LNS回送该challenge响应消息CHAP response,并发送LNS侧的CHAP challenge,LAC返回该challenge的响应消息CHAP response;
(8) 隧道验证通过;
(9) LAC端将用户CHAP response、response identifier和PPP协商参数传送给LNS;
(10) LNS将接入请求信息发送给RADIUS服务器进行认证;
(11) RADIUS服务器认证该请求信息,如果认证通过则返回响应信息;
(12) 若用户在LNS侧配置强制本端CHAP认证,则LNS对用户进行认证,发送CHAP challenge,用户侧回应CHAP response;
(13) LNS再次将接入请求信息发送给RADIUS服务器进行认证;
(14) RADIUS服务器认证该请求信息,如果认证通过则返回响应信息;
验证通过,用户访问企业内部资源。
l 灵活的身份验证机制以及高度的安全性
L2TP协议本身并不提供连接的安全性,但它可依赖于PPP提供的认证(比如CHAP、PAP等),因此具有PPP所具有的所有安全特性。L2TP可与IPSec结合起来实现数据安全,这使得通过L2TP所传输的数据更难被攻击。L2TP还可根据特定的网络安全要求在L2TP之上采用通道加密技术、端对端数据加密或应用层数据加密等方案来提高数据的安全性。
L2TP传输PPP数据包,这样就可以在PPP数据包内封装多种协议。
l 支持RADIUS服务器的验证
LAC端将用户名和密码发往RADIUS服务器进行验证申请,RADIUS服务器负责接收用户的验证请求,完成验证。
l 支持内部地址分配
LNS可放置于企业网的防火墙之后,它可以对远端用户的地址进行动态的分配和管理,可支持私有地址应用(RFC1918)。为远端用户所分配的地址不是Internet地址而是企业内部的私有地址,这样方便了地址的管理并可以增加安全性。
l 网络计费的灵活性
可在LAC和LNS两处同时计费,即ISP处(用于产生帐单)及企业网关(用于付费及审计)。L2TP能够提供数据传输的出入包数、字节数以及连接的起始、结束时间等计费数据,可根据这些数据方便地进行网络计费。
l 可靠性
L2TP协议支持备份LNS,当一个主LNS不可达之后,LAC可以重新与备份LNS建立连接,这样,增加了VPN服务的可靠性和容错性。
下面从LAC、LNS两侧分别介绍L2TP的配置。
联动路由器通过与安全客户端和CAMS配合而实现基于L2TP的EAD。在用户接入认证通过后CAMS通知用户EAD服务器的IP与端口号,并通知联动路由器用户的ACL规则,在安全认证通过后更新联动路由器的ACL规则。联动路由器根据CAMS为用户指定的ACL创建或更新基于用户的包过滤防火墙。通过在不同状态给用户设置相应的ACL实现EAD。
在PPP用户通过接入认证后,EAD服务器将对其进行安全认证,如果认证通过,用户可以正常访问网络资源,如果认证不通过,用户则只能访问隔离区的资源。
在L2TP的配置中,LAC端和LNS端的配置有所不同,下面先介绍一下LAC端的配置。在各项配置任务中,必须先启动L2TP、创建L2TP组,然后再进行其它功能特性的配置。PPP配置相关命令的详细介绍请参看相关章节。
LAC侧要进行的配置包括:
l 启用L2TP(必选)
l 创建L2TP组(必选)
l 设置发起L2TP连接请求及LNS地址(必选)
l 设置本端名称(可选)
l 启用通道验证及设置密码(可选)
l 配置将AVP数据隐含(可选)
l 设置通道Hello报文发送时间间隔(可选)
l 设置用户名、密码及配置用户验证(必选)
l 强制挂断通道(可选)
l 开启或关闭流控功能(可选)
l 配置L2TP会话超时时间(可选)
l 配置L2TP Tunnel连接保持功能(可选)
l 配置LAC作为客户端(可选)
只有启用L2TP后,路由器上L2TP功能才能正常发挥作用;如果禁止L2TP,则即便配置了L2TP的参数,路由器也不会提供相关功能。
这些配置在LAC侧必须配置。
请在系统视图下进行下列配置。
表2-1 启用/禁止L2TP
|
操作 |
命令 |
|
启用L2TP |
l2tp enable |
|
禁止L2TP |
undo l2tp enable |
缺省情况下,L2TP功能是被禁止的。
正常建立隧道或者由于用户名不正确而导致不能建立隧道时,在LAC端禁用L2TP,然后再启用L2TP,此时若不能正常建立L2TP隧道,
l 对于两台设备(lac作为客户端)的情况,在虚拟模板视图下执行undo l2tp-auto-client enable命令,再执行l2tp-auto-client enable后,可以建立隧道;
l 对于三台设备的情况,将客户端接口shutdown,然后undo shutdown,可以建立隧道。
为了进行L2TP的相关参数配置,还需要增加L2TP组,这不仅可以在路由器上灵活的配置L2TP各项功能,而且方便地实现了LAC和LNS之间一对一、一对多的组网应用。L2TP组在LAC和LNS上独立编号,只需要保证LAC和LNS之间关联的L2TP组的相关配置(如接收的通道对端名称、发起L2TP连接请求及LNS地址等)保持对应关系即可。
这些配置在LAC侧必须配置。
请在系统视图下进行下列配置。
表2-2 创建/删除L2TP组
|
操作 |
命令 |
|
创建L2TP组 |
l2tp-group group-number |
|
删除L2TP组 |
undo l2tp-group group-number |
在创建L2TP组后,就可以在L2TP组视图下进行和该L2TP组相关的其它配置了,如本端名称、发起L2TP连接请求及LNS地址等。
缺省情况下,未创建任何L2TP组。
& 说明:
一台设备可以同时配置为LAC侧和LNS侧,但它们所使用的用户名不能相同。
路由器不会随便去与其它路由器或LNS服务器建立L2TP通道,需要满足一定的条件才会向其它路由器或LNS服务器发出建立L2TP连接的请求。通过配置对接入用户信息的判别条件,并指定相应的LNS端的IP地址,路由器可以鉴定用户是否为VPN用户,并决定是否向LNS发起连接。最多可以设置五个LNS,即允许存在备用LNS。正常运行时,本路由器(LAC)按照LNS配置的先后顺序,依次向对端(LNS)进行L2TP连接请求,直到某个LNS接受连接请求,该LNS就成为L2TP隧道的对端。
这些配置在LAC侧必须配置。
请在L2TP组视图下进行下列配置。
表2-3 设置发起L2TP连接请求及LNS地址
|
操作 |
命令 |
|
配置鉴别用户是否是VPN用户的方式,并设置对应的LNS的IP地址。 |
start l2tp { ip ip-addr [ ip ip-addr ] [ ip ip-addr ] ... } { domain domain-name | fullusername user-name } |
|
取消连接请求配置 |
undo start |
上述参数无缺省值,可根据实际情况进行配置,但必须配置一种触发条件,方可发出L2TP连接的请求。
& 说明:
当配置多个LNS时,因客户端PPP的超时时间不同,可能会导致后面几个IP地址的LNS(备份LNS)连接不上,建议最多配置两个。
用户可在LAC侧配置本端通道名称。LAC侧通道名称要与LNS侧配置的接收通道对端名称保持一致。
这些配置在LAC侧为可选配置。
请在L2TP组视图下进行下列配置。
|
操作 |
命令 |
|
设置本端名称 |
tunnel name name |
|
恢复本端名称为默认值 |
undo tunnel name |
缺省情况下,本端名称为路由器的主机名。
用户可根据实际需要,决定是否在创建隧道连接之前启用隧道验证。隧道验证请求可由LAC或LNS任何一侧发起。只要有一方启用了隧道验证,则只有在对端也启用了隧道验证,两端密码完全一致并且不为空的情况下,隧道才能建立;否则本端将自动将隧道连接断开。若隧道两端都配置了禁止隧道验证,隧道验证的密码一致与否将不起作用。
这些配置在LAC侧为可选配置。
请在L2TP组视图下进行下列配置。
|
操作 |
命令 |
|
启用隧道验证 |
tunnel authentication |
|
禁止隧道验证 |
undo tunnel authentication |
|
设置隧道验证的密码 |
tunnel password { simple | cipher } password |
|
恢复隧道验证的密码为缺省值 |
undo tunnel password |
缺省情况下,启用隧道验证,隧道验证的密码为空。为了保证通道安全,建议用户最好不要禁用隧道验证的功能。
L2TP协议使用AVP(Attribute Value Pair,属性值对)来传递和协商L2TP的一些参数属性等。在缺省情况下,AVP是采用明文形式传输的。为了保证安全,用户可以通过下面的配置,将这些AVP隐藏起来传输。隐含AVP功能必须是两端都使用隧道验证的情况下才起作用。
这些配置在LAC侧为可选配置。
请在L2TP组视图下进行下列配置。
表2-6 配置将AVP数据隐含
|
操作 |
命令 |
|
配置将AVP数据隐含的方式传输 |
tunnel avp-hidden |
|
恢复AVP的缺省传输方式 |
undo tunnel avp-hidden |
缺省情况下,AVP是采用明文形式传输的。
为了检测LAC和LNS之间通道的连通性,LAC和LNS会定期向对端发送Hello报文,接收方接收到Hello报文后会进行响应。当LAC或LNS在指定时间间隔内未收到对端的Hello响应报文时,重复发送,如果重复发送超过3次都没有收到对端的响应信息则认为L2TP隧道已经断开,需要在LAC和LNS之间重新建立隧道连接。
这项配置在LAC侧为可选配置。
请在L2TP组视图下进行下列配置。
表2-7 设置通道Hello报文发送时间间隔
|
操作 |
命令 |
|
设置通道Hello报文发送时间间隔 |
tunnel timer hello hello-interval |
|
恢复通道Hello报文发送时间间隔 |
undo tunnel timer hello |
缺省情况下,通道Hello报文的发送时间间隔为60秒。如果LAC侧不进行此项配置,LAC将采用此缺省值为周期向对端发送Hello报文。
在LAC侧配置AAA认证时,如果选择了local(本地认证)方式,则需要在LAC侧配置本地用户名和口令。
LAC通过检查远程拨入用户名与口令是否与本地注册用户名/口令相符合来进行用户身份验证,以检查用户是否为合法VPN用户。验证通过后才能发起建立通道连接的请求,否则将该用户转入其它类型的服务。
这些配置在LAC侧必须配置。
|
操作 |
命令 |
|
设置用户名(系统视图) |
local-user username |
|
取消当前设置(系统视图) |
undo local-user username |
|
配置本地用户口令(本地用户视图) |
password { simple | cipher } password |
缺省情况下,LAC侧未配置本地用户名和口令。
请在接口或虚拟模板接口视图下进行下列配置。
表2-9 配置/取消用户验证类型
|
操作 |
命令 |
|
配置对PPP用户进行验证 |
ppp authentication-mode { chap | pap } [ call-in | domain isp-name ] |
|
取消对PPP用户进行验证 |
undo ppp authentication-mode |
配置本地验证的接口应该是接入用户的接口。
表2-10 配置PPP域用户及认证方案
|
操作 |
命令 |
|
创建ISP域并进入域视图(系统视图) |
domain { isp-name | default { disable | enable isp-name } } |
|
删除指定的ISP域(系统视图) |
undo domain isp-name |
|
配置PPP域用户的认证方法(ISP域视图) |
scheme local |
当用户数为零、网络发生故障或当管理员主动要求时,都会产生断开连接的过程。LAC和LNS任何一端都可主动发起断开连接的请求,连接断开后,该通道上的所有控制连接与会话连接也将被清除;当有新用户拨入时,还可重新建立连接。
这些配置在LAC端为可选配置。
请在用户视图下进行下列配置。
|
操作 |
命令 |
|
强制断开一个隧道连接 |
reset l2tp tunnel { remote-name | tunnel-id } |
|
强制断开一个会话连接 |
reset l2tp session session-id session-id |
|
强制断开该用户的连接 |
reset l2tp user user-name user-name |
该配置任务可以开启或关闭L2TP简单的通道流控功能,达到流控目的。
这些配置在LAC侧为可选配置。
请在L2TP组视图下进行下列配置。
|
操作 |
命令 |
|
开启流控功能 |
tunnel flow-control |
|
关闭流控功能 |
undo tunnel flow-control |
缺省情况下,关闭通道流控功能。
通常情况下,当L2TP 的一个会话在一段时间内没有数据收发时,系统就会自动挂断这个会话。
用户可以根据需要设置会话的超时时间,甚至可以设置永不超时(即不自动挂断)。
请在L2TP组视图下进行下列配置。
表2-13 配置L2TP会话超时时间
|
操作 |
命令 |
|
配置L2TP会话超时时间 |
session idle-time seconds |
|
配置L2TP会话不超时 |
undo session idle-time |
缺省情况下,L2TP会话不超时。
通常情况下,只有当PPP用户发起L2TP会话请求之后,LAC才会与LNS建立tunnel,并且当所有PPP会话(session)都断开之后,此tunnel也会自动拆除。
对于要求快速建立连接的应用,需要事先建立好tunnel,一旦有PPP会话请求,系统可以立即建立一个会话。这就要求LAC与LNS之间总是保持一个tunnel连接,即使该tunnel上没有会话也不会被拆除。
请在L2TP组视图下进行下列配置。
表2-14 配置Tunnel连接保持功能
|
操作 |
命令 |
|
配置Tunnel连接保持功能 |
tunnel keepstanding |
|
取消Tunnel连接保持功能 |
undo tunnel keepstanding |
缺省情况下,取消Tunnel连接保持功能。
& 说明:
Tunnel连接保持功能必须在LAC和LNS上同时配置。
配置好以上条件之后,运行start l2tp tunnel命令,以发送tunnel连接请求。每执行一次该命令,则发送一次连接请求。
请在L2TP组视图下执行下列命令。
|
操作 |
命令 |
|
启动tunnel连接 |
start l2tp tunnel |
通常情况下,L2TP的客户端是拨号连接到LAC的用户主机。此时用户与LAC的连接总是PPP连接。
如果使用LAC同时作为客户端,那么用户与LAC之间的连接就不受限于PPP连接,而只要是一个IP连接就可以了,这样LAC能够将用户的IP报文转发到LNS。
使用LAC同时作为客户端,是在LAC上建立一个虚拟的PPP用户,该用户与LNS保持一个常连接。其它所有实际用户的IP报文都是通过此虚拟用户转发给LNS的。
使用LAC同时作为客户端的配置是在配置LAC的基础上增加如下配置:
l 创建一个虚模板接口
l 配置虚模板接口参数,包括IP地址、PPP验证方法及PPP验证的用户名、密码。
l 配置虚用户建立L2TP隧道
& 说明:
配置LAC作为客户端应同时配置L2TP Session不超时,否则当没有实际用户数据流时,虚拟用户的会话会因超时而挂断。
请在系统视图下进行下列配置。
表2-16 创建/删除虚拟模板接口
|
操作 |
命令 |
|
创建虚拟模板接口 |
interface virtual-template virtual-template-number |
|
删除虚拟模板接口 |
undo interface virtual-template virtual-template-number |
请在虚拟模板接口视图下进行下列配置。
|
操作 |
命令 |
|
配置虚拟模板接口IP地址 |
ip address address mask |
|
配置PPP验证方式 |
ppp authentication-mode { pap | chap } |
|
配置CHAP验证用户名 |
ppp chap user user-name |
|
配置CHAP验证密码 |
ppp chap password { simple | cipher } password |
|
配置PAP验证用户名、密码 |
ppp pap local-user user-name password { simple | cipher } password |
请在虚拟模板接口视图下进行下列配置。
|
操作 |
命令 |
|
配置虚用户建立L2TP隧道 |
l2tp-auto-client enable |
|
取消虚用户建立L2TP隧道 |
undo l2tp-auto-client enable |
缺省情况下,未配置虚用户建立L2TP隧道。
在LNS的各项配置任务中,必须先启动L2TP、创建L2TP组,然后再进行其它功能特性的配置。在L2TP支持多实例配置中,只有启用L2TP多实例功能,其他配置才能生效。PPP和虚拟接口模板(Virtual-Template)的相关命令的详细介绍,请参看相关章节。
LNS主要配置包括:
l 启用L2TP(必选)
l 启用/禁止L2TP多实例功能
l 创建L2TP组(必选)
l 创建虚接口模板(必选)
l 设置接收呼叫的虚拟接口模板、通道对端名称和域名(必选)
l 配置隧道验证及设置密码(可选)
l 配置将AVP数据隐含(可选)
l 设置通道Hello报文发送时间间隔(可选)
l 强制本端CHAP验证(可选)
l 强制LCP重新协商(可选)
l 设置本端地址及分配的地址池(配置本端地址为必选,配置地址池为可选)
l 设置用户名、密码及配置用户验证(可选)
l 强制挂断通道(可选)
l 开启或关闭流控功能(可选)
只有启用L2TP后,路由器上L2TP功能才能正常发挥作用;如果禁止L2TP,则即便配置了L2TP的参数路由器也不会提供相关功能。
这些配置在LNS侧必须配置。
请在系统视图下进行下列配置。
表2-19 启用/禁止L2TP
|
操作 |
命令 |
|
启用L2TP |
l2tp enable |
|
禁止L2TP |
undo l2tp enable |
缺省情况下,L2TP功能是被禁止的。
& 说明:
当成功建了隧道或者由于验证不成功而导致不能建立隧道时,此时在LAC端禁用L2TP功能然后再启用L2TP功能,若不能建立隧道:
l 对于LAC作为客户端的情况,需在LAC端的虚拟模板接口下执行undo l2tp-auto-client enable,再执行l2tp-auto-client enable,即可建立隧道。
l 对于LAC不作为客户端,即由远程用户发拨入LAC的情况,在远程用户端需重新连接以建立隧道。
只有启用L2TP多实例功能,路由器才能为多个企业做LNS。L2TP多实例功能的实现丰富了VPN组网方式,主要应用在MPLS-VPN组网中。在实际组网应用中,企业的私网路由需要通过配置vpn-instance来实现,关于vpn-instance的配置可以参考MPLS配置相关章节。在“2.6.4 L2TP多实例组网应用”中有简单配置步骤描述。
在L2TP多实例应用中,这些配置在LNS侧必须配置。
请在系统视图下进行下列配置。
表2-20 启用/禁止L2TP多实例功能
|
操作 |
命令 |
|
启用L2TP多实例功能 |
l2tpmoreexam enable |
|
禁止L2TP多实例功能 |
undo l2tpmoreexam enable |
缺省情况下,L2TP多实例功能是被禁止的。当lac没有使用代理认证时,该功能不能实现。
为了进行L2TP的相关参数配置,还需要增加L2TP组,这不仅可以在路由器上灵活的配置L2TP各项功能,而且方便地实现了LAC和LNS之间一对一、一对多的组网应用。L2TP组在LAC和LNS上独立编号,只需要保证LAC和LNS之间关联的L2TP组的相关配置(如接收的通道对端名称、发起L2TP连接请求及LNS地址等)保持对应关系即可。
这些配置在LNS侧必须配置。
请在系统视图下进行下列配置。
表2-21 创建/删除L2TP组
|
操作 |
命令 |
|
创建L2TP组 |
l2tp-group group-number |
|
删除L2TP组 |
undo l2tp-group group-number |
在创建了L2TP组后,就可以在L2TP组视图下进行和该L2TP组相关的其它配置了,如本端名称、接收的通道对端名称等。
缺省情况下,未创建任何L2TP组。
虚拟接口模板主要用于配置路由器在运行过程中动态创建的虚接口的工作参数,如MP捆绑逻辑接口和L2TP逻辑接口等。
这些配置在LNS侧必须配置。
请在系统视图下进行下列配置。
表2-22 创建/删除虚接口模板
|
操作 |
命令 |
|
创建虚接口模板 |
interface virtual-template virtual-template-number |
|
删除虚接口模板 |
undo interface virtual-template virtual-template-number |
LNS可以使用不同的虚拟接口模板接收不同的LAC创建隧道的请求。在接收到LAC发来的创建隧道请求后,LNS需要检查LAC的名称是否与合法通道对端名称相符合,从而决定是否允许通道对方进行隧道的创建。
这些配置在LNS侧必须配置。
请在L2TP组视图下进行下列配置。
表2-23 设置/取消接收的通道对端名称
|
操作 |
命令 |
|
设置通道对端的名称(L2TP组不为1) |
allow l2tp virtual-template virtual-template-number remote remote-name [ domain domain-name ] |
|
设置通道对端的名称(L2TP组为1) |
allow l2tp virtual-template virtual-template-number [ remote remote-name ] [ domain domain-name ] |
|
取消通道对端的名称 |
undo allow |
当L2TP组号为1时(缺省的L2TP组号),可以不指定通道对端名remote-name。如果在L2TP组1的视图下,仍指定对端名称,则L2TP组1不作为缺省的L2TP组。
& 说明:
l 只有组号为1的L2TP组才可以设置成缺省的组。
l 当L2TP组号为1时(缺省的L2TP组号),任何名字的计算机都能发起隧道请求。
l “start”命令和“allow”命令是互斥的,配了一条命令之后另一条就自动失效。
用户可根据实际需要决定是否在创建隧道连接之前启用隧道验证。隧道验证请求可由LAC或LNS任何一侧发起。只要有一方启用了隧道验证,则只有在对端也启用了隧道验证,两端密码完全一致并且不为空的情况下,隧道才能建立;否则本端将自动将隧道连接断开。若隧道两端都配置了禁止隧道验证,隧道验证的密码一致与否将不起作用。
这些配置在LNS侧为可选配置。
请在L2TP组视图下进行下列配置。
|
操作 |
命令 |
|
启用通道验证 |
tunnel authentication |
|
禁止通道验证 |
undo tunnel authentication |
|
设置通道验证的密码 |
tunnel password { simple | cipher } password |
|
取消通道验证的密码 |
undo tunnel password |
缺省情况下,启用隧道验证,隧道验证的密码为空。为了保证通道安全,建议用户最好不要禁用隧道验证的功能。
L2TP协议使用AVP(Attribute Value Pair,属性值对)来传递和协商L2TP的一些参数属性等。在缺省情况下,AVP是采用明文形式传输的。为了保证安全,用户可以通过下面的配置,将这些AVP隐藏起来传输。隐含AVP功能必须是两端都使用隧道验证的情况下才起作用。
这些配置在LNS侧为可选配置。
请在L2TP组视图下进行下列配置。
表2-25 配置将AVP数据隐含
|
操作 |
命令 |
|
配置将AVP数据隐含的方式传输 |
tunnel avp-hidden |
|
恢复AVP的缺省传输方式 |
undo tunnel avp-hidden |
缺省情况下,AVP是采用明文形式传输的。
为了检测LAC和LNS之间通道的连通性,LAC和LNS会定期向对端发送Hello报文,接收方接收到Hello报文后会进行响应。当LAC或LNS在指定时间间隔内未收到对端的Hello响应报文时,重复发送,如果重复发送超过3次都没有收到对端的响应信息则认为L2TP隧道已经断开,需要在LAC和LNS之间重新建立隧道连接。
这些配置在LNS侧为可选配置。
请在L2TP组视图下进行下列配置。
表2-26 设置通道Hello报文发送时间间隔
|
操作 |
命令 |
|
设置通道Hello报文发送时间间隔 |
tunnel timer hello hello-interval |
|
恢复通道Hello报文发送时间间隔 |
undo tunnel timer hello |
缺省情况下,通道Hello报文的发送时间间隔为60秒。如果用户不进行此项配置,LNS将采用此缺省值为周期向对端发送Hello报文。
当LAC对用户进行代理验证后,LNS可再次对用户进行验证。此时将对用户进行两次验证,第一次发生在LAC侧,第二次发生在LNS侧,只有两次验证全部成功后,L2TP通道才能建立。
在L2TP组网中,LNS侧对用户的验证方式有三种:代理验证、强制CHAP验证和LCP重协商。
这三种验证方式中,LCP重协商的优先级最高,如果在LNS上同时配置LCP重协商和强制CHAP验证,L2TP将使用LCP重协商,采用相应的虚拟接口模板上配置的验证方式。
如果只配置强制CHAP验证,则LNS对用户进行CHAP验证。强制CHAP验证配置在LNS侧为可选配置。
请在L2TP组视图下进行下列配置。
|
操作 |
命令 |
|
强制本端CHAP验证 |
mandatory-chap |
|
取消本端CHAP验证 |
undo mandatory-chap |
在LNS使用代理验证时,虚拟接口模板下必须指明验证类型为PAP或CHAP。如果虚拟接口模板配置的验证方式为PAP,并且验证通过,则允许建立会话;如果虚拟接口模板配置的验证方式为CHAP,而LAC端配置的验证方式为PAP,则由于LNS要求的CHAP验证级别高于LAC能够提供的PAP验证,验证将无法通过,会话也就不能正确建立。
缺省情况下,不进行本端CHAP验证。
对由NAS发起的VPN服务请求(NAS-Initialized VPN),在PPP会话开始时,用户先和NAS(网络接入服务器)进行PPP协商。若协商通过,则由NAS初始化L2TP通道连接,并将用户信息传递给LNS,由LNS根据收到的代理验证信息,判断用户是否合法。
但在某些特定的情况下(如需在LNS侧也要进行验证与计费),需要强制LNS与用户间重新进行LCP协商,此时将忽略NAS侧的代理验证信息。
强制LCP重新协商配置在LNS侧为可选配置。
请在L2TP组视图下进行下列配置。
表2-28 强制/取消LCP重新协商
|
操作 |
命令 |
|
强制LCP重新协商 |
mandatory-lcp |
|
取消LCP重新协商 |
undo mandatory-lcp |
缺省情况下,不进行LCP重新协商。
启用LCP重协商后,如果相应的虚拟接口模板上不配置验证,则LNS将不对接入用户进行二次验证(这时用户只在LAC侧接受一次验证),直接将全局地址池的地址给client端。
当LAC与LNS之间的L2TP隧道连接建立之后,LNS需要从地址池中为VPN用户分配IP地址。在指定地址池之前,需要在系统视图或域视图下用ip pool命令先定义一个地址池(关于ip pool命令的详细描述请参见“安全部分”)。若LNS采用代理验证或强制CHAP验证,系统将使用域视图下的地址池给用户分配IP地址;若LNS没有配置认证或采用了不含认证过程的LCP重新协商方式,系统将使用全局地址池给用户分配IP地址;若采用了含认证过程的LCP重新协商方式,系统将使用域视图下的地址池给用户分配IP地址。
请在虚拟接口模板视图下进行下列配置。
|
操作 |
命令 |
|
设置本端IP地址 |
ip address X.X.X.X netmask |
|
取消本端IP地址 |
undo ip address X.X.X.X netmask |
|
指定给对方分配地址所用的地址池 |
|
|
删除给对方分配地址所用的地址池 |
undo remote address |
当为对方指定分配地址所用的全局地址池时,如果关键字pool后面没有输入具体的pool-number值,则表示从缺省的全局地址池(地址池0)来分配地址;当为对方指定分配地址所用的域地址池时,缺省情况下从域地址池0(缺省地址池)中给对方分配地址,如果域地址池0不存在系统会依次选择其它的地址池。
在LNS侧,无论是否配置了强制CHAP认证,都需要配置本地注册用户名和口令。
LNS通过检查远程拨入用户名与口令是否与本地注册用户名/口令相符合来进行用户身份验证,以检查用户是否为合法VPN用户。验证通过后就可以进行VPN用户和LNS的通信,否则将通知L2TP清除这个L2TP连接。
具体配置方法请参考2.2.8 设置用户名、密码及配置本地验证。
当用户数为零、网络发生故障或当管理员主动要求时,都会产生断开连接的过程。LAC和LNS任何一端都可主动发起断开连接的请求,连接断开后,该通道上的所有控制连接与会话连接也将被清除;当有新用户拨入时,还可重新建立连接。
这些配置在LNS端为可选配置。
请在用户视图下进行下列配置。
|
操作 |
命令 |
|
强制断开一个隧道连接 |
reset l2tp tunnel { remote-name | tunnel-id } |
|
强制断开一个会话连接 |
reset l2tp session session-id session-id |
|
强制断开该用户的连接 |
reset l2tp user user-name user-name |
该配置任务可以开启或关闭L2TP简单的通道流控功能,达到流控目的。
这些配置在LNS侧为可选配置。
请在L2TP组视图下进行下列配置。
|
操作 |
命令 |
|
开启流控功能 |
tunnel flow-control |
|
关闭流控功能 |
undo tunnel flow-control |
缺省情况下,关闭通道流控功能。
表2-32 配置基于L2TP的EAD功能
|
配置步骤 |
命令 |
说明 |
|
进入系统视图 |
system-view |
- |
|
进入虚模板接口视图 |
interface virtual-template number |
- |
|
使能基于L2TP的EAD功能 |
ppp access-control enable |
必选 |
|
设置VT接口下PPP用户的包过滤防火墙的分片匹配模式 |
ppp access-control match-fragments { normally | exactly } |
可选 |
|
显示VA接口动态防火墙的统计信息 |
display ppp access-control {interface type number } |
可选 display命令可以在任意视图下执行 |
在完成上述配置后,在任意视图下执行display命令可以显示配置后L2TP的运行情况,通过查看显示信息验证配置的效果。
在用户视图下,执行debugging命令可对L2TP进行调试。
表2-33 L2TP的显示和调试
|
操作 |
命令 |
|
显示当前的L2TP用户的信息 |
display l2tp user |
|
显示当前的L2TP通道的信息 |
display l2tp tunnel |
|
显示当前的L2TP会话的信息 |
display l2tp session |
|
打开所有的L2TP调试信息开关 |
debugging l2tp all |
|
关闭所有的L2TP调试信息开关 |
undo debugging l2tp all |
|
打开L2TP控制报文调试开关 |
debugging l2tp control |
|
关闭L2TP控制报文调试开关 |
undo debugging l2tp control |
|
打开PPP报文内容的调试开关 |
debugging l2tp dump |
|
关闭ppp报文内容的调试开关 |
undo debugging l2tp dump |
|
打开L2TP差错信息的调试开关 |
debugging l2tp error |
|
关闭L2TP差错信息的调试开关 |
undo debugging l2tp error |
|
打开L2TP的事件调试信息开关 |
debugging l2tp event |
|
关闭L2TP的事件调试信息开关 |
undo debugging l2tp event |
|
打开隐藏AVP的调试信息开关 |
debugging l2tp hidden |
|
关闭隐藏AVP的调试信息开关 |
undo debugging l2tp hidden |
|
打开L2TP数据报文调试开关 |
debugging l2tp payload |
|
关闭L2TP数据报文调试开关 |
undo debugging l2tp payload |
|
打开L2TP时间戳信息调试开关 |
debugging l2tp time-stamp |
|
关闭L2TP时间戳信息调试开关 |
undo debugging l2tp time-stamp |
L2TP的呼叫可以由NAS(网络接入服务器)主动发起,也可以由客户端发起。下面将分别针对这两种情况举例说明。
VPN用户访问公司总部过程如下:
l 用户以普通的上网方式进行拨号上网。
l 在接入服务器(NAS)处对此用户进行验证,发现是VPN用户,则由接入服务器向LNS发起隧道连接的请求。
l 在接入服务器与LNS隧道建立后,接入服务器把与VPN用户已经协商的内容作为报文内容传给LNS。
l LNS再根据预协商的内容决定是否接受此连接。
l 用户与公司总部间的通信都通过接入服务器与LNS之间的隧道进行传输。

(1) 用户侧的配置
在用户侧,在拨号网络窗口中输入VPN用户名vpdnuser,口令Hello,拨入号码为170。在拨号后弹出的拨号终端窗口中输入RADIUS验证的用户名username和口令userpass。
(2) NAS侧的配置
(本例中以H3C A8010接入服务器作为LAC侧设备)
# 在A8010上配置拨入号码为170。
# 在RADIUS服务器上设置一个用户名为username、口令为userpass的VPN用户,并设置相应的LNS侧设备的IP地址(本例中LNS侧与通道相连接的串口的IP地址为202.38.160.2)。
# 将本端的设备名称定义为A8010,需要进行通道验证,通道验证密码为h3c。
(3) 路由器(LNS侧)的配置
# 设置用户名及口令(应与用户侧的设置一致)。
[H3C] local-user vpdnuser
[H3C-luser-vpdnuser] password simple Hello
[H3C-luser-vpdnuser] service-type ppp
[H3C-luser-vpdnuser] quit
# 对VPN用户采用本地验证。
[H3C] domain system
[H3C-isp-system] scheme local
[H3C-isp-system] ip pool 1 192.168.0.2 192.168.0.100
# 启用L2TP服务,并设置一个L2TP组。
[H3C] l2tp enable
[H3C] l2tp-group 1
# 配置虚模板Virtual-Template的相关信息。
[H3C] interface virtual-template 1
[H3C-virtual-template1] ip address 192.168.0.1 255.255.255.0
[H3C-virtual-template1] ppp authentication-mode chap domain system
[H3C-virtual-template1] remote address pool 1
# 配置LNS侧本端名称及接收的通道对端名称。
[H3C] l2tp-group 1
[H3C-l2tp1] tunnel name LNS
[H3C-l2tp1] allow l2tp virtual-template 1 remote A8010
# 启用通道验证并设置通道验证密码。
[H3C-l2tp1] tunnel authentication
[H3C-l2tp1] tunnel password simple h3c
VPN用户访问公司总部过程如下:
用户首先连接Internet,之后,直接由用户向LNS发起Tunnel连接的请求。
在LNS接受此连接请求之后,VPN用户与LNS之间就建立了一条虚拟的Tunnel。
用户与公司总部间的通信都通过VPN用户与LNS之间的Tunnel进行传输。

图2-7 Client-Initialized VPN组网图
(1) 用户侧的配置
在用户侧主机上必须装有L2TP的客户端软件,如WinVPN Client,并且用户通过拨号方式连接到Internet。然后再进行如下配置(设置的过程与相应的客户端软件有关,以下为设置的内容):
# 在用户侧设置VPN用户名为vpdnuser,口令为Hello。
# 将LNS的IP地址设为路由器的Internet接口地址(本例中LNS侧与通道相连接的串口的IP地址为202.38.160.2)。
# 修改连接属性,将采用的协议设置为L2TP,将加密属性设为自定义,并选择CHAP验证,进行通道验证,通道的密码为:h3c。
(2) 路由器(LNS侧)的配置
# 设置用户名及口令(应与用户侧的设置一致)。
[H3C] local-user vpdnuser
[H3C-luser-vpdnuser] password simple Hello
[H3C-luser-vpdnuser] service-type ppp
# 对VPN用户采用本地验证。
[H3C] domain system
[H3C-isp-system] scheme local
[H3C-isp-system] ip pool 1 192.168.0.2 192.168.0.100
# 启用L2TP服务,并设置一个L2TP组。
[H3C] l2tp enable
[H3C] l2tp-group 1
# 配置虚模板Virtual-Template的相关信息。
[H3C] interface virtual-template 1
[H3C-virtual-template1] ip address 192.168.0.1 255.255.255.0
[H3C-virtual-template1] ppp authentication-mode chap domain system
[H3C-virtual-template1] remote address pool 1
# 配置LNS侧本端名称及接收的通道对端名称。
[H3C] l2tp-group 1
[H3C-l2tp1] tunnel name LNS
[H3C-l2tp1] allow l2tp virtual-template 1
# 启用通道验证并设置通道验证密码。
[H3C-l2tp1] tunnel authentication
[H3C-l2tp1] tunnel password simple h3c
用户需要与总部进行通讯,而总部网络的地址采用的是私有地址,如10.8.0.0网络,则该用户将无法通过Internet直接访问内部的服务器。通过建立VPN,用户就可以访问内部网络的数据。
假设LAC与LNS之间路由可达。

(1) 用户侧的配置
建一拨号网络,号码为Router1路由器的接入号码;接收由LNS服务器端分配的地址。
在弹出的拨号终端窗口中输入用户名vpdnuser@h3c.com,口令为Hello(此用户名与口令已在公司LNS中注册)。
(2) 路由器Router1(LAC侧)的配置
# 设置用户名及口令。
[H3C] local-user vpdnuser
[H3C-luser-vpdnuser] password simple Hello
[H3C-luser-vpdnuser] service-type ppp
[H3C-luser-vpdnuser] quit
# 在Async1/0/0接口上配置IP地址。
[H3C] interface async 1/0/0
[H3C-Async1/0/0] ip address 202.38.160.1 255.255.255.0
[H3C-Async1/0/0] ppp authentication-mode chap domain h3c.com
[H3C-Async1/0/0] quit
# 配置h3c.com域用户采用本地验证。
[H3C] domain h3c.com
[H3C-isp-h3c.com] scheme local
# 设置一个L2TP组并配置相关属性。
[H3C] l2tp enable
[H3C] l2tp-group 1
[H3C-l2tp1] tunnel name LAC
[H3C-l2tp1] start l2tp ip 202.38.161.2 domain h3c.com
# 启用通道验证并设置通道验证密码。
[H3C-l2tp1] tunnel authentication
[H3C-l2tp1] tunnel password simple h3c
(3) 路由器Router2(LNS侧)的配置
# 在Serial1/0/0接口上配置IP地址。
[H3C] interface serial 1/0/0
[H3C-serial1/0/0] ip address 202.38.161.2 255.255.255.0
[H3C-serial1/0/0] quit
# 设置用户名及口令(与LAC侧的用户名与口令一致)。
[H3C] local-user vpdnuser
[H3C-luser-vpdnuser] password simple Hello
[H3C-luser-vpdnuser] service-type ppp
[H3C-luser-vpdnuser] quit
# 配置虚模板Virtual-Template 1。
[H3C] interface virtual-template 1
[H3C-virtual-template1] ip address 192.168.0.1 255.255.255.0
[H3C-virtual-template1] ppp authentication-mode chap domain h3c.com
# 配置域用户及本地认证方案。
[H3C] domain h3c.com
[H3C-isp-h3c.com] scheme local
[H3C-isp-h3c.com] ip pool 1 192.168.0.2 192.168.0.100
[H3C-isp-h3c.com] quit
# 设置一个L2TP组并配置相关属性。
[H3C] l2tp enable
[H3C] l2tp-group 1
[H3C-l2tp1] tunnel name LNS
[H3C-l2tp1] allow l2tp virtual-template 1 remote LAC
# 启用通道验证,并设置通道验证密码为h3c。
[H3C-l2tp1] tunnel authentication
[H3C-l2tp1] tunnel password simple h3c
# 强制进行本端CHAP验证。
[H3C-l2tp1] mandatory-chap
多个企业共用一个LNS,不同的企业用户需要与自己的总部进行通讯,网络的地址采用的是私有地址,如10.8.0.0网络,一般情况下,用户无法通过Internet直接访问企业内部的服务器。通过建立VPN并支持多实例,用户就可以访问自己企业内部网络的数据。假设:
01企业总部域名假定为263.net,PC1为01企业用户;
02企业总部域名假定为163.net,PC2为02企业用户。

图2-9 L2TP支持多实例组网图
(1) 用户侧的配置
建一拨号网络,号码为Router1路由器的接入号码;接收由LNS服务器端分配的地址。
对于PC1而言,在弹出的拨号终端窗口中输入用户名vpdn1@263.net,口令为11111(此用户名与口令已在LNS中注册)。
对于PC2而言,在弹出的拨号终端窗口中输入用户名vpdn2@163.net,口令为22222(此用户名与口令已在LNS中注册)。
(2) 路由器Router1(LAC侧)的配置
# 设置用户名及口令。
<H3C> system-view
[H3C] local-user vpdn1.net
[H3C-luser-vpdn1] password simple 11111
[H3C-luser-vpdn1] service-type ppp
[H3C-luser-vpdn1] quit
[H3C] local-user vpdn2
[H3C-luser-vpdn2] password simple 22222
[H3C-luser-vpdn2] service-type ppp
[H3C-luser-vpdn2] quit
# 配置域用户采用本地认证。
[H3C] domain 263.net
[H3C-isp-263.net] scheme local
[H3C-isp-263.net] quit
[H3C] domain 163.net
[H3C-isp-163.net] scheme local
[H3C-isp-163.net] quit
# 在拨号用户的接入接口上启动CHAP认证。
# 在BRI1/0/0接口上配置IP地址。
[H3C] interface bri 1/0/0
[H3C-bri1/0/0] ip address 202.38.160.1 255.255.255.0
[H3C-bri1/0/0] ppp authentication-mode chap
[H3C-bri1/0/0] ppp authentication-mode chap domain
[H3C-bri1/0/0] quit
# 设置两个L2TP组并配置相关属性。
[H3C] l2tp enable
[H3C] l2tp-group 1
[H3C-l2tp1] tunnel name LAC
[H3C-l2tp1] start l2tp ip 202.38.161.2 domain 263.net
[H3C-l2tp1] l2tp-group 2
[H3C-l2tp2] tunnel name LAC
[H3C-l2tp2] start l2tp ip 202.38.161.2 domain 163.net
# 启用通道验证并设置通道验证密码。
[H3C-l2tp2] tunnel authentication
[H3C-l2tp2] tunnel password simple 12345
[H3C-l2tp2] l2tp-group 1
[H3C-l2tp1] tunnel authentication
[H3C-l2tp1] tunnel password simple 12345
(3) 路由器Router2(LNS侧)的配置
<H3C> system-view
[H3C] interface serial 1/0/0
[H3C-Serial1/0/0] ip address 202.38.161.2 255.255.255.0
[H3C-Serial1/0/0] quit
[H3C] l2tp enable
[H3C] l2tpmoreexam enable
# 创建两个用户名及口令。
[H3C] local-user vpdn1
[H3C-luser-vpdn1] password simple 11111
[H3C-luser-vpdn1] service-type ppp
[H3C] local-user vpdn2
[H3C-luser-vpdn2] password simple 22222
[H3C-luser-vpdn2] service-type ppp
[H3C-luser-vpdn2] quit
# 配置域用户采用本地认证。
[H3C] domain 263.net
[H3C-isp-263.net] scheme local
[H3C-isp-263.net] ip pool 1 202.38.160.10 202.38.160.100
[H3C-isp-263.net] quit
[H3C] domain 163.net
[H3C-isp-163.net] scheme local
[H3C-isp-163.net] ip pool 2 202.38.160.10 202.38.160.100
[H3C-isp-163.net] quit
# 创建两个vpn-instance。
[H3C] ip vpn-instance vpn-instance1
[H3C–vpn-instance] route-distinguisher 100:1
[H3C–vpn-instance] ip vpn-instance vpn-instance2
[H3C–vpn-instance] route-distinguisher 100:2
[H3C-vpn-instance] quit
# 配置与01企业相连的Ethernet接口,绑定vpn-instance1。
[H3C] interface ethernet 2/0/0
[H3C-Ethernet2/0/0] ip binding vpn-instance vpn-instance1
[H3C-Ethernet2/0/0] ip address 202.38.160.3 255.255.255.0
# 配置与02企业相连的Ethernet接口,绑定vpn-instance2。
[H3C-Ethernet2/0/0] interface ethernet 3/0/0
[H3C-Ethernet3/0/0] ip binding vpn-instance vpn-instance2
[H3C-Ethernet3/0/0] ip address 202.38.160.4 255.255.255.0
[H3C-Ethernet3/0/0] quit
# 创建两个相应的virtual template,分别与vpn-instance1、vpn-instance2绑定。
[H3C] interface virtual-template 1
[H3C-Virtual-Template1] ip binding vpn-instance vpn-instance1
[H3C-Virtual-Template1] ppp authentication-mode pap domain 263.net
[H3C-Virtual-Template1] interface virtual-template 2
[H3C-Virtual-Template2] ip binding vpn-instance vpn-instance2
[H3C-Virtual-Template2] ppp authentication-mode pap domain 263.net
[H3C-Virtual-Template2] quit
# 创建两个相应的L2TP-group组。
[H3C] l2tp-group 3
[H3C-l2tp3] tunnel authentication
[H3C-l2tp3] allow l2tp virtual-template 1 remote LAC domain 263.net
[H3C-l2tp3] tunnel password simple 12345
[H3C-l2tp3] l2tp-group 4
[H3C-l2tp4] tunnel authentication
[H3C-l2tp4] allow l2tp virtual-template 2 remote LAC domain 163.net
[H3C-l2tp4] tunnel password simple 12345
上述配置中,如果LNS端需要采用Redius验证,请修改AAA配置即可。
使用LAC路由器同时作为L2TP客户端,与LNS建立常连接。并将所有私有网络的数据转发给LNS。

图2-10 LAC作为客户端应用组网图
(1) LAC路由器的典型配置
# 启用L2TP服务,并设置一个L2TP组。
[H3C] l2tp enable
[H3C] l2tp-group 1
# 配置LAC侧本端名称,配置对端LNS的IP地址。
[H3C-l2tp1] tunnel name LAC
[H3C-l2tp1] start l2tp ip 3.3.3.2 fullusername vpdnuser
# 启用通道验证并设置通道验证密码。
[H3C-l2tp1] tunnel authentication
[H3C-l2tp1] tunnel password simple h3c
[H3C-l2tp1] quit
# 配置虚模板Virtual-Template的相关信息。
[H3C] interface virtual-template 1
[H3C-virtual-template1] ip address ppp-negotiate
[H3C-virtual-template1] ppp pap local-user vpdnuser password simple Hello
[H3C-virtual-template1] ppp authentication-mode pap
[H3C-virtual-template1] quit
# 配置私网路由。
[H3C] ip route-static 10.1.0.0 16 virtual-template 1
# 设置用户名及口令。
[H3C] local-user vpdnuser
[H3C-luser-vpdnuser] password simple Hello
[H3C-luser-vpdnuser] service-type ppp
# 配置Serial1/0/0接口。
[H3C] interface serial 1/0/0
[H3C-Serial1/0/0] ip address 3.3.3.1 255.255.0.0
[H3C-Serial1/0/0] quit
(2) LNS路由器的典型配置
# 设置用户名及口令。
[H3C] local-user vpdnuser
[H3C-luser-vpdnuser] password simple Hello
[H3C-luser-vpdnuser] service-type ppp
# 启用L2TP服务,并设置一个L2TP组。
[H3C] l2tp enable
[H3C] l2tp-group 1
# 配置虚模板Virtual-Template的相关信息。
[H3C] interface virtual-template 1
[H3C-virtual-template1] ip address 192.168.0.20 255.255.255.0
[H3C-virtual-template1] remote address pool 1
[H3C-virtual-template1] ppp authentication-mode pap
[H3C-virtual-template1] quit
# 配置域。
[H3C] domain system
[H3C-isp-system] scheme local
[H3C-isp-system] ip pool 1 192.168.0.1 192.168.0.10
[H3C-isp-system] quit
# 配置LNS侧本端名称及接收的通道对端名称。
[H3C] l2tp-group 1
[H3C-l2tp1] tunnel name LNS
[H3C-l2tp1] allow l2tp virtual-template 1 remote LAC
# 启用通道验证并设置通道验证密码。
[H3C-l2tp1] tunnel authentication
[H3C-l2tp1] tunnel password simple h3c
[H3C-l2tp1] quit
# 配置Serial1/0/0接口。
[H3C] interface serial 1/0/0
[H3C-Serial1/0/0] ip address 3.3.3.2 255.255.0.0
[H3C-Serial1/0/0] quit
# 配置私网路由。
[H3C] ip route-static 10.2.0.0 16 virtual-template 1
(3) 启动L2TP连接
# 在RouteA的虚模板接口视图下执行启动L2TP连接命令
[H3C] interface virtual-template 1
[H3C-virtual-template1] l2tp-auto-client enable
& 说明:
LAC和LNS连接的私网主机应分别以LAC和LNS为网关。
H3C路由器支持同时作为LAC及LNS,并支持同时有多路用户呼入;只要内存及线路不受限制,L2TP可以同时接收和发起多个呼叫。这些复杂组网的需求及配置可以综合参考以上的几种组网情况,综合应用。
特别需要注意的是静态路由的配置,许多应用是依靠路由来发起的。
VPN创建连接的过程比较复杂,这里就几种常见的情况进行分析。在进行VPN排错之前,请先确认LAC与LNS都已在公共网上,并实现正确连通。
故障之一:用户登录失败
故障排除:用户登录失败主要有以下几种原因。
l Tunnel建立失败,Tunnel不能建立的原因有:
(1) 在LAC端,LNS的地址设置不正确。
(2) LNS(通常为路由器)端没有设置可以接收该隧道对端的L2TP组,具体可以查看allow命令的说明。
(3) Tunnel验证不通过,如果配置了验证,应该保证双方的隧道密码一致。
(4) 如果是本端强制挂断了连接,而由于网络传输等原因,对端还没有收到相应的Disconnect报文,此时立即发起了一个隧道连接,会连不上,因为对方必须相隔一定的时间才能侦测到链路被挂断。
l PPP协商不通过,可能原因有:
(1) LAC端设置的用户名与密码有误,或者是LNS端没有设置相应的用户。
(2) LNS端不能分配地址,比如地址池设置的较小,或没有进行设置。
(3) 密码验证类型不一致。如Windows 2000所创建的VPN连接缺省的验证类型为MSCHAP,如果对端不支持MSCHAP,建议改为CHAP。
故障之二:数据传输失败,在建立连接后数据不能传输,如Ping不通对端。
故障排除:可能有如下原因。
l 用户设置的地址有误:一般情况下,由LNS分配地址,而用户也可以指定自己的地址。如果指定的地址和LNS所要分配的地址不属于同一个网段,就会发生这种情况,建议由LNS统一分配地址。
l 网络拥挤:Internet主干网产生拥挤,丢包现象严重。L2TP是基于UDP(用户数据报文)进行传输的,UDP不对报文进行差错控制;如果是在线路质量不稳定的情况下进行L2TP应用,有可能会产生Ping不通对端的情况。
GRE(Generic Routing Encapsulation,通用路由封装)协议是对某些网络层协议(如IP和IPX)的数据报进行封装,使这些被封装的数据报能够在另一个网络层协议(如IP)中传输。GRE是VPN(Virtual Private Network)的第三层隧道协议,在协议层之间采用了一种被称之为Tunnel(隧道)的技术。Tunnel是一个虚拟的点对点的连接,在实际中可以看成仅支持点对点连接的虚拟接口,这个接口提供了一条通路使封装的数据报能够在这个通路上传输,并且在一个Tunnel的两端分别对数据报进行封装及解封装。
一个报文要想在Tunnel中传输,必须要经过加封装与解封装两个过程,下面以图3-1的网络为例说明这两个过程:

图3-1 IPX网络通过GRE隧道互连
(1) 加封装过程
连接Novell group1的接口收到IPX数据报后首先交由IPX协议处理,IPX协议检查IPX报头中的目的地址域来确定如何路由此包。若报文的目的地址被发现要路由经过网号为1f的网络(Tunnel的虚拟网号),则将此报文发给网号为1f的tunnel端口。Tunnel口收到此包后进行GRE封装,封装完成后交给IP模块处理,在封装IP报文头后,根据此包的目的地址及路由表交由相应的网络接口处理。
(2) 解封装的过程
解封装过程和加封装的过程相反。从Tunnel接口收到的IP报文,通过检查目的地址,当发现目的地就是此路由器时,系统剥掉此报文的IP报头,交给GRE协议模块处理(进行检验密钥、检查校验和及报文的序列号等);GRE协议模块完成相应的处理后,剥掉GRE报头,再交由IPX协议模块处理,IPX协议模块象对待一般数据报一样对此数据报进行处理。
系统收到一个需要封装和路由的数据报,称之为净荷(Payload),这个净荷首先被加上GRE封装,成为GRE报文;再被封装在IP报文中,这样就可完全由IP层负责此报文的向前传输(Forwarded)。人们常把这个负责向前传输IP协议称为传输协议(Delivery Protocol或者Transport Protocol)。
封装好的报文的形式如下图所示:

图3-2 封装好的Tunnel报文格式
举例来说,一个封装在IP Tunnel中的IPX传输报文的格式如下:

图3-3 Tunnel中传输报文的格式
GRE主要能实现以下几种服务类型:
(1) 多协议的本地网通过单一协议的骨干网传输

上图中,Group1和Group2是运行Novell IPX协议的本地网,Term1和Term2是运行IP协议的本地网。通过在Router A和Router B之间采用GRE协议封装的隧道(Tunnel),Group1和Group2、Team1和Team2可以互不影响地进行通信。
(2) 扩大了步跳数受限协议(如IPX)的网络的工作范围

若上图中的两台终端之间的步跳数超过15,它们将无法通信。而通过在网络中使用隧道(Tunnel)可以隐藏一部分步跳,从而扩大网络的工作范围。
(3) 将一些不能连续的子网连接起来,用于组建VPN

图3-6 Tunnel连接不连续子网
运行Novell IPX协议的两个子网group1和group2分别在不同的城市,通过使用隧道可以实现跨越广域网的VPN。
(4) 与IPSec结合使用

图3-7 GRE-IPSec隧道应用
对于诸如路由协议、语音、视频等数据先进行GRE封装,然后再对封装后的报文进行IPSec的加密处理。
另外,GRE还支持由用户选择记录Tunnel接口的识别关键字,和对封装的报文进行端到端校验。
由于GRE收发双方加封装、解封装处理以及由于封装造成的数据量增加等因素的影响,这就导致使用GRE会造成路由器数据转发效率有一定程度的下降。
在各项配置中,必须先创建虚拟Tunnel接口,才能在虚拟Tunnel接口上进行其它功能特性的配置。当删除虚拟Tunnel接口后,该接口上的所有配置也将被删除。
GRE主要配置包括:
l 创建虚拟Tunnel接口(必选)
l 设置Tunnel接口的MTU值(可选)
l 指定Tunnel的源端(必选)
l 指定Tunnel的目的端(必选)
l 设置Tunnel接口的网络地址(必选)
l 设置Tunnel接口的识别关键字(可选)
l 配置通过Tunnel的路由(可选)
& 说明:
目前Comware不支持GRE对IPX协议的封装。
创建虚拟Tunnel接口,从而在该接口上进行GRE其它参数的配置。这些配置在Tunnel两端必须配置。
请在系统视图下进行下列配置。
|
操作 |
命令 |
|
创建虚拟Tunnel接口 |
interface tunnel number |
|
删除虚拟Tunnel接口 |
undo interface tunnel number |
缺省情况下,不创建虚拟Tunnel接口。
number为设定的接口号,范围0~1023,但实际可建的Tunnel数目将受到接口总数及内存状况的限制。
请在Tunnel接口下进行下列配置。
表3-2 设置Tunnel接口的MTU值
|
操作 |
命令 |
|
设置Tunnel接口的MTU值 |
mtu size |
|
恢复Tunnel接口的MTU为缺省值 |
undo mtu |
缺省情况下,Tunnel接口的MTU值为15000。
设置Tunnel接口的封装协议和传输协议。这些配置在Tunnel两端为可选配置,如果配置则必须确保Tunnel两端的封装模式相同。
请在Tunnel视图下进行下列配置。
表3-3 设置Tunnel接口报文的封装模式
|
操作 |
命令 |
|
设置Tunnel接口报文的封装模式 |
tunnel-protocol gre |
缺省情况下,Tunnel接口报文的封装模式为GRE。
在创建Tunnel接口后,还要指明Tunnel通道的源端地址,即发出GRE报文的实际物理接口地址。Tunnel的源端地址与目的端地址唯一标识了一个通道。这些配置在Tunnel两端必须配置,且两端地址互为源地址和目的地址。
请在Tunnel接口视图下进行下列配置。
表3-4 设置Tunnel接口的源端地址或源端接口
|
操作 |
命令 |
|
设置Tunnel接口的源端地址或源端接口 |
source { ip-addr | interface-type interface-num } |
|
删除Tunnel接口的源端地址或源端接口 |
undo source |
& 说明:
l 不能对两个或两个以上使用同种封装协议的Tunnel接口配置完全相同的源地址和目的地址。
l 使用命令source设置的是实际的物理接口地址或实际物理接口,另外还需要设置Tunnel接口的网络地址。在Tunnel接口视图下通过命令ip address可完成这一设置。
在创建Tunnel接口后,还要指明Tunnel通道的目的端地址,即接收GRE报文的实际物理接口的IP地址。Tunnel的源端地址与目的端地址唯一标识了一个通道。这些配置在Tunnel两端必须配置,且两端地址互为源地址和目的地址。
请在Tunnel接口视图下进行下列配置。
表3-5 设置Tunnel接口的目的端地址
|
操作 |
命令 |
|
设置Tunnel接口的目的端地址 |
destination ip-addr |
|
删除Tunnel接口的目的端地址 |
undo destination |
& 说明:
使用命令destination设置的是实际的物理接口的IP地址,为支持动态路由协议,还需要设置tunnel接口的网络地址。
Tunnel接口的网络地址可以不是申请得到的网络地址。用户设置通道两端的网络地址应该位于同一网段上。这些配置在Tunnel两端都必须配置,并且确保地址在同一网段。
请在Tunnel接口视图下进行下列设置。
表3-6 设置Tunnel接口的网络地址
|
操作 |
命令 |
|
设置Tunnel接口的IP地址 |
ip address ip-addr mask |
|
删除Tunnel接口的IP地址 |
undo ip address |
缺省情况下,未设置Tunnel接口的网络地址。
在RFC1701中规定:若GRE报文头中的Checksum位置位,则校验和有效。发送方将根据GRE头及payload信息计算校验和,并将包含校验和的报文发送给对端。接收方对接收到的报文计算校验和,并与报文中的校验和比较,如果一致则对报文进一步处理,否则丢弃。
隧道两端可以根据实际应用需要,配置校验和或禁止校验和。如果本端配置了校验和而对端没有配置,则本端将不会对接收到的报文进行校验和检查,但对发送的报文计算校验和;相反,如果本端没有配置校验和而对端已配置,则本端将对从对端发来的报文进行校验和检查,但对发送的报文不计算校验和。
请在Tunnel接口视图下进行下列配置。
表3-7 设置Tunnel两端进行端到端校验
|
操作 |
命令 |
|
设置Tunnel两端进行端到端校验 |
gre checksum |
|
禁止Tunnel两端进行端到端校验 |
undo gre checksum |
缺省情况下,禁止Tunnel两端进行端到端校验。
在RFC1701中规定:若GRE报文头中的KEY字段置位,则收发双方将进行通道识别关键字的验证,只有Tunnel两端设置的识别关键字完全一致时才能通过验证,否则将报文丢弃。
请在Tunnel接口视图下进行配置。
表3-8 设置Tunnel接口的识别关键字
|
操作 |
命令 |
|
设置Tunnel接口的识别关键字 |
gre key key-number |
|
删除Tunnel接口的识别关键字 |
undo gre key |
key-number可取值0~4294967295之间的整数。
缺省情况下,Tunnel不使用KEY。
在源端路由器和目的端路由器上都必须存在经过Tunnel转发的路由,这样需要进行GRE封装的报文才能正确转发。可以配置静态路由,也可以配置动态路由。
可以手工配置一条到达目的地址(不是Tunnel的目的端地址,而是未进行GRE封装的报文的目的地址)的路由,下一跳是对端Tunnel接口的地址。在Tunnel的两端都要进行此项配置。配置的详细情况请参见本手册的“静态路由配置”章节,配置命令的详细解释请参见相应的命令手册。
如果路由器上运行了动态路由协议,只需在Tunnel接口上和与私网相连的路由器接口上使能该动态路由协议即可,在Tunnel的两端都必须进行此项配置。配置的详细情况请参见本手册的各个动态路由协议配置章节,配置命令的详细解释请参见相应的命令手册。
请在Tunnel接口视图下进行配置。
|
操作 |
命令 |
|
使能GRE的 keepalive功能 |
keepalive interval times |
|
关闭GRE的 keepalive功能 |
undo keepalive [ seconds ] [ times ] |
缺省情况下,不启用GRE的 keepalive功能。
seconds缺省为10秒。times缺省为3次。
在完成上述配置后,在任意视图下执行display命令可以显示配置后GRE的运行情况,通过查看显示信息验证配置的效果。
在用户视图下,执行debugging命令可对GRE进行调试。GRE除了提供针对Tunnel的查询和调试命令,还提供了查询GRE隧道的命令。
表3-10 GRE的显示和调试
|
操作 |
命令 |
|
显示Tunnel接口的工作状态 |
display interface tunnel number |
|
打开Tunnel调试信息 |
debugging tunnel |
运行IP协议的两个子网Group1和Group2,通过在路由器Router1和路由器Router2之间使用三层隧道协议GRE实现互联。

图3-8 GRE应用组网图
(1) 配置路由器Router1
# 配置接口Ethernet0/0/0。
[H3C] interface ethernet 0/0/0
[H3C-Ethernet0/0/0] ip address 10.1.1.1 255.255.255.0
[H3C-Ethernet0/0/0] quit
# 配置接口Serial1/0/0(隧道的实际物理接口)。
[H3C] interface serial 1/0/0
[H3C-Serial1/0/0] ip address 192.13.2.1 255.255.255.0
[H3C-Serial1/0/0] quit
# 创建Tunnel0接口。
[H3C] interface tunnel 0
# 配置Tunnel0接口的IP地址。
[H3C-Tunnel0] ip address 10.1.2.1 255.255.255.0
# 配置Tunnel封装模式。
[H3C-Tunnel0] tunnel-protocol gre
# 配置Tunnel0接口的源地址(Serial1/0/0的IP地址)。
[H3C-Tunnel0] source 192.13.2.1
# 配置Tunnel0接口的目的地址(Router2的Serial2/0/1的IP地址) 。
[H3C-Tunnel0] destination 131.108.5.2
[H3C-Tunnel0] quit
# 配置从Router1经过Tunnel0接口到Group2的静态路由。
[H3C] ip route-static 10.1.3.0 255.255.255.0 tunnel 0
(2) 配置路由器Router2
# 配置接口Ethernet0/0/0。
[H3C] interface ethernet 0/0/0
[H3C-Ethernet0/0/0] ip address 10.1.3.1 255.255.255.0
[H3C-Ethernet0/0/0] quit
# 配置接口Serial2/0/1(隧道的实际物理接口)。
[H3C] interface serial 1/0/1
[H3C-Serial2/0/1] ip address 131.108.5.2 255.255.255.0
[H3C-Serial2/0/1] quit
# 创建Tunnel0接口。
[H3C] interface tunnel 0
# 配置Tunnel0接口的IP地址。
[H3C-Tunnel0] ip address 10.1.2.2 255.255.255.0
# 配置Tunnel封装模式。
[H3C-Tunnel0] tunnel-protocol gre
# 配置Tunnel0接口的源地址(Serial2/0/1的IP地址)。
[H3C-Tunnel0] source 131.108.5.2
# 配置Tunnel0接口的目的地址(Router1的Serial1/0/0的IP地址)。
[H3C-Tunnel0] destination 192.13.2.1
[H3C-Tunnel0] quit
# 配置从Router2经过Tunnel0接口到Group1的静态路由。
[H3C] ip route-static 10.1.1.0 255.255.255.0 tunnel 0
GRE的配置相对比较简单,但要注意配置的一致性,大部分的错误都可以通过使用调试命令debugging tunnel定位。这里仅就一种错误进行分析。如图3-9所示:

图3-9 GRE排错示例
故障之一:Tunnel两端接口配置正确且Tunnel两端可以ping通,但PC A和PC B之间却无法ping通。
故障排除:可以按照如下步骤进行。
l 在任意视图下,在Router1和Router2分别执行display ip routing-table命令,观察在Router1是否有经过Tunnel0接口到10.2.0.0/16的路由;在Router2是否有经过Tunnel0接口到10.1.0.0/16的路由。
l 如果在上一步的输出中发现缺少相应的静态路由,在系统视图下使用ip route-static命令添加。以Router1为例,配置如下:
[H3C] ip route-static 10.2.0.0 255.255.0.0 tunnel 0
DVPN(Dynamic Virtual Private Network)动态虚拟私有网络技术,通过动态获取对端的信息建立VPN连接。DVPN提出了NBMA类型的隧道机制,使用Tunnel逻辑接口作为DVPN隧道的端点,完成DVPN报文的封装和发送,同时通过Tunnel接口完成私网路由的动态学习。DVPN采用了Client和Server的方式解决了传统VPN的缺陷,Client通过在Server注册,将Client自己的信息在Sever上进行保存,这样Client可以通过Server的重定向功能得到其它Client的信息,从而可以在Client之间建立独立的Session(会话,进行数据传输的通道)。当多个DVPN接入设备通过向共同的Server进行注册,构建一个DVPN域,就实现了各个DVPN接入设备后面的网络的VPN互联。
所有通过DVPN实现互连的私有网络以及网络中的路由器设备共同构成DVPN域。
在网络中用来构建DVPN动态虚拟私有网络的路由器设备,所有支持DVPN特性的路由器都可以作为DVPN接入设备。
DVPN域中,承担Server功能的DVPN接入设备。所有的其他DVPN接入设备必须在Server上进行注册后才能接入DVPN域中。DVPN Server的主要功能包括:
l 记录所有DVPN Client的注册信息;
l 对申请接入DVPN域的Client进行身份验证;
l 转发还没有建立Session会话的Client间的数据报文,并发送重定向报文给源Client;
l 对数据报文进行IPSec加密。
DVPN域中作为Client的DVPN接入设备,Client设备必须在指定的Server设备上完成注册才能接入DVPN域。Client的主要功能包括:
l 主动向Server发起注册请求,请求加入DVPN域;
l 与Server建立会话,从而进行数据的传输;
l 与DVPN域中的其他Client设备自动建立会话。
l 对数据报文进行IPSec加密。
一个DVPN域的唯一标识。在同一台DVPN接入设备上,不同的DVPN域的ID不同。
Client设备在Server设备上进行注册时,在Client和Server之间将建立一个注册通道,称为Map。Map在Client设备完成注册后仍然存在,直到Client设备退出DVPN域或退出网络。当Client在Server上注册成功后,在Client端和Sever端均保存Map信息,Map信息包括VPN域ID、对端的私网地址、对端的公网地址、使用的UDP端口号、Map的状态、Map的类型以及控制ID。
DVPN网络数据通讯隧道。所有的数据报文都通过会话隧道进行传递。在DVPN域中的两个接入设备之间可以建立一个Session,实现私有网络的直接互联。Session包含的信息域Map信息类似,包括VPN域ID、对端的私网地址、对端的公网地址、使用的UDP端口号、Session的状态以及Session的类型。
报文重定向机制。当两个Client之间还没有建立Session时,他们的数据通讯需要通过Server进行转发,Server在转发时将判断这两个Client之间是否可以建立独立的Session,如果可以Server将发送重定向报文给发起数据通信的源Client,重定向报文中包含了目的Client的信息,然后两个Client之间将建立Session会话。
Session会话中,Session两端会协商确定一个主动端和一个被动端,Client和Server之间的Session会话,Client端为Session的主动端,Server为Session的被动端;Client之间的Session会话,发起会话建立请求的Client为主动端,另一个为Session的被动端。
DVPN在各个接入设备之间运行DVPN私有协议, Server设备记录着所有已经注册成功的Client的信息,Client设备记录所有已经建立数据通道的Session信息。表项内容包括:目标设备的私网地址(Tunnel接口地址),目标设备的公网地址(WAN接口的公网IP地址),目标设备的UDP端口号(采用UDP协议时),还有会话通路状态标识等。下面对Server与Client之间的交互过程作以简单说明:
当Client端配置好接口属性,指定了Server地址,并且接口状态UP后,将向Server端发起注册协商,注册协商过程要完成算法协商、密钥协商、身份验证(可选)、信息注册、策略的发布等。
注册协商过程,Client设备和Server设备之间会创建一个Map,所有的注册协商通过Map完成。在整个Client生命周期中,Client和Server各自存在一个对应的Map。只有Client退出DVPN域,Map才会被删除。如果Client端删除注册使用的Map,Client会释放所有的资源(包括所有的Session通道),回到初始化状态。
具体的注册过程可以参见下面的流程图,在注册过程中如果出现错误,注册过程会停止,并且进入到初始状态。

图4-1 DVPN注册流程
(1) Client向Server发送算法协商请求消息;
(2) Server向Client发送算法协商回应报文;
(3) Client向Server发送密钥协商的请求消息和对Server的认证请求消息;
(4) Server向Client发送密钥协商的回应消息和对Client的认证消息,以及回应Client的认证请求消息;
(5) Client向Server发送自己的身份认证消息;
(6) Server向Client发送身份认证的结果信息;
(7) Client向Server发送注册请求信息,主要包含Client的所有信息;
(8) Server回应Client的注册请求信息,主要包含所有的数据加密策略,密钥信息,以及VPN ID信息等。
& 说明:
Server设备允许注册的最大节点数量为5000,一个DVPN域允许注册的最大Client数为1024。
Client注册成功后,会立即和Server建立会话Session,通过会话完成实际数据的DVPN转发。若Server端接收到的目的地址并非发往本地私网地址的数据报文,而是发往VPN网络中的另一个节点的报文,则Server转发该数据报文,同时向该数据报文的源节点发送下一跳重定向通告(Redirect),通知源Client所要到达目的地址的下一跳的相关信息。此时收到重定向报文的Client立即向对端Client发送会话建立请求,经过会话协商,在两个Client之间建立独立的Session会话通道(同时协商该Session的IPSec SA)。这两个Client之间的数据可以直接通过该Session会话通道进行数据转发,而不需要通过Server进行转发了。
当删除Session时,会判断该Session是否为注册Map创建的Session,如果没有对应的Map则直接删除Session,否则需要删除Session对应的Map。
在会话建立完成后,即进入数据传输阶段。Client和Server之间以及Client和Client之间都是通过Session进行数据传输的。数据传输采用IPSec进行加密保护,使用的加密算法为DES,使用的验证算法为MD5。
在数据传输阶段,缺省情况下系统对所有的数据都采用了上述的IPSec加密方式,用户不需要进行配置。
DVPN采用Client/Server模式,对于同一个DVPN域的N个接入设备中,必须设置一个为Server工作方式(使用固定的公网IP地址),其他设置为Client方式,并在每一个Client端手工配置Server的信息。当每个Client到Server注册成功之后,Client和Server之间就自动地建立了Session隧道(会话)。在网络运行中,Server可以根据需要向Client发送Redirect(重定向)报文,Client在接收到重定向报文后,从中得到其他Client的信息,在Client之间建立Session隧道,实现DVPN域中的全连接。
建立隧道的方式采用UDP DVPN封装格式,对DVPN控制报文、需要转发的数据报文,使用UDP进行封装。所以UDP DVPN可以自由地穿过NAT网关建立DVPN隧道,满足Client为私有IP地址时的需求。

图4-2 动态VPN基本网络结构
在现有的VPN组网方案中,三层VPN(Virtual Private Network)一般采用GRE或MPLS/BGP VPN两种方式。两种VPN虽然存在各自的优点,但是在实际的应用中都存在以下弊端:
l 组网及配置复杂。三层VPN技术都采用的是点到点的隧道方案,当接入点数量为N,且需要建立一个全联通的VPN网络时,整个网络需要手工配置N×(N-1) / 2个点到点的VPN隧道连接。
l 可维护性及可扩展性差。对于一个已经组建好的VPN网络,若需要增加节点或修改某个节点的配置,那么其他所有节点都必须针对这个节点修改本地配置,维护成本较高。
l GRE 还存在无法穿透NAT网关的缺陷。GRE方式建立VPN隧道,如果出口有NAPT网关,那么就必须要一个公网地址直接对应一个内部地址来解决,需要大量的公网IP地址,这导致了GRE不能够应用于NAT网关内部。IPSec构建的VPN在原来的版本也是没有办法穿越NAT网关,目前通过将IPSec报文封装在UDP报文中进行发送,实现了NAT网关的穿越。
l GRE无法适用于动态IP的情况。GRE方式建立VPN隧道依赖于固定的IP地址,根本无法为拨号用户建立VPN。
l L2TP和GRE没有能够提供对传输的数据的加密保护,IPSec对通过IPSec VPN进行转发的数据提供了最安全的保护。
l IPSec在动态路由的支持存在一定的缺陷,IPSec的VPN隧道是基于数据流的,而不像GRE和L2TP基于接口建立VPN。在实现两个私有网络互联以后,两个私有网络之间没有办法实现路由的学习,这样给网络的动态规划带来了一定的问题。
DVPN不但继承了传统VPN的各种优点,更大程度上解决了传统VPN目前还没有解决的问题。配置简单、网络规划简单、功能强大,比传统的VPN更加符合目前以及未来的网络应用。其特点如下:
l 配置简单。一个DVPN接入设备可以通过一个Tunnel逻辑接口和多个DVPN接入设备建立会话通道,而不用为每一个通道配置一个逻辑的接口作为隧道的端点,大大的简化了配置的复杂度,提高了网络的可维护性和易扩充性。如果需要在已有的DVPN域中加入一个新的私有网络,只需要在DVPN的Client接入设备上配置需要加入的DVPN域的Server信息,新的DVPN Client就可以成功的添加到DVPN域中。
l 自由穿越NAT网关技术。采用UDP方式的 DVPN。由于使用了UDP报文进行封装,可以自由穿越NAT网关。解决内网DVPN接入设备和公网DVPN接入设备之间的VPN连接,使NAT网关内部的私有网络和NAT网关外部的私有网络共同构建一个虚拟私有网络。
l 支持依赖动态IP地址构建VPN。当在一个DVPN域内部构建隧道时,只需要指定相应的Server的IP地址,并不关心自己当前使用的IP地址是多少,更加适应如普通拨号、xDSL拨号等使用动态IP地址的组网应用。
l 支持自动建立隧道技术。DVPN中的Server维护着一个DVPN域中所有接入设备的信息,DVPN域中的Client可以通过Server的重定向功能自动获得需要进行通信的其它Client的信息,并最终在两个Client之间自动建立会话隧道(Session)。作为Client的DVPN接入设备只需配置自己的相关信息和Server的信息,不需要知道其他Client的信息,极大地减少了网络的维护管理工作。
l 注册过程加密技术。在Client向Server进行注册的过程中,需要先完成算法套件以及各种密钥地协商。使用协商出来的算法对注册过程中的关键信息(例如用户名、密码等)进行加密保护,还可以对注册的报文进行合法性检测,保证关键注册信息的安全性。
l 身份认证技术。在Client向Server进行注册的过程中,Client可以根据配置需要对Server的身份使用pre-shared-key进行验证,保证Client接入一个合法的Server;同时Server可以根据需要使用AAA对需要接入到DVPN域的Client进行身份验证,保证只有通过身份验证的Client才可以接入到DVPN域。
l 策略的统一管理技术。Client在Server端注册成功后,Server会将DVPN域中的策略发布给该Client。策略主要包括会话协商使用的算法套件、会话的keepalive时间、会话的空闲超时时间、IPSec使用的加密验证算法、IPSec SA的重协商时间等。在整个DVPN域中,所有的Session会使用相同的策略。
l 会话协商过程中的加密技术。在Session协商过程中,所有的会话的控制报文都会使用Server发布的算法套件进行IPSec加密保护。即在建立Session的会话协商过程中,根据Server发布数据的加密验证算法,为Session的数据通信协商IPSec SA。协商过程使用DH(Diffie-Hellman)进行SA的密钥协商。对于需要通过该Session进行转发的数据,如果需要加密处理,则通过IPSec使用Session协商出来的IPSec SA对报文进行加密处理后,通过DVPN进行转发,实现了转发数据报文的安全性。Session的IPSec SA支持重协商功能,可以根据需要指定进行IPSec SA重协商的时间,进一步保证数据的安全性。
l 支持多个VPN域。DVPN允许用户在一台DVPN设备上支持多个VPN域。即一台路由器不仅可以属于VPN A,也可以属于VPN B;同一设备可以在VPN A中作为Client设备,同时还在VPN B中作为Server设备使用。在同一台DVPN设备上最多可以支持200个DVPN域,可以同时作为200个DVPN域的Server设备。这样大大提高了组网的灵活性,也可以更加充分的使用网络设备资源,减少了用户的投资。在实际的组网中为了保证各个DVPN域之间的隔离,如果在同一台DVPN设备上支持多个DVPN域,需要通过私网路由来实现不同DVPN域的隔离。
l 动态路由的支持。DVPN可以对需要通过Tunnel接口发送的路由报文,通过所有的Session会话进行广播,从而实现整个DVPN域内的路由自动学习。实际应用中,DVPN配合动态路由协议,可以简化对需要接入到DVPN域的各个私有网络的规划,简化整个网络的配置,提高网络的维护性和自动化。
RADIUS服务器配合DVPN服务器可以实现对DVPN用户的计费。
DVPN服务器完成对DVPN客户端认证授权后,DVPN服务器将记录DVPN客户端的用户信息。在DVPN客户端与DVPN服务器建立会话后,DVPN服务器将用户名、用户上线时间等信息封装成计费开始报文发送给已配置的RADIUS服务器,RADIUS服务器开始计费并返回计费开始响应报文给DVPN服务器。
当DVPN客户端下线后,DVPN服务器将向RADIUS服务器发送停止计费请求报文,RADIUS服务器收到DVPN服务器的停止计费请求报文后会回应停止计费确认报文。
RADIUS服务器开始计费后可能由于线路或设备的故障而导致计费结束报文无法到达RADIUS服务器,从而使用户计费信息不完整,所以在计费开始后DVPN服务器还将每隔一定的时间间隔向RADIUS服务器发送实时计费报文,RADIUS服务器将记录实时计费报文中DVPN客户端的信息并给DVPN服务器反馈计费成功报文。若DVPN服务器在发送实时计费报文后没有收到RADIUS服务器的响应,将每隔一定的时间间隔重发实时计费报文,当发送次数达到用户设置的最大次数时,若DVPN服务器配置了计费可选,则DVPN服务器不再发送实时计费报文并保持DVPN连接;若没有配置计费可选,则DVPN服务器将切断DVPN客户端的连接。
&