05-VPN操作
本章节下载 (869.12 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用户在任何时间、任何地点的移动接入,这将满足不断增长的移动业务需求。
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、Kompalla方式的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介入。缺点是:用户需要安装专用的软件。
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端进行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服务器认证该请求信息,如果认证通过则返回响应信息;
(15) 验证通过,用户访问企业内部资源。
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的配置。
在L2TP的配置中,LAC端和LNS端的配置有所不同,下面先介绍一下LAC端的配置。在各项配置任务中,必须先启动L2TP、创建L2TP组,然后再进行其它功能特性的配置。PPP配置相关命令的详细介绍请参看相关章节。
LAC侧要进行的配置包括:
l 启用L2TP(必选)
l 创建L2TP组(必选)
l 设置发起L2TP连接请求及LNS地址(必选)
l 设置本端名称(可选)
l 启用通道验证及设置密码(可选)
l 配置将AVP数据隐含(可选)
l 设置通道Hello报文发送时间间隔(可选)
l 设置用户名、密码及配置用户验证(必选)
l 强制断开L2TP连接(可选)
l 开启或关闭流控功能(可选)
l 配置L2TP会话超时时间(可选)
l 配置L2TP Tunnel连接保持功能(可选)
l 配置LAC作为客户端(可选)
只有启用L2TP后,路由器上的L2TP功能才能正常发挥作用;如果禁止L2TP,则即便配置了L2TP的参数,路由器也不会提供相关功能。
这些配置在LAC侧必须配置。
请在系统视图下进行下列配置。
表2-1 启用/禁止L2TP
操作 |
命令 |
启用L2TP |
l2tp enable |
禁止L2TP |
undo l2tp enable |
缺省情况下,L2TP功能是被禁止的。
为了进行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组。
路由器需要满足一定的条件才会向其它设备(如路由器或LNS服务器)发出建立L2TP连接的请求。通过配置对接入用户信息的判别条件,并指定相应的LNS端的IP地址,路由器可以鉴定用户是否为VPN用户,并决定是否向LNS发起连接。最多可以设置五个LNS,即允许存在备用LNS。正常运行时,路由器(LAC)按照LNS配置的先后顺序,依次向对端(LNS)进行L2TP连接请求,直到某个LNS接受连接请求,该LNS就成为L2TP隧道的对端。发起L2TP连接请求的触发条件共支持两种:完整的用户名(fullusername)和带特定域名的用户(domain)。
请在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连接的请求。
当发起隧道连接请求时,系统先根据完整的用户名查看是否存在根据此用户名指定的L2TP组;如果没有找到,再根据域名进行查找。
用户可在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 { name remote-name | id tunnel-id } |
强制断开一个会话连接 |
reset l2tp session session-id |
强制断开该用户的连接 |
reset l2tp user 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-negotiate | unnumbered interface interface-type interface-number } |
配置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组,然后再进行其它功能特性的配置。PPP和虚拟模板接口(Virtual-Template)的相关命令的详细介绍,请参看相关章节。
LNS主要配置包括:
l 启用L2TP(必选)
l 启用/禁止L2TP多域功能(可选)
l 创建L2TP组(必选)
l 创建虚接口模板(必选)
l 设置接收呼叫的虚拟模板接口、通道对端名称和域名(必选)
l 设置本端名称(可选)
l 配置隧道验证及设置密码(可选)
l 配置将AVP数据隐含(可选)
l 设置通道Hello报文发送时间间隔(可选)
l 强制本端CHAP验证(可选)
l 强制LCP重新协商(可选)
l 设置本端地址(必选)及分配的地址池(可选)
l 设置用户名、密码及配置用户验证(可选)
l 强制挂断通道(可选)
l 开启或关闭流控功能(可选)
l 配置L2TP会话超时时间(可选)
只有启用L2TP后,路由器上的L2TP功能才能正常发挥作用;如果禁止L2TP,则即便配置了L2TP的参数,路由器也不会提供相关功能。
这些配置在LNS侧必须配置。
请在系统视图下进行下列配置。
表2-19 启用/禁止L2TP
操作 |
命令 |
启用L2TP |
l2tp enable |
禁止L2TP |
undo l2tp enable |
缺省情况下,L2TP功能是被禁止的。
只有启用L2TP多域功能,路由器才能为多个企业做LNS,L2TP多域功能的实现丰富了VPN组网方式。在“2.5.3 L2TP多域组网应用”中有简单配置步骤描述。
在L2TP多域应用中,这些配置在LNS侧必须配置。
请在系统视图下进行下列配置。
表2-20 启用/禁止L2TP多域功能
操作 |
命令 |
启用L2TP多域功能 |
l2tpmoreexam enable |
禁止L2TP多域功能 |
undo l2tpmoreexam enable |
缺省情况下,L2TP多域功能是被禁止的。
为了进行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组。
虚拟模板接口主要用于配置路由器在运行过程中动态创建的虚接口的工作参数。
这些配置在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”命令是互斥的,配了一条命令之后另一条就自动失效。
l 当使用PPPoE Client触发LAC到LNS的隧道连接时,建议将LNS侧的虚拟模板接口的MTU值设置减小到1480字节。
用户可在LNS侧配置本端通道名称。
这些配置在LNS侧为可选配置。
请在L2TP组视图下进行下列配置。
操作 |
命令 |
设置本端名称 |
tunnel name name |
恢复本端名称为默认值 |
undo tunnel name |
缺省情况下,本端名称为路由器的主机名。
用户可根据实际需要决定是否在创建隧道连接之前启用隧道验证。隧道验证请求可由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-26 配置将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-27 设置通道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 |
如果既不配置LCP重协商,也不配置强制CHAP验证,则LNS对用户进行的是代理验证。在这种情况下,LAC将它从用户得到的所有验证信息及LAC端本身配置的验证方式发送给LNS,如果虚拟模板接口未配置验证方式,LNS侧会默认通过LAC侧对用户的验证结果。
在LNS使用代理验证时,如果虚拟模板接口配置的验证方式为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-29 强制/取消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地址;若LNS采用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(缺省地址池)中给对方分配地址。
在LNS侧,如果配置了强制CHAP认证,则需要在LNS侧配置本地注册用户名和口令。
LNS通过检查远程拨入用户名与口令是否与本地注册用户名/口令相符合来进行用户身份验证,以检查用户是否为合法VPN用户。验证通过后就可以进行VPN用户和LNS的通信,否则将通知L2TP清除这个L2TP连接。
这些配置在LNS侧为可选配置。具体配置方法请参考2.2.8 设置用户名、密码及配置用户验证。
当用户数为零、网络发生故障或当管理员主动要求时,都会产生断开连接的过程。LAC和LNS任何一端都可主动发起断开连接的请求,连接断开后,该通道上的所有控制连接与会话连接也将被清除;当有新用户拨入时,还可重新建立连接。
这些配置在LNS端为可选配置。
请在用户视图下进行下列配置。
操作 |
命令 |
强制断开一个隧道连接 |
reset l2tp tunnel { name remote-name | id tunnel-id } |
强制断开一个会话连接 |
reset l2tp session session-id |
强制断开该用户的连接 |
reset l2tp user user-name |
该配置任务可以开启或关闭L2TP简单的通道流控功能,达到流控目的。
这些配置在LNS侧为可选配置。
请在L2TP组视图下进行下列配置。
操作 |
命令 |
开启流控功能 |
tunnel flow-control |
关闭流控功能 |
undo tunnel flow-control |
缺省情况下,关闭通道流控功能。
通常情况下,当L2TP的一个会话在一段时间内没有数据收发时,系统就会自动挂断这个会话。
用户可以根据需要设置会话的超时时间,甚至可以设置永不超时(即不自动挂断)。
请在L2TP组视图下进行下列配置。
表2-33 配置L2TP会话超时时间
操作 |
命令 |
配置L2TP会话超时时间 |
session idle-time seconds |
配置L2TP会话不超时 |
undo session idle-time |
缺省情况下,L2TP会话不超时。
在完成上述配置后,在所有视图下执行display命令可以显示配置后L2TP的运行情况,通过查看显示信息验证配置的效果。
在用户视图下,执行debugging命令可对L2TP进行调试。
表2-34 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 timestamp |
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
# 对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] 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] allow l2tp virtual-template 1
# 启用通道验证并设置通道验证密码。
[H3C-l2tp1] tunnel authentication
[H3C-l2tp1] tunnel password simple H3C
多个企业共用一个LNS,不同的企业用户需要与自己的总部进行通讯,网络的地址采用的是私有地址,如10.8.0.0网络,一般情况下,用户无法通过Internet直接访问企业内部的服务器。通过建立VPN并支持多域,用户就可以访问自己企业内部网络的数据。
图2-8 L2TP支持多域组网图
01企业总部域名假定为263.net,PC1为01企业用户;
02企业总部域名假定为163.net,PC2为02企业用户。
(1) 用户侧的配置
建一拨号网络,号码为Router1的路由器的接入号码;接收由LNS服务器端分配的地址。
对于PC1而言,在弹出的拨号终端窗口中输入用户名[email protected],口令为11111(此用户名与口令已在LNS中注册)。
对于PC2而言,在弹出的拨号终端窗口中输入用户名[email protected],口令为22222(此用户名与口令已在LNS中注册)。
(2) 路由器Router1(LAC侧)的配置
(本例中LAC侧的GigabitEthernet 1/0和GigabitEthernet 2/0是用户接入接口,GigabitEthernet 3/0的IP地址为202.38.160.1,LNS侧与通道相连接的IP地址为202.38.160.2)。
# 设置用户名及口令。
<H3C> system-view
[H3C] local-user vpdn1
[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
# 在GigabitEthernet 1/0和GigabitEthernet 2/0接口上配置PPPoE server。
[H3C] interface gigabitethernet 1/0
[H3C-GigabitEthernet1/0] pppoe-server bind Virtual-Template 100
[H3C-GigabitEthernet1/0] interface gigabitethernet 2/0
[H3C-GigabitEthernet2/0] pppoe-server bind Virtual-Template 101
# 在GigabitEthernet 3/0接口上配置IP地址。
[H3C-GigabitEthernet2/0] interface gigabitethernet 3/0
[H3C-GigabitEthernet3/0] ip address 202.38.160.1 255.255.255.0
# 在虚模板上启动CHAP认证。
[H3C-GigabitEthernet3/0] interface Virtual-Template 100
[H3C-Virtual-Template100] ppp authentication-mode chap domain 263.net
[H3C-Virtual-Template100] interface Virtual-Template 101
[H3C-Virtual-Template101] ppp authentication-mode chap domain 163.net
[H3C-Virtual-Template101] quit
# 设置两个L2TP组并配置相关属性。
[H3C] l2tp enable
[H3C] l2tp-group 1
[H3C-l2tp1] tunnel name LAC
[H3C-l2tp1] start l2tp ip 202.38.160.2 domain 263.net
[H3C-l2tp1] l2tp-group 2
[H3C-l2tp2] tunnel name LAC
[H3C-l2tp2] start l2tp ip 202.38.160.2 domain 163.net
# 启用通道验证并设置通道验证密码。
[H3C-l2tp2] tunnel authentication
[H3C-l2tp2] tunnel password simple 12345
[H3C-l2tp2] quit
[H3C] l2tp-group 1
[H3C-l2tp1] tunnel authentication
[H3C-l2tp1] tunnel password simple 12345
(3) 路由器Router2(LNS侧)的配置。
<H3C> system-view
[H3C] l2tp enable
[H3C] l2tpmoreexam enable
# 创建两个用户名及口令
[H3C] local-user vpdn1
[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 163.net
[H3C-isp-163.net] scheme local
[H3C-isp-163.net] ip pool 1 202.38.161.10 202.38.161.100
[H3C-isp-163.net] quit
[H3C] domain 263.net
[H3C-isp-263.net] scheme local
[H3C-isp-263.net] ip pool 1 202.38.162.10 202.38.162.100
[H3C-isp-263.net] quit
# 创建两个相应的virtual template。
[H3C]interface virtual-template 1
[H3C-Virtual-Template1] ip address 202.38.161.1 255.255.255.0
[H3C-Virtual-Template1] remote address pool 1
[H3C-Virtual-Template1] ppp authentication-mode chap domain 163.net
[H3C-Virtual-Template1] interface virtual-template 2
[H3C-Virtual-Template2] ip address 202.38.162.2 255.255.255.0
[H3C-Virtual-Template2] remote address pool 1
[H3C-Virtual-Template2] ppp authentication-mode chap 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] quit
[H3C] 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端需要采用RADIUS验证,请修改AAA配置即可。
使用LAC路由器同时作为L2TP客户端,与LNS建立常连接。并将所有私有网络的数据转发给LNS。
图2-9 LAC作为客户端应用组网图
& 说明:
本例假设公网地址和路由都已正确配置。此处只说明了VPN相关配置。
(1) LAC路由器的典型配置
# 设置用户名及口令。
[H3C] local-user vpdnuser
[H3C-luser-vpdnuser] password simple Hello
[H3C-luser-vpdnuser] service-type ppp
[H3C-luser-vpdnuser] quit
# 启用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 authentication-mode pap
[H3C-virtual-template1] ppp pap local-user vpdnuser password simple Hello
[H3C-virtual-template1] quit
# 配置私网路由。
[H3C] ip route-static 10.1.0.0 16 virtual-template 1
(2) LNS路由器的典型配置
# 设置用户名及口令。
[H3C] local-user vpdnuser
[H3C-luser-vpdnuser] password simple Hello
[H3C-luser-vpdnuser] service-type ppp
# 配置GigabitEthernet3/0接口。
[H3C] interface gigabitethernet3/0
[H3C-GigabitEthernet3/0] ip address 3.3.3.2 255.255.0.0
[H3C-GigabitEthernet3/0] quit
# 配置域及地址池。
[H3C] domain system
[H3C-isp-system] scheme local
[H3C-isp-system] ip pool 1 192.168.0.2 192.168.0.10
[H3C-isp-system] quit
# 启用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] remote address pool 1
[H3C-virtual-template1] ppp authentication-mode pap
[H3C-virtual-template1] quit
# 配置LNS侧接收的通道对端名称。
[H3C] l2tp-group 1
[H3C-l2tp1] allow l2tp virtual-template 1 remote LAC
# 启用通道验证并设置通道验证密码。
[H3C-l2tp1] tunnel authentication
[H3C-l2tp1] tunnel password simple H3C
[H3C-l2tp1] quit
# 配置私网路由。
[H3C] ip route-static 10.2.0.0 16 virtual-template1
(3) 启动L2TP连接
# 在RouterA的虚模板接口视图下执行启动L2TP连接命令
[H3C] interface virtual-template 1
[H3C-virtual-template1] l2tp-auto-client enable
& 说明:
LAC和LNS连接的私网主机应分别以LAC和LNS为网关。
路由器支持同时作为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协议的本地网。通过在RouterA和RouterB之间采用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的源端(必选)
l 指定Tunnel的目的端(必选)
l 设置Tunnel接口的网络地址(必选)
l 设置Tunnel接口的识别关键字(可选)
l 配置通过Tunnel的路由(可选)
创建虚拟Tunnel接口,从而在该接口上进行GRE其它参数的配置。这些配置在Tunnel两端必须配置。
请在系统视图下进行下列配置。
操作 |
命令 |
创建虚拟Tunnel接口 |
interface tunnel number |
删除虚拟Tunnel接口 |
undo interface tunnel number |
缺省情况下,不创建虚拟Tunnel接口。
number为设定的接口号,范围0~1023,但实际可建的Tunnel数目将受到接口总数及内存状况的限制。
设置Tunnel接口的封装协议和传输协议。这些配置在Tunnel两端为可选配置,如果配置则必须确保Tunnel两端的封装模式相同。
请在Tunnel视图下进行下列配置。
表3-2 设置Tunnel接口报文的封装模式
操作 |
命令 |
设置Tunnel接口报文的封装模式 |
tunnel-protocol gre |
删除Tunnel接口报文的封装模式 |
undo tunnel-protocol |
缺省情况下,Tunnel接口报文的封装模式为GRE。
在创建Tunnel接口后,还要指明Tunnel通道的源端地址,即发出GRE报文的实际接口地址。Tunnel的源端地址与目的端地址唯一标识了一个通道。这些配置在Tunnel两端必须配置,且两端地址互为源地址和目的地址。
请在Tunnel接口视图下进行下列配置。
表3-3 设置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-4 设置Tunnel接口的目的端地址
操作 |
命令 |
设置Tunnel接口的目的端地址 |
destination ip-addr |
删除Tunnel接口的目的端地址 |
undo destination |
& 说明:
使用命令destination设置的是实际的物理接口的IP地址,为支持动态路由协议,还需要设置Tunnel接口的网络地址。
Tunnel接口的网络地址可以不是申请得到的网络地址。用户设置通道两端的网络地址应该位于同一网段上。这些配置在Tunnel两端都必须配置,并且确保地址在同一网段。
请在Tunnel接口视图下进行下列设置。
表3-5 设置Tunnel接口的网络地址
操作 |
命令 |
设置Tunnel接口的IP地址 |
ip address ip-addr mask |
删除Tunnel接口的IP地址 |
undo ip address |
缺省情况下,未设置Tunnel接口的网络地址。
在RFC 1701中规定:若GRE报文头中的Checksum位置位,则校验和有效。发送方将根据GRE头及payload信息计算校验和,并将包含校验和的报文发送给对端。接收方对接收到的报文计算校验和,并与报文中的校验和比较,如果一致则对报文进一步处理,否则丢弃。
隧道两端可以根据实际应用需要,配置校验和或禁止校验和。如果本端配置了校验和而对端没有配置,则本端将不会对接收到的报文进行校验和检查,但对发送的报文计算校验和;相反,如果本端没有配置校验和而对端已配置,则本端将对从对端发来的报文进行校验和检查,但对发送的报文不计算校验和。
请在Tunnel接口视图下进行下列配置。
表3-6 设置Tunnel两端进行端到端校验
操作 |
命令 |
设置Tunnel两端进行端到端校验 |
gre checksum |
禁止Tunnel两端进行端到端校验 |
undo gre checksum |
缺省情况下,禁止Tunnel两端进行端到端校验。
在RFC 1701中规定:若GRE报文头中的KEY字段置位,则收发双方将进行通道识别关键字的验证,只有Tunnel两端设置的识别关键字完全一致时才能通过验证,否则将报文丢弃。
请在Tunnel接口视图下进行配置。
表3-7 设置Tunnel接口的识别关键字
操作 |
命令 |
设置Tunnel接口的识别关键字 |
gre key key-number |
删除Tunnel接口的识别关键字 |
undo gre key |
key-number可取值0~4294967295之间的整数。
缺省情况下,Tunnel不使用识别关键字。
在隧道的源端和目的端上都必须存在经过Tunnel转发的路由,这样需要进行GRE封装的报文才能正确转发。可以配置静态路由,也可以配置动态路由。
可以手工配置一条到达目的地址(不是Tunnel的目的端地址,而是未进行GRE封装的报文的目的地址)的路由,下一跳是对端Tunnel接口的地址。在Tunnel的两端都要进行此项配置。配置的详细情况请参见本手册的“路由协议“部分,配置命令的详细解释请参见相应的命令手册。
如果在路由器上运行了动态路由协议,只需在Tunnel接口上和与私网相连的路由器接口上使能该动态路由协议即可,在Tunnel的两端都必须进行此项配置。配置的详细情况请参见本手册的“路由协议”部分,配置命令的详细解释请参见相应的命令手册。
请在Tunnel接口视图下进行配置。
操作 |
命令 |
使能GRE的keepalive功能 |
keepalive [ seconds [ times ] ] |
关闭GRE的keepalive功能 |
undo keepalive |
缺省情况下,不启用GRE的keepalive功能。seconds缺省为10秒。times缺省为3次。
配置了GRE的keepalive的功能后,路由器会从Tunnel口定期发送GRE的keepalive报文。如果超时时间内对端没有回应,则本端路由器重新发送keepalive报文。如果超过最大传送次数后仍然没有接受到对端的回应,则本端Tunnel口的协议状态将变为down。
在完成上述配置后,在所有视图下执行display命令可以显示配置后GRE的运行情况,通过查看显示信息验证配置的效果。
在用户视图下,执行debugging命令可对GRE进行调试。
表3-9 GRE的显示和调试
操作 |
命令 |
显示Tunnel接口的工作状态 |
display interface tunnel number |
打开Tunnel调试信息 |
debugging tunnel |
运行IP协议的两个子网Group1和Group2,通过在Router1和Router2之间使用三层隧道协议GRE实现互联。
图3-8 GRE应用组网图
(1) 配置路由器Router1
# 配置接口GigabitEthernet 1/0。
[H3C] interface gigabitethernet 1/0
[H3C-GigabitEthernet1/0] ip address 10.1.1.1 255.255.255.0
[H3C-GigabitEthernet1/0] quit
# 配置接口GigabitEthernet 2/0(隧道的实际物理接口)。
[H3C] interface gigabitethernet 2/0
[H3C-GigabitEthernet2/0] ip address 192.13.2.1 255.255.255.0
[H3C-GigabitEthernet2/0] quit
# 创建Tunnel1接口。
[H3C] interface tunnel 1
# 配置Tunnel1接口的IP地址。
[H3C-Tunnel1] ip address 10.1.2.1 255.255.255.0
# 配置Tunnel封装模式。
[H3C-Tunnel1] tunnel-protocol gre
# 配置Tunnel1接口的源地址(GigabitEthernet2/0的IP地址)。
[H3C-Tunnel1] source 192.13.2.1
# 配置Tunnel1接口的目的地址(Router2的GigabitEthernet3/0的IP地址) 。
[H3C-Tunnel1] destination 131.108.5.2
[H3C-Tunnel1] quit
# 配置从Router1经过Tunnel1接口到Group2的静态路由。
[H3C] ip route-static 10.1.3.0 255.255.255.0 tunnel 1
(2) 配置路由器Router2
# 配置接口GigabitEthernet1/0。
[H3C] interface gigabitethernet 1/0
[H3C-GigabitEthernet1/0] ip address 10.1.3.1 255.255.255.0
[H3C-GigabitEthernet1/0] quit
# 配置接口GigabitEthernet3/0(隧道的实际物理接口)。
[H3C] interface gigabitethernet 3/0
[H3C-GigabitEthernet3/0] ip address 131.108.5.2 255.255.255.0
[H3C-GigabitEthernet3/0] quit
# 创建Tunnel2接口。
[H3C] interface tunnel 2
# 配置Tunnel2接口的IP地址。
[H3C-Tunnel2] ip address 10.1.2.2 255.255.255.0
# 配置Tunnel封装模式。
[H3C-Tunnel2] tunnel-protocol gre
# 配置Tunnel2接口的源地址(GigabitEthernet3/0的IP地址)。
[H3C-Tunnel2] source 131.108.5.2
# 配置Tunnel2接口的目的地址(Router1的GigabitEthernet2/0的IP地址)。
[H3C-Tunnel2] destination 192.13.2.1
[H3C-Tunnel2] quit
# 配置从Router2经过Tunnel2接口到Group1的静态路由。
[H3C] ip route-static 10.1.1.0 255.255.255.0 tunnel 2
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
IPSec(IP Security)协议族是IETF制定的一系列协议,它为IP数据报提供了高质量的、可互操作的、基于密码学的安全性。特定的通信方之间在IP层通过加密与数据源验证等方式,来保证数据报在网络上传输时的私有性、完整性、真实性和防重放。
& 说明:
私有性(Confidentiality)指对用户数据进行加密保护,用密文的形式传送。
完整性(Data integrity)指对接收的数据进行验证,以判定报文是否被篡改。
真实性(Data origin authentication)指验证数据源,以保证数据来自真实的发送者。
防重放(Anti-replay)指防止恶意用户通过重复发送捕获到的数据包所进行的攻击,即接收方会拒绝旧的或重复的数据包。
IPSec通过AH(Authentication Header,认证头)和ESP(Encapsulating Security Payload,封装安全载荷)这两个安全协议来实现上述目标。并且还可以通过IKE(Internet Key Exchange,Internet密钥交换协议)为IPSec提供自动协商交换密钥、建立和维护安全联盟的服务,以简化IPSec的使用和管理。
l AH(Authentication Header)是报文头验证协议,主要提供的功能有数据源验证、数据完整性校验和防报文重放功能;然而,AH并不加密所保护的数据报。
l ESP(Encapsulating Security Payload)是封装安全载荷协议,它除提供AH协议的所有功能之外(数据完整性校验不包括IP头),还可提供对IP报文的加密功能。
& 说明:
AH和ESP可以单独使用,也可以同时使用。对于AH和ESP,都有两种操作模式:传输模式和隧道模式。工作模式将在后文介绍。
l IKE用于协商AH和ESP所使用的密码算法,并将算法所需的必备密钥放到恰当位置。
& 说明:
IKE协商并不是必须的,IPSec所使用的策略和算法等也可以手工协商。关于两种协商方式的比较,将在后文介绍。
IPSec在两个端点之间提供安全通信,端点被称为IPSec对等体。
IPSec能够允许系统、网络的用户或管理员控制对等体间安全服务的粒度。例如,某个组织的安全策略可能规定来自特定子网的数据流应同时使用AH和ESP进行保护,并使用3DES(Triple Data Encryption Standard,三重数据加密标准)进行加密;另一方面,策略可能规定来自另一个站点的数据流只使用ESP保护,并仅使用DES加密。通过SA(Security Association,安全联盟),IPSec能够对不同的数据流提供不同级别的安全保护。
安全联盟是IPSec的基础,也是IPSec的本质。SA是通信对等体间对某些要素的约定,例如,使用哪种协议(AH、ESP还是两者结合使用)、协议的操作模式(传输模式和隧道模式)、加密算法(DES和3DES)、特定流中保护数据的共享密钥以及SA的生存周期等。
安全联盟是单向的,在两个对等体之间的双向通信,最少需要两个安全联盟来分别对两个方向的数据流进行安全保护。同时,如果希望同时使用AH和ESP来保护对等体间的数据流,则分别需要两个SA,一个用于AH,另一个用于ESP。
安全联盟由一个三元组来唯一标识,这个三元组包括SPI(Security Parameter Index,安全参数索引)、目的IP地址、安全协议号(AH或ESP)。SPI是为唯一标识SA而生成的一个32比特的数值,它在AH和ESP头中传输。
安全联盟具有生存周期。生存周期的计算包括两种方式:
l 以时间为限制,每隔指定长度的时间就进行更新;
l 以流量为限制,每传输指定的数据量(字节)就进行更新。
IPSec协议有两种操作模式:传输模式和隧道模式。SA中指定了协议的操作模式。
在传输模式下,AH或ESP被插入到IP头之后但在所有传输层协议之前,或所有其他IPSec协议之前。在隧道模式下,AH或ESP插在原始IP头之前,另外生成一个新头放到AH或ESP之前。不同安全协议在传输模式和隧道模式下的数据封装形式(传输协议以TCP为例)如下图所示:
从安全性来讲,隧道模式优于传输模式。它可以完全地对原始IP数据报进行验证和加密;此外,可以使用IPSec对等体的IP地址来隐藏客户机的IP地址。从性能来讲,隧道模式比传输模式占用更多带宽,因为它有一个额外的IP头。因此,到底使用哪种模式需要在安全性和性能间进行权衡。
(1) 验证算法
AH和ESP都能够对IP报文的完整性进行验证,以判别报文在传输过程中是否被篡改。验证算法的实现主要是通过杂凑函数。杂凑函数是一种能够接受任意长的消息输入,并产生固定长度输出的算法,该输出称为消息摘要。IPSec对等体计算摘要,如果两个摘要是相同的,则表示报文是完整未经篡改的。一般来说IPSec使用两种验证算法:
l MD5:MD5通过输入任意长度的消息,产生128bit的消息摘要。
l SHA-1:SHA-1通过输入长度小于2的64次方比特的消息,产生160bit的消息摘要。
SHA-1的摘要长于MD5,因而是更安全的。
(2) 加密算法
ESP能够对IP报文内容进行加密保护,防止报文内容在传输过程中被窥探。加密算法实现主要通过对称密钥系统,它使用相同的密钥对数据进行加密和解密。Comware中的IPSec实现了三种加密算法:
l DES(Data Encryption Standard):使用56bit的密钥对每个64bit的明文块进行加密。
l 3DES(Triple DES):使用三个56bit的DES密钥(共168bit密钥)对明文进行加密。
l AES(Advanced Encryption Standard):Comware实现了128bit、192bit和256bit密钥长度的AES算法。
有两种协商方式建立安全联盟,一种是手工方式(manual),一种是IKE自动协商(isakmp)方式。前者配置比较复杂,创建安全联盟所需的全部信息都必须手工配置,而且IPSec的一些高级特性(例如定时更新密钥)不被支持,但优点是可以不依赖IKE而单独实现IPSec功能。而后者则相对比较简单,只需要配置好IKE协商安全策略的信息,由IKE自动协商来创建和维护安全联盟。
当与之进行通信的对等体设备数量较少时,或是在小型静态环境中,手工配置安全联盟是可行的。对于中、大型的动态网络环境中,推荐使用IKE协商建立安全联盟。
IPSec DPD(IPSec Dead Peer Detection on-demand)为按需型IPSec/IKE安全隧道对端状态探测功能。启动DPD功能后,当接收端长时间收不到对端的报文时,能够触发DPD查询,主动向对端发送请求报文,对IKE Peer是否存在进行检测。与IPSec中原有的周期性Keepalive功能相比,DPD具有产生数据流量小、检测及时、隧道恢复快的优点。
在路由器与VRRP备份组的虚地址之间建立ISAKMP SA的应用方案中,DPD功能保证了VRRP备份组中主备切换时安全隧道能够迅速自动恢复。解决了VRRP备份组主备切换使安全隧道通信中断的问题,扩展了IPSec的应用范围,提高了IPSec协议的健壮性。
该功能符合RFC3706、RFC2408。
(1) 定时器
IPSec DPD在发送和接收DPD报文中使用了两个定时器:intervaltime和timeout。
l intervaltime:触发DPD查询的间隔时间,该时间指明隔多久没有收到对端IPSec报文时触发DPD查询。
l timeout:等待DPD应答报文超时时间。
(2) 运行机制
l 发送端
当启动了DPD功能以后,如在intervaltime定时器指定的时间间隔内没有收到对端的IPSec报文,且本端欲向对端发送IPSec报文时,DPD向对端发送DPD请求,并等待应答报文。如果超过timeout定时器设定的超时时间仍然未收到正确的应答报文,DPD记录失败事件1次。当失败事件达到3次时,删除ISAKMP SA 和相应的IPSec SA。
对于路由器与VRRP备份组虚地址之间建立的IPSec SA,连续3次失败后,安全隧道同样会被删除,但是当有符合安全策略的报文重新触发安全联盟协商时,会重新建立起安全隧道。切换时间的长短与timeout定时器的设置有关,定时器设定的超时时间越短,通信中断时间越短(注意:超时时间过短会增加网络开销,一般情况下采用缺省值即可)。
l 接收端
收到请求报文后,发送响应报文。
Comware实现了上述所介绍的IPSec的全部内容。
其实现方式是基于下列思路:通过IPSec,对等体之间(此处是指Comware所在路由器及其对端)能够对不同的数据流实施不同的安全保护(验证、加密或两者同时使用)。其中数据流的区分通过配置ACL来进行;安全保护所用到的安全协议、验证算法和加密算法、操作模式等通过配置安全提议来进行;数据流和安全提议的关联(即定义对何种数据流实施何种保护)、SA的协商方式、对等体IP地址的设置(即保护路径的起/终点)、所需要的密钥和SA的生存周期等通过配置安全策略来进行;最后在路由器的接口上实施安全策略即完成了IPSec的配置。
具体介绍如下:
(1) 定义被保护的数据流
数据流是一组流量(traffic)的集合,由源地址/掩码、目的地址/掩码、IP报文承载的协议号、源端口号、目的端口号等来规定。一个数据流用一个ACL来定义,所有匹配一个访问控制列表规则的流量,在逻辑上作为一个数据流。一个数据流可以小到是两台主机之间单一的TCP连接;也可以大到是两个子网之间所有的流量。IPSec能够对不同的数据流施加不同的安全保护,因此IPSec配置的第一步就是定义数据流。
(2) 定义安全提议
安全提议规定了对要保护的数据流所采用的安全协议、验证或加密算法、操作模式(即报文的封装方式)等。
Comware支持的AH和ESP安全协议,两者既可单独使用,也可结合使用。其中,AH支持MD5和SHA-1验证算法;ESP协议支持MD5、SHA-1验证算法和DES、3DES、AES加密算法。Comware支持的操作模式包括传输模式和隧道模式。
对同一数据流,对等体两端必须设置相同的协议、算法和操作模式。另外,对于两个路由器(例如Comware路由器间)实施IPSec,建议采用隧道模式,以隐藏实际通信的源和目的IP地址。
因此,请先根据需要配置好一个安全提议,以便下一步将数据流和安全提议相关联。
(3) 定义安全策略或安全策略组
安全策略规定了对什么样的数据流采用什么样的安全提议。一条安全策略由“名字”和“顺序号”共同唯一确定。安全策略分为手工安全策略和IKE协商安全策略,前者需要用户手工配置密钥、SPI等参数,在隧道模式下还需要手工配置安全隧道两个端点的IP地址;后者则由IKE自动协商生成这些参数。
安全策略组是所有具有相同名称、不同顺序号的安全策略的集合。在同一个安全策略组中,顺序号越小的安全策略,优先级越高。
(4) 接口实施安全策略
在接口上应用安全策略组,安全策略组中的所有安全策略同时应用在这个接口上,从而实现对流经这个接口的不同的数据流进行不同的安全保护。
(1) 配置访问控制列表
(2) 定义安全提议
l 创建IPSec安全提议
l 选择安全协议
l 选择安全算法
l 选择报文封装形式
(3) 创建安全策略
包括手工创建安全策略和用IKE创建安全策略。
手工创建安全策略:
l 手工创建安全策略
l 在安全策略中引用安全提议
l 在安全策略中引用访问控制列表
l 配置隧道的起点和终点
l 配置安全联盟的SPI
l 配置安全联盟使用的密钥
用IKE创建安全策略:
l 用IKE创建安全策略
l 在安全策略中引用安全提议
l 在安全策略中引用访问控制列表
l 在安全策略中引用IKE对等体
l 配置安全联盟生存周期(可选)
l 配置协商时使用的PFS特性
在安全策略中可以根据需要引用IPSec安全提议。
(4) 配置安全策略模板(可选)
(5) 在接口上应用安全策略
(6) 配置取消对next payload域的检查(可选)
IPSec使用扩展访问控制列表来判断哪些报文需要受到保护,哪些则不需要。用于IPSec的扩展访问控制列表的作用不同于在防火墙中所介绍的扩展访问控制列表。一般的扩展访问控制列表是用来决定一个接口上哪些数据可通过,哪些要被拒绝;而IPSec是根据扩展访问控制列表中的规则来确定哪些报文需要安全保护,哪些报文不需要安全保护,故用于IPSec的扩展访问控制列表可称为加密访问控制列表。加密访问控制列表匹配(permit)的报文将被保护,加密访问控制列表拒绝(deny)的报文将不被保护。加密访问控制列表既可用于加密入口数据流,也可用于加密出口数据流。
访问控制列表的具体配置请参见本手册的“安全”部分。
在本地和远端路由器上定义的加密访问控制列表应该是相对应的(即互为镜像),这样在某一端加密的数据才能在对端上被解密。否则,会造成一端不能解密另一端发来的数据。例如:
本端:
acl number 3101
rule 1 permit ip source 173.1.1.0 0.0.0.255 destination 173.2.2.0 0.0.0.255
对端:
acl number 3101
rule 1 permit ip source 173.2.2.0 0.0.0.255 destination 173.1.1.0 0.0.0.255
& 说明:
l IPSec对访问控制列表(ACL)中permit的数据流进行保护,因此建议用户精确地配置ACL,只对确实需要IPSec保护的数据流配置permit,避免盲目地使用关键字any。
l 建议用户将本端和对端的ACL配置成互为镜像。否则,会造成一端不能解密另一端发来的数据。
当用户使用display acl all命令来浏览路由器的访问控制列表,所有扩展IP访问控制列表都将显示在命令的输出中,即同时包括了用于通信过滤和用于加密的扩展IP访问控制列表,该命令的输出信息不区分这两种不同用途的扩展访问控制列表。
安全提议保存IPSec需要使用的特定安全性协议以及加密/验证算法,为IPSec协商安全联盟提供各种安全参数。为了能够成功的协商IPSec的安全联盟,两端必须使用相同的安全提议。
安全提议的配置包括:
l 创建安全提议
l 设置安全协议对IP报文的封装模式
l 选择安全协议
l 选择安全算法
安全提议是用于实施IPSec保护而采用的安全协议、算法、报文封装形式的一个组合。一条安全策略通过引用一个或多个安全提议来确定采用的安全协议、算法和报文封装形式。在安全策略引用一个安全提议之前,这个安全提议必须已经建立。
可对安全提议进行修改,但对已协商成功的安全联盟,新修改的安全提议并不起作用,即安全联盟仍然使用原来的安全提议(除非使用reset ipsec sa命令重置),只有新协商的安全联盟将使用新的安全提议。
请在系统视图下进行下列配置。
表4-1 配置安全提议
操作 |
命令 |
创建安全提议并进入安全提议视图(适用于Comware主体软件IPSec) |
ipsec proposal proposal-name |
删除安全提议(适用于Comware主体软件IPSec) |
undo ipsec proposal proposal-name |
缺省情况下,未配置安全提议。
在安全提议中需要指定报文封装模式,安全隧道的两端所选择的IP报文封装模式必须一致。
请在安全提议视图下进行下列配置。
操作 |
命令 |
设置安全协议对IP报文的封装形式 |
encapsulation-mode { transport | tunnel } |
恢复缺省报文封装形式 |
undo encapsulation-mode |
通常,在两个路由器之间,总是使用隧道模式。而在两台主机之间的通讯,或者是一台主机和一个路由器之间的通讯选择传输模式。
缺省情况下采用tunnel,即隧道模式。
安全提议中需要选择所采用的安全协议。目前可选的安全协议有AH和ESP,也可指定同时使用AH与ESP。安全隧道两端所选择的安全协议必须一致。
请在安全提议视图下进行下列配置。
操作 |
命令 |
设置安全提议采用的安全协议 |
transform { ah | ah-esp | esp } |
恢复缺省的安全协议 |
undo transform |
缺省情况下采用esp,即RFC 2406规定的ESP协议。
不同的安全协议可以采用不同的验证算法和加密算法。目前,AH支持MD5和SHA-1验证算法;ESP协议支持MD5、SHA-1验证算法和DES、3DES、AES加密算法。
请在安全提议视图下进行下列配置。
操作 |
命令 |
设置ESP协议采用的加密算法 |
esp encryption-algorithm { 3des | des | aes } |
设置ESP协议不对报文进行加密 |
undo esp encryption-algorithm |
设置ESP协议采用的验证算法 |
esp authentication-algorithm { md5 | sha1 } |
设置ESP协议不对报文进行验证 |
undo esp authentication-algorithm |
设置AH协议采用的验证算法 |
ah authentication-algorithm { md5 | sha1 } |
恢复AH协议缺省的验证算法 |
undo ah authentication-algorithm |
ESP协议允许对报文同时进行加密和验证,或只加密,或只验证。注意,undo esp authentication-algorithm命令不是恢复验证算法为缺省算法,而是设置验证算法为空,即不验证。当加密算法为空时,undo esp authentication-algorithm命令失效。AH协议没有加密的功能,只对报文进行验证。undo ah authentication-algorithm命令用来恢复AH协议缺省验证算法(md5)。在安全隧道的两端设置的安全策略所引用的安全提议必须设置成采用同样的验证算法和/或加密算法。
Comware主体软件中ESP协议支持的安全加密算法有三种:des、3des和aes;支持的安全认证算法有hmac-md5和hmac-sha1。
Comware主机软件中AH协议支持的认证算法有hmac-md5和hmac-sha1两种。
缺省情况下,ESP协议采用的加密算法是des,采用的验证算法是md5;AH协议采用的验证算法是md5。
& 说明:
必须首先通过transform命令选择了相应的安全协议后,该安全协议所需的安全算法才可配置。例如,如果使用transform命令选择了esp,那么只有ESP所需的安全算法才可配置,而AH所需的安全算法则不能配置。
安全策略规定了对什么样的数据流采用什么样的安全提议。安全策略分为手工安全策略和IKE协商安全策略,前者需要用户手工配置密钥、SPI等参数,在隧道模式下还需要手工配置安全隧道两个端点的IP地址;后者则由IKE自动协商生成这些参数。
& 说明:
本节将全面介绍安全策略的各项配置,包括手工协商方式所需的配置和IKE协商所需的配置。对于仅用于某种协商方式下的配置,会特别标明;没有特别标明的配置项,则表示手工方式和IKE协商方式下均需配置。
(1) 手工创建安全策略
一旦安全策略已经创建,就不能再修改它的协商方式。例如:创建了manual方式的安全策略,就不能修改成isakmp方式,而必须先删除这条安全策略然后再重新创建。
请在系统视图下进行下列配置。
操作 |
命令 |
用手工方式创建安全联盟的安全策略 |
ipsec policy policy-name seq-number manual |
修改安全联盟的安全策略 |
ipsec policy policy-name seq-number manual |
删除安全策略 |
undo ipsec policy policy-name [ seq-number ] |
具有相同名称、不同顺序号的安全策略共同构造一个安全策略组,在一个安全策略组中最大可以设置500条安全策略。并且,所有安全策略的总数也不能超过500。在一个安全策略组中,顺序号越小的安全策略,优先级越高。
缺省情况下,没有安全策略存在。
(2) 配置在安全策略中引用安全提议
安全策略通过引用安全提议来确定采用的安全协议、算法和报文封装形式。在引用一个安全提议之前,这个安全提议必须已经建立。
请在安全策略视图下进行下列配置。
表4-6 在安全策略中应用安全提议
操作 |
命令 |
设置安全策略所引用的安全提议 |
proposal proposal-name1 [ proposal-name2... proposal-name6 ] |
取消安全策略引用的安全提议 |
undo proposal [ proposal-name ] |
通过手工(manual)方式建立安全联盟,一条安全策略只能引用一个安全提议,并且如果已经设置了安全提议,必须先取消原先的安全提议才能设置新的安全提议。在安全隧道的两端设置的安全策略所引用的安全提议必须设置成采用同样的安全协议、算法和报文封装形式。
(3) 配置在安全策略中引用的访问控制列表
安全策略引用访问控制列表,IPSec根据该访问控制列表中的规则来确定哪些报文需要安全保护,哪些报文不需要安全保护:访问控制列表匹配(permit)的报文被保护,访问控制列表拒绝(deny)的报文不被保护。
请在安全策略视图下进行下列配置。
操作 |
命令 |
设置安全策略引用的访问控制列表 |
security acl acl-number |
取消安全策略引用的访问控制列表 |
undo security acl |
一条安全策略只能引用一条访问控制列表,如果设置安全策略引用了多于一个访问控制列表,最后配置的那条访问控制列表才有效。
(4) 配置隧道的起点与终点
通常人们把应用安全策略的通道称为“安全隧道”。安全隧道是建立在本端和对端网关之间,所以必须正确设置本端地址和对端地址才能成功地建立起一条安全隧道。
请在安全策略视图下进行下列配置。
操作 |
命令 |
设置安全策略的本端地址 |
tunnel local ip-address |
删除在安全策略中设定的本端地址 |
undo tunnel local |
设置安全策略的对端地址 |
tunnel remote ip-address |
删除安全策略中设置的对端地址 |
undo tunnel remote [ ip-address ] |
对于manual方式的安全策略,必须正确设置本端地址和对端地址才能成功地建立一条安全隧道,而isakmp方式的安全策略则不需要配置本端和对端地址,通过安全联盟自动协商可以获得。
(5) 配置安全联盟的SPI
此配置任务仅用于manual方式的安全策略。用下列命令手工配置安全联盟的SPI,实现手工创建安全联盟(对于isakmp方式的安全策略,不需要手工配置,IKE将自动协商安全联盟的SPI并创建安全联盟)。
请在安全策略视图下进行下列配置。
操作 |
命令 |
配置安全联盟的SPI |
sa spi { inbound | outbound } { ah | esp } spi-number |
删除安全联盟的SPI |
undo sa spi { inbound | outbound } { ah | esp } |
在为系统配置安全联盟时,必须分别设置inbound和outbound两个方向的安全联盟的参数。
在安全隧道的两端设置的安全联盟参数必须是完全匹配的。本端的入方向安全联盟的SPI必须和对端的出方向安全联盟的SPI一样;本端的出方向安全联盟的SPI必须和对端的入方向安全联盟的SPI一样。
此配置任务仅用于manual方式的安全策略,用如下命令手工输入安全联盟的密钥(对于采用isakmp协商方式的安全策略,无需手工配置密钥,IKE将自动协商安全联盟的密钥)。
请在安全策略视图下进行下列配置。
操作 |
命令 |
配置协议的验证密钥 (以16进制方式输入) |
sa authentication-hex { inbound | outbound } { ah | esp } hex-key |
配置协议的密钥 (以字符串方式输入) |
sa string-key { inbound | outbound } { ah | esp } string-key |
配置ESP协议的加密密钥 (以16进制方式输入) |
sa encryption-hex { inbound | outbound } esp hex-key |
删除设置的安全联盟的参数 |
undo sa string-key { inbound | outbound } { ah | esp } undo sa authentication-hex { inbound | outbound } { ah | esp } undo encryption-hex { inbound | outbound } esp |
在安全隧道的两端设置的安全联盟参数必须是完全匹配的。本端的入方向安全联盟的SPI及密钥必须和对端的出方向安全联盟的SPI及密钥一样;本端的出方向安全联盟的SPI及密钥必须和对端的入方向安全联盟的SPI及密钥一样。
如果分别以两种方式输入了密钥,则最后设定的密钥有效。在安全隧道的两端,应当以相同的方式输入密钥。如果一端以字符串方式输入密钥,另一端以16进制方式输入密钥,则不能正确地建立安全隧道。
IKE创建安全策略的配置包括:
l 用IKE创建安全策略
l 配置安全策略中引用的安全提议
l 配置安全策略引用的访问控制列表
l 配置安全策略引用的IKE对等体
l 配置安全联盟的生存时间(可选)
l 配置协商时使用的PFS特性(可选)
l 配置IPSec DPD(可选)
(1) 用IKE创建安全策略
请在系统视图下进行下列配置。
操作 |
命令 |
用IKE创建安全策略,进入安全策略视图 |
ipsec policy policy-name seq-number isakmp |
用IKE并采用策略模板动态创建安全策略 |
ipsec policy policy-name seq-number isakmp [ template template-name ] |
修改通过IKE协商建立的安全策略 |
ipsec policy policy-name seq-number isakmp |
删除安全策略 |
undo ipsec policy policy-name [ seq-number ] |
若采用策略模板动态创建安全策略,则必须预先定义策略模板,策略模板的定义请参见4.2.4 配置安全策略模板。
(2) 配置在安全策略中引用安全提议
安全策略通过引用安全提议来确定采用的安全协议、算法和报文封装形式。在引用一个安全提议之前,这个安全提议必须已经建立。
请在安全策略视图下进行下列配置。
操作 |
命令 |
设置安全策略所引用的安全提议 |
proposal proposal-name1 [ proposal-name2... proposal-name6 ] |
取消安全策略引用的安全提议 |
undo proposal [ proposal-name ] |
通过手工(manual)方式建立安全联盟,一条安全策略只能引用一个安全提议,并且如果已经设置了安全提议,必须先取消原先的安全提议才能设置新的安全提议。在安全隧道的两端设置的安全策略所引用的安全提议必须设置成采用同样的安全协议、算法和报文封装形式。
(3) 配置在安全策略中引用的访问控制列表
安全策略引用访问控制列表,IPSec根据该访问控制列表中的规则来确定哪些报文需要安全保护,哪些报文不需要安全保护:访问控制列表匹配(permit)的报文被保护,访问控制列表拒绝(deny)的报文不被保护。
请在安全策略视图下进行下列配置。
操作 |
命令 |
设置安全策略引用的访问控制列表 |
security acl acl-number |
取消安全策略引用的访问控制列表 |
undo security acl |
一条安全策略只能引用一条访问控制列表,如果设置安全策略引用了多于一个访问控制列表,最后配置的那条访问控制列表才有效。
通过IKE(isakmp)协商建立安全联盟,一条安全策略最多可以引用六个安全提议,IKE协商将在安全隧道的两端搜索能够完全匹配的安全提议。如果IKE在两端找不到完全匹配的安全提议,则安全联盟不能建立,需要被保护的报文将被丢弃。
(4) 配置在安全策略中引用IKE 对等体
对于IKE协商方式,无需像手工方式那样配置对等体、SPI和密钥等参数,IKE将自动协商它们,因而仅需要将安全策略和IKE Peer关联即可。在引用一个IKE对等体之前,该IKE对等体必须已经建立。
请在安全策略视图下进行下列配置。
操作 |
命令 |
在安全策略中引用IKE对等体。 |
ike-peer peer-name |
取消在安全策略中引用IKE对等体。 |
undo ike-peer [ peer-name ] |
& 说明:
本章仅介绍了IPSec对IKE Peer的引用,实际在IKE Peer视图下还需要进行一些IKE相关参数的设置,包括IKE的协商模式、ID类型、NAT穿越、共享密钥、对端地址和对端名称等。有关IKE Peer的配置,请参考下一章的内容。
(5) 配置安全联盟的生存周期(可选)
(a) 配置全局的安全联盟生存周期
所有在安全策略视图下没有单独配置生存周期的安全联盟,都采用全局生存周期。IKE为IPSec协商建立安全联盟时,对于IKE第1阶段,安全联盟的生存周期由发起方决定;对于IKE第2阶段,采用本地设置的和对端提议的生存周期中较小的一个。
有两种类型的生存周期:“基于时间”的生存周期和“基于流量”的生存周期。无论哪一种类型的生存周期先到期,安全联盟都会失效。安全联盟快要失效前,IKE将为IPSec协商建立新的安全联盟,这样在旧的安全联盟失效时新的安全联盟就已经准备好。
请在系统视图下进行下列配置。
操作 |
命令 |
设置全局的安全联盟(SA)生存周期 |
ipsec sa global-duration { traffic-based kilobytes | time-based seconds } |
恢复全局的安全联盟(SA)生存周期为缺省值 |
undo ipsec sa global-duration { traffic-based | time-based } |
改变全局生存周期,不会影响单独配置了自己的生存周期的安全策略,也不会对已经建立的安全联盟产生影响,但是在以后的IKE协商中会用于建立新的安全联盟。
生存周期只对通过isakmp方式建立的安全联盟有效,对通过manual方式建立的安全联盟没有生存周期的限制,即手工建立的安全联盟永远不会失效。
(b) 配置安全联盟的生存周期
为安全策略设置单独的安全联盟生存周期,如果没有单独设置生存周期,则采用设定的全局生存周期。
IKE为IPSec协商建立安全联盟时,对于IKE第1阶段,安全联盟的生存周期由发起方决定;对于IKE第2阶段,采用本地设置的和对端提议的生存周期中较小的一个。
请在安全策略视图下进行下列配置。
操作 |
命令 |
设置安全策略安全联盟的生存周期 |
sa duration { traffic-based kilobytes | time-based seconds } |
恢复使用设定的全局生存周期 |
undo sa duration { traffic-based | time-based } |
改变生存周期,不会影响已经建立的安全联盟,但是在以后的IKE协商中会用于建立新的安全联盟。
(6) 配置协商时使用的PFS特性(可选)
PFS(Perfect Forward Secrecy,完善的前向安全性)是一种安全特性,指一个密钥被破解,并不影响其他密钥的安全性,因为这些密钥间没有派生关系。此特性是通过在IKE阶段2的协商中增加密钥交换来实现的。
请在安全策略视图下进行下列配置。
操作 |
命令 |
设置协商时使用的PFS特性 |
pfs { dh-group1 | dh-group2 | dh-group5 | dh-group14 } |
设置在协商时不使用PFS特性 |
undo pfs |
IKE在使用此安全策略发起一个协商时,进行一个PFS交换。如果本端指定了PFS,对端在发起协商时必须是PFS交换。本端和对端指定的DH组必须一致,否则协商会失败。
group1、group2、group5、group14能够依次提供更高的安全性,但是需要更长的计算时间。
缺省情况下,不使用PFS特性。
(7) 配置IPSec DPD(可选)
l 创建DPD结构
请在系统视图下进行下面配置。
表4-18 创建DPD结构并进入DPD结构视图
操作 |
命令 |
创建DPD结构并进入DPD结构视图 |
ike dpd dpd-name |
删除一个DPD结构 |
undo ike dpd dpd-name |
DPD数据结构(简称为DPD结构)用于配置DPD查询参数,包括DPD查询时间间隔及等待DPD应答报文超时时间间隔。该数据结构可以被多个IKE Peer引用,这样用户不必针对接口一一进行重复配置。如果DPD结构已经被IKE Peer引用,则不能删除。
l 配置定时器
请在DPD结构视图下进行下面配置。
操作 |
命令 |
配置触发DPD查询的时间间隔 |
interval-time seconds |
恢复触发DPD查询的时间间隔的缺省值 |
undo interval-time |
配置等待DPD应答报文的超时时间 |
time-out seconds |
恢复等待DPD应答报文超时时间为缺省值 |
undo time-out |
缺省情况下,DPD查询的时间间隔为10秒,等待DPD应答报文的超时时间为5秒。
l 为IKE Peer指定DPD结构
请在IKE Peer视图下进行下面配置。
表4-20 为IKE Peer指定DPD结构
操作 |
命令 |
为IKE Peer指定DPD结构 |
dpd dpd-name |
取消IKE Peer的DPD结构 |
undo dpd |
在采用IKE方式创建安全策略时,除直接在安全策略视图下配置安全策略外,还可以通过引用安全策略模板来创建安全策略。在这种情况下,我们应先在安全策略模板中配置好所有的安全策略。
安全策略模板的配置与普通的安全策略配置相似,首先创建一个策略模板,然后配置模板的参数。
请在系统视图下进行下列配置。
操作 |
命令 |
创建/修改IPSec安全策略模板 |
ipsec policy-template template-name seq-number |
删除安全策略模板 |
undo ipsec policy-template policy-template-name [ seq-number ] |
执行上面的创建命令,会进入IPSec策略模板视图,在此视图下,可以配置策略模板的参数。
& 说明:
安全策略模板可配置的参数与isakmp方式的IPSec安全策略相同,只是很多参数是可选的。必须配置的参数只有IPSec安全提议,而隧道对端地址、保护的数据流、PFS特性可以不配置。但需要注意:如果配置了这些参数中的一个或几个,则在协商时这些参数必须匹配。
在策略模板配置完成后,还需要使用如下命令引用所定义的策略模板:
操作 |
命令 |
引用IPSec安全策略模板 |
ipsec policy policy-name seq-number isakmp template template-name |
当某一个安全策略引用了安全策略模板后,就不能够再进入其安全策略视图下配置或修改安全策略了,只能进入安全策略模板视图下配置或修改。
注意:
不能用应用策略模板的安全策略来发起安全联盟的协商,但可以响应协商。
为使定义的安全联盟生效,应在每个要加密的出站数据、解密的入站数据所在接口(逻辑的或物理的)上应用一个安全策略组,由这个接口根据所配置的安全策略组和对端加密路由器配合进行报文的加密处理。当安全策略组被从接口上删除后,此接口便不再具有IPSec的安全保护功能。
请在接口视图下进行下列配置。
操作 |
命令 |
应用安全策略组 |
ipsec policy policy-name |
取消应用的安全策略组 |
undo ipsec policy [ policy-name ] |
一个接口只能应用一个安全策略组,一个安全策略组可以应用到多个接口上。但手工方式配置的安全策略只能应用到一个接口。
当从一个接口发送报文时,将按照从小到大的顺序号查找安全策略组中每一条安全策略。如果报文匹配了一条安全策略引用的访问控制列表,则使用这条安全策略对报文进行处理;如果报文没有匹配安全策略引用的访问控制列表,则继续查找下一条安全策略;如果报文对所有安全策略引用的访问控制列表都不匹配,则报文直接被发送(IPSec不对报文加以保护)。
路由器实现的IPSec安全策略除了可以应用到串口、以太网口等实际物理接口上之外,还能够应用到Tunnel、Virtual Template等虚接口上。这样就可以根据实际组网要求,在如GRE、L2TP等隧道上应用IPSec。
Next payload是指在IKE协商报文(由几个payload组装而成)的最后一个payload的通用头中Next Payload域。按协议规定该域必须为0,但某些公司的设备会将该域赋其它值,为增强设备的互通性,可以通过以下命令取消IPSec协商过程对该域的检查。
操作 |
命令 |
配置在IPSec协商过程中取消对最后一个payload 的next payload域的检查 |
ike next-payload check disabled |
恢复缺省设置 |
undo ike next-payload check disabled |
缺省情况下,检查next payload域。
IPSec提供以下命令显示安全联盟、安全联盟生存周期、安全提议、安全策略的信息以及IPSec处理的报文的统计信息。
display命令可在所有视图下进行操作,debugging命令只能在用户视图下操作。
表4-25 IPSec显示与调试
操作 |
命令 |
显示安全联盟的相关信息 |
display ipsec sa [ brief | remote ip-address | policy policy-name [ seq-number ] | duration ] |
显示IPSec的隧道信息 |
display ipsec tunnel |
显示IPSec处理报文的统计信息 |
display ipsec statistics |
显示安全提议的信息 |
display ipsec proposal [ proposal-name ] |
显示安全策略的信息 |
display ipsec policy [ brief | name policy-name [ seq-number ] ] |
显示安全策略模板的信息 |
display ipsec policy-template [ brief | name policy-name [ seq-number ] ] |
显示DPD的配置信息 |
display ike dpd [ dpd-name ] |
打开IPSec的调试功能 |
debugging ipsec { all | sa | packet [ policy policy-name [ seq-number ] | parameters ip-address protocol spi-number ] | misc } |
禁止IPSec的调试功能 |
undo debugging ipsec { all | sa | packet [ policy policy-name [ seq-number ] | parameters ip-address protocol spi-number ] | misc } |
打开DPD的调试功能 |
debugging ike dpd |
禁止DPD的调试功能 |
undo debugging ike dpd |
此配置任务清除IPSec的报文统计信息,所有的统计信息都被设置成0。
请在用户视图下进行下列操作。
表4-26 清除IPSec的报文统计信息
操作 |
命令 |
清除IPSec的报文统计信息 |
reset ipsec statistics |
此配置任务删除已经建立的安全联盟(无论是手工建立的还是通过IKE协商建立的)。如果未指定参数,则删除所有的安全联盟。
请在用户视图下进行下列操作。
操作 |
命令 |
删除安全联盟 |
reset ipsec sa [ remote ip-address | policy policy-name [ seq-number ] | parameters ip-address protocol spi-number ] |
对于通过IKE协商建立的安全联盟,被删除后如果有报文重新触发IKE协商,IKE将重新协商建立安全联盟。
对于手工建立的安全联盟,被删除后系统会根据手工设置的参数立即创建新的安全联盟。
如果指定参数parameters,由于安全联盟是成对出现的,删除了一个方向安全联盟,另一个方向安全联盟也随之被删除。
在RouterA和RouterB之间建立一个安全隧道,对PC A代表的子网(10.1.1.x)与PC B代表的子网(10.1.2.x)之间的数据流进行安全保护。安全协议采用ESP协议,加密算法采用DES,验证算法采用SHA1-HMAC-96。
图4-2 IPSec配置组网图
(1) 配置RouterA
# 配置一个访问控制列表,定义由子网10.1.1.x去子网10.1.2.x的数据流。
[H3C] acl number 3101
[H3C-acl-adv-3101] rule permit ip source 10.1.1.0 0.0.0.255 destination 10.1.2.0 0.0.0.255
[H3C-acl-adv-3101] rule deny ip source any destination any
# 配置到PC B的静态路由。
[H3C] ip route-static 10.1.2.0 255.255.255.0 202.38.162.1
# 创建名为tran1的安全提议。
[H3C] ipsec proposal tran1
# 报文封装形式采用隧道视图。
[H3C-ipsec-proposal-tran1] encapsulation-mode tunnel
# 安全协议采用ESP协议。
[H3C-ipsec-proposal-tran1] transform esp
# 选择算法。
[H3C-ipsec-proposal-tran1] esp encryption-algorithm des
[H3C-ipsec-proposal-tran1] esp authentication-algorithm sha1
# 退回到系统视图。
[H3C-ipsec-proposal-tran1] quit
# 创建一条安全策略,协商方式为manual。
[H3C] ipsec policy map1 10 manual
# 引用访问控制列表。
[H3C-ipsec-policy-manual-map1-10] security acl 3101
# 引用安全提议。
[H3C-ipsec-policy-manual-map1-10] proposal tran1
# 设置对端地址。
[H3C-ipsec-policy-manual-map1-10] tunnel remote 202.38.162.1
# 设置本端地址。
[H3C-ipsec-policy-manual-map1-10] tunnel local 202.38.163.1
# 设置SPI。
[H3C-ipsec-policy-manual-map1-10] sa spi outbound esp 12345
[H3C-ipsec-policy-manual-map1-10] sa spi inbound esp 54321
# 设置密钥。
[H3C-ipsec-policy-manual-map1-10] sa string-key outbound esp abcdefg
[H3C-ipsec-policy-manual-map1-10] sa string-key inbound esp gfedcba
[H3C-isec-policy-manual-map1-10] quit
# 配置GigabitEthernet3/0。
[H3C] interface gigabitethernet 3/0
[H3C-GigabitEthernet3/0] ip address 202.38.163.1 255.0.0.0
# 应用安全策略组。
[H3C-GigabitEthernet3/0] ipsec policy map1
(2) 配置RouterB
# 配置一个访问控制列表,定义由子网10.1.2.x去子网10.1.1.x的数据流。
[H3C] acl number 3101
[H3C-acl-adv-3101] rule permit ip source 10.1.2.0 0.0.0.255 destination 10.1.1.0 0.0.0.255
[H3C] rule deny ip source any destination any
# 配置到PC A的静态路由。
[H3C] ip route-static 10.1.1.0 255.255.255.0 202.38.163.1
# 创建名为tran1的安全提议。
[H3C] ipsec proposal tran1
# 报文封装形式采用隧道模式。
[H3C-ipsec-proposal-tran1] encapsulation-mode tunnel
# 安全协议采用ESP协议。
[H3C-ipsec-proposal-tran1] transform esp
# 选择算法。
[H3C-ipsec-proposal-tran1] esp encryption-algorithm des
[H3C-ipsec-proposal-tran1] esp authentication-algorithm sha1
# 退回到系统视图。
[H3C-ipsec-proposal-tran1] quit
# 创建一条安全策略,协商方式为manual。
[H3C] ipsec policy use1 10 manual
# 引用访问控制列表。
[H3C-ipsec-policyl-manual-use1-10] security acl 3101
# 引用安全提议。
[H3C-ipsec-policyl-manual-use1-10] proposal tran1
# 设置对端地址。
[H3C-ipsec-policyl-manual-use1-10] tunnel remote 202.38.163.1
# 设置本端地址。
[H3C-ipsec-policyl-manual-use1-10] tunnel local 202.38.162.1
# 设置SPI 。
[H3C-ipsec-policyl-manual-use1-10] sa spi outbound esp 54321
[H3C-ipsec-policyl-manual-use1-10] sa spi inbound esp 12345
# 设置密钥。
[H3C-ipsec-policyl-manual-use1-10] sa string-key outbound esp gfedcba
[H3C-ipsec-policyl-manual-use1-10] sa string-key inbound esp abcdefg
[H3C-ipsec-policyl-manual-use1-10] quit
# 配置GigabitEthernet3/0。
[H3C] interface gigabitethernet 3/0
# 配置的IP地址。
[H3C-GigabitEthernet3/0] ip address 202.38.162.1 255.0.0.0
# 应用安全策略组。
[H3C-GigabitEthernet3/0] ipsec policy use1
以上配置完成后,RouterA和RouterB之间的安全隧道就建立好了,子网10.1.1.x与子网10.1.2.x之间的数据流将被加密传输。
如上例图所示,在RouterA和RouterB之间建立一个安全隧道,对PC A代表的子网(10.1.1.x)与PC B代表的子网(10.1.2.x)之间的数据流进行安全保护。安全协议采用ESP协议,加密算法采用DES,验证算法采用SHA1-HMAC-96。
见图4-2。
(1) 配置RouterA
# 配置一个访问控制列表,定义由子网10.1.1.x去子网10.1.2.x的数据流。
[H3C] acl number 3101
[H3C-acl-adv-3101] rule permit ip source 10.1.1.0 0.0.0.255 destination 10.1.2.0 0.0.0.255
[H3C-acl-adv-3101] rule deny ip source any destination any
# 配置到PC B的静态路由。
[H3C] ip route-static 10.1.2.0 255.255.255.0 202.38.162.1
# 创建名为tran1的安全提议。
[H3C] ipsec proposal tran1
# 报文封装形式采用隧道模式。
[H3C-ipsec-proposal-tran1] encapsulation-mode tunnel
# 安全协议采用ESP协议。
[H3C-ipsec-proposal-tran1] transform esp
# 选择算法。
[H3C-ipsec-proposal-tran1] esp encryption-algorithm des
[H3C-ipsec-proposal-tran1] esp authentication-algorithm sha1
# 退回到系统视图。
[H3C-ipsec-proposal-tran1] quit
# 配置IKE对等体。
[H3C] ike peer peer
[H3C-ike-peer-peer] pre-shared-key abcde
[H3C-ike-peer-peer] remote-address 202.38.162.1
# 创建一条安全策略,协商方式为isakmp。
[H3C] ipsec policy map1 10 isakmp
# 引用安全提议。
[H3C-ipsec-policy-isakmp-map1-10] proposal tran1
# 引用访问控制列表。
[H3C-ipsec-policy-isakmp-map1-10] security acl 3101
# 引用IKE对等体。
[H3C-ipsec-policy-isakmp-map1-10] ike-peer peer
# 退回到系统视图。
[H3C-ipsec-policy-isakmp-map1-10] quit
# 进入配置视图。
[H3C] interface gigabitethernet 3/0
# 配置的IP地址。
[H3C-GigabitEthernet3/0] ip address 202.38.163.1 255.0.0.0
# 应用安全策略组。
[H3C-GigabitEthernet3/0] ipsec policy map1
# 退回到系统视图。
[H3C-GigabitEthernet3/0] quit
(2) 配置RouterB:
# 配置一个访问控制列表,定义由子网10.1.2.x去子网10.1.1.x的数据流。
[H3C] acl number 3101
[H3C-acl-adv-3101] rule permit ip source 10.1.2.0 0.0.0.255 destination 10.1.1.0 0.0.0.255
[H3C-acl-adv-3101] rule deny ip source any destination any
# 配置到PC A的静态路由。
[H3C] ip route-static 10.1.1.0 255.255.255.0 202.38.163.1
# 创建名为tran1的安全提议。
[H3C] ipsec proposal tran1
# 报文封装形式采用隧道模式。
[H3C-ipsec-proposal-tran1] encapsulation-mode tunnel
# 安全协议采用ESP协议。
[H3C-ipsec-proposal-tran1] transform esp
# 选择算法。
[H3C-ipsec-proposal-tran1] esp encryption-algorithm des
[H3C-ipsec-proposal-tran1] esp authentication-algorithm sha1
# 退回到系统视图。
[H3C-ipsec-proposal-tran1] quit
# 配置IKE对等体。
[H3C] ike peer peer
[H3C-ike-peer-peer] pre-shared-key abcde
[H3C-ike-peer-peer] remote-address 202.38.163.1
# 创建一条安全策略,协商方式为isakmp。
[H3C] ipsec policy use1 10 isakmp
# 引用访问控制列表。
[H3C-ipsec-policy-isakmp-use1-10] security acl 3101
# 引用安全提议。
[H3C-ipsec-policy-isakmp-use1-10] proposal tran1
# 引用IKE对等体。
[H3C-ipsec-policy-isakmp-map1-10] ike-peer peer
# 退回到系统视图。
[H3C-ipsec-policy-isakmp-use1-10] quit
# 进入配置视图。
[H3C] interface gigabitethernet 3/0
# 配置的IP地址。
[H3C-GigabitEthernet3/0] ip address 202.38.162.1 255.0.0.0
# 应用安全策略组。
[H3C-GigabitEthernet3/0] ipsec policy use1
# 退回到系统视图。
[H3C-GigabitEthernet3/0] quit
以上配置完成后,RouterA和RouterB之间如果有子网10.1.1.x与子网10.1.2.x之间的报文通过,将触发IKE进行协商建立安全联盟。IKE协商成功并创建了安全联盟后,子网10.1.1.x与子网10.1.2.x之间的数据流将被加密传输。
总公司把RouterA和RouterB组成的VRRP备份组作为自己的缺省网关。RouterC与VRRP备份组的虚地址之间建立IPSec SA,保护总公司与分公司之间的数据流。RouterD、RouterE为运营商的接入路由器,这里不作重点说明。
图4-3 路由器与VRRP备份组虚地址之间建立SA配置举例
(1) 配置RouterA
# 配置RouterA为VRRP备份组的Master。
<H3C> system
[H3C] vrrp ping-enable
[H3C] interface gigabitethernet 1/0
[H3C-GigabitEthernet1/0] ip address 10.0.0.1 255.255.255.0
[H3C-GigabitEthernet1/0] vrrp vrid 1 virtual-ip 10.0.0.5
[H3C-GigabitEthernet1/0] vrrp vrid 1 priority 120
[H3C-GigabitEthernet1/0] vrrp vrid 1 preempt-mode timer delay 5
[H3C-GigabitEthernet1/0] interface gigabitethernet 2/0
[H3C-GigabitEthernet2/0] ip address 11.0.0.1 255.255.255.0
[H3C-GigabitEthernet2/0] vrrp vrid 2 virtual-ip 11.0.0.5
[H3C-GigabitEthernet2/0] vrrp vrid 2 priority 120
[H3C-GigabitEthernet2/0] vrrp vrid 2 preempt-mode timer delay 5
[H3C-GigabitEthernet2/0] quit
# 配置IPSec保护的数据流。
[H3C] acl number 3101
[H3C-acl-adv-3101] rule 0 permit ip source 11.0.0.0 0.0.0.255 destination 12.0.0.0 0.0.0.255
[H3C-acl-adv-3101] rule deny ip source any destination any
[H3C-acl-adv-3101] quit
# 配置到主机B的静态路由。
[H3C] ip route-static 0.0.0.0 0.0.0.0 10.0.0.4 preference 60
# 配置IPSec DPD。
[H3C] ike dpd dpd1
[H3C-ike-dpd-dpd1] interval-time 10
[H3C-ike-dpd-dpd1] time-out 5
[H3C-ike-dpd-dpd1] quit
# 创建名为tran1的安全提议(内容略)。
[H3C] ipsec proposal tran1
# 配置IKE对等体。
[H3C] ike peer peer
[H3C-ike-peer-peer] pre-shared-key abcde
[H3C-ike-peer-peer] remote-address 13.0.0.1
[H3C-ike-peer-peer] local-address 10.0.0.5
[H3C-ike-peer-peer] dpd dpd1
[H3C-ike-peer-peer] quit
# 创建一条安全策略,协商方式为isakmp。
[H3C] ipsec policy map1 10 isakmp
[H3C-ipsec-policy-isakmp-map1-10] proposal tran1
[H3C-ipsec-policy-isakmp-map1-10] security acl 3101
[H3C-ipsec-policy-isakmp-map1-10] ike-peer peer
[H3C-ipsec-policy-isakmp-map1-10] quit
# 在接口上应用安全策略组。
[H3C] interface gigabitethernet 1/0
[H3C-GigabitEthernet1/0] ipsec policy map1
[H3C-GigabitEthernet1/0] quit
(2) 配置RouterB
# 配置RouterB为VRRP备份组的Slave(缺省优先级为100,低于RouterA的优先级)。
<H3C> system
[H3C] vrrp ping-enable
[H3C] interface gigabitethernet 1/0
[H3C-GigabitEthernet1/0] ip address 10.0.0.3 255.255.255.0
[H3C-GigabitEthernet1/0] vrrp vrid 1 virtual-ip 10.0.0.5
[H3C-GigabitEthernet1/0] interface gigabitethernet 2/0
[H3C-GigabitEthernet2/0] ip address 11.0.0.3 255.255.255.0
[H3C-GigabitEthernet2/0] vrrp vrid 2 virtual-ip 11.0.0.5
[H3C-GigabitEthernet2/0] quit
# 配置IPSec保护的数据流。
[H3C] acl number 3101
[H3C-acl-adv-3101] rule 0 permit ip source 11.0.0.0 0.0.0.255 destination 12.0.0.0 0.0.0.255
[H3C-acl-adv-3101] rule deny ip source any destination any
[H3C-acl-adv-3101] quit
# 配置到主机B的静态路由。
[H3C] ip route-static 0.0.0.0 0.0.0.0 10.0.0.4 preference 60
# 配置IPSec DPD。
[H3C] ike dpd dpd1
[H3C-ike-dpd-dpd1] interval-time 10
[H3C-ike-dpd-dpd1] time-out 5
[H3C-ike-dpd-dpd1] quit
# 创建名为tran1的安全提议(内容略)。
[H3C] ipsec proposal tran1
# 配置IKE对等体。
[H3C] ike peer peer
[H3C-ike-peer-peer] pre-shared-key abcde
[H3C-ike-peer-peer] remote-address 13.0.0.1
[H3C-ike-peer-peer] local-address 10.0.0.5
[H3C-ike-peer-peer] dpd dpd1
[H3C-ike-peer-peer] quit
# 创建一条安全策略,协商方式为isakmp。
[H3C] ipsec policy map1 10 isakmp
[H3C-ipsec-policy-isakmp-map1-10] proposal tran1
[H3C-ipsec-policy-isakmp-map1-10] security acl 3101
[H3C-ipsec-policy-isakmp-map1-10] ike-peer peer
[H3C-ipsec-policy-isakmp-map1-10] quit
# 在接口上应用安全策略组。
[H3C] interface gigabitethernet 1/0
[H3C-GigabitEthernet1/0] ipsec policy map1
[H3C-GigabitEthernet1/0] quit
(3) 配置RouterC
# 配置IPSec保护的数据流。
[H3C] acl number 3101
[H3C-acl-adv-3101] rule 0 permit ip source 12.0.0.0 0.0.0.255 destination 11.0.0.0 0.0.0.255
[H3C-acl-adv-3101] rule deny ip source any destination any
[H3C-acl-adv-3101] quit
# 配置到主机A的静态路由。
[H3C] ip route-static 0.0.0.0 0.0.0.0 13.0.0.4 preference 60
# 配置IPSec DPD。
[H3C] ike dpd dpd1
[H3C-ike-dpd-dpd1] interval-time 10
[H3C-ike-dpd-dpd1] time-out 5
[H3C-ike-dpd-dpd1] quit
# 创建名为tran1的安全提议(内容略)。
[H3C] ipsec proposal tran1
# 配置IKE对等体。
[H3C] ike peer peer
[H3C-ike-peer-peer] pre-shared-key abcde
[H3C-ike-peer-peer] remote-address 10.0.0.5
[H3C-ike-peer-peer] local-address 13.0.0.1
[H3C-ike-peer-peer] dpd dpd1
[H3C-ike-peer-peer] quit
# 创建一条安全策略,协商方式为isakmp。
[H3C] ipsec policy map1 10 isakmp
[H3C-ipsec-policy-isakmp-map1-10] proposal tran1
[H3C-ipsec-policy-isakmp-map1-10] security acl 3101
[H3C-ipsec-policy-isakmp-map1-10] ike-peer peer
[H3C-ipsec-policy-isakmp-map1-10] quit
# 在接口上应用安全策略组。
[H3C] interface gigabitethernet 1/0
[H3C-GigabitEthernet1/0] ip address 13.0.0.1 255.0.0.0
[H3C-GigabitEthernet1/0] ipsec policy map1
[H3C-GigabitEthernet1/0] quit
# 配置以太网口。
[H3C] interface gigabitethernets 2/0
[H3C-GigabitEthernet2/0] ip address 12.0.0.2 255.255.255.0
在主机B上ping –c 500 11.0.0.7(PC A),然后在RouterA和RouterC上执行display ike sa、display ipsec sa命令,显示已经建立了安全联盟。
然后在RouterA的GigabitEthernet1/0上执行shutdown命令,在RouterC上通过执行debugging ike dpd命令,发现连续3次发送DPD查询报文,并连续3次超时没有收到响应报文,最后显示删除该Peer下所有SA(此时VRRP备份组正在主备切换),十几秒后,安全隧道重新恢复。调试信息如下:
<H3C> debugging ike dpd
(连续三次没有收到对端响应,删除SA)
H3C IKE/8/DEBUG:REQUEST(send dpd request): send a message (seqno:-12903966)
H3C IKE/8/DEBUG:REQUEST: wait for response timeout
H3C IKE/8/DEBUG:REQUEST(send dpd request): send a message (seqno:-1917909230
H3C IKE/8/DEBUG:REQUEST: wait for response timeout
H3C IKE/8/DEBUG:REQUEST(send dpd request): send a message (seqno:-1183268982)
H3C IKE/8/DEBUG:REQUEST: wait for response timeout
H3C IKE/8/DEBUG:REQUEST: there are three fail and all SAs associated were deleted
(收到对端响应,对端主备切换已经完成)
H3C IKE/8/DEBUG:REQUEST(send dpd request): send a message (seqno:1382148220)
H3C IKE/8/DEBUG:REQUEST(recv dpd response): received a message (seqno:1382148220)
H3C IKE/8/DEBUG:RESPONSE(recv dpd request): received a message (seqno:1382148220)
H3C IKE/8/DEBUG:RESPONSE(send dpd response): send a message (seqno:1382148220)
故障之一:初次在接口上应用IPSec策略,收发端可正常加解密数据流;关闭掉IPSec功能后,收发端仍可正常通信;再次应用IPSec策略后,报文不能进行IPSec处理,无法PING通对端。
故障排除:此问题一般出现在通信发起端直接在安全策略视图下配置安全策略,而被连接端通过引用安全策略模板来创建安全策略的情况下。当第一次使用IPSec的时候,两端可以通是正常的。但是当第二次不使用IPSec功能时,就会在通信被连接端建立一个快转表项。当第三次又使用IPSec的时候,由于这个快转表项的存在,从而导致报文不能进入IPSec处理。因此,当第三次使用IPSec之前,通信两端使用reset ip fast-forwarding cache命令清除一下快速转发缓冲区中的内容,就可以恢复正常通信了。
在实施IPSec的过程中,可以使用Internet密钥交换IKE(Internet Key Exchange)协议来建立安全联盟,该协议建立在由Internet安全联盟和密钥管理协议ISAKMP(Internet Security Association and Key Management Protocol)定义的框架上。IKE为IPSec提供了自动协商交换密钥、建立安全联盟的服务,能够简化IPSec的使用和管理。
网络安全包括两层含义:其一是内部网的安全,其二是在公共网络中进行数据交换的安全。实现前者的手段有防火墙、地址转换(NAT)等。后者如正在兴起的IPSec(IP Security),IPSec提供了在IP层对报文实施加密的保护手段。IPSec的安全联盟可以通过手工配置的方式建立,但是当网络中结点增多时,手工配置将非常困难,而且难以保证安全性。这时就要使用IKE自动地进行安全联盟建立与密钥交换的过程。
IKE具有一套自保护机制,可以在不安全的网络上安全地分发密钥、验证身份、建立IPSec安全联盟。
IKE的安全机制包括:
l DH(Diffie-Hellman)交换及密钥分发。Diffie-Hellman算法是一种公共密钥算法。通信双方在不传送密钥的情况下通过交换一些数据,计算出共享的密钥。加密的前提是交换加密数据的双方必须要有共享的密钥。IKE的精髓在于它永远不在不安全的网络上直接传送密钥,而是通过一系列数据的交换,最终计算出双方共享的密钥。即使第三者(如黑客)截获了双方用于计算密钥的所有交换数据,也不足以计算出真正的密钥。
l 完善的前向安全性(Perfect Forward Secrecy,PFS)。PFS特性是一种安全特性,指一个密钥被破解,并不影响其他密钥的安全性,因为这些密钥间没有派生关系。对于IPSec,是通过在IKE阶段2协商中增加一次密钥交换来实现的。
l 身份验证。身份验证确认通信双方的身份。对于pre-shared key验证方法,验证字用来作为一个输入产生密钥,验证字不同是不可能在双方产生相同的密钥的。验证字是验证双方身份的关键。
l 身份保护。身份数据在密钥产生之后加密传送,实现了对身份数据的保护。
IKE使用了两个阶段为IPSec进行密钥协商并建立安全联盟:第一阶段,通信各方彼此间建立了一个已通过身份验证和安全保护的通道,此阶段的交换建立了一个ISAKMP安全联盟,即ISAKMP SA;第二阶段,用在第一阶段建立的安全通道为IPSec协商安全服务,即为IPSec协商具体的安全联盟,建立IPSec SA。IPSec SA用于最终的IP数据安全传送。
从下图我们可以看出IKE和IPSec的关系。
图5-1 IKE和IPSec的关系图
为了使IKE支持目前广泛应用的通过ADSL及拨号方式构建VPN的方案中的特殊情况――即局端设备的IP地址为固定分配的,用户端设备的IP地址为动态获取的情况,在IKE阶段的协商模式中增加了IKE野蛮模式,它可以选择根据协商发起端的IP地址或者ID来查找对应的身份验证字,并最终完成协商。IKE野蛮模式相对于主模式来说更加灵活,能够支持协商发起端为动态IP地址的情况。
在IPSec/IKE组建的VPN隧道中,若存在NAT网关设备,且NAT网关设备对VPN业务数据流进行了NAT转换的话,则必须配置IPSec/IKE的NAT穿越功能。该功能删去了IKE协商过程中对UDP端口号的验证过程,同时实现了对VPN隧道中NAT网关设备的发现功能,即如果发现NAT网关设备,则将在之后的IPSec数据传输中使用UDP封装(即将IPSec报文封装到IKE协商所使用的UDP连接隧道里)的方法,避免了NAT网关对IPSec报文进行篡改(NAT网关设备将只能够修改最外层的IP和UDP报文头,对UDP报文封装的IPSec报文将不作修改),从而保证了IPSec报文的完整性(IPSec数据加密解密验证过程中要求报文原封不动地被传送到接收端)。目前仅在野蛮模式下支持NAT穿越,主模式不支持。
以上两个特性在ADSL+IPSec的组网方式中一般结合使用,解决了在企业网宽带接入方式下IP地址不固定、公网中需要穿越NAT等问题,为企业网以ADSL宽带接入替代原有的专线方式提供了安全的解决方案。
进行IKE配置之前,用户需要确定以下几个因素,以便配置过程的顺利进行:
l 确定IKE交换过程中算法的强度,即确定安全保护的强度(包括身份验证方法、加密算法、验证算法、DH组):不同的算法的强度不同,强度越高的算法,受保护数据越难被破解,但消耗的计算资源越多。一般来说,密钥越长的算法强度越高。
l 确定通信双方预先约定的身份验证字。
(1) 配置本端路由器的名称
(2) 定义IKE安全提议
l 创建IKE安全提议
l 选择加密算法
l 选择验证方法
l 选择验证算法
l 选择Diffie-Hellman组标识
l 配置ISAKMP SA生存周期(可选)
(3) 配置IKE对等体
l 创建IKE对等体
l 配置IKE协商模式
l 配置身份验证字
l 配置本端路由器的ID类型
l 配置IKE协商过程中使用的IP地址
l 配置NAT穿越功能
l 配置IKE对等体的子网类型
(4) 配置Keepalive定时器参数
l 配置发送Keepalive报文的时间间隔
l 配置等待Keepalive报文的超时时间
当IKE协商的发起端使用网关名字进行协商时(即配置了id-type name),本端需要配置命令ike local-name。
请在系统视图下进行下列配置。
操作 |
命令 |
配置本端路由器的名称 |
ike local-name id |
恢复本端路由器设备的缺省名称 |
undo ike local-name |
IKE提议定义了一套属性数据来描述IKE协商怎样进行安全通信。配置IKE提议包括创建IKE提议、选择加密算法、选择验证方法、选择验证算法、选择Diffie-Hellman组标识和设置安全联盟生存周期。
对于主模式,用户可以按照优先级创建多条IKE提议,但是协商双方必须至少有一条匹配的IKE提议才能协商成功。对于野蛮模式,发起方只会选择优先级最高的安全提议与对方进行协商,如果响应方有匹配的安全提议,则协商成功,否则协商将失败,即发起方不会再使用其它低优先级的安全提议发起协商。
此配置任务定义一个IKE提议。配置的IKE提议将被用来建立安全通道。
请在系统视图下进行下列配置。
表5-2 创建IKE提议
操作 |
命令 |
创建IKE安全提议 |
ike proposal proposal-number |
删除IKE安全提议 |
undo ike proposal proposal-number |
执行ike proposal命令会进入IKE提议视图。在IKE提议视图下可以配置加密算法、验证算法、组标识、生存周期和验证方法。
proposal-number为IKE提议序号,取值为1~100。该序号同时表示优先级,数值越小,优先级越高。可以为进行IKE协商的每一端配置多条提议,在协商时将从优先级最高的提议开始匹配一条双方都相同的提议,匹配的原则是:协商双方具有相同的加密算法、验证算法、验证方法和DH组标识。
系统提供一条缺省的IKE提议,具有最低的优先级,此缺省提议具有缺省的加密算法、验证算法、组标识、生存周期和验证方法。
IKE提议需要定义的参数见下文。
此配置任务指定一个IKE提议使用的加密算法。
请在IKE提议视图下进行下列配置。
操作 |
命令 |
选择加密算法 |
encryption-algorithm { des-cbc | 3des-cbc | aes-cbc } |
设置加密算法为缺省值 |
undo encryption-algorithm |
缺省情况下使用CBC模式的56-bit DES加密算法。
当前IKE认证算法只有两种选择:预共享密钥(pre-share-key)和PKI(rsa-signature)方法。
请在IKE提议视图下进行下列配置。
操作 |
命令 |
选择验证方法 |
authentication-method { pre-share | rsa-signature } |
设置验证方法为缺省值 |
undo authentication-method |
& 说明:
关于PKI的配置,请参考本手册中的“PKI配置”。
此配置任务指定一个IKE提议使用的验证算法。
请在IKE提议视图下进行下列配置。
操作 |
命令 |
选择验证算法 |
authentication-algorithm { md5 | sha } |
设置验证算法为缺省值 |
undo authentication-algorithm |
缺省情况下,使用SHA-1验证算法。
此配置任务指定一个IKE提议使用的Diffie-Hellman组标识。
请在IKE提议视图下进行下列配置。
表5-6 选择DH组标识
操作 |
命令 |
选择Diffie-Hellman组标识 |
dh { group1 | group2 | group5 | group14 } |
设置Diffie-Hellman组标识为缺省值 |
undo dh |
缺省情况下指定为group1,即768-bit的Diffie-Hellman组。
此配置任务指定一个IKE提议使用的ISAKMP SA生存周期。
请在IKE提议视图下进行下列配置。
表5-7 设置ISAKMP SA生存周期
操作 |
命令 |
设置ISAKMP SA生存周期 |
sa duration seconds |
设置生存周期为缺省值 |
undo sa duration |
如果duration时间超时,ISAKMP SA将自动更新。生存周期可以设定为60到604800秒之间的一个值。因为IKE协商需要进行DH计算,在低端路由器上需要经过较长的时间,为使ISAKMP SA的更新不影响安全通信,建议设置duration大于10分钟。
SA在设定的生存周期超时前会提前协商另一个SA来替换旧的SA。在新的SA还没有协商完之前,依然使用旧的SA;在新的SA建立后,将立即使用新的SA,而旧的SA在生存周期超时时被自动清除。
缺省情况下,ISAKMP SA生存周期为86400秒(一天)。
请在系统视图下进行下列配置。
表5-8 配置ike对等体
操作 |
命令 |
配置一个IKE对等体并进入ike peer视图 |
ike peer peer-name |
删除一个IKE对等体 |
undo ike peer peer-name |
请在ike-peer视图下进行下列配置。
操作 |
命令 |
配置IKE阶段的协商模式。 |
exchange-mode { aggressive | main } |
恢复IKE阶段缺省的协商模式。 |
undo exchange-mode |
缺省情况下使用主模式。
& 说明:
当安全隧道一端的IP地址为动态获取时,必须将IKE阶段的协商模式配置为野蛮模式。
请在ike-peer视图下进行下列配置。
操作 |
命令 |
配置IKE阶段协商所使用的身份验证字 |
pre-shared-key key |
取消IKE阶段协商所使用的身份验证字 |
undo pre-shared-key |
请在ike-peer视图下进行下列配置。
表5-11 配置IKE协商过程中使用的ID类型
操作 |
命令 |
选择IKE阶段的协商过程中使用ID的类型 |
id-type { ip | name } |
恢复IKE阶段的协商过程中使用的ID类型的缺省设置 |
undo id-type |
缺省情况下使用IP地址作为IKE协商过程中使用的ID类型。
在主模式方式下只能使用IP地址作为IKE协商过程中使用的ID。在野蛮模式下,可以选择IP地址或者名称来作为IKE协商过程中使用的ID。
当IKE协商的发起端使用网关名字进行协商时(即配置了id-type name),发起端会发送自己的名称给对端来标识自己的身份,而对端使用remote-name name来验证发起端,故此时name应与发起端网关上使用ike local-name命令所配的名字保持一致。
请在ike-peer视图下进行下列配置。
表5-12 指定对端设备的名称
操作 |
命令 |
指定对端设备的名称 |
remote-name name |
删除对端设备的名称 |
undo remote-name |
当IKE协商的发起端使用地址进行协商时(即配置了id-type ip),发起端会发送自己的IP地址给对端来标识自己的身份,而对端使用remote-address ip-address来验证发起端,故此时ip-address应与发起端上local-address命令所配的IP地址保持一致。
请在ike-peer视图下进行下列配置。
操作 |
命令 |
配置本端路由器的IP地址 |
local-address ip-address |
删除本端路由器的IP地址 |
undo local-address |
配置对端设备的IP地址 |
remote-address low-ip-address [ high-ip-address ] |
删除对端设备的IP地址 |
undo remote-address |
一般情况下命令local-address不需要配置,只有当用户需要指定特殊的本端网关地址时(如指定loopback接口地址)才需要配置这条命令。
在IPSec/IKE组建的VPN隧道中,若存在NAT路由器设备,则必须配置IPSec/IKE的NAT穿越功能。
请在ike-peer视图下进行下列配置。
表5-14 配置IKE/IPSec的NAT穿越功能
操作 |
命令 |
配置IKE/IPSec的NAT穿越功能 |
nat-traversal |
取消IKE/IPSec的NAT穿越功能 |
undo nat-traversal |
为了节省IP地址空间,ISP经常会在公网中加入NAT网关,以便于将私有IP地址分配给用户,此时可能会导致IPSec/IKE隧道的两端一端为公网地址,另一端为私网地址,所以必须在隧道两端配置NAT穿越,保证隧道能够正常协商建立。
这两条命令仅在与NETSCREEN的设备互通时使用。
请在ike-peer视图下进行下列配置。
表5-15 配置IKE对等体的子网类型
操作 |
命令 |
配置本端网关的子网类型 |
local { multi-subnet | single-subnet } |
恢复缺省的子网类型 |
undo local |
配置对端网关的子网类型 |
peer { multi-subnet | single-subnet } |
恢复缺省的子网类型 |
undo peer |
缺省情况下,本端和对端的子网类型为single-subnet。
配置通过ISAKMP SA向对端发送Keepalive报文的时间间隔。
请在系统视图下进行下列配置。
表5-16 设置发送Keepalive报文的时间间隔
操作 |
命令 |
设置ISAKMP SA向对端发送Keepalive报文的时间间隔 |
ike sa keepalive-timer interval seconds |
设置使该功能失效 |
undo ike sa keepalive-timer interval |
IKE通过此报文维护该条ISAKMP SA的链路状态。一般在对端使用命令ike sa keepalive-timer timeout配置了超时时间时,必须在本端配置此Keepalive报文发送时间间隔。当对端在配置的超时时间内未收到此Keepalive报文时,如果该ISAKMP SA带有TIMEOUT标记,则删除该ISAKMP SA以及由其协商的IPSec SA;否则,将其标记为TIMEOUT。所以在配置时需使配置的超时时间比Keepalive报文发送时间长。
缺省情况下,此功能无效。
配置一个ISAKMP SA等待Keepalive报文的超时时间。
请在系统视图下进行下列配置。
表5-17 设置等待Keepalive报文的超时时间
操作 |
命令 |
设置ISAKMP SA等待Keepalive报文的超时时间 |
ike sa keepalive-timer timeout seconds |
设置使该功能失效 |
undo ike sa keepalive-timer timeout |
IKE通过此报文维护该条ISAKMP SA的链路状态。如果在配置的超时时间内未收到对端的Keepalive报文,如果该ISAKMP SA带有TIMEOUT标记,则删除该ISAKMP SA以及由其协商的IPSec SA;否则,将其标记为TIMEOUT。所以在配置时需使配置的超时时间比Keepalive报文发送时间长。
在网络上一般不会出现超过连续三次的报文丢失,所以配置超时时间时可以采用对端配置的Keepalive报文发送时间间隔的三倍。
缺省情况下,此功能无效。
配置IKE对等体发送NAT Keepalive报文的时间间隔。
表5-18 配置发送NAT Keepalive报文的时间间隔
操作 |
命令 |
配置IKE对等体发送NAT Keepalive报文的时间间隔 |
ike sa nat-keepalive-timer interval seconds |
恢复发送NAT Keepalive报文的时间间隔为缺省值 |
undo ike sa nat-keepalive-timer interval |
缺省情况下,发送NAT Keepalive报文的时间间隔为20秒。
NAT Keepalive报文是一个使用UDP封装的未加密的报文。通过发送NAT Keepalive报文,在NAT网关设备上可以保持IKE对等体之间的NAT动态映射有效。NAT Keepalive报文并不用来检测对等体的状态。当配置此命令时,需要确保配置的时间小于NAT转换的超时时间。
IKE提供以下命令显示当前所有安全联盟的状态和每个IKE提议配置的参数。display命令可在所有视图下进行下列操作,debugging和reset命令只能在用户视图下操作。
表5-19 IKE显示与调试
操作 |
命令 |
显示当前已建立的安全通道 |
display ike sa [ verbose [ connection-id id | remote-address ip-address ] ] |
显示每个IKE提议配置的参数 |
display ike proposal |
显示IKE对等体的配置信息 |
display ike peer [ peer-name ] |
删除安全隧道 |
reset ike sa [ connection-id ] |
打开IKE的调试信息 |
debugging ike { all | error | exchange | message | misc| transport } |
关闭IKE的调试信息 |
undo debugging ike { all | error | exchange | message | misc | transport } |
在删除指定的安全通道时,需要指定SA的connection-id,通过命令display ike sa可以显示目前的安全联盟的connection-id信息。针对同一个安全通道(即相同的对端),分别有阶段1的信息和阶段2的信息。
删除本地的安全联盟时,如果阶段1的ISAKMP SA还存在,将在此安全联盟的保护下向对端发送删除消息,通知对方清除安全联盟数据库。
如果未指定connection-id,所有的阶段1的SA都会被删除。
安全通道与安全联盟是完全不同的两个概念,安全通道是一个两端可以互通的通道,而IPSec SA则是一个单向的连接,所以安全通道是由一对或几对安全联盟组成的。
l 主机1与2之间进行安全通信,在路由器A与B之间使用IKE自动协商建立安全通道。
l 在路由器A上配置一条IKE提议,其优先级为10,网关B使用缺省的IKE提议。
l 为使用pre-shared key验证方法的提议配置验证字。
图5-2 IKE配置举例组网图
(1) 配置路由器A
# 配置IKE 对等体。
[H3C] ike peer peer
[H3C-ike-peer-peer] pre-shared-key abcde
[H3C-ike-peer-peer] remote-address 171.69.224.33
# 配置一条IKE提议10。
[H3C] ike proposal 10
# 指定IKE提议使用的验证算法为MD5。
[H3C-ike-proposal-10] authentication-algorithm md5
# 使用pre-shared key验证方法。
[H3C-ike-proposal-10] authentication-method pre-share
# 设置ISAKMP SA生存周期5000秒。
[H3C-ike-proposal-10] sa duration 5000
(2) 配置路由器B
# 配置IKE 对等体。
[H3C] ike peer peer
[H3C-ike-peer-peer] pre-shared-key abcde
[H3C-ike-peer-peer] remote address 202.38.160.1
以上配置可以保证网关A和B之间进行IKE协商。由于网关A配置的提议是proposal 10,使用authentication-algorithm md5,但网关B上只有一条缺省的IKE提议,默认是authentication-algorithm sha。在进行提议匹配的时候,从优先级最高的提议开始,因为网关B上没有和网关A上提议10相匹配的提议,所以双方能够匹配的只有缺省的IKE提议。另外,在进行提议匹配的时候,duration是不用进行匹配的,生存周期由IKE协商发起方决定。
关于IPSec的相应配置请参考IPSec配置举例。
l RouterA的GigabitEthernet1/0口为公网固定IP地址,RouterB为动态获取IP地址。
l 由于RouterB要通过运营商的NAT设备才能上公网,所以分公司要和总部建立起IPSEC连接必须具备IKE野蛮模式及NAT穿越功能。
l 为了保证信息安全采用IPSec/IKE方式创建安全隧道。
图5-3 IKE野蛮模式及NAT穿越的典型配置案例
(1) 配置RouterA
# 配置本端路由器设备的名字。
[H3C] ike local-name RouterA
# 配置acl。
[H3C acl number 3101 match-order auto
[H3C-acl-adv-3101] rule permit ip source any destination any
# 配置IKE对等体peer。
[H3C] ike peer peer
[H3C-ike-peer-peer] exchange-mode aggressive
[H3C-ike-peer-peer] pre-shared-key abc
[H3C-ike-peer-peer] id-type name
[H3C-ike-peer-peer] remote-name RouterB
[H3C-ike-peer-peer] nat traversal
# 创建IPSec安全提议prop。
[H3C] ipsec proposal prop
[H3C-ipsec-proposal-prop] encapsulation-mode tunnel
[H3C-ipsec-proposal-prop] transform esp
[H3C-ipsec-proposal-prop] esp encryption-algorithm des
[H3C-ipsec-proposal-prop] esp authentication-algorithm sha1
# 创建安全策略policy并指定通过IKE协商建立安全联盟。
[H3C] ipsec policy policy 10 isakmp H3C
# 配置安全策略policy引用ike对等体peer。
[H3C-ipsec-policy-isakmp-policy-10] ike-peer peer
# 配置安全策略policy引用访问控制列表3101。
[H3C-ipsec-policy-isakmp-policy-10] security acl 3101
# 配置安全策略policy引用IPSec安全提议prop。
[H3C-ipsec-policy-isakmp-policy-10] proposal prop
# 进入GigabitEthernet1/0并配置IP地址。
[H3C] interface gigabitsethernet 1/0
[H3C-GigabitEthernet1/0] ip address 100.0.0.1 255.255.0.0
# 配置GigabitEthernet1/0引用安全策略组policy。
[H3C-GigabitEthernet1/0] ipsec policy policy
(2) 配置RouterB
# 配置本端路由器设备的名字。
[H3C] ike local-name RouterB
# 配置acl。
[H3C] acl number 3101 match-order auto
[H3C-acl-adv-3101] rule permit ip source any destination any
# 配置IKE对等体peer。
[H3C] ike peer peer
[H3C-ike-peer-peer] exchange-mode aggressive
[H3C-ike-peer-peer] pre-shared-key abc
[H3C-ike-peer-peer] id-type name
[H3C-ike-peer-peer] remote-name routerA
[H3C-ike-peer-peer] remote-address 100.0.0.1
[H3C-ike-peer-peer] nat traversal
# 创建IPSec安全提议prop。
[H3C] ipsec proposal prop
[H3C-ipsec-proposal-prop] encapsulation-mode tunnel
[H3C-ipsec-proposal-prop] transform esp
[H3C-ipsec-proposal-prop] esp encryption-algorithm des
[H3C-ipsec-proposal-prop] esp authentication-algorithm sha1
# 创建安全策略policy并指定通过IKE协商建立安全联盟。
[H3C] ipsec policy policy 10 isakmp
# 配置安全策略policy引用ike对等体peer。
[H3C-ipsec-policy-isakmp-policy-10] ike-peer peer
# 配置安全策略policy引用访问控制列表3101。
[H3C-ipsec-policy-isakmp-policy-10] security acl 3101
# 配置安全策略policy引用IPSec安全提议prop。
[H3C-ipsec-policy-isakmp-policy-10] proposal prop
# 进入GigabitEthernet1/0并配置接口动态协商IP地址。
[H3C-GigabitEthernet1/0] pppoe-client dial-bundle-number 1
# 配置拨号接口。
[H3C] dialer-rule 1 ip permit
[H3C] interface dialer 1
[H3C-Dialer1] link-protocol ppp
[H3C-Dialer1] ppp pap local-user aaa password simple aaa
[H3C-Dialer1] mtu 1450
[H3C-Dialer1] ip address ppp-negotiate
[H3C-Dialer1] dialer user 12
[H3C-Dialer1] dialer-group 1
[H3C-Dialer1] dialer bundle 1
# 配置Dialer1引用安全策略组policy。
[H3C-Dialer1] ipsec policy policy
配置参数建立IPSec安全通道时,可以打开IKE的Error调试开关,帮助我们查找配置问题。其命令是:
<H3C> debugging ike error
故障之一:非法用户身份信息
故障排除:用户身份信息是发起IPSec通信的用户用来标识自己的数据。在实际应用中我们可以通过用户身份标识实现对不同的数据流建立不同的安全通道进行保护。目前我们是通过用户的IP地址来标识用户。
可以看到调试信息:
got NOTIFY of type INVALID_ID_INFORMATION
或者
drop message from A.B.C.D due to notification type INVALID_ID_INFORMATION
检查协商两端接口上配置的安全策略中的ACL内容是否相容。建议用户将两端的ACL配置成互为镜像的。ACL镜像的含义请参考IPSec配置中“配置访问控制列表”内容。
故障之二:提议不匹配
故障排除:
可以看到调试信息:
got NOTIFY of type NO_PROPOSAL_CHOSEN
或者:
drop message from A.B.C.D due to notification type NO_PROPOSAL_CHOSEN
协商双方没有可以匹配的提议。对于阶段1,检查IKE proposal是否有与对方匹配的。对于阶段2协商,检查双方接口上应用的IPSec安全策略的参数是否匹配,引用的IPSec安全提议的协议、加密算法和验证算法是否有匹配的。
故障之三:无法建立安全通道
故障排除:实际应用中有时会发现在不稳定的网络状态下,安全通道无法建立或者存在安全通道却无法通信,而且检查双方的ACL的配置正确,也有匹配的提议。
这种情况一般是安全通道建立好以后,有一方的路由器重启造成的。解决办法:
l 使用display ike sa命令检查双方是否都已建立阶段1的SA。
l 使用display ipsec sa policy命令查看接口上的安全策略是否已建立了IPSec SA。
l 根据以上两步的结果查看,如果有一方存在的SA在另一方不存在的情况,使用reset ike sa命令清除错误存在的SA,重新发起协商。
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域中作为Client的DVPN接入设备。Client设备必须在指定的Server设备上完成注册才能接入DVPN域。
一个DVPN域的唯一标识。在同一台DVPN接入设备上,不同的DVPN域的ID不同。
Client设备在Server设备上进行注册时,在Client和Server之间将建立一个注册通道,称为Map。Map在Client设备完成注册后仍然存在,直到Client设备退出DVPN域或退出网络。
DVPN网络数据通讯隧道。所有的数据报文都通过会话隧道进行传递。在DVPN域中的两个接入设备之间可以建立一个Session,实现私有网络的直接互联。
报文重定向机制。当两个Client之间还没有建立Session时,他们的数据通讯需要通过Server进行转发。Server在转发时将判断这两个Client之间是否可以建立独立的Session,如果可以,Server将发送重定向报文给发起数据通信的源Client,重定向报文中包含了目的Client的信息。
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通道),回到初始化状态。
具体的注册过程可以参见下面的流程图,在注册过程中如果出现错误,注册过程会停止,并且返回到初始状态。
图6-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信息等。
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。
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地址时的需求。
图6-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。策略主要包括会话协商使用的算法套件、会话的保活时间、会话的空闲超时时间、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域的各个私有网络的规划,简化整个网络的配置,提高网络的维护性和自动化。
DVPN的配置包括两方面,一是配置Client,二是配置Server。
Client端的配置包括基本配置、Tunnel接口属性配置和dvpn-class配置。
(1) 基本配置
l 使能/禁止DVPN功能
l 配置Client注册的时间间隔
l 配置Client注册次数
l 配置Client的dumb时间
(2) 配置Tunnel接口属性
l 配置Tunnel接口的报文封装格式UDP DVPN
l 配置Tunnel接口的接口类型(设置为Client)
l 配置Tunnel接口的源端(源地址或者源接口)
l 配置Tunnel接口使用的dvpn-class
l 配置Tunnel接口所属的DVPN域
l 配置Client向Server注册时的类型(可选)
l 配置IPSec加密的数据流
(3) dvpn-class配置步骤
dvpn-class视图下的命令用来配置Client设备需要接入的Server信息参数、以及注册过程中协商使用的信息。配置的内容包括:
l 创建并进入dvpn-class视图
l 配置指定Server的公网IP地址
l 配置指定Server的私网IP地址(可选)
l 配置注册过程使用的算法套件(可选,默认为des-md5-dh1)
l 配置Client对Server的身份验证方法(可选,默认NONE)
l 配置Client对Server验证使用的pre-shared-key(可选,验证Server时需要配置)
l 配置Client注册使用的用户信息(可选,如果Server需要对Client进行身份认证,需要配置用户信息)
Server端配置包括基本配置、配置Tunnel接口属性和配置DVPN的策略套件。DVPN的策略套件是在dvpn-policy视图下配置的。具体配置步骤如下:
(1) 基本配置
l 使能/禁止DVPN功能
l 配置Map的老化时间
l 配置对Client的验证方式
l 配置Server的pre-shared-key
(2) 配置Tunnel接口属性
l 配置Tunnel接口的报文封装格式UDP DVPN
l 配置Tunnel接口的接口类型(设置为Server)
l 配置Tunnel接口所属的DVPN域
l 配置Tunnel接口的源端(源地址或者源接口)
l 配置DVPN域的统一策略(可选)
l 配置IPSec加密的数据流
(3) 配置DVPN策略套件
l 创建并进入dvpn-policy视图
l 配置Server对Client的验证方式(可选,默认NONE)
l 配置指定Session的算法套件(可选,默认为des-md5-dh1)
l 配置指定Session的空闲超时时间(可选,默认300秒)
l 配置指定Session的Keepalive时间(可选,默认10秒)
l 配置指定Session建立请求的时间间隔(可选,默认10秒)
l 配置IPSec的算法套件(可选,默认为des-md5-dh1)
l 配置指定IPSec SA的重协商时间(可选,默认3600秒)
由于Client端和Server端有许多重复的配置,所以下面将从全局配置、Tunnel接口配置、dvpn-class配置、以及dvpn-policy四个方面进行介绍配置步骤。
通过该命令控制设备是否支持DVPN功能。如果Server禁止DVPN功能,已经建立的DVPN会话会等待超时以后进行删除,而不会立即删除。
请在Client和Server端的系统视图下进行下列配置。
表6-1 使能/禁止DVPN配置
操作 |
命令 |
使能DVPN功能 |
dvpn service enable |
禁止DVPN功能 |
undo dvpn service enable |
缺省情况下,系统使能DVPN功能。
通过该命令可以在Server上配置身份验证信息(即pre-shared-key)。在Client需要对Server进行身份验证时,Client需要指定需要接入的Server的pre-shared-key,而且和Server的pre-shared-key必须一致。
请在Server端的系统视图下进行下列配置。
表6-2 配置Server的pre-shared-key
操作 |
命令 |
配置Server的pre-shared-key |
dvpn server pre-shared-key key |
删除Server的pre-shared-key |
undo dvpn server pre-shared-key |
缺省情况下,系统没有配置pre-shared-key。
服务器支持对需要接入DVPN的客户端进行身份验证,目前支持的验证方式有PAP、CHAP、NONE。通过该命令可以在Server端指定对Client进行身份验证的方式,当Client进行DVPN接入时,如果没有配置相应的策略,则会使用该命令指定的验证方式对Client进行身份验证。
请在Server端的系统视图下进行下列配置。
表6-3 配置对client的验证方式
操作 |
命令 |
配置对Client的身份认证方式 |
dvpn server authentication-client method { none | { chap | pap } [ domain isp-name ] } |
缺省情况下,不对Client进行身份验证。
对于注册不成功的Map,可以通过在Server端配置Map的老化时间进行删除。如果Client已经注册成功,Map会和创建的Session同时存在。
请在系统视图下进行下列配置。
表6-4 配置Map的老化时间
操作 |
命令 |
配置Map的老化时间 |
dvpn server map age-time time |
恢复Map的老化时间为默认值 |
undo dvpn server map age-time |
缺省情况下,Map的老化时间为30秒。
Client在向Server进行注册时,可以连续多次向Server发起注册,如果一次注册失败,则Client经过一定的注册时间间隔后,会再次向Server进行注册。时间间隔可以在Client端进行配置。
请在Client端的系统视图下进行下列配置。
表6-5 配置Client注册的时间间隔
操作 |
命令 |
配置Client注册的时间间隔 |
dvpn client register-interval time-interval |
恢复Client注册时间间隔为缺省值 |
undo dvpn client register-interval |
缺省情况下,Client注册的时间间隔为10秒。
Client在向Server进行注册时,如果注册失败可以连续多次向Server发起注册,如果超过最大允许注册次数,则Client会进入dumb状态。可以通过在Client端配置下面的命令来设置一次注册最大的尝试次数。
请在Client端的系统视图下进行下列配置。
表6-6 配置Client注册次数
操作 |
命令 |
配置Client注册次数 |
dvpn client register-retry times |
恢复Client注册次数为缺省值 |
undo dvpn client register-retry |
缺省情况下,Client注册次数为3次。
注意:
处于dumb状态的Client不会向Server进行注册。
Client在向Server进行注册时,连续多次向Server发起注册,当Client注册失败的次数超过最大允许注册次数时,则Client会进入dumb状态。处于dumb状态的Client不会向Server进行注册,只有经过了dumb时间,Client才会重新向Server进行注册。
请在Client端的系统视图下进行下列配置。
表6-7 配置Client的dumb时间
操作 |
命令 |
配置Client的dumb时间 |
dvpn client register-dumb time |
恢复Client的dumb时间为默认值 |
undo dvpn client register-dumb |
缺省情况下,Client的dumb时间为300秒。
在配置DVPN其他参数前,请务必在Tunnel接口上封装UDP DVPN。
请在Client和Server端的Tunnel接口视图下进行下列配置。
表6-8 设置Tunnel接口报文的封装模式
操作 |
命令 |
设置Tunnel接口报文的封装格式 |
tunnel-protocol udp dvpn |
缺省情况下,封装为GRE方式。
Server端应选择Server,Client端应选择Client。
请在Client端和Server端的Tunnel接口视图下进行下列配置。
表6-9 设置Tunnel接口的类型
操作 |
命令 |
配置Tunnel接口的类型 |
dvpn interface-type { client | server } |
恢复Tunnel接口的缺省类型 |
undo dvpn interface-type |
缺省情况下,Tunnel接口为client类型。
本命令仅在Client端使用。当客户端向服务器进行注册时,客户端可以请求服务器转发由此客户端发送的数据包,并且还可以通告服务器不允许将本客户端的注册信息发布给其他客户端。
请在Client端的Tunnel接口视图下进行下列配置。
表6-10 配置DVPN客户端的注册类型
操作 |
命令 |
配置DVPN客户端的注册类型 |
dvpn register-type { forward | undistributed } * |
取消DVPN客户端所配置的注册类型 |
undo dvpn register-type { forward | undistributed } * |
缺省情况下,并未配置客户端的注册类型。
本命令用来配置Tunnel接口所属的DVPN域的标识,属于同一DVPN域的Tunnel接口应配置相同的dvpn-id。
请在Client端和Server端的Tunnel接口视图下进行下列配置。
表6-11 配置Tunnel接口所属的VPN
操作 |
命令 |
配置Tunnel接口所属的VPN |
dvpn dvpn-id dvpn-id |
删除Tunnel接口所属的VPN |
undo dvpn dvpn-id |
缺省情况下,Tunnel接口没有配置DVPN域标识。
Tunnel接口的源端地址或源接口,即发出DVPN报文的接口地址。Tunnel的源端地址与目的端地址唯一标识了一个通道。这些配置在Server及Client两端必须配置,且两端地址互为源地址和目的地址。
请在Client和Server端的Tunnel接口视图下进行下列配置。
表6-12 设置Tunnel接口的源端地址
操作 |
命令 |
设置Tunnel接口的源端地址或源接口 |
source { X.X.X.X | interface-type interface-num } |
删除Tunnel接口的源端地址或源接口 |
undo source |
本命令仅在Client端使用。在Client端的dvpn-class视图下配置好Server的各种参数属性,然后使用下面命令引用相应的dvpn-class-name。
请在Client端的Tunnel接口视图下进行下列配置。
表6-13 配置Tunnel接口使用的dvpn-class
操作 |
命令 |
配置Tunnel接口使用的dvpn-class名称 |
dvpn server dvpn-class-name |
删除Tunnel接口使用的dvpn-class名称 |
undo dvpn server dvpn-class-name |
缺省情况下,接口没有应用dvpn-class。
本命令仅在Server端使用。在Server端的dvpn-policy视图下配置好策略的各种参数,然后可以使用下面命令将策略应用到DVPN域中。
请在Server端的Tunnel接口视图下进行下列配置。
表6-14 配置Tunnel接口的dvpn-policy
操作 |
命令 |
配置Tunnel接口的dvpn-policy |
dvpn policy dvpn-policy-name |
删除Tunnel接口的dvpn-policy |
undo dvpn policy dvpn-policy-name |
缺省情况下,接口没有应用dvpn-policy。
dvpn security acl需要与acl以及rule命令配合使用,当rule命令匹配的关键字为deny时,表示对于rule命令deny掉的数据报文不进行IPSec加密,若rule命令匹配的关键字为permit,对于该配置则无实际意义。
请在Tunnel接口视图下进行下列配置。
表6-15 配置IPSec加密数据流
操作 |
命令 |
配置IPSec加密的数据流 |
dvpn security acl acl-number |
删除IPSec加密的数据流 |
undo dvpn security acl |
缺省情况下,对接口的所有数据进行IPSec加密。
在dvpn-class视图下主要用来配置指定Server的相关信息,主要包括私网IP地址、公网IP地址、用户名等,用于Client在指定Server上进行注册,以下配置在Client端进行配置,应与Server端的实际配置保持一致。
可以通过下面的命令创建并进入dvpn-class视图,或者删除已经存在的dvpn-class。如果当前dvpn-class正在被Dvpn使用,则不能直接进行删除。
请在系统视图下进行下列配置。
操作 |
命令 |
创建并进入dvpn-class视图 |
dvpn class dvpn-class-name |
删除dvpn-class视图 |
undo dvpn class dvpn-class-name |
缺省情况下,没有配置任何dvpn-class。
这里的公网IP地址指Server提供的固定的公有IP地址。
请在dvpn-class视图下进行下列配置。
表6-17 配置Server端的公网IP地址
操作 |
命令 |
配置Server的公网IP地址 |
public-ip ip-address |
删除Server的公网IP地址 |
undo public-ip |
缺省情况下,没有指定Server的公网IP地址。
这里的私网IP地址指Server接入DVPN域的Tunnel接口的IP地址。
请在dvpn-class视图下进行下列配置。
表6-18 配置Server端的私网IP地址
操作 |
命令 |
配置Server的私网IP地址 |
private-ip ip-address |
删除Server的私网IP地址 |
undo private-ip |
缺省情况下,没有指定Server的私网IP地址。
DVPN的注册控制报文的报文内容必须进行加密保护,通过注册过程的算法套件确定注册报文的加密算法、验证算法以及密钥协商算法。
请在dvpn-class视图下进行下列配置。
操作 |
命令 |
配置注册过程的算法套件 |
algorithm-suite suite-number |
恢复缺省的注册过程的算法套件 |
undo algorithm-suite |
缺省情况下,注册过程的算法套件为 1,即DES-MD5-GROUP1。其他的算法套件请参考命令手册的相关内容。
客户端对其需要接入的服务器端可使用pre-shared-key进行身份验证方式。
请在dvpn-class视图下进行下列配置。
表6-20 配置Client对Server的验证方式
操作 |
命令 |
配置使用pre-shared-key进行身份认证 |
authentication-server method pre-share |
配置不对Server进行身份认证 |
authentication-server method none |
缺省情况下,Client不对Server进行身份验证。
该命令用于在Client端配置pre-shared-key,要求和其接入的Server端的pre-shared-key一致,Client才可以在Server上注册成功。
请在dvpn-class视图下进行下列配置。
表6-21 配置Server的pre-shared-key
操作 |
命令 |
配置用于验证Server的pre-shared-key |
pre-shared-key key |
删除用于验证Server的pre-shared-key |
undo pre-shared-key |
缺省情况下,没有配置pre-shared-key。
用户名和密码在Client注册到Server时使用,如果Server需要对接入的Client进行身份认证,则Client必须在dvpn-class配置用户信息。
请在dvpn-class视图下进行下列配置。
表6-22 配置Client的用户名和密码
操作 |
命令 |
配置Client端的用户名和密码 |
local-user username password { simple | cipher } password |
删除Client端的用户名和密码 |
undo local-user |
缺省情况下,没有配置用户名和密码。
在dvpn-policy视图下主要用来配置指定DVPN的策略信息,主要包括会话的算法、数据IPSec的算法、以及各种时间参数等。Client在Server上注册成功后,Server会对注册成功的Client发送DVPN引用的策略。
注意:
如果要修改并应用已经配置好的策略,必须重起路由器或shutdown/undo shutdown隧道接口,否则新的策略不会生效。
当dvpn-policy视图已经存在,可以通过下面的命令进入dvpn-policy视图,或者删除已经存在的dvpn-policy。如果dvpn-policy正在被DVPN使用,则不能直接进行删除。
请在系统视图下进行下列配置。
操作 |
命令 |
创建并进入dvpn-policy视图 |
dvpn policy dvpn-policy-name |
删除dvpn-policy视图 |
undo dvpn policy dvpn-policy-name |
缺省情况下,没有配置任何dvpn-policy。
服务器支持对需要接入的DVPN客户端进行身份验证,目前支持的验证方式有PAP、CHAP、none。
请在dvpn-policy视图下进行下列配置。
表6-24 配置对client的验证方式
操作 |
命令 |
配置对Client的身份认证方式 |
authentication-client method { none | { chap | pap } [ domain isp-name ] } |
缺省情况下,不对Client进行身份验证。
DVPN会话协商的控制报文支持DES、3DES、AES加密算法和MD5、SHA1验证算法,以及DH-group1、DH-group2密钥协商算法。通过下面的命令可以选择会话控制报文使用的算法。
请在dvpn-policy视图下进行下列配置。
操作 |
命令 |
配置会话的加密算法套件 |
session algorithm-suite suite-number |
恢复会话的加密算法套件为缺省值 |
undo session algorithm-suite |
缺省情况下,会话控制报文的算法套件为1,即DES加密算法、MD5验证算法和DH-group1密钥协商算法。
会话在空闲超时时间内没有接收到任何的数据报文,则会话空闲超时断开。
请在dvpn-policy视图下进行下列配置。
操作 |
命令 |
配置会话的空闲超时时间 |
session idle-time time-interval |
恢复会话的空闲超时时间为缺省值 |
undo session idle-time |
缺省情况,会话的空闲超时时间为300秒。
会话在建立成功后,会话的主动端会定时的发送keepalive报文探测会话连接是否正常。当会话连接有数据报文发送时,就不需要发送keepalive报文。
请在dvpn-policy视图下进行下列配置。
操作 |
命令 |
配置会话的保活时间 |
session keepalive-interval time-interval |
恢复会话的保活时间为缺省值 |
undo session keepalive-interval |
缺省情况,会话的保活时间为10秒。
会话在建立过程中,发起会话建立请求的主动端,如果建立不成功,会在会话建立请求时间间隔以后再进行会话建立请求。如果连续三次发送会话建立请求都没能成功建立会话通道,则认为会话建立失败。
请在dvpn-policy视图下进行下列配置。
操作 |
命令 |
配置会话建立请求的时间间隔 |
session setup-interval time-interval |
恢复会话建立请求的时间间隔为缺省值 |
undo session setup-interval |
缺省情况,会话建立请求时间间隔为10秒。
DVPN的数据报文使用IPSec进行数据的加密保护, 目前IPSec支持DES、3DES、AES加密算法和MD5、SHA1验证算法。通过下面的命令可以选择IPSec SA处理转发数据使用的算法套件。
请在dvpn-policy视图下进行下列配置。
表6-29 配置IPSec的算法套件
操作 |
命令 |
配置IPSec SA的算法套件 |
data algorithm-suite suite-number |
恢复IPSec SA的算法套件为缺省值 |
undo data algorithm-suite |
缺省情况下,数据报文的算法套件为1,即DES加密算法、MD5验证算法。
DVPN策略可以指定数据加密使用的IPSec SA的生存周期。请在dvpn-policy视图下进行下列配置。
表6-30 配置IPSec SA的生存周期
操作 |
命令 |
配置IPSec SA的生存周期 |
data ipsec-sa duration time-based time-interval |
恢复IPSec SA的生存周期为缺省值 |
undo data ipsec-sa duration time-based |
缺省情况下,IPSec SA的生存周期为3600秒。
完成上述配置后,在所有视图下执行display命令可以查看DVPN配置后的运行情况。
在用户视图下执行reset命令可以清除该运行情况。
在用户视图下执行debugging命令可以对DVPN进行调试。
表6-31 动态VPN的显示和调试
操作 |
命令 |
DVPN的调试开关 |
[ undo ] debugging dvpn { all | error | event { all | register | session | misc } | hexadecimal | packet { all | control | data | ipsec } } |
显示系统DVPN的全局信息或DVPN域信息 |
display dvpn info { dvpn-id dvpn-id | global } |
显示DVPN的Map信息。 |
display dvpn map { all | dvpn-id vpn-id | public-ip public-ip } |
显示DVPN的会话信息 |
display dvpn session { all | dvpn-id dvpn-id [ private-ip private-ip ] } |
显示DVPN的IPSec SA信息 |
display dvpn ipsec-sa { all | dvpn-id dvpn-id [ private-ip private-ip ] } |
显示DVPN在线用户信息 |
display dvpn online-user |
清除DVPN接入 |
reset dvpn all dvpn-id |
删除DVPN的map |
reset dvpn map public-ip port [ client-id ] |
删除DVPN的会话 |
reset dvpn session dvpn-id private-ip |
清除DVPN的统计信息 |
reset dvpn statistics |
& 说明:
如果在修改dvpn policy后想应用新的策略,必须重起路由器或shutdown/undo shutdown隧道接口,reset命令不会应用新的policy。
如下图所示,总部和两个分支机构分支A和分支B分别建立DVPN连接,其中分支一的私有网络需要通过NAT转换与总部私有网络连接,需要实现DVPN的NAT穿越。
l 在注册和会话过程中需要使用缺省的算法套件1,即加密算法为DES、验证算法为MD5,使用DH-group1算法进行密钥协商。
l 数据传输采用IPSec进行加密保护,也使用缺省的算法套件1,即加密算法为DES、验证算法为MD5,使用DH-group1算法进行密钥协商。
图6-3 DVPN和NAT配合使用典型组网图
(1) 配置Server
# 配置GigabitEthernet1/0接口。
[Server] interface gigabitethernet 1/0
[Server-GigabitEthernet1/0] ip address 201.1.1.1 255.255.255.0
[Server-GigabitEthernet1/0] quit
# 配置GigabitEthernet 2/0接口。
[Server] interface gigabitethernet 2/0
[Server-GigabitEthernet 2/0] ip address 10.0.1.1 255.255.255.0
[Server-GigabitEthernet 2/0] quit
# 配置Tunnel0接口。
[Server] interface tunnel 0
[Server-Tunnel0] tunnel-protocol udp dvpn
[Server-Tunnel0] dvpn interface-type server
[Server-Tunnel0] ip address 10.0.0.1 255.255.255.0
[Server-Tunnel0] source gigabitethernet 1/0
[Server-Tunnel0] dvpn dvpn-id 1
[Server-Tunnel0] quit
# 配置路由信息。
[Server] ip route-static 10.0.2.0 255.255.255.0 10.0.0.2
[Server] ip route-static 10.0.3.0 255.255.255.0 10.0.0.3
(2) 配置NAT设备
# 配置GigabitEthernet1/0接口。
[Nat] interface gigabitethernet 1/0
[Nat-GigabitEthernet1/0] ip address 201.1.1.2 255.255.255.0
[Nat-GigabitEthernet1/0] nat outbound 3000
[Nat-GigabitEthernet1/0] quit
# 配置GigabitEthernet 2/0接口。
[Nat] interface gigabitethernet 2/0
[Nat-GigabitEthernet 2/0] ip address 192.168.1.1 255.255.255.0
[Nat-GigabitEthernet 2/0] quit
# 配置ACL。
[Nat] acl number 3000
[Nat-Acl-Adv-3000] rule permit ip
# 配置静态路由。
[Nat] ip route-static 10.0.2.0 255.255.255.0 192.168.1.2
(3) 配置Client1
# 配置GigabitEthernet1/0接口。
[Client1] interface gigabitethernet 1/0
[Client1-GigabitEthernet1/0] ip address 192.168.1.2 255.255.255.0
[Client1-GigabitEthernet1/0] quit
# 配置GigabitEthernet 2/0接口。
[Client1] interface gigabitethernet 2/0
[Client1-GigabitEthernet 2/0] ip address 10.0.2.1 255.255.255.0
[Client1-GigabitEthernet 2/0] quit
# 配置dvpn-class。
[Client1] dvpn class testserver
[Client1-class-testserver] public-ip 201.1.1.1
[Client1-class-testserver] quit
# 配置Tunnel0接口属性。
[Client1] interface tunnel 0
[Client1-Tunnel0] ip address 10.0.0.2 255.255.255.0
[Client1-Tunnel0] tunnel-protocol udp dvpn
[Client1-Tunnel0] source gigabitethernet 1/0
[Client1-Tunnel0] dvpn interface-type client
[Client1-Tunnel0] dvpn server testserver
[Client1-Tunnel0] dvpn dvpn-id 1
[Client1-Tunnel0] quit
# 配置静态路由。
[Client1] ip route-static 10.0.1.0 255.255.255.0 10.0.0.1
[Client1] ip route-static 10.0.3.0 255.255.255.0 10.0.0.3
[Client1] ip route-static 201.1.1.0 255.255.255.0 192.168.1.1
(4) 配置Client2
# 配置GigabitEthernet1/0接口。
[Client2] interface gigabitethernet 1/0
[Client2-GigabitEthernet1/0] ip address 201.1.1.3 255.255.255.0
[Client2-GigabitEthernet1/0] quit
# 配置GigabitEthernet 2/0接口。
[Client2] interface gigabitethernet 2/0
[Client2-GigabitEthernet 2/0] ip address 10.0.3.1 255.255.255.0
[Client2-GigabitEthernet 2/0] quit
# 配置dvpn-class。
[Client2] dvpn class testserver
[Client2-class-testserver] public-ip 201.1.1.1
[Client2-class-testserver] quit
# 配置Tunnel0接口属性。
[Client2] interface tunnel 0
[Client2-Tunnel0] ip address 10.0.0.3 255.255.255.0
[Client2-Tunnel0] tunnel-protocol udp dvpn
[Client2-Tunnel0] source gigabitethernet 1/0
[Client2-Tunnel0] dvpn interface-type client
[Client2-Tunnel0] dvpn server testserver
[Client2-Tunnel0] dvpn dvpn-id 1
[Client2-Tunnel0] quit
# 配置静态路由。
[Client2] ip route-static 10.0.1.0 255.255.255.0 10.0.0.1
[Client2] ip route-static 10.0.2.0 255.255.255.0 10.0.0.2
如下图所示,总部需要与分支A通过DVPN构建虚拟私有网络,与分支B通过GRE构建虚拟私有网络,这样总部与分支A及分支B共同构建一个大的VPN网络。在该网络中需要实现:
l Server对接入DVPN的Client1进行身份认证;
l Client1对需要接入的Server也进行身份认证。
图6-4 DVPN和GRE配合使用典型组网图
(1) 配置Server
# 配置GigabitEthernet1/0接口。
[Server] interface gigabitethernet 1/0
[Server-GigabitEthernet1/0] ip address 201.1.1.1 255.255.255.0
[Server-GigabitEthernet1/0] quit
# 配置GigabitEthernet 2/0接口。
[Server] interface gigabitethernet 2/0
[Server-GigabitEthernet 2/0] ip address 10.0.1.1 255.255.255.0
[Server-GigabitEthernet 2/0] quit
# 配置Server的身份pre-shared-key。
[Server] dvpn server pre-shared-key 123456
# 配置DVPN policy。
[Server] dvpn policy testpolicy
[Server-Policy-testpolicy] authentication-client method chap domain dvpn
[Server-Policy-testpolicy] data algorithm-suite 7
[Server-Policy-testpolicy] session algorithm-suite 12
[Server-Policy-testpolicy] quit
# 配置DVPN使用的验证域使用本地验证。
[Server] domain dvpn
[Server-isp-dvpn] scheme local
# 配置DVPN本地用户。
[Server] local-user dvpnuser
[Server-luser-dvpnuser] password simple dvpnuser
[Server-luser-dvpnuser] service-type dvpn
[Server-luser-dvpnuser] quit
# 配置DVPN使用的Tunnel0接口。
[Server] interface tunnel 0
[Server-Tunnel0] tunnel-protocol udp dvpn
[Server-Tunnel0] dvpn interface-type server
[Server-Tunnel0] ip address 10.0.0.1 255.255.255.0
[Server-Tunnel0] source gigabitethernet 1/0
[Server-Tunnel0] dvpn dvpn-id 1
[Server-Tunnel0] dvpn policy testpolicy
[Server-Tunnel0] quit
# 配置GRE使用的Tunnel1接口。
[Server] interface tunnel 1
[Server-Tunnel1] ip address 10.1.0.1 255.255.255.0
[Server-Tunnel1] destination 201.1.1.3
[Server-Tunnel1] source gigabitethernet 1/0
[Server-Tunnel1] quit
# 配置路由信息。
[Server] ip route-static 10.1.2.0 255.255.255.0 tunnel1
[Server] ip route-static 10.0.2.0 255.255.255.0 10.0.0.2
(2) 配置Client1
# 配置GigabitEthernet1/0接口。
[Client1] interface gigabitethernet 1/0
[Client1-GigabitEthernet1/0] ip address 201.1.1.2 255.255.255.0
[Client1-GigabitEthernet1/0] quit
# 配置GigabitEthernet 2/0接口。
[Client1] interface gigabitethernet 2/0
[Client1-GigabitEthernet 2/0] ip address 10.0.2.1 255.255.255.0
[Client1-GigabitEthernet 2/0] quit
# 配置dvpn-class。
[Client1] dvpn class testserver
[Client1-class-testserver] public-ip 201.1.1.1
[Client1-class-testserver] authentication-server method pre-share
[Client1-class-testserver] pre-shared-key 123456
[Client1-class-testserver] local-user dvpnuser@dvpn password simple dvpnuser
[Client1-class-testserver] quit
# 配置Tunnel0接口属性。
[Client1] interface tunnel 0
[Client1-Tunnel0] ip address 10.0.0.2 255.255.255.0
[Client1-Tunnel0] tunnel-protocol udp dvpn
[Client1-Tunnel0] source gigabitethernet 1/0
[Client1-Tunnel0] dvpn interface-type client
[Client1-Tunnel0] dvpn server testserver
[Client1-Tunnel0] dvpn dvpn-id 1
[Client1-Tunnel0] quit
# 配置静态路由。
[Client1] ip route-static 10.0.1.0 255.255.255.0 10.0.0.1
[Client1] ip route-static 10.1.2.0 255.255.255.0 10.0.0.1
(3) 配置Client2
# 配置GigabitEthernet1/0接口。
[Client2] interface gigabitethernet 1/0
[Client2-GigabitEthernet1/0] ip address 201.1.1.3 255.255.255.0
[Client2-GigabitEthernet1/0] quit
# 配置GigabitEthernet 2/0接口。
[Client2] interface gigabitethernet 2/0
[Client2-GigabitEthernet 2/0] ip address 10.1.2.1 255.255.255.0
[Client2-GigabitEthernet 2/0] quit
# 配置Tunnel0接口属性。
[Client2] interface tunnel 0
[Client2-Tunnel0] ip address 10.1.0.2 255.255.255.0
[Client2-Tunnel0] source gigabitethernet 1/0
[Client2-Tunnel0] destination 201.1.1.1
[Client2-Tunnel0] quit
# 配置静态路由。
[Client2] ip route-static 10.0.1.0 255.255.255.0 10.1.0.1
[Client2] ip route-static 10.0.2.0 255.255.255.0 10.1.0.1
不同款型规格的资料略有差异, 详细信息请向具体销售和400咨询。H3C保留在没有任何通知或提示的情况下对资料内容进行修改的权利!