Cisco IPSec VPN实战指南（异步图书）
Author: 秦柯
Date: 2012-05-02T00:00:00+00:00
Publisher: 人民邮电出版社

目录

封面

扉页

关于作者

献词

致谢

前言

第1章 VPN技术简介

1.1 VPN产生背景

1.2 VPN的两种连接方式

1.2.1 站点到站点（Site to Site）

1.2.2 远程访问（Remote Access）

第2章 GRE

2.1 GRE技术简介

2.2 GRE基本实验

2.2.1 实验实际接线状况介绍

2.2.2 实验拓扑

2.2.3 实验介绍

2.2.4 基本网络配置

2.2.5 GRE 和动态路由协议OSPF 配置

2.2.6 查看状态与测试

第3章 IPSec基本理论

3.1 基本原理介绍

3.2 IPSec框架

3.2.1 散列函数

3.2.2 加密算法

3.2.3 封装协议

3.2.4 密钥有效期

3.3 互联网密钥交换协议IKE（Internet Key Exchange）

3.3.1 IKE 与ISAKMP

3.3.2 IKE 的2 个阶段与3 个模式

第4章 站点到站点IPSec VPN

4.1 经典站点到站点IPSec VPN

4.1.1 实际接线状况

4.1.2 实验拓扑介绍

4.1.3 基本IP 地址配置

4.1.4 VPN 路由分析

4.1.5 IOS IPSec VPN 的经典配置

4.1.6 测试IPSec VPN

4.1.7 查看IPSec VPN 的相关状态

4.2 ASA站点到站点IPSec VPN

4.2.1 实际接线状况

4.2.2 实验拓扑介绍

4.2.3 基本网络配置

4.2.4 ASA 站点到站点 IPSec VPN 配置

4.2.5 测试IPSec VPN

4.2.6 ASA 查看IPSec VPN 的相关状态

4.3 路由器GRE Over IPSec站点到站点VPN

4.3.1 经典IPSec VPN 配置方式问题分析

4.3.2 分析GRE Over IPSec 解决问题的思路

4.3.3 实际接线状况

4.3.4 实验拓扑介绍

4.3.5 基本网络配置

4.3.6 配置GRE 隧道

4.3.7 配置动态路由协议OSPF

4.3.8 配置IPSec VPN 保护站点间GRE 流量

4.3.9 测试与查看GRE Over IPSec

4.3.10 其他GRE over IPSec 配置方式

4.4 路由器SVTI站点到站点VPN

4.4.1 VTI 技术介绍

4.4.2 实际接线状况

4.4.3 实验拓扑介绍

4.4.4 基本网络配置

4.4.5 配置SVTI 隧道

4.4.6 测试并查看隧道状况

4.4.7 配置动态路由协议OSPF

4.5 总结

第5章 影响IPSec VPN的网络问题

5.1 动态地址问题

5.1.1 问题描述

5.1.2 动态crypto map 实验

5.2 动态DNS（DDNS）技术介绍

5.2.1 DDNS 技术介绍

5.2.2 DDNS 在IPSec VPN 的使用

5.2.3 DDNS 在IOS上的配置

5.3 加密设备NAT对IPSec VPN的影响

5.3.1 问题描述

5.3.2 加密设备NAT问题分析实验

5.4 中间网络ASA防火墙对IPSec VPN的影响

5.4.1 问题描述

5.4.2 CiscoASA 防火墙对IPSec VPN 的影响实验

5.5 中间网络PAT对IPSec VPN的影响

5.5.1 问题描述

5.5.2 PAT 地址转换技术对IPSec VPN 的影响实验

第6章 IPSec VPN中的高可用性技术

6.1 IPSec VPN高可用性技术介绍

6.2 DPD技术介绍

6.2.1 DPD 技术描述

6.2.2 DPD工作模式

6.2.3 DPD 技术测试

6.3 RRI技术介绍

6.3.1 技术描述

6.3.2 RRI 技术配置与测试

6.4 链路备份的IPSec VPN介绍

6.4.1 链路备份IPSec VPN

6.4.2 链路备份IPSec VPN 配置与测试

6.5 设备备份IPSec VPN（Redundancy VPN）介绍

6.5.1 设备备份IPSec VPN

6.5.2 设备备份IPSec VPN（Redundancy VPN）配置与测试

6.6 高可用性站点到站点IPSec VPN最佳方案

6.6.1 高可用性站点到站点IPSec VPN 最佳方案

6.6.2 高可用性站点到站点IPSec VPN 最佳方案配置与测试

第7章 动态多点VPN（DMVPN）

7.1 DMVPN介绍

7.1.1 传统IPSec VPN 高可用性问题分析

7.1.2 DMVPN 的优点

7.1.3 DMVPN 的4 大组成协议

7.2 经典DMVPN实验

7.2.1 实际接线状况

7.2.2 实验拓扑

7.2.3 基本网络配置

7.2.4 mGRE 与NHRP 配置

7.2.5 测试 NHRP

7.2.6 动态路由协议EIGRP 配置

7.2.7 测试与调整EIGRP

7.2.8 配置IPSec VPN

7.2.9 查看DMVPN状态

7.2.10 MVPN 中“包治百病”的“大招”

7.3 DMVPN第三阶段

7.3.1 DMVPN 三个发展阶段介绍

7.3.2 DMVPN 三个发展阶段比较表

7.3.3 DMVPN 第二阶段与第三阶段分支站点间隧道处理方法比较表

7.3.4 DMVPN 第二阶段NHRP 工作流程介绍

7.3.5 DMVPN 第三阶段NHRP 工作流程介绍

7.3.6 第三阶段DMVPN 实验

7.4 DMVPN两种高可用性解决方案

7.4.1 解决方案1：单云双中心

7.4.2 DMVPN 单云双中心配置

7.4.3 解决方案2：双云双中心

7.4.4 DMVPN 双云双中心配置

第8章 组加密传输VPN（GETVPN）

8.1 GETVPN概述

8.2 传统IPSec VPN在企业网内部部署时出现的问题

8.2.1 问题1：影响QoS

8.2.2 问题2：点对点IPSec SA 造成的问题

8.2.3 问题3：覆盖路由（Overlay routing）问题

8.3 GETVPN技术介绍

8.4 GETVPN如何解决传统IPSec VPN所带来的问题

8.4.1 解决问题1：影响QoS

8.4.2 解决问题2：点对点IPSec SA 问题

8.4.3 解决问题3：覆盖路由（Overlay routing）问题

8.5 GETVPN与传统IPSec VPN技术的比较

8.6 GETVPN三大组成部分

8.7 GETVPN工作流程图

8.8 两种GETVPN的密钥

8.9 GETVPN的3种安全关联（SA）

8.10 GETVPN的网络流量

8.11 协作密钥服务器（Cooperative Key Server）

8.12 GETVPN密钥更新特点

8.13 GETVPN中的防重放攻击技术

8.14 GETVPN感兴趣流访问控制列表配置指南

8.15 GETVPN实验

8.15.1 实际接线状况

8.15.2 实验拓扑

8.15.3 基本网络与OSPF 配置

8.15.4 首要和次要密钥服务器同步RSA 密钥

8.15.5 首要密钥服务器上的GETVPN 配置

8.15.6 组成员一GETVPN 配置

8.15.7 GETVPN crypto map 调用位置分析

8.15.8 组成员二GETVPN 配置

8.15.9 查看首要服务器GETVPN 状态

8.15.10 查看组成员GETVPN 状态

8.15.11 组成员上测试GETVPN 的加解密

8.15.12 在首要密钥服务器KS1 上配置次要密钥服务器KS2

8.15.13 配置次要密钥服务器KS2

8.15.14 查看协作密钥服务器

8.15.15 组成员访问控制列表配置

8.16 教主自创版DMVPN + GETVPN实验

8.16.1 实验设计介绍

8.16.2 实际接线状况

8.16.3 实验拓扑

8.16.4 基本网络配置

8.16.5 mGRE 隧道配置

8.16.6 静态路由配置

8.16.7 配置密钥服务器KS

8.16.8 配置组成员

8.16.9 测试

第9章 Easy VPN

9.1 Easy VPN简介

9.1.1 Easy VPN 特点介绍

9.1.2 Easy VPN 中心站点管理的内容

9.1.3 Easy VPN 的部署

9.1.4 Easy VPN IKE 第一阶段两种认证方式

9.2 主动模式3个数据包交换介绍

9.3 Cisco EzVPN IKE 的三个阶段

9.3.1 Cisco EzVPN IKE 第一阶段介绍

9.3.2 Cisco EzVPN IKE 第1.5 阶段介绍

9.3.3 Easy VPN IKE 第二阶段介绍

9.4 Cisco EzVPN软件客户端安装

9.5 EzVPN经典配置实验

9.5.1 实际接线状况

9.5.2 实验拓扑

9.5.3 基本网络配置

9.5.4 Windows XP 基本网络配置

9.5.5 Center 路由器上EzVPN 服务器配置

9.5.6 配置Windows XP 上的EzVPN 软件客户端并查看状态

9.6 EzVPN特性

9.6.1 分割隧道（Split Tunneling）

9.6.2 保存密码（save-password）

9.6.3 备用网关（backup-gateway）

9.6.4 其他EzVPN 特性

9.7 EzVPN硬件客户端

9.7.1 EzVPN 硬件客户端的3 种工作模式

9.7.2 配置EzVPN 硬件客户端客户模式

9.8 测试EzVPN各种模式的特性

9.8.1 测试客户模式

9.8.2 客户模式加上分割隧道

9.9 ISAKMP Profile 技术

9.9.1 实际接线状况

9.9.2 实验拓扑

9.9.3 基本网络配置

9.9.4 配置站点到站点VPN

9.9.5 配置EzVPN

9.9.6 EzVPN 对站点到站点VPN的影响

9.9.7 EzVPN 对站点到站点VPN的影响问题分析

9.9.8 ISAKMP Profile 技术简介

9.10 Dynamic Virtual Tunnel Interface（DVTI）技术

9.10.1 实际接线状况

9.10.2 实验拓扑

9.10.3 基本网络配置

9.10.4 EzVPN DVTI 配置

9.10.5 查看EzVPN DVTI 状态

9.11 GRE Over EzVPN完美解决方案

9.11.1 配置环回口Loopback100

9.11.2 配置EzVPN

9.11.3 配置GRE 隧道

9.11.4 动态路由协议

第10章 ASA策略图

10.1 Tunnel-Group

10.1.1 站点到站点IPSec VPN Tunnel-Group 查询

10.1.2 EzVPN Tunnel-Group 查询

10.1.3 SSL VPN Tunnel-Group 查询

10.2 Group-Policy介绍

10.3 ASA基本EzVPN配置

10.3.1 实际接线状况

10.3.2 实验拓扑

10.3.3 基本网络配置

10.3.4 基本EzVPN配置

10.3.5 基本EzVPN策略图分析

10.4 策略继承位置介绍

10.4.1 第1 策略继承位置：用户属性username attribute

10.4.2 第2 策略继承位置：用户组策略user group-policy

10.4.3 第3 策略继承位置：Tunnel-Group默认组策略Default-group-policy

10.4.4 第4 策略继承位置：默认全局组策略DfltGrpPolicy

10.5 ASA策略图策略优先顺序测试

10.5.1 测试1：第1号策略继承位置

10.5.2 测试2：第2号策略继承位置

10.5.3 测试3：第3号策略继承位置

10.5.4 测试4：第4号策略继承位置

10.5.5 测试5：第5号策略继承位置

10.6 ASA策略图总结

10.7 ASA动态Crypto map 配置

10.8 ASAL2TP over IPSec 配置

附录A Cisco模拟器配置指南

版权

Cisco IPSec VPN 实战指南

秦柯　著

人民邮电出版社

北京

关于作者

秦柯，CCIE#13778，网名“现任明教教主”。于2010 年7 月创立YESLAB CCIE培训中心，是网络视频教学和网真教学的开创者之一。作者多年来一直从事网络安全、虚拟化与数据中心的教学工作，从业10年期间，总共培训出300多名CCIE安全学员。作者还开发了全套CCSP、CCIE安全、黑客技术和虚拟化与数据中心的教学资料与视频教程。这些教学资料和视频教程，得到了广大网络安全从业人员的好评。如若读者对这些资料和视频感兴趣，请通过作者的博客地址 http://blog.sina.com.cn/xrmjjz 进行查阅和下载。

献词

谨将本书献给我的妻子和我的父母：谢谢他们对我事业的支持，以及长期以来在生活上对我的照顾和关怀。

致谢

在本书的创作过程中，得到了YesLab实验室各位老师的大力帮助，在此表示感谢。尤其感谢YesLab安全团队的张雷、戴鑫和马海波老师对实验室的尽心管理，使我能够投入地创作这本书。没有你们的努力，YesLab实验室和我都不会有今天的成绩。谢谢你们！

前言

知行合一是几百年前明朝思想家王阳明首先提出的一种哲学思想，我认为在我们学习网络的时候，可以这样来理解知行合一的思想，“知”也就是理论知识，是我们行动的指导，没有理论的支撑，我们的行动会变得盲目，并且会走很多弯路。但是，“行”也很重要，对网络技术的学习而言，“行”的本职就是做实验做项目。大量的实验与来自工程中的经验，是对“知”也即理论知识的实践。并且我们在实践中得到的经验，反过来会验证我们学习的理论知识，能够对我们的理论起着升华的作用。

现在学习网络的学员或者朋友，主要分为两类，一类是以实践为主，每天忙于各种项目的实施，当遇到问题的时候才开始看看书，或者看看视频。对于理论知识不求甚解、得过且过，以能搞定项目为第一目标。另一类则是以理论为主，天天研究各种高深理论，在与同行进行交流时，动辄就是LSA的几种类型、BGP的各种选路原则，而且还动不动的对他人的理论水平评头论足，但是，他们并不了解这些理论知识在实际工程中的应用情况，甚至可以说，他们都不知道自己学习的技术到底能做些什么！

上面这两种方法虽然都是极端，但是在现实世界中却切实存在。我以为这两类学习方法都不可取，我们应该把知行合一的思想运用到网络学习中去。我们不仅仅要学习理论，更应该知道如何将学到的理论灵活运用到实际实施的项目中，并且知道这些理论到底解决了哪些实际问题。读者们在学习网络安全技术时，最能体会到这一点。有些读者在做实验时，可能会熟练进行相关配置，但是却不知道这个实验的目的是什么，其中涉及的技术到底发挥了什么作用，它们又真正解决了客户的哪些问题。而真正的技术高手不但应该知道如何配置相关实验，还应该能够将实验中所用到的技术应用到实际的工程中，以解决来自现实世界（而非实验环境）中的问题，而且他们还要基于客户的要求选择最适当、最有效的技术，只有这样，他们才称得上是对技术融会贯通，才真正称得上“高手”二字。

下面，我与读者分享一下我的学习方法，以引导大家把知行合一的思想融合到网络技术的学习中去。当然，每个人都有最适合自己的学习方法，而且我的方法也不见得能够适合所有人，但是仍然希望读者能够用来参考。我在学习时的一个最大特点就是，把学到的所有知识都实际运用起来。我的技术专长是网络安全，以前也做过很多相关的工程，现在是以培训讲师的身份在三尺讲台之上讲授网络安全知识，这在很多读者看来，我已经远离了“一线”工作，但实则不然，我仍然会注重将掌握的理论知识实施到YesLab的内部网络中，也可以说，YesLab的内部网络就是我的最前线。这样，我学习过的所有安全技术都在这个内部的网络中得到了部署。通过这种部署应用，我对安全技术理论知识的理解得到了进一步提升。除了 Cisco 安全技术之外，我还在实践中掌握了包括CheckPoint和Juniper厂商在内的安全技术。而且通过横向比较这些厂商的产品，我对它们的产品性能和优缺点也了然于胸。

当然，部署和维护这个内部网络并不轻松，网络经常被我搞得崩溃，而且每次都会让我痛不欲生。但是每当将网络重新修复之后，这种痛苦就转换为一种甘甜，如此往复，技术不断得到升华。我在讲课时经常会提到，学员在几分钟之内就轻松搞定的VPN，可能在当初花费了我两天的时间。虽然我们的处理方式都是一样的，但是我比他们知道更多错误的处理方式。这些方式尽管不正确，但是他们让我对错误产生了比较敏锐的嗅觉。我可能无法马上找到一种正确的处理方式，但是我肯定能迅速地发现一种错误方式，而这就是行动对知识的升华。而且在每一次错误发生后，我都会从一个错误的方面来验证理论知识的正确性。

当然，在学习网络时，仅有实践也是不够的，我们还需要理论知识的支撑，为此，我们需要阅读大量的技术图书（尤其推荐人民邮电出版社出版的Cisco系列的图书），而不能仅依赖于只提供问题解决方法的技术资料和视频。而只有在图书中，才会完整地包含作者对相关问题的分析，以及解决问题的思路。再就是，就某种技术而言，我们也不可能指望通阅读一本书就将其掌握，以IPSec VPN 为例，我们至少要阅读3~5本书才能真正理解该技术。毕竟，不同的作者看待问题的方法和解决问题的思路是不同的，只有当从不同的角度学习、理解这个技术之后，才能对它有一个比较深刻的认识。就像诗中说的那样“横看成岭侧成峰，远近高低各不同”。

总之，无论是学习网络安全技术，还是其他技术知识，都建议读者能够切实贯彻明朝思想家王阳明先生的“知行合一”思想，将理论应用于实践，在实践中提升对理论的认识，如此循环往复，以扎实掌握技术。

本书主要内容

本书总共分为 10章内容，外加 1 个附录。本书从加密学理论开始，分别介绍了VPN 技术、GRE 技术与配置、IPSec 基本理论、站点到站点IPSec VPN、影响IPSec VPN的网络问题、IPSec VPN 的高可用性技术、动态多点 VPN（DMVPN）、组加密传输VPN（GETVPN）、Easy VPN、ASA 策略图等知识。本书具有很强的实操性，书中所有的实验环境都能够使用虚拟机来搭建。并且每一个实验给出了详细的测试过程与结果，以帮助读者彻底掌握与实验相关的理论知识和技术，真正做到“知行合一”。

第1章，“VPN技术简介”，主要讲解VPN技术特点与分类。

第2章，“GRE”，主要介绍传统GRE VPN 技术。

第3章，“IPSec基本理论”，讲解了IPSec的协议特点与工作原理。

第4章，“站点到站点IPSec VPN”，介绍了站点到站点IPSec VPN 的架设与配置细节。

第5章，“影响IPSec VPN 的网络问题”，讨论了各种网络技术对IPSec VPN 的影响及其解决方案。

第6章，“IPSec VPN 中的高可用性技术”，讲解了IPSec VPN 相关的冗余技术。

第7章，“动态多点VPN（DMVPN）”，介绍了Cisco最具特色的DMVPN技术。

第8章，“组加密传输VPN（GETVPN）”，讲解了全新的广域网加密技术GETVPN。

第9章，“Easy VPN”，讲解了Cisco 私有的远程VPN 技术EzVPN。

第10章，“ASA策略图”，介绍了ASA的策略继承关系。

附录A，“Cisco模拟器配置指南”，介绍了本书配套模拟器的配置与使用。

本书读者对象

本书适合 Cisco 安全的初学者、希望解决实际问题的工程实施人员，以及备考CCNP安全认证的人员阅读。

第1章 VPN技术简介

1.1 VPN产生背景

随着时代的发展以及企业规模的发展壮大，企业网络也在不断发生变化。例如，一家总部设在北京的企业，可能会在上海、广州和深圳等地都设有分支机构，因此需要把各个分支机构连接在一起，以便共享资源、协同工作，提高工作效率。但传统的专线联网方式价格昂贵，一般中小企业难以负担。这时低成本的 VPN 技术就孕育而生了。VPN（Virtual Private Network）即虚拟专用网络，它可以利用廉价接入的公共网络（主要使用Internet）来传输私有数据，相较于传统的专线连网方式具有成本优势，因此被很多企业和电信运营商采用。

1.2 VPN的两种连接方式

根据客户网络接入方式的不同，VPN技术主要分为站点到站点（Site to Site）连接方式和远程访问（Remote Access）连接方式。

1.2.1 站点到站点（Site to Site）

站点到站点连接技术是一种主要的VPN连接方式，主要用于公司重要站点之间的连接。如图1-1所示，两个站点采用VPN技术虚拟地连接在一起，使得它们在通信时，就像通过普通网线一样，可以访问到对方。站点到站点的VPN技术对于终端用户而言是透明的，即用户感觉不到VPN技术的存在，而是觉得相互访问的站点位于同一个内网。

图1-1 站点到站点VPN连接示意图

站点到站点VPN连接技术主要包括下面几种。

1．GRE

GRE（Generic Routing Encapsulation，通用路由封装）协议能够对各种网络层协议（如IP和IPX）的数据报文进行封装，被封装的数据报文能够在IP网络中传输。GRE采用了Tunnel（隧道）技术，是VPN的三层隧道协议。由于GRE技术与本书重点讲解的IPSec技术关系紧密，所以在本书的后续部分会对GRE进行介绍。

2．IPSec VPN

IPsec VPN 是业界标准的网络安全协议，可以为 IP 网络通信提供透明的安全服务，保护 TCP/IP 通信免遭窃听和篡改，从而有效地抵御网络攻击。IPSec VPN 在网络的灵活性、安全性、经济性、扩展性等方面极具优势，因此越来越受到企业用户的青睐。本书将会在后文中详细介绍IPSec VPN 技术。

3．MPLS VPN

MPLS VPN 是指采用MPLS 技术在宽带IP 的骨干网络上构建企业IP 专网，以实现跨地域、安全、高速、可靠的数据、语音、图像等多业务通信。MPLS VPN 结合区分服务、流量工程等相关技术，将公共网络可靠的性能，良好的扩展性，丰富的功能与专用网的安全、灵活、高效地结合在了一起，可以为用户提供高质量的服务。MPLS VPN 已经超出了本书的范围，感兴趣的读者可以参阅人民邮电出版社出版的《MPLS和VPN体系结构》（第1卷、第2卷）等图书。

1.2.2 远程访问（Remote Access）

站点到站点VPN连接技术只能满足公司站点之间的连接，也就是说客户必须要在公司内部才能使用这种技术来连接其他站点。如果客户出差在外，希望在一个提供Internet连接的咖啡馆、飞机场或者酒店连接到公司内部，站点到站点VPN连接技术就不再适用了。在这种场合下，需要用到远程访问VPN连接技术。远程访问VPN一般需要预先在客户计算机上安装VPN客户端（客户端依据具体采用的实现技术，而有所不同），并且通过这个客户端拨号到公司VPN网关。如果拨号成功，客户就像通过一根网线虚拟地连接到公司VPN网关，然后获取公司内部网络的一个地址，并且使用这个地址来访问公司的内部服务器，如图1-2所示。

图1-2 远程访问VPN示意图

远程访问VPN连接技术有如下几种。

1．IPSec VPN

IPSec VPN 是一种全面的技术，它不仅适用于站点到站点VPN 连接方式，也能够部署远程访问VPN。我们将在本书的第8章和第9章详细介绍在Cisco路由器和ASA上的IPSec远程访问VPN。

2．VPDN

VPDN（Virtual Private Dial-up Networks，虚拟私有拨号网络）是VPN 业务的一种，具体包含的技术包括PPTP、L2TP和PPPoE等，是基于拨号用户的虚拟专用拨号网业务。即用户以拨号接入方式连网，并通过CDMA 1x 分组网络传输数据时，VPDN会对传输的数据进行封装和加密，从而保障了传输数据的私密性，并使VPN达到私有网络的安全级别。VPDN是利用IP网络的承载功能结合相应的认证和授权机制建立起来的一种安全的虚拟专用网，是一种比较传统的VPN技术。VPDN技术已经超出了本书的内容，本书并不对此技术进行详细介绍。

3．SSL VPN

SSL VPN 指的是基于安全套接层（Security Socket Layer，SSL）协议建立远程安全访问通道的VPN技术。它是近年来兴起的VPN技术，其应用随着Web的普及和电子商务、远程办公的兴起而迅速发展。SSLVPN 技术已经超出了本书的内容，本书并不对此技术进行详细介绍。

第2章 GRE

2.1 GRE技术简介

GRE是一项由Cisco公司开发的轻量级隧道协议，它能够将各种网络协议（IP协议与非IP协议）封装到IP隧道内，并通过IP互连网络在Cisco路由器间创建一个虚拟的点对点隧道链接。将GRE称为轻量级隧道协议的主要原因是，GRE头部较小，因此用它封装数据效率高。但GRE没有任何安全防护机制，因此后面章节中讲到的GRE Over IPSec 和DMVPN技术，都是使用IPSec来对GRE进行保护的。

GRE是一种典型的三层隧道封装技术，其封装结构如图2-1所示。

图2-1 GRE的封装结构

GRE封装后的数据主要由4个部分组成。其中内层IP头部和内层实际传递数据为封装负载（封装之前的数据包）。在内层IP头部之前添加一个GRE头部，再在GRE头部之前，添加一个全新的外层IP头部，从而实现GRE技术对原始IP数据包的封装。

GRE 技术的主要问题就是对封装负载不提供任何安全防护，在图 2-2 所示的 GRE 抓包实例中，可以清楚地看到 GRE数据包的外层IP头部、4个字节的GRE头部，以及内层IP头部和用户数据。其中，内层 IP 头部的源为 66.1.1.2，目的是66.1.1.1，用户数据为ICMP数据包，这也再次证明GRE技术不对它包裹的数据进行任何安全防护，我们可以通过抓包技术轻松地获取GRE传输的数据。

图2-2 GRE抓包实例分析

2.2 GRE基本实验

2.2.1 实验实际接线状况介绍

在图2-3所示的网络连接示意图中，有3台路由器，由左至右分别模拟公司站点一（Site1）、Internet 路由器（Internet）和公司站点二（Site2）。路由器 Site1 和 Site2分别使用Loopback0模拟公司内部网络。路由器Site1和Internet使用接口Fa0/0实现对接，路由器Internet和Site2使用接口Fa1/0实现对接。

图2-3 GRE基本实验实际接线图

2.2.2 实验拓扑

图2-4所示为该实验的网络拓扑。

图2-4 GRE基本实验拓扑

2.2.3 实验介绍

在图2-4中，路由器Site1和Site2分别模拟公司的两个站点，1.1.1.0/24和2.2.2.0/24分别模拟两个站点内部网络。路由器 Internet 模拟服务提供商路由器。本实验的目标就是通过GRE技术在Site1和Site2两个站点间建立一个点对点GRE隧道，并在GRE的隧道口上运行动态路由协议（OSPF），以学习彼此的内部网络路由。两个站点之间的流量通过GRE隧道封装穿越Internet。

图2-4下半部分所示为数据包在网络不同阶段的封装结构。在Site1内部网络，数据包还未被GRE封装，源IP为1.1.1.1（站点1内部PC），目的为2.2.2.2（站点2内部 PC），紧接着是内层数据。考虑到安全性等因素，这样的数据包显然不能直接在Internet上传输。在Site1和Site2之间的传输链路上，对数据包进行GRE封装，即在原始数据包外面增加一个GRE头部和一个外层IP头部，外层IP头部的源和目的分别是Site1和Site2两台路由器的公网IP地址：202.100.1.1和202.100.2.2。GRE封装后的数据包抵达Site2后被解封装，并在Site2网络内部再次表现为源IP为1.1.1.1、目的为2.2.2.2 的 IP 数据包。

2.2.4 基本网络配置

在配置GRE隧道之前，我们需要首先初始化路由器的IP地址和基本路由。例2-1、例2-2和例2-3分别显示了如何在Site1、Internet和Site2上执行基本的网络配置。

例2-1 Site1上的基本网络配置

enable

configure terminal

!

hostname Site1

!

interface Loopback0
ip address 1.1.1.1 255.255.255.0

!

interface FastEthernet0/0
ip address 202.100.1.1 255.255.255.0

no shutdown

!

ip route 0.0.0.0 0.0.0.0 202.100.1.10

注意:客户站点拥有访问Internet的默认路由

!

end

例2-2 Internet上的基本网络配置

enable

configure terminal

!

hostname Internet

!

interface FastEthernet0/0
ip address 202.100.1.10 255.255.255.0

no shutdown

!

interface FastEthernet1/0
ip address 202.100.2.10 255.255.255.0

no shutdown

!

end

注意：Intenet路由器只有直连路由，没有站点内部网络路由，这也反映了工程中的实际情况：运营商路由器只拥有Internet路由（202.100.1.0/24和202.100.2.0/24），不可能知道客户站点内部网络的路由（1.1.1.0/24和2.2.2.0/24）

例2-3 Site2上的基本网络配置

enable

configure terminal

!

hostname Site2

!

interface Loopback0
ip address 2.2.2.2 255.255.255.0

!

interface FastEthernet1/0
ip address 202.100.2.2 255.255.255.0

no shutdown

!

ip route 0.0.0.0 0.0.0.0 202.100.2.10

注意:客户站点拥有访问Internet的默认路由

!

end

2.2.5 GRE 和动态路由协议OSPF 配置

在3台路由器上完成基本网络配置之后，我们开始来配置点对点GRE隧道，这个隧道会将 Site1 和 Site2 虚拟地连接在一起。这里假定 GRE 隧道的内部网段为123.1.1.0/24，Site1地址为123.1.1.1，Site2地址为123.1.1.2/24。在这个GRE隧道上配置动态路由协议 OSPF，并且将两个站点的内部网络宣告到这个动态路由协议中。例2-4和例2-5所示分别为Site1和Site2上GRE和动态路由协议OSPF的配置。

例2-4 Site1上的GRE和OSPF 配置

Site1(config)#interface Tunnel0

Site1(config-if)# ip address 123.1.1.1 255.255.255.0

Site1(config-if)# tunnel source 202.100.1.1

Site1(config-if)# tunnel destination 202.100.2.2

Site1(config-if)#exit

Site1(config)#router ospf 1

Site1(config-router)# log-adjacency-changes Site1(config-router)# network 1.1.1.0 0.0.0.255 area 0

Site1(config-router)# network 123.1.1.0 0.0.0.255 area 0

例2-5 Site2上的GRE和OSPF 配置

Site2(config)#interface Tunnel0

Site2(config-if)# ip address 123.1.1.2 255.255.255.0

Site2(config-if)# tunnel source 202.100.2.2

Site2(config-if)# tunnel destination 202.100.1.1

Site2(config-if)#exit

Site2(config-if)#router ospf 1

Site2(config-router)# log-adjacency-changes Site2(config-router)# network 2.2.2.0 0.0.0.255 area 0

Site2(config-router)# network 123.1.1.0 0.0.0.255 area 0

2.2.6 查看状态与测试

现在查看Site1是否通过OSPF协议学习到Site2内部网络2.2.2.0/24的路由，该路由的下一跳应该为Site2隧道口地址123.1.1.2。例2-6 所示为在Site1 上执行show ip route ospf 命令后得到的查询结果。

例2-6 查看Site1通过OSPF 学习到的路由

Site1#show ip route ospf

2.0.0.0/32 is subnetted, 1 subnets O　　2.2.2.2 [110/11112] via 123.1.1.2, 00:05:34, Tunnel0

可以看到，Site1已经通过OSPF协议学习到了Site2身后内部网络的路由。现在在Site1上执行ping命令，测试Site1与Site2之间的网络连通性，如例2-7所示。其中，Site1的IP地址为1.1.1.1，Site2的IP地址为2.2.2.2。

例2-7 使用ping命令来测试Site1与Site2之间的连通性

Site1#ping 2.2.2.2 source 1.1.1.1

Type escape sequence to abort.

Sending 5, 100-byte ICMP Echos to 2.2.2.2, timeout is 2 seconds: Packet sent with a source address of 1.1.1.1

!!!!!

Success rate is 100 percent (5/5), round-trip min/avg/max = 84/185/268 ms 在Site2上使用与例2-6相同的方法，确认Site2通过OSPF学习到了Site1身后内部网络的路由，如例2-8所示。

例2-8 查看 Site2通过OSPF 学习到的路由

Site2#show ip route ospf

1.0.0.0/32 is subnetted, 1 subnets O　　1.1.1.1 [110/11112] via 123.1.1.1, 00:04:17, Tunnel0

在Site2上执行ping命令，以测试Site2与Site1之间的网络连通性，如例2-9所示。其中Site1的IP地址为1.1.1.1，Site2的IP地址为2.2.2.2。

例2-9 使用ping命令来测试Site2与Site1之间的连通性

Site2#ping 1.1.1.1 source 2.2.2.2

Type escape sequence to abort.

Sending 5, 100-byte ICMP Echos to 1.1.1.1, timeout is 2 seconds: Packet sent with a source address of 2.2.2.2

!!!!!

Success rate is 100 percent (5/5), round-trip min/avg/max = 100/156/264 ms

第3章 IPSec基本理论

3.1 基本原理介绍

IPSec 是一项标准的安全技术，它通过在数据包中插入一个预定义头部的方式，来保障OSI上层协议数据的安全。IPSec主要用于保护网络层（IP）数据，因此它提供了网络层的安全性。

图3-1所示为IPSec封装的示意图。

图3-1 IPSec封装示意图

图3-1上半部分所示是一个普通的IP数据包，下半部分所示是被IPSec加密后的数据包格式。不难看出IPSec技术在原始IP头部和IP负载之间插入了一个IPSec头部，这样可以对原始的IP负载实现加密，同时还可以实现对IPSec头部和原始IP负载的验证，以确保数据的完整性。

与我们在前一章中介绍的GRE技术相比，IPSec技术可以提供更多的安全特性，它对VPN流量提供了如下3个方面的保护。

私密性（Confidentiality）：数据私密性也就是对数据进行加密。这样一来，即使第三方能够捕获加密后的数据，也不能将其恢复成明文。

完整性（Integrity）：完整性确保数据在传输过程中没有被第三方篡改。

源认证（Authenticity）：源认证也就是对发送数据包的源进行认证，确保是合法的源发送了此数据包。

3.2 IPSec框架

一些传统的安全技术（如HTTPS）以及无线安全技术（如WEP/WPA），往往会采用某种固定的加密和散列函数。这种做法带有明显的赌博性质，因为如果某天这个加密算法曝出严重漏洞，那么使用这个加密算法或者散列函数的安全技术也就难免要遭到淘汰。为了避免这种在一棵树上吊死的悲惨事件发生，IPSec并没有定义具体的加密和散列函数。IPSec的做法是提供一个框架性的结构，但每一次IPSec会话所使用的具体算法，都是通过协商来决定的。也就是说如果我们觉得 3DES 这个算法所提供的 168 位的加密强度能够满足当前的需要，那么就不妨暂且使用这个协议来加密数据。但是只要有一天 3DES 出现了严重漏洞，或者出现了一个更好的加密协议，那么我们也可以马上更换加密协议，使 IPSec VPN 总是使用最新最好的协议来进行加密。图3-2所示为IPSec框架示意图，这张图旨在说明，不仅仅是散列函数、加密算法，还包括封装协议和模式、密钥有效期等内容都可以通过协商决定，在两个IPSec对等体之间协商的协议叫做IKE，这个协议会在本章的后续部分详细进行介绍，我们现在就以 IPSec 框架涉及的技术为主线，详细介绍这些技术的特点和工作原理。

3.2.1 散列函数

散列函数也叫做HASH函数，主流的散列算法有MD5与SHA-1。散列函数的主要任务是验证数据的完整性。通过散列函数计算得到的结果叫做散列值，这个散列值也常常被称为数据的指纹（Fingerprint）。为什么散列函数会被称为数据的指纹呢？这是因为散列函数的工作原理和日常我们对指纹采集和使用的原理几乎一样。在说明散列函数工作原理之前，我们不妨先来回想一下日常生活中我们是如何对指纹进行采集和使用的。

图3-3所示为日常生活中的指纹采集和使用示意图。

图3-2 IPSec框架示意图

图3-3 日常生活中指纹的采集和使用示意图

步骤1：公安机关预先记录“用户X”的指纹“指纹一”。

步骤2：在某一犯罪现场，公安机关获取到了“嫌疑犯”的指纹“指纹二”。

步骤3：通过查询指纹数据库发现“指纹一”等于“指纹二”。

步骤4：由于指纹的唯一性（冲突避免），可以确定犯罪“嫌疑犯”就是“用户X”。

以上就是日常生活中指纹的采集和使用方法。接下来我们通过图3-4来了解一下散列函数的工作原理，看看它是如何验证数据完整性的。

步骤1：对“重要文件”执行散列函数计算，得到散列值“散列值一”。

步骤2：现在我们收到另外一个文件“文件？”，对“文件？”进行散列函数计算得到散列值“散列值二”。

步骤 3：将“散列值一”和“散列值二”进行对比，发现“散列值一”等于“散列值二”。

步骤4：由于散列值的唯一性（冲突避免），因此可以确定“文件？”就是“重要文件”。这两份文件的每一个比特（bit）都完全相同。

图3-4 散列函数的工作原理

散列函数具有下面4个特点。

1．固定大小

散列函数可以接收任意大小的数据，并输出固定大小的散列值。以 MD5 这个散列算法为例，不管原始数据有多大，通过 MD5计算得到的散列值总是 128比特，而SHA-1的输出长度则为160比特。

2．雪崩效应

原始数据就算修改哪怕一个比特，计算得到的散列值也会发生巨大的变化。

3．单向

只可能从原始数据计算得到散列值，不可能从散列值恢复哪怕一个比特的原始数据。

4．冲突避免

几乎不能够找到另外一个数据和当前数据计算的散列值相同，因此散列函数能够确保数据的唯一性。

现在我们来看一下散列算法如何验证数据的完整性。

图3-5所示为散列函数验证数据完整性的方式。

图3-5 散列函数如何验证数据完整性

步骤 1：使用散列函数，计算需要发送的“重要文件”的散列值，得到“散列值一”。

步骤2：对需要发送的“重要文件”和步骤1计算得到的“散列值一”进行打包，然后一起发送给接收方。

步骤3：接收方对收到的“重要文件”进行散列函数计算，得到“散列值二”。

步骤4：接收方将收到文件中的“散列值一”和步骤3计算得到的“散列值二”进行对比，如果两个散列值相同，那么根据散列函数雪崩效应和冲突避免的特点，就可以确定“重要文件”的完整性，也就是这份“重要文件”在整个传输过程中没有遭到过别人的篡改。

散列函数虽然能够很好地确认数据的完整性，但是却容易遭受中间人攻击，我们来看看中间人攻击是如何进行的，如图3-6所示。

从图3-6中可以发现，合法与非法用户都可以对他们发送的信息进行散列函数计算，并得到散列值。因此他们也都能像图3-5一样把明文信息和散列值一起打包发送给接收方，而接收方也都能够通过散列函数来校验数据的完整性。因此，散列函数虽然能够确认数据的完整性，却不能确保这个数据来自于可信的源（不提供源认证），所以散列函数存在中间人攻击的问题。

为了弥补这个漏洞，我们可以使用一个叫做密钥化散列信息认证代码（HMAC， Keyed-hash Message Authentication Code）的技术，这项技术不仅仅能够实现完整性校验，还能完成源认证的任务，图3-7介绍了HMAC技术如何帮助OSPF动态路由协议实现对路由更新包的验证。

图3-6 散列函数的中间人攻击问题

图3-7 HMAC技术如何验证OSPF路由更新包（发送方）

步骤1：首先，网络管理员需要预先在要建立OSPF邻居关系的两台路由器上，通过ipospf message-digest-key 1 md5 cisco命令，配臵预共享秘密“cisco”。

步骤 2：发送方把要发送的路由更新信息加上预共享秘密一起进行散列计算，得到“散列值一”，这种联合共享秘密一起计算散列值的技术就叫做HMAC。

步骤3：发送方路由器把步骤2通过HMAC技术得到的“散列值一”和明文的路由更新信息进行封装，一起发送给接收方（注意路由更新信息是明文发送的，绝对没有进行任何加密处理）。

接下来的图3-8介绍了接收方一侧所执行的对HMAC验证的步骤。

图3-8 HMAC技术如何验证OSPF路由更新包（接收方）

步骤1：从收到的信息中提取明文的路由更新信息。

步骤2：把步骤1提取出来的明文路由更新信息加上接收方路由器预先配臵的共享密钥“cisco”一起进行散列计算，得到“散列值二”。

步骤3：提取出收到信息中的“散列值一”，用它和步骤2计算得到的“散列值二”进行比较，如果相同，表示路由更新信息是没有被篡改过的，也就是完整的。同时，还可以确定这是预先配臵共享秘密的那台比邻路由器所发送的路由更新，因为只有这台路由器才知道共享秘密的内容，因此也只有它才能够通过HMAC技术制造出能够校验成功的散列值。

上述对OSPF路由更新的介绍，可以体现出HMAC的两大安全特性，完整性校验和源认证。应该说在实际运用中，基本不会单纯地使用散列函数，绝大多数情况都会使用HMAC技术。例如，IPSec和HTTPS技术都采用了HMAC技术来对每一个传输的数据包做完整性校验和源认证。

3.2.2 加密算法

说完了散列函数，接下来我们花一点时间来介绍加密算法。加密，顾名思义就是把明文数据转换为密文数据。这样一来，即使第三方截获到了密文数据，也无法将其恢复为明文。而解密过程则正好相反，合法的接收者通过正确的解密算法和密钥恢复密文到明文。加密算法可以分为如下两大类：

对称密钥算法；

非对称密钥算法。

1．对称密钥算法

图3-9所示为对称密钥算法的工作示意图，从图中可以看到一个很明显的特点，加解密双方使用相同的密钥与算法进行加解密。因此，使用相同密钥与算法进行加解密运算的算法就叫做对称密钥算法，对称密钥算法有如下特点。

图3-9 对称密钥算法的工作示意图

优点：

速度快；

安全；

紧凑。

缺点：

明文传输共享密钥，容易出现中途劫持和窃听的问题；

随着参与者数量的增加，密钥数量急剧膨胀（（n×（n-1））/2）；

因为密钥数量过多，对密钥的管理和存储是一个很大的问题；

不支持数字签名和不可否认性。

对称密钥算法的主流协议：

1．DES；

2．3DES；

3．AES；

4．RC4。

我们先来讨论对称密钥算法的优点。它的首要优点就是速度快。作一个比较直观的比较，想必大多数读者都有使用压缩软件的经历，而对称密钥算法加密的速度应该比压缩的速度稍快（不同的算法有差异）。另外，现在无线网络的使用也很普及，绝大部分用户所使用的都是最新的无线安全技术WPA2，而WPA2就是使用AES来加密的。无线用户在上网冲浪时，似乎并不会感觉到由于加密造成的网络延时。而且只要他们的路由器或者交换机配上硬件加速模块，那就基本上能够实现线速加密，因此速度是对称密钥算法的一大优势。

现在我们来介绍对称密钥算法紧凑性的特点，DES是一个典型的块加密算法。所谓块加密，顾名思义就是把需要加密的数据包预先切分成为很多个相同大小的块（DES的块大小为64比特），然后使用DES算法逐块进行加密。如果不够块边界，就添加数据补齐块边界，这些添加的数据就会造成加密后的数据比原始数据略大。以一个1500个字节大小的数据包为例，通过DES块加密后，最多（极限值）会增加8个字节（64个比特）的大小。所以可以认为对称密钥算法加密后的数据是紧凑的。

图3-10所示为DES的两种块加密方式。

图3-10 DES的两种块加密方式

接下来我们再来说说DES 的两种块加密方式：电子代码本（Electronic Code Book， ECB）和密码块链接（Cipher Block Chaining，CBC）。对于ECB 这种加密方式来说，所有的块都是使用相同的DES密钥进行加密的。这种加密方式有一个问题，那就是相同的明文块加密后的结果也肯定相同。虽然中间截获数据的攻击者并不能解密数据，但是他们至少知道通信的双方正在反复加密相同的数据包。为了解决这个问题，CBC技术孕育而生，使用CBC技术加密的数据包，会随机产生一个明文的初始化向量（IV）字段，这个IV字段会和第一个明文块进行异或操作，然后使用DES算法对异或后的结果进行加密，所得到的密文块又会和下一个明文块进行异或操作，然后再加密。这个操作过程就叫做CBC。由于每一个数据包都使用随机产生的IV字段进行了扰乱，因此就算传输的明文内容一样，加密后的结果也会出现本质差异，并且整个加密的块是链接在一起的，任何一个块解密失败，剩余部分都无法进行解密了，这就增加了中途劫持者解密数据的难度。

说完了对称密钥算法的优势，我们再来讨论一下它的缺点。对称密钥算法的首要问题是，如何把相同的密钥发送给通信的双方。在这里，采用明文的方式传输密钥显然是非常不明智的，因为如果明文传输的密钥被中间人获取，那么中间人就能够解密使用这个密钥所加密的数据，这也就与直接采用明文传送数据没有什么区别了。第二个问题是，使用相同的一个密钥来加密去往所有用户的数据显然是非常不安全的。因此，我们希望两两用户之间共享一个唯一的密钥，并且在一次加密任务完成以后更新这个密钥。我们可以试想一下，假如只有4个用户要传送信息，且两两之间共享一个密钥的话，这个环境中就一共需要使用6个密钥（（n×（n-1））/2）；依此类推，5个用户需要10个密钥，那么100个用户？1000个用户呢？密钥数量将是一个不折不扣的天文数字。问题是，我们所讨论的都是互联网的加密解决方案。说得夸张一些，用户数上万也很正常。因此，对称密钥算法需要使用的密钥数量过多，不好管理与存储是一个比较严重的问题。另外，对称密钥算法也不支持数字签名技术（该技术我们将在后文中进行详细地介绍）。由于这一系列的缺点，我们一般不会在一套加密解决方案中单纯地使用对称密钥算法。

2．非对称密钥算法

图3-11所示为非对称密钥的产生和维护。

如图3-11所示，在使用非对称密钥技术之前，所有参与者，不管是用户还是路由器等网络设备，都需要预先使用非对称密钥算法（例如RSA）产生一对密钥，其中包括一个公钥和一个私钥。公钥可以放在服务器上共享给属于这个密钥系统的所有用户与设备，而私钥需要由持有者严格保护，确保只有持有者才能唯一拥有。

非对称密钥算法的特点是一个密钥加密的信息，必须使用另一个密钥来解密。也就是说公钥加密私钥解密，私钥加密公钥解密。公钥加密的数据，无法再使用公钥解密，私钥加密的数据，也无法再使用私钥解密。我们可以使用非对称密钥算法来加密数据和对数据进行数字签名。

图3-11 非对称密钥的产生和维护

图3-12所示为使用非对称密钥算法实现数据加密。

图3-12 使用非对称密钥算法实现数据加密

首先我们通过图3-12，来介绍如何使用非对称密钥算法来完成加密数据。

步骤1：“用户一”（发起方）需要预先获取“用户二”（接收方）的公钥。

步骤2：“用户一”使用“用户二”的公钥对重要的信息进行加密。

步骤 3：中途截获数据的攻击者由于没有“用户二”的私钥而无法对数据进行解密。

步骤4：用户二使用自己的私钥对加密后的数据（由用户二公钥加密）进行解密，使用公钥加密私钥解密的方法实现了数据的私密性。

但是由于非对称密钥算法运算速度极慢（和对称密钥算法相比有上千倍的差距），因此基本不可能使用非对称密钥算法对实际数据进行加密。在实际运用中，我们主要使用非对称密钥算法的这个特点来对密钥进行加密，以进行密钥交换。具体操作方式将在本章的后续部分进行详细介绍。

非对称密钥算法的第二个用途就是实现数字签名，在介绍数字签名前，我们不妨先来讨论一下实际生活中的签名。为什么要签名呢？签名的目的无非是对某一份文件进行确认。例如，欠条。张三欠李四10000元钱，欠款人张三在欠条上签名确认。签名的主要作用就是张三对这张欠条进行确认，事后不能抵赖（不可否认性）。到底最后谁会看这个签名呢？李四很明显没有必要反复去确认签名。一般都是在出现纠纷后，例如，张三抵赖不还的时候，李四就可以把欠条拿出来，给村长或者法官这些有权威的第三方来进行验证，如果他们确认此欠条上的签名确实来自张三无疑，张三就不能再否认欠李四钱这一既定事实了。

图3-13所示为使用非对称密钥算法实现数字签名。

了解了实际生活中签名的工作原理后，我们可以通过图3-13来看看数字签名是如何工作的。

步骤1：重要明文信息通过散列函数计算得到散列值。

步骤2：“用户一”（发起者）使用自己的私钥对步骤1计算的散列值进行加密，加密后的散列就叫做数字签名。

步骤3：把重要明文信息和数字签名一起打包发送给“用户二”（接收方）。

步骤4：“用户二”从打包文件中提取出重要明文信息。

步骤5：“用户二”使用和“用户一”相同的散列函数对步骤4提取出来的重要明文信息计算散列值，得到的结果简称“散列值1”。

步骤6：“用户二”从打包文件中提取出数字签名。

步骤7：“用户二”使用预先获取的“用户一”的公钥，对步骤6提取出的数字签名进行解密，得到明文的“散列值2”。

步骤8：比较“散列值1”和“散列值2”是否相等。如果相等，数字签名校验成功。

图3-13 使用非对称密钥算法实现数字签名

数字签名校验成功能够说明哪些问题呢？第一，保障了传输的重要明文信息的完整性。因为散列函数拥有冲突避免和雪崩效应两大特点。第二，可以确定对重要明文信息进行数字签名的用户为“用户一”，因为我们使用“用户一”的公钥成功解密了数字签名，只有“用户一”才能使用他的私钥加密散列产生数字签名，才能够使用“用户一”的公钥进行解密。通过数字签名的实例说明，数字签名和前面已经讲过的HMAC技术一样，可以提供如下两大安全特性：

完整性校验；

源认证。

下面我们对非对称密钥算法的特点进行总结。

工作特点：

用一个密钥加密的数据只能用另一个密钥来解密；

仅用于密钥交换（加密密钥）和数字签名（加密散列）。

优点：

安全；

由于不必担心交换的公钥被劫持，所以非对称密钥的分发更安全；

密钥数目和参与者数目相同；

在交换公钥之前不需要预先建立某种信任关系；

支持数字签名和不可否认性。

缺点：

加密速度很慢；

密文会变长。

非对称密钥算法的主流协议：

1．RSA（数字签名和数字证书的主流协议）；

2．DH（IPSec产生密钥资源的主要协议）；

3．ECC（椭圆曲线算法）。

介绍完非对称密钥算法如何工作以后，我们再来谈谈它的优缺点。非对称密钥算法的优点是很突出的：由于非对称密钥算法的特点，公钥是共享的，不用保障公钥的安全性，所以密钥交换比较简单，并且不必担心中途被截获。此外，在使用非对称密钥算法的环境中，每增加一个用户，只需要增加一个公钥，密钥的数量与参与者数量相同，也就是说一万个用户只需要管理和存储一万个公钥，相对于对称密钥算法，密钥的数量可以减少很多。另外，非对称密钥算法还可以支持数字签名和不可否认性，而不可否认性的依据就是，只有私钥的持有者才能唯一拥有这个私钥。

说完非对称密钥算法的优点，我们也来看看它的严重缺陷。非对称密钥算法的主要问题就是它的加密速度奇慢。如果拿RSA这个非对称密钥算法和DES这个对称密钥算法相比，加密相同大小的数据，DES大概要比RSA快几百倍。所以想要如图3-12所示那样，使用非对称密钥算法来加密实际的数据几乎是不可能的。另外，使用非对称加密算法加密后的密文会变得很长。举一个夸张点的例子，用RSA来加密1GB的数据（当然RSA肯定没法加密1GB的数据），加密后的密文可能变成2GB，与对称密钥算法相比这就太不紧凑了。由于这些缺点，与对称密钥算法一样，我们在一套安全解决方案中不可能单独使用非对称密钥算法。那么我们应该如何利用对称和非对称密钥算法的优势来加密实际的数据呢？我们紧接着来看一个“巧妙的加密解决方案”。

3．巧妙的加密解决方案

我们已经学习过了对称密钥算法和非对称密钥算法，你会发现两种算法都各有其优缺点。对称密钥算法加密速度快，但是密钥数量过多不好管理，并且密钥分发不安全。非对称密钥算法密钥数量少，密钥分发方便并且不存在安全隐患，但是加密速度奇慢，不可能用于大流量数据的加密。所以在实际使用加密算法的时候，一般会让两种算法共同工作，发挥各自优点。下面是一个非常巧妙的联合对称和非对称算法的解决方案，这种解决问题的思路被大量运用到实际加密技术中。

图3-14所示为联合使用两种密钥算法的巧妙加密解决方案（发起方处理过程）。

图3-14 巧妙的加密解决方案（发起方处理过程）

步骤1：“用户一”（发起方）使用本地随机数产生器，产生用于对称密钥算法的随机密钥。如果使用的对称密钥算法是DES，DES的密钥长度为56比特，也就是说随机数产生器需要产生56个随机的“00011101001000110000111…”用于加密数据。

步骤 2：使用步骤1 产生的随机密钥，对重要的明文信息通过对称密钥算法进行加密，并得到密文（很好地利用了对称密钥算法速度快和结果紧凑的特点）。

步骤3：“用户一”（发送方）需要预先获取“用户二”（接收方）的公钥，并且使用“用户二”的公钥对步骤1产生的随机密钥进行加密，得到加密的密钥包。

步骤4：对步骤2和步骤3产生的密文和密钥包进行打包，一起发送给“用户二”（接收方）。

图3-15所示为接收方处理过程。

步骤1：“用户二”首先提取出密钥包，并且使用自己的私钥对它进行解密，并得到明文的随机密钥（使用非对称密钥算法进行密钥交换，有效防止密钥被中途劫持）。

步骤2：“用户二”提取出密文，并且使用步骤1解密得到的随机密钥进行解密，得到明文的重要信息。

图3-15 巧妙的加密解决方案（接收方处理过程）

在这个巧妙的加密解决方案中，我们使用了对称密钥算法对大量的实际数据（重要信息）进行加密，因而很好地利用了对称密钥算法加密速度快、密文紧凑的优势。同时我们又使用非对称密钥算法，对对称密钥算法使用的随机密钥进行加密，因而实现了安全的密钥交换，很好地利用了非对称密钥不怕中途劫持的特点。这个巧妙的解决方案大量地运用在实际加密技术中，我们后面要介绍的IPSecVPN 也是先使用非对称密钥算法DH来产生密钥资源，然后再使用对称密钥算法（DES、3DES……）来加密实际数据的。

3.2.3 封装协议

IPSec有ESP和AH两种封装协议。

1．ESP协议

ESP（Encapsulation Security Payload）的IP 协议号为50，ESP 能够为数据提供私密性（加密）、完整性和源认证3大方面的保护，并且能够抵御重放攻击（反复发送相同的包，接收方由于不断地解密消耗系统资源，实现拒绝服务攻击（DOS））。ESP只能保护IP负载数据，不对原始IP头部进行任何安全防护。

图3-16所示为ESP数据包的结构示意图，下面我们分别对ESP包的各个字段逐一进行介绍。

（1）安全参数索引（SPI）

一个32 比特的字段，用来标识处理数据包的安全关联（Security Association），关于安全关联相关的内容我们会在本章的后续部分进行介绍。

图3-16 ESP包结构示意图

（2）序列号（SN）

一个单调增长的序号，用来标识一个ESP数据包。例如，当前发送的ESP包序列号是X，下一个传输的ESP包序列号就是X+1，再下一个就是X+2。接收方通过序列号来防止重放攻击，原理也很简单，当接收方收到序列号X的ESP包后，如果再次收到序列号为X的ESP包就被视为重放攻击，采取丢弃处理。

（3）初始化向量（Initialization Vector）

我们在前面介绍过CBC这种块加密方式，每一个需要使用CBC来加密的数据包都会产生一个随机数，用于加密时对数据进行扰乱，这个随机产生的数就叫做初始化向量（IV）。当然 IPSec VPN 也可以选择不加密（加密不是必须的，虽然我们一般都会采用），如果不加密就不存在IV字段。所以在图3-16中有两个ESP包结构示意图，左边白底的ESP包没有IV字段表示不加密，右边深色底的存在IV字段则表示要加密。

（4）负载数据（Payload Data）

负载数据就是IPSec加密所保护的数据，它很有可能就是TCP头部加相应的应用层数据。当然我们后面还会介绍两种封装模式，封装模式的不同也会影响负载数据的内容。

（5）垫片（Padding）

Cisco 的IPSecVPN 都采用了CBC 的块加密方式，既然采用块加密，就需要把数据补齐块边界。以DES为例，就需要补齐64比特的块边界，追加的补齐块边界的数据就叫做垫片。如果不加密就不存在垫片字段。

（6）垫片长度（Pad Length）

垫片长度顾名思义就是告诉接收方，垫片数据有多长，接收方解密后就可以清除这部分多余数据。如果不加密就不存在垫片长度字段。

（7）下一个头部（Next Header）

下一个头部标识IPSec封装负载数据里边的下一个头部，根据封装模式的不同下一个头部也会发生变化，如果是传输模式，下一个头部一般都是传输层头部（TCP/UDP）；如果是隧道模式，下一个头部肯定是IP。关于传输和隧道模式我们会在本章后续部分进行介绍。这里顺便提一下，从“下一个头部”这个字段中，我们可以看到 IPv6 的影子。IPv6 的头部就是使用很多个“下一个头部”串接在一起的，这也说明IPSec最初是为IPv6而设计的。

（8）认证数据（Authentication Data）

ESP会对从ESP头部到ESP尾部的所有数据进行验证，也就是做HMAC的散列计算，得到的散列值就会被放到认证数据部分，接收方可以通过这个认证数据部分对ESP数据包进行完整性和源认证的校验。

2．AH协议

AH（Authentication Header）IP 协议号为 51，AH 只能够为数据提供完整性和源认证两方面的安全服务，并且抵御重放攻击。AH 并不能为数据提供私密性服务，也就是说不加密，所以在实际部署IPSecVPN 的时候很少使用AH，绝大部分IPSecVPN都会使用ESP进行封装。当然AH不提供私密性服务，只是它不被广泛采用的其中一个原因，后面部分我们还会介绍AH没有得到广泛使用的另外一个原因。

图3-17 AH包结构示意图

图 3-17 所示为AH 包结构示意图，从图中我们可以看到AH 与ESP 的关键性区别，即AH对数据验证的范围更广，不仅包含原始数据，还包含了原始IP头部，AH认证头部的名称就由此而得名。

图3-18所示为AH验证的IP头部字段。

图3-18 AH验证IP头部字段

虽然AH要验证原始IP头部，但并不是IP头部的每一个字段都要进行完整性验证。在图3-18中，灰色部分字段就是AH不进行验证的范围。也就是说，AH只会对剩余的白色部分字段进行完整性校验。可以看到IP地址字段是需要验证的，因而不能被修改。AH这么选择也有它自身的原因。IPSec的AH封装最初是为IPv6设计的。而在IPv6的网络中，地址不改变非常正常，但是我们现在使用的主要是IPv4的网络，网络地址转换（NAT）技术经常被采用。一旦AH封装的IPSec数据包穿越NAT，地址就会改变，抵达目的地之后就不能通过验证，所以AH协议封装的IPSec数据包不能穿越NAT，这就是AH现在没有得到大量部署的第二大原因。

3．2.4封装模式

IPSec有如下两种数据封装模式：

传输模式（Transport mode）；

隧道模式（Tunnel mode）。

图3-19所示为传输模式的封装示意图。

我们先通过图3-19来看传输模式是如何对数据进行封装的，因为AH很少使用，所以封装模式示意图中我们都以ESP封装协议为例来进行介绍。

传输模式实现起来很简单，主要就是在原始IP头部和IP负载（TCP头部和应用层数据）之间插入一个ESP头部。当然ESP还会在最后追加上ESP尾部和ESP验证数据部分，并且对IP负载和ESP尾部进行加密和验证处理，但原始IP头部被完整地保留了下来。

图3-19 传输模式封装示意图

图3-20 所示为传输模式IPSec VPN 实例分析。

我们现在通过部署在Yeslab安全实验室内部的一个IPSec VPN来说明传输模式是如何工作的，图3-20 是这个IPSec VPN 的示意图。

图3-20 传输模式IPSec VPN实例分析

设计这个IPSec VPN 的主要目的是，对我的电脑访问内部重要文件服务器的流量进行安全保护。我电脑的IP地址为10.1.1.5，服务器的IP地址为10.1.19.5。这两个地址是实验室网络的内部地址，至少在Yeslab实验室内部是全局可路由的。传输模式只是在原始IP头部和IP负载中间插入了一个ESP头部（图例中省略了ESP尾部和ESP验证数据部分），并且对IP负载进行加密和验证操作。我们把实际通信的设备叫做通信点，加密数据的设备叫做加密点，在这幅传输模式IPSec示意图中，实际通信和加密设备都是我的电脑（10.1.1.5）和服务器（10.1.19.5），所以加密点等于通信点。只要能够满足加密点等于通信点的条件就可以进行传输模式封装。其实根据个人的经验，要使用传输模式进行封装，通信设备（接收方和发起方）的IP地址，必须在位于其间的网络可路由，否则就必须使用隧道模式。通信点和加密点是很重要的一个概念，因为它直接影响着IPSec VPN 关于路由的配臵。在下一章我们还会进一步讨论加密点和通信点如何影响IPSec VPN 的路由。

讲完了传输模式，我们紧接着来看一下隧道模式是如何对数据进行封装的。

图3-21所示为隧道模式的封装示意图。隧道模式把原始IP数据包整个封装到了一个新的IP数据包中，并且在新IP头部和原始IP头部中间插入了ESP头部，以此对整个原始IP数据包进行了加密和验证处理。那么，什么样的网络拓扑适合使用隧道模式来封装IP 数据包呢？站点到站点的IPSec VPN 就是一个经典的实例，我们可以分析一下站点到站点的IPSec VPN 是如何使用隧道模式来封装数据包的。

图3-21 隧道模式封装示意图

图3-22是一个典型的站点到站点IPSec VPN示意图，分支站点身后保护网络为10.1.1.0/24，中心站点身后保护网络为 10.1.2.0/24。分支站点有一台终端电脑要通过站点到站点的IPSec VPN来访问中心站点的数据库服务器。这两台电脑就是我们所说的通信点。真正对数据进行加密的设备是两个站点连接互联网的路由器，假设分支站点路由器获取的互联网地址为202.100.1.1，中心站点的互联网地址为61.128.1.1。那么路由器的这两个地址就是加密点。很明显加密点不等于通信点，因此这个时候就应该采用隧道模式来对数据进行封装。封装后在互联网上传输的IPSec数据包如图3-22所示，最外层头部为加密点为源和目的IP头部，紧接着是ESP头部，最内层为被安全保护的原始IP数据包。

图3-22 站点到站点隧道模式分析示意图

图3-23 所示为站点到站点IPSec VPN 使用传输模式的封装包结构。

图3-23 站点到站点IPSec VPN使用传输模式的封装包结构

我们也可以假设如果在图3-22所示的拓扑中，依然进行传输模式封装，那么封装后的结果如图3-23所示。如果将这样封装的数据包直接发送到互联网，那么它一定会被互联网路由器丢弃，因为10.1.1.0/24和10.1.2.0/24都是客户内部网络，在互联网上不可路由。为了让站点到站点的流量能够通过IPSecVPN 加密后穿越互联网，我们需要在两个站点间制造一个“隧道”，把站点间的流量封装到这个隧道内，并穿越互联网。这个隧道其实就是通过插入全新的 IP 头部和ESP头部来实现的。再次重复一遍使用隧道模式的条件：只要加密点不等于通信点我们就应该采用隧道模式封装，或者说通信点的IP地址在其间的网络是不可路由的，就应该采用隧道模式封装。

3.2.4 密钥有效期

长期使用相同密钥来加密数据是不明智的，我们应该周期性地更新密钥， Cisco的IPSec VPN 用于加密实际数据的密钥，默认每一个小时（3600 秒）就要更新一次。我们也可以根据自身的情况对密钥有效期进行调整。但是这种调整应该遵循一个简单的原则，那就是密钥加密的数据越多，这个密钥的有效期就应该越短；加密的数据越少，它的有效期就可以越长。

Cisco 的 IPSec VPN 虽然默认每小时更换一次密钥，但下一个小时使用的密钥，是由当前这个小时使用的密钥，通过一系列的算法衍生得出的。也就是说这些密钥之间存在推演关系。这样的密钥更新就不能叫做完美向前保密 PFS（Perfect Forward Secrecy）。PFS 要求每一次密钥更新，都需要重新产生全新的密钥，和以前使用的密钥不存在任何衍生关系。Cisco 的IPSec VPN 一旦启用了PFS 技术，就会在每一个小时结束的时候，展开一次全新的DH交换（本章后续内容将会详细介绍这种算法），产生全新的密钥用于下一个小时加密。关于PFS的配臵我们会在后面部分介绍。

3.3 互联网密钥交换协议IKE（Internet Key Exchange）

经过上文介绍，读者应该已经熟悉了IPSec框架所提供的主要服务，即IPSec VPN需要预先协商加密协议、散列函数、封装协议、封装模式和密钥有效期等内容。具体执行协商任务的协议叫做互联网密钥交换协议IKE。IKE主要完成如下3个方面的任务：

对建立IPSec 的双方进行认证（需要预先协商认证方式）；

通过密钥交换，产生用于加密和HMAC 的随机密钥；

协商协议参数（加密协议、散列函数、封装协议、封装模式和密钥有效期）。

协商完成后的结果就叫做安全关联SA，也可以说IKE建立了安全关联。SA一共有两种类型，一种叫做IKE SA，另一种叫做IPSec SA。IKE SA 维护了安全防护（加密协议、散列函数、认证方式、密钥有效期等）IKE 协议的细节。IPSec SA 则维护了安全防护实际用户流量（通信点之间流量）的细节。

IKE由三个协议组成，如图3-24所示。

图3-24 IKE的3大组成协议

SKEME 决定了IKE 的密钥交换方式，IKE 主要使用DH 来实现密钥交换。

Oakley决定了IPSec 的框架设计，让IPSec 能够支持更多的协议。

ISAKMP 是IKE 的本质协议，它决定了IKE 协商包的封装格式，交换过程和模式的切换。

3.3.1 IKE 与ISAKMP

ISAKMP是IKE的核心协议，所以我们经常会把IKE与ISAKMP这两个术语互换使用。例如，IKE SA 也经常被说成ISAKMP SA。在配臵IPSec VPN 的时候，主要的配臵内容也是 ISAKMP。另外，SKEME 和 Oakley没有任何相关的配臵内容，因此很多网络技术人员常常会认为IKE和ISAKMP是相同的概念。如果一定要对IKE和ISAKMP进行区分的话，那么由于SKEME的存在，因此IKE能够决定密钥交换的方式，但是ISAKMP只能够为密钥交换来交换数据包，但却不能决定密钥交换实现的方式。

3.3.2 IKE 的2 个阶段与3 个模式

图3-25是IKE协商示意图，从该图中，我们可以看到IKE协商分为两个不同阶段：第一阶段和第二阶段。第一阶段协商分别可以使用6个包交换的主模式或者3个包交换的主动模式来完成，第一阶段协商的主要目的就是对建立IPSec的双方进行认证，以确保只有合法的对等体（peer）才能够建立 IPSec VPN。协商得到的结果就是IKESA。第二阶段总是使用3 个包交换的快速模式来完成，第二阶段的主要目的就是根据需要加密的实际流量（感兴趣流），来协商保护这些流量的策略。协商的结果就是IPSec SA。

图3-25 IKE的2个阶段与3个模式

我们对这一过程做一个简单的比喻：IKE 协商过程就像两个公司做生意的过程。两个公司在具体合作之前需要相互了解，最简单的方法可能就是核查对方公司的工商牌照、公司营业和信誉状况。也很有可能是约一个地点，坐下来面对面地进行介绍和了解。不管怎么样，目的就是相互进行认证，建立基本的信任关系。这个过程其实就是IKE第一个阶段需要完成的任务。第一阶段完成后，信任关系建立了，相应的IKESA 也就建立了。紧接着的主要任务就是基于具体的项目来签订合同。对于IPSec VPN而言，具体的项目就是安全保护通信点之间的流量，具体处理这些流量的策略（IPSec SA）就是合同。IKE第二阶段的任务就是基于需要被加密的流量（A到B）协商相应的IPSec SA。一旦双方在第一阶段建立起了信任关系，它们就没有必要重复进行认证了。接下来，双方的议题就是根据第一阶段建立的IKE SA，给两个站点之间的很多需要被加密的流量协商不同的第二阶段策略（IPSec SA）。

现在我们回头说说第一阶段的两种模式。既然第一阶段既可以使用主模式，也可以使用主动模式来完成，那么什么情况应该使用主模式，什么情况应该使用主动模式呢？以Cisco 的IPSec VPN 为例，只有在一种情况下，第一阶段才会使用3 数据个包交换的主动模式来完成，这就是通过预共享密钥认证的远程访问 VPN（Cisco 的技术名叫做EzVPN），换言之，使用证书认证的EzVPN也是通过6个数据包交换的主模式来完成的。主动模式的交换细节将会在后面 EzVPN 部分进行详细介绍。现在我们需要重点介绍一下主模式6个数据包和快速模式3个数据包，这9个数据包的交换细节。

1．主模式IKE 1-2 包交换

图3-26 所示为主模式IKE1-2 包交换过程。

图3-26 主模式数据包1-2的交换

主模式一共要交换6个ISAKMP数据包，这个过程可以分为1-2、3-4和5-6这3次数据包交换。图3-15为主模式数据包1-2交换的示意图。主模式数据包1-2交换主要负责完成2个任务：第一是通过核对收到ISAKMP数据包的源IP地址，来确认收到的ISAKMP数据包是否源自于合法的对等体（peer）；第二个任务就是协商IKE策略。

我们先来讨论一下第一个任务的操作过程，假设站点一（互联网 IP 地址202.100.1.1）和站点二（互联网IP 地址61.128.1.1）之间需要建立IPSec VPN，站点一配臵对等体（Peer）为61.128.1.1，站点二配臵对等体（Peer）为202.100.1.1。于是，当站点二收到第一个ISAKMP的数据包，它就会查看这个ISAKMP数据包的源IP地址，如果这个源IP地址是202.100.1.1，它就接受这个包，反之则终止整个协商进程，因为站点二并不希望和这个对等体建立IPSec VPN。

由于这个IP地址出现在IP头部，并不是ISAKMP数据的内容，所以在图3-25中并没有被体现出来。顺便再说明一个问题，ISAKMP数据包是使用UDP进行传输的，源端口号和目的端口号都是500。

在IKE1-2 个包交换的过程中，IKE 策略协商才是它主要的任务，策略包含如下5项内容：

加密策略；

散列函数；

DH 组；

认证方式；

密钥有效期。

既然叫IKE策略，表示它是对IKE数据包进行处理的策略。以加密策略为例，它决定了加密主模式（MM）的5-6个数据包和快速模式（QM）的1-3个数据包的策略。但是这个策略绝对不是用于加密实际通信点之间流量（Cisco 也将通信点之间的流量称为感兴趣流）的策略。通信的双方会在第二阶段的快速模式中协商另外一个加密策略，而这个在快速模式中协商的策略才会用于处理感兴趣流。在第一个数据包内，发起方会把本地配臵的所有策略一起发送给接收方，由接收方从中挑出一个可以接收的策略。并且通过第二个IKE包回送给发送方，向发送方指明它所选择的那个策略。

图 3-27 详细地介绍了接收方选择策略的顺序，接收方首先用本地优先的策略（Policy 10）来检查对方所发送过来的全部策略。如果不匹配就由下一个优先的策略来检查，直到找到一个匹配的策略为止。很明显，图3-26 所示的IKE 1-2 包交换，协商得到了如下的IKE策略：

加密策略为DES；

散列函数为MD5；

DH组为1；

认证方式为预共享密钥；

密钥有效期为一天。

图3-27 接收方选择IKE策略示意图

有了这些结果，在交换后续IKE3-4 和5-6 包时，就可以使用这套策略来处理了。

2．主模式IKE 3-4 包交换

图3-28 所示为主模式IKE3-4 包交换过程。

图3-28 主模式IKE 3-4包交换

IKE 1-2 包交换已经协商出了IKE 策略，但是指望使用这些加密策略和散列函数来保护 IKE 数据还缺少一个重要的内容——密钥。加密和 HMAC 都需要密钥，这个密钥从何而来？它会从图3-28所示的DH交换中产生。我们现在就来介绍这个神奇的算法Diffie-Hellman。

图3-29所示为Diffie-Hellman算法的计算过程。

图3-29 Diffie-Hellman算法

DH 是一种非对称密钥算法，这个算法基于一个知名的单向函数，离散对数函数A=g a modp，这个公式中mod 就是求余数。这个函数有这么一个特点，在g 和p 都很大的情况下，已知a求A会很快得到结果（当然是计算机进行计算），但是已知A求a 几乎无法完成，这就是所有单向函数的特点，一个方向运算很快很容易，另一个方向几乎不能完成。

了解了这个特点以后我们来看看DH是如何工作的，发起方（Alice）首先随机产生g、p、a。g和p的大小由1-2包交换的DH组大小来决定，DH组1表示为768位长度，DH组2表示为1024位长度，组越大表示DH交换的强度越大。然后发起方使用离散对数函数计算得出A。并且在第3个IKE包中把g、p、A发送给接收方（Bob）。接收方（Bob）收到后，随机产生小b，并且使用从第3个IKE包中接收到的g和p，通过离散对数函数计算得到B，然后通过第4个IKE包把B回送给发起方（Alice）。

现在DH 算法的神奇之处就要体现了，接收方（Bob）通过A b mod p 得到的结果，等于发起方（Alice）通过B a mod p 计算得到的结果，也等于g ab mod p。这样收发双方就通过DH 算法得到了一个共享秘密g ab mod p。这个值中间人是无法计算得出的，因为要计算这个值需要至少一方的私有信息（a或者b），但是中间人只是能够截获（g、p、A、B），并且不能通过A和B计算得出a和b（离散对数特点）。有了这个共享秘密g ab mod p 后，我们可以通过一系列的密钥衍生算法，得到加密和HMAC 处理IKE信息的密钥。加密感兴趣流的密钥也是从这个共享秘密衍生而来，可以说它是所有密钥的始祖。

3．主模式数据包5-6的交换

图3-30所示为主模式数据包5-6的交换过程。

图3-30 主模式数据包5-6的交换

IKE 第一阶段的主要任务就是认证，IKE 5-6 包交换就是在安全的环境下进行认证（从IKE 主模式的第5-6 包开始往后，都使用IKE 1-2 包交换所协商的加密与HMAC算法进行安全保护），图3-30 所示为IKE 5-6 包交换的示意图。前面我们学习的IKE 1-2和3-4 包交换，只是在为IKE5-6 包交换的认证做铺垫。IKE 1-2 包交换为认证准备好策略（例如，认证策略、加密策略和散列函数等），IKE 3-4 包交换为保护IKE 5-6 包的安全算法提供密钥资源。

IPSecVPN 的认证方式有3 个，分别是预共享密钥认证、证书认证和RSA 加密随机数认证。本章只重点介绍预共享密钥认证。预共享密钥认证顾名思义就是需要在收发双方预先配臵一个相同的共享秘密（sharesecret），认证的时候相互交换由这个共享秘密所制造的散列值来实现认证，这个思路和OSPF对路由更新的认证基本一致的。

图3-31所示为预共享密钥认证的示意图。

我们现在通过图3-31来介绍IKE主模式的第5个数据包，即接收方如何使用预共享密钥这种认证方式来认证发起方。

步骤1：发起方根据接收方IP地址查询本地IPSec配臵，找到与其对应的预共享秘密。

步骤2：发起方把预共享秘密（cisco）和IKE策略内容、DH计算的密钥资源、还有其他一些接收双方都知道的内容一起进行散列计算，得到的结果就是“认证散列值”。

图3-31 预共享密钥认证图示

步骤3：发起方把“认证散列值”和本地加密点IP地址放入第5个IKE数据包中，加密后发送给接收方。

步骤4：接收方首先对收到的第5个IKE数据包进行解密，提取出发起方的IP地址，并且基于发起方的IP地址查询本地IPSec配臵，找出对应的预共享秘密。

步骤 5：接收方把查询到的共享秘密，和其他双方已知内容一起计算散列值，得到“认证散列值’”。

步骤6：接收方把从第5个IKE数据包中提取出来的“认证散列值”和步骤5计算得到的“认证散列值”进行比较，如果相等，接收方就成功认证了发起方。当然接收方还要通过相同的办法来发送第6个IKE数据包，让发起方认证接收方。

4．第一阶段小结

第一阶段的主要任务就是相互认证。第一阶段完成，不仅表示收发双方认证通过，并且还会建立一个双向的 ISAKMP/IKE 安全关联（ SA ），这个 SA 维护了处理ISAKMP/IKE流量的相关策略（注意：这些策略不会处理实际感兴趣流），而对等体双方还会继续使用这个SA，来安全保护后续的IKE 快速模式1-3 包交换。

5．快速模式 数据包1-3的交换

图3-32 快速模式数据报1-3的交换

图3-32所示为IKE快速模式1-3包交换示意图。在快速模式中，1-3包交换的主要目的就是在安全的环境下，基于感兴趣流协商处理这个感兴趣流的IPSec策略，这些策略包含如下6项内容：

感兴趣流；

加密策略；

散列函数；

封装协议；

封装模式；

密钥有效期。

图3-32为IKE快速模式1-2包交换，接收方策略选择过程示意图。

从图3-33我们可以看到，在IKE快速模式第一个数据包中，发起方会把感兴趣流相关的IPSec策略一起发送给接收方，并由接收方来选择适当策略。这个过程与在IKE主模式1-2包交换时，由接收方来选择策略的工作方式相同。

图3-33的协商结果是感兴趣流为A到B，使用ESP进行隧道封装，使用AES进行加密，使用SHA对数据进行HMAC验证，密钥有效期为一小时。

策略协商完毕以后就会产生相应的IPSec SA，我们发现在IKE 快速模式第2 个和第3个数据包中都出现了安全参数索引（SPI）这个字段，这个字段的作用我们在3.2.3节中曾经进行过介绍。简单地说，SPI 是一个字串，用于唯一标识一个IPSec SA。还要注意的一点是，第一阶段协商的 IKE SA 是一个双向的 SA，但是第二阶段协商的IPSec SA 则是一个单向的SA，也就是存在一个IPSec SA 用于保护发起方到接收方的流量，标识这个IPSec SA 的SPI出现在快速模式的第二个数据包中。

图3-33 在快速模式数据包1-2交换过程中，接收方策略选择过程示意图

还存在另外一个 IPSec SA 用来保护接收方到发起方的流量，而标识这个 IPSec SA的SPI出现在快速模式的最后一个数据包中。其实我们还可以这样来看这个问题，那就是目的设备决定了SPI 值。因为发起方到接收方IPSec SA 的SPI是由接收方产生，并通过第二个包发送给发起方的，因此目的设备决定了 SPI 的说法就很容易理解了。

说完了SPI字段我们再来看看IKE快速模式1-2包交换中的PFS字段，PFS这个技术，我们也曾在3.2.5 节中介绍过。Cisco 的IPSecVPN 默认并没有启用PFS 这个技术，也就是说加密感兴趣流的密钥，是由主模式IKE 3-4 包的DH 交换所产生的共享密钥通过衍生得到的。虽然每一个小时都要更新一次密钥，但下一个小时的密钥是由当前这个小时的密钥衍生得来的。因为密钥之间存在衍生关系，所以他们不是PFS的密钥。Cisco 的IPSec VPN 可以通过配臵来启用PFS 特性，一旦启用，在IKE 快速模式1-2包交换就会再进行一次DH交换，相互发送DH计算所需要的公共值和随机数。处理感兴趣的密钥就在这次DH交换中产生。每一个小时都会进行一次全新DH交换，以产生下一个小时所使用的密钥。

6．第二阶段小结

第二阶段的主要任务就基于具体的感兴趣流来协商相应的IPSec SA，IKE 快速模式交换的三个数据包都得到了安全保护（加密、完整性校验和源认证）。另外两个值得注意的内容就是SPI 和PFS。SPI用于唯一标识一个单向的IPSec SA，SPI的值是由目的设备决定的。Cisco 的IPSec VPN 在默认情况下没有启用PFS 技术，设备管理员可以通过配臵来启用这项技术，让每一次密钥更新之前都进行一次全新的DH交换，产生全新的密钥。

到此为止，对于IPSec VPN 理论的介绍就要告一段落了。从下一章起，我们将会开始对Cisco IPSec VPN 的配臵方法进行介绍。

第4章 站点到站点IPSec VPN

站点到站点是VPN的一种主要连接方式，用于加密站点间流量。Cisco路由器和防火墙ASA 都支持这种连接方式，本章将分别通过4个经典实验，来展示如何在Cisco路由器和防火墙ASA 上执行站点到站点IPSec VPN 的配置，并向读者介绍一些IPSec VPN 方面的配置经验。

4.1 经典站点到站点IPSec VPN

4.1.1 实际接线状况

图4-1 经典IPSec VPN实际接线状况

图 4-1 所示为经典 IPSec VPN 实际接线状况。本次实验一共需要使用 4 台路由器，由左至右分别模拟公司站点一内部路由器（Inside）、公司站点一（Site1）、互联网路由器（Internet）和公司站点二（Site2）。同时，路由器 Inside 和 Site2 都使用Loopback0来模拟公司内部网络。路由器Inside和Site1使用接口Fa0/0实现对接，路由器Site1和Internet使用接口Fa1/0实现对接，路由器Internet和Site2则使用接口Fa2/0实现对接。

4.1.2 实验拓扑介绍

在图4-2所示的经典IPSec VPN实验拓扑中，Site1（202.100.1.1）和Site2（61.128.1.1）是两个VPN站点连接互联网的网关路由器，同时它们也是IPSec VPN的加密设备。本次实验的通信网络为Inside路由器身后的1.1.1.0/24网络和Site2身后的2.2.2.0/24网络。本次实验需要在Site1和Site2之间建立隧道模式的IPSec VPN，以保护通信网络之间的流量。

图4-2 经典IPSec VPN实验拓扑

4.1.3 基本IP 地址配置

在介绍和配置IPSec VPN之前，我们需要首先初始化路由器的IP 地址。例4-1、例4-2、例4-3和例4-4分别介绍了Inside、Site1、Internet和Site2路由器上的基本IP地址配置。

例4-1 Inside上的基本IP地址配置

enable

configure terminal

!

hostname Inside

!

interface Loopback0
ip address 1.1.1.1 255.255.255.0

!

interface FastEthernet0/0
ip address 10.1.1.10 255.255.255.0

no shutdown

!

end

例4-2 Site1上的基本IP地址配置

enable

configure terminal

!

hostname Site1

!

interface FastEthernet0/0
ip address 10.1.1.1 255.255.255.0

no shutdown

!

interface FastEthernet1/0
ip address 202.100.1.1 255.255.255.0

no shutdown

!

end

例4-3 Internet上的基本IP地址配置

enable

configure terminal

!

hostname Internet

!

interface FastEthernet1/0
ip address 202.100.1.10 255.255.255.0

no shutdown

!

interface FastEthernet2/0
ip address 61.128.1.10 255.255.255.0

no shutdown

!

end

例4-4 Site2上的基本IP地址配置

enable

configure terminal

!

hostname Site2

!

interface Loopback0
ip address 2.2.2.2 255.255.255.0

!

interface FastEthernet2/0
ip address 61.128.1.1 255.255.255.0

no shutdown

end

4.1.4 VPN 路由分析

在上一节中，我们只是对所有路由器的IP地址进行了配置，并没有配置任何路由。应该说路由在整个IPSec VPN配置中占有非常重要的地位。如果没有解决好路由问题， IPSec VPN 就会在建立隧道或加密感兴趣流的时候出现问题。甚至可以这样说，IPSec VPN只是路由技术的一种拓展，是对原有网络技术的一种延伸，可以把原有的网络蔓延到各个角落，比如分支公司、员工家中等。借用Cisco对VPN技术的一个广告语“无边界网络”，这句话可能更能说明VPN技术和传统路由技术之间的关系。既然路由问题这么重要，我们就需要好好讨论与IPSec VPN 相关的路由问题。

一共有3大类设备需要解决路由问题，如下所述。

（1）加密设备（加密点），例如Site1网关路由器。

解决去往本地通信点（1.1.1.0/24）的路由。

解决去往远端通信点（61.128.1.1/32）的路由。

解决去往远端加密点（2.2.2.0/24）的路由。

（2）互联网设备，例如Internet互联网路由器。

解决去往两个加密点（202.100.1.1/32， 61.128.1.1/32）的路由。

（3）内部通信设备（通信点），例如Inside路由器的环回接口Lo0:1.1.1.1/24所模拟的终端网络。

去往远端通信点的路由（2.2.2.0/24）。

图4-3 IPSec VPN中需要解决的路由问题

现在到相应的设备上去配置路由。由于 Internet 设备上拥有两个加密点（202.100.1.1/32 和 61.128.1.1/32）的直连路由，所以不需要再配置任何路由。其他设备的路由配置会在接下来的例4-5、例4-6和例4-7中进行介绍。

例4-5 加密设备Site1上的路由配置

1．解决本地通信点路由

Site1(config)#ip route 1.1.1.0 255.255.255.0 10.1.1.10

2．解决远端通信点路由

Site1(config)#ip route 2.2.2.0 255.255.255.0 202.100.1.10

3．解决远端加密点路由

Site1(config)#ip route 61.128.1.1 255.255.255.255 202.100.1.10

例4-6 加密设备Site2上的路由配置

1．解决本地通信点路由

本地通信点2.2.2.2/32为直连路由，所以无需任何路由配置。

2．解决远端通信点路由

Site2(config)#ip route 1.1.1.0 255.255.255.0 61.128.1.10

3．解决远端加密点路由

Site2(config)#ip route 202.100.1.1 255.255.255.255 61.128.1.10

例4-7 内部路由器Inside上的路由配置

1．解决远端通信点路由

Inside(config)#ip route 2.2.2.0 255.255.255.0 10.1.1.1

注意：在实际工程中，加密设备更多使用默认路由来解决“远端通信点路由”和“远端加密点路由”的问题，本次实验之所以使用明细的静态路由配置只是为了把路由问题讲得更加精确。本次实验后我们都会采用默认路由来解决路由问题。

介绍完上述路由配置，恐怕有很多读者会对Site1上的ip route 2.2.2.0 255.255.255.0 202.100.1.10 这条路由产生疑问。难道我们真的会把去往 2.2.2.2 的数据包路由到了202.100.1.10（Internet）吗？事实肯定不是这样，因为源自于1.1.1.1到2.2.2.2的数据包已经被加密了。在Internet上肯定不会出现去往2.2.2.2的明文数据包，那么我们为什么又要配置这条路由呢？要理解这个问题，我们首先需要知道数据包在路由器内部处理的细节。

图4-4 触发IPSec VPN加密的流程图

图4-4详细介绍了明文数据包进入路由器后触发加密的全过程，具体步骤如下所述。

步骤1：明文数据包（源IP:1.1.1.1，目IP:2.2.2.2）从内部接口进入路由器。

步骤2：路由器根据数据包的目的IP地址查询路由表，并找到这样一条路由——S2.2.2.0/24 via202.100.1.10，这就是在例4-5 中配置的去往2.2.2.0/24 的静态路由。路由器会根据这条路由的下一跳IP:202.100.1.10判断出出站接口为互联网接口 Fa1/0（202.100.1.1）。因此如果没有这个条目，数据包就会由于没有找到路由而被路由器丢弃，当然也就更谈不上加密了（这也解释了为什么需要配置去往远端通信点2.2.2.0/24的路由）。

步骤3：明文数据包尝试通过互联网接口Fa1/0（202.100.1.1）离开路由器，但却撞击上了配置在互联网接口上的crypto map。所谓撞击crypto map，就是指匹配上了crypto map 所定义的感兴趣流。

步骤 4：匹配上感兴趣流就会直接触发路由器的加密行为，加密产生新的数据包。数据包格式如图4-5所示。

步骤5：加密后产生的新数据包，目的IP 地址为61.128.1.1，因此路由器需要继续查询路由表（第二次查询路由表），这时会匹配上 S 61.128.1.1/32 via202.100.1.10 这个路由条目，并以此判断出出站接口为互联网接口 Fa1/0 （202.100.1.1）。

图4-5 IPSec VPN加密后的数据包

步骤6：路由器通过互联网接口转发数据包（第二次尝试从此接口出），虽然接口上配置了crypto map，但由于加密后的数据包不匹配感兴趣流，因此这个包会被直接转发给202.100.1.10（Internet），并且通过它抵达最终目的地（这也解释了为什么需要配置去往远端加密点61.128.1.1/32的路由）。

4.1.5 IOS IPSec VPN 的经典配置

激活ISAKMP，如例4-8所示。

例4-8 激活ISAKMP

Site1(config)#crypto isakmp enable

<默认已经激活，只是用于命令展示>

配置IKE第一阶段策略，如例4-9所示。

例4-9 配置IKE第一阶段策略

Site1(config)#crypto isakmp policy 10

Site1(config-isakmp)#encr 3des

<IKE数据包加密算法使用3DES，默认为DES>

Site1(config-isakmp)#hash md5

<IKE数据包完整性校验的散列算法使用MD5，默认为SHA-1>

Site1(config-isakmp)#authentication pre-share

<IKE第一阶段5-6个包，认证方式为预共享密钥认证，默认为数字签名认证>

Site1(config-isakmp)#group 2

<IKE第一阶段3-4个包，DH交换使用Group2，默认为Group1>

Site1(config)#crypto isakmp key 0 L2Lkey address 61.128.1.1

<IKE第一阶段5-6个包，预共享密钥认证的共享秘密为L2Lkey，注意这个key仅仅只用于认证，加密具体数据

使用的密钥是3-4个包DH产生的随机密钥。>

注意：默认lifetime为一天（86400秒），不建议修改。

可以在Site 1上使用命令show crypto isakmp policy来查询第一阶段策略的配置结果。

配置IKE第二阶段策略，如例4-10所示。

例4-10 配置IKE第二阶段策略

1．配置感兴趣流

Site1(config)#ip access-list extended vpn

Site1(config-ext-nacl)#permit ip 1.1.1.0 0.0.0.255 2.2.2.0 0.0.0.255

<满足感兴趣流的数据会被加密，也就是通信点之间的流量>

2．配置IPSec策略（转换集）

Site1(config)#cry ipsec transform-set Trans esp-des esp-md5-hmac <转换具体数据的策略，名字叫做Trans，封装使用ESP，加密使用DES，完整性校验使用MD5-hmac> 3．配置Crypto map（第二阶段策略汇总）

必需配置：

Site1(config)#crypto map cry-map 10 ipsec-isakmp

<一个ID“10”标识一个vpn，一个map可以配置多个ID，一个接口只能运用一个map> Site1(config-crypto-map)#match address vpn

<匹配感兴趣流，通信点之间的流量>

Site1(config-crypto-map)#set transform-set Trans

<设置转换数据的策略>

Site1(config-crypto-map)#set peer 61.128.1.1

<设置和哪一个设备建立VPN>

可选配置：

Site1(config-crypto-map)#set pfs group2

<启用PFS，完美向前保密>

Site1(config-crypto-map)#set security-association lifetime seconds 1800

<设置IPSec SA的生存期>

将Crypto map 应用到接口，如例4-11 所示。

例4-11 将Crypto map应用到接口

Site1(config)#interface FastEthernet1/0

Site1(config-if)#ip address 202.100.1.1 255.255.255.0

Site1(config-if)#crypto map cry-map

配置Site2路由器，如例4-12所示。

例4-12 配置Site2

Site2(config)#crypto isakmp policy 10

Site2(config-isakmp)#encr 3des

Site2(config-isakmp)#hash md5

Site2(config-isakmp)#authentication pre-share

Site2(config-isakmp)#group 2

Site2(config)#crypto isakmp key 0 L2Lkey address 202.100.1.1

<注意“L2Lkey”用于认证，双方必须相同>

Site2(config)#ip access-list extended vpn

Site2(config-ext-nacl)#permit ip 2.2.2.0 0.0.0.255 1.1.1.0 0.0.0.255

<访问控制列表名字本地有效，无需和Site1相同>

Site2(config)#cry ipsec transform-set cisco esp-des esp-md5-hmac <转换集名字本地有效，无需和Site1相同>

Site2(config)#crypto map cisco 10 ipsec-isakmp

<crypto map名字本地有效，无需和Site1相同>

Site2(config-crypto-map)#match address vpn

Site2(config-crypto-map)#set transform-set cisco

Site2(config-crypto-map)#set peer 202.100.1.1

Site2(config)#interface FastEthernet2/0

Site2(config-if)#ip address 61.128.1.1 255.255.255.0

Site2(config-if)#crypto map cisco 4.1.6 测试IPSec VPN

现在IPSec VPN 已经配置完毕，我们可以在Inside 路由器上使用ping 制造感兴趣流来进行测试，如例4-13所示。需要注意的是本次ping的目的为2.2.2.2，源为1.1.1.1，这就是IPSec VPN 加密的感兴趣流。

例4-13 测试IPSec VPN

Inside#ping 2.2.2.2 source 1.1.1.1 re 100

Type escape sequence to abort.

Sending 100, 100-byte ICMP Echos to 2.2.2.2, timeout is 2 seconds: Packet sent with a source address of 1.1.1.1

.!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Success rate is 99 percent (99/100), round-trip min/avg/max = 4/6/8 ms 4.1.7 查看IPSec VPN 的相关状态

在Site1 路由器上使用show crypto isakmp sa 命令来查看ISAKMP SA 的状态，如例4-14所示。

例4-14 查看ISAKMP SA 的状态

Site1#show crypto isakmp sa

IPv4 Crypto ISAKMP SA

IPv6 Crypto ISAKMP SA

Site1#show crypto isakmp sa detail

Codes: C - IKE configuration mode, D - Dead Peer Detection K - Keepalives, N - NAT-traversal

X - IKE Extended Authentication
psk - Preshared key, rsig - RSA signature
renc - RSA encryption

IPv4 Crypto ISAKMP SA

Engine-id:Conn-id =SW:1

IPv6 Crypto ISAKMP SA

在Site1路由器上使用show cryp to ipsec sa命令来查看IPSec SA的状态，如例4-15所示。

例4-15 查看IPSec SA的状态

Site1#show crypto ipsec sa
interface: FastEthernet1/0

Crypto map tag: cry-map, local addr 202.100.1.1

<本地加密点:202.100.1.1>
protected vrf: (none)

local ident (addr/mask/prot/port): (1.1.1.0/255.255.255.0/0/0) remote ident (addr/mask/prot/port): (2.2.2.0/255.255.255.0/0/0) <感兴趣流为1.1.1.0/24到2.2.2.0/24的IP流量>
current_peer 61.128.1.1 port 500

<远端加密点:61.128.1.1，ISAKMP的流量为UDP/500>

PERMIT, flags={origin_is_acl,}

#pkts encaps: 9, #pkts encrypt: 9, #pkts digest: 9

#pkts decaps: 9, #pkts decrypt: 9, #pkts verify: 9

<加密9个包，解密9个包>

#pkts compressed: 0, #pkts decompressed: 0

#pkts not compressed: 0, #pkts compr. failed: 0

#pkts not decompressed: 0, #pkts decompress failed: 0

#send errors 1, #recv errors 0
local crypto endpt.: 202.100.1.1, remote crypto endpt.: 61.128.1.1
path mtu 1500, ip mtu 1500, ip mtu idb FastEthernet1/0
current outbound spi: 0xFCCC63A7(4241253287)

inbound esp sas:

spi: 0xD471E771(3564234609)

<ESP 入方向的SPI，应该等于Site2 ESP出方向的SPI>
transform: esp-des esp-md5-hmac ,

<处理数据包的转换集为esp-des esp-md5-hmac>
in use settings ={Tunnel, }

<IPSec VPN的封装模式为Tunnel>
conn id: 1, flow_id: SW:1, crypto map: cry-map
sa timing: remaining key lifetime (k/sec): (4546407/3150) IV size: 8 bytes
replay detection support: Y

Status: ACTIVE
inbound ah sas:

inbound pcp sas:

outbound esp sas:

spi: 0xFCCC63A7(4241253287)

<ESP 出方向的SPI，应该等于Site2 ESP入方向的SPI>
transform: esp-des esp-md5-hmac ,

<处理数据包的转换集为esp-des esp-md5-hmac>
in use settings ={Tunnel, }

<IPSec VPN的封装模式为Tunnel>
conn id: 2, flow_id: SW:2, crypto map: cry-map
sa timing: remaining key lifetime (k/sec): (4546407/3150) IV size: 8 bytes
replay detection support: Y

Status: ACTIVE
outbound ah sas:

outbound pcp sas:

在Site1 路由器上使用show crypto session 命令来查看IPSec VPN 摘要，如例4-16所示。

例4-16 查看IPSec VPN摘要

Site1#show crypto session

Crypto session current status

Interface: FastEthernet1/0

Session status: UP-ACTIVE

Peer: 61.128.1.1 port 500

IKE SA: local 202.100.1.1/500 remote 61.128.1.1/500 Active <一个建立在202.100.1.1和61.128.1.1 之间的IKE SA，封装协议为UDP/500> IPSEC FLOW: permit ip 1.1.1.0/255.255.255.0 2.2.2.0/255.255.255.0

Active SAs: 2, origin: crypto map

<两个IPSec SA，感兴趣流为1.1.1.0/24 和2.2.2.0/24>

Site1#show crypto engine connections active

Crypto Engine Connections

4.2 ASA站点到站点IPSec VPN

4.2.1 实际接线状况

图4-6 所示为ASA 站点到站点IPSec VPN 的实际接线状况。本实验一共需要使用3台路由器和1台ASA防火墙。由左至右分别模拟公司站点一内部路由器（Inside）、公司站点一（ASA1）、互联网路由器（Internet）和公司站点二（Site2）。路由器Inside和Site2分别使用Loopback0模拟公司内部网络。路由器Inside使用Fa0/0接口与ASA1的E0/0接口对接，ASA1使用E0/1接口和Internet的Fa1/0接口对接，路由器Internet和Site2使用接口Fa2/0实现对接。

图4-6 ASA站点到站点IPSec VPN的实际接线状况

4.2.2 实验拓扑介绍

图4-7 所示为ASA 站点到站点IPSec VPN 的实验拓扑。该拓扑是一个经典站点到站点VPN拓扑，ASA1（202.100.1.1）和Site2（61.128.1.1）是两个VPN站点连接互联网的网关设备，也是IPSec VPN 的加密设备。本次实验的通信网络为Inside 路由器身后的1.1.1.0/24网络和Site2身后的2.2.2.0/24网络。本次实验需要在ASA1和Site2之间建立隧道模式的IPSec VPN，以保护通信网络之间的流量。

图4-7 ASA站点到站点IPSec VPN的实验拓扑

4.2.3 基本网络配置

在介绍和配置IPSec VPN 之前，我们需要首先配置路由器和ASA 防火墙的IP 地址与路由，即执行基本网络配置。例4-17、例4-18、例4-19和例4-20分别介绍了在Inside、ASA1、Internet和Site2路由器上需要执行的基本网络配置。

例4-17 Inside上的基本网络配置

enable

configure terminal

!

hostname Inside

!

interface Loopback0
ip address 1.1.1.1 255.255.255.0

!

interface FastEthernet0/0
ip address 10.1.1.10 255.255.255.0

no shutdown

!

ip route 0.0.0.0 0.0.0.0 10.1.1.1

!

end

例4-18 ASA1上的基本网络配置

enable

configure terminal

!

hostname ASA1

!

interface Ethernet0/0

nameif Inside
security-level 100
ip address 10.1.1.1 255.255.255.0

no shutdown

!

interface Ethernet0/1

nameif Outside
security-level 0
ip address 202.100.1.1 255.255.255.0

no shutdown

!

route Outside 0.0.0.0 0.0.0.0 202.100.1.10 1
route Inside 0.0.0.0 0.0.0.0 10.1.1.10 tunneled

!

end

提示：ASA1路由配置采用了“Tunneled”这种ASA静态路由特性。配置了“Tunneled”的静态路由只对VPN解密后流量生效。ASA1使用这条路由解决了去往本地通信点（1.1.1.0/24）的选路问题。

例4-19 Internet上的基本网络配置

enable

configure terminal

!

hostname Internet

!

interface FastEthernet1/0
ip address 202.100.1.10 255.255.255.0

no shutdown

!

interface FastEthernet2/0
ip address 61.128.1.10 255.255.255.0

no shutdown

!

end

例4-20 Site2上的基本网络配置

enable

configure terminal

!

hostname Site2

!

interface Loopback0
ip address 2.2.2.2 255.255.255.0

!

interface FastEthernet2/0
ip address 61.128.1.1 255.255.255.0

no shutdown

!

ip route 0.0.0.0 0.0.0.0 61.128.1.10

!

end

4.2.4 ASA 站点到站点 IPSec VPN 配置

激活ISAKMP，如例4-21所示。

例4-21 激活ISAKMP

ASA1(config)# crypto isakmp enable Outside

配置IKE第一阶段策略，如例4-22所示。

例4-22 配置IKE第一阶段策略

ASA1(config)# crypto isakmp policy 10

ASA1(config-isakmp-policy)# authentication pre-share <配置IKE第一阶段的认证策略为预共享密钥，默认为预共享密钥>

ASA1(config-isakmp-policy)# encryption 3des

< IKE数据包加密算法使用3DES，默认为3DES >

ASA1(config-isakmp-policy)# hash md5

<IKE数据包完整性校验的散列算法使用MD5，默认为SHA-1>

ASA1(config-isakmp-policy)# group 2

<IKE第一阶段3-4个包，DH交换使用Group2，默认为Group2>

注意：在ASA1上配置IKE策略时，即使需要使用的策略就是默认策略，也需要管理员手动进行配置，而不能使用默认继承的方式来自动产生配置。根据长期配置经验，ASA默认产生的配置几乎不生效。这个问题可能是一个暂时的bug，但是至少现在的ASA版本（8.0.3）还依然存在这个问题。

配置IKE预共享密钥，如例4-23所示。

例4-23 配置IKE预共享秘密

ASA1(config)# tunnel-group 61.128.1.1 type ipsec-l2l <创建tunnel-group，名字为远端加密点IP 地址，类型为Lan to Lan IPSec> ASA1(config)# tunnel-group 61.128.1.1 ipsec-attributes <进入tunnel-group ipsec 属性配置模式>

ASA1(config-tunnel-ipsec)# pre-shared-key L2Lkey

<配置预共享秘密为L2Lkey>

配置IKE第二阶段策略，如例4-24所示。

例4-24 配置IKE第二阶段策略

1．配置感兴趣流

ASA1(config)# access-list vpn permit ip 1.1.1.0 255.255.255.0 2.2.2.0 255.255.255.0

<ASA上配置ACL，掩码为正掩码>

2．配置IPSec策略（转换集）

ASA1(config)# crypto ipsec transform-set Trans esp-des esp-md5-hmac 3．配置Crypto map（第二阶段策略汇总）

必需配置：

ASA1(config)# crypto map cry-map 10 match address vpn ASA1(config)# crypto map cry-map 10 set transform-set Trans ASA1(config)# crypto map cry-map 10 set peer 61.128.1.1

可选配置：

ASA1(config)# crypto map cry-map 10 set pfs group2

<启用PFS，完美向前保密>

ASA1(config)# crypto map cry-map 10 set security-association lifetime seconds 1800

<设置IPSec SA的生存期>

将Crypto map 应用到接口，如例4-25 所示。

例4-25 将Crypto map应用到接口

ASA1(config)# crypto map cry-map interface Outside <注意“Outside”为接口名字（nameif），调用时需要区分大小写> 在Site2 上配置IPSecVPN，如例4-26 所示。

例4-26 在Site2上配置 IPSec VPN

Site2(config)#crypto isakmp policy 10

Site2(config-isakmp)#encr 3des

Site2(config-isakmp)#hash md5

Site2(config-isakmp)#authentication pre-share

Site2(config-isakmp)#group 2

Site2(config)#crypto isakmp key 0 L2Lkey address 202.100.1.1

Site2(config)#ip access-list extended vpn

Site2(config-ext-nacl)#permit ip 2.2.2.0 0.0.0.255 1.1.1.0 0.0.0.255

Site2(config)#cry ipsec transform-set cisco esp-des esp-md5-hmac Site2(config)#crypto map cisco 10 ipsec-isakmp

Site2(config-crypto-map)#match address vpn

Site2(config-crypto-map)#set transform-set cisco

Site2(config-crypto-map)#set peer 202.100.1.1

Site2(config)#interface FastEthernet2/0

Site2(config-if)#ip address 61.128.1.1 255.255.255.0

Site2(config-if)#crypto map cisco

4.2.5 测试IPSec VPN

现在ASA 与路由器之间的经典IPSec VPN 已经配置完毕，我们可以通过在Inside路由器上使用 ping 制造感兴趣流来进行测试，如例4-27 所示。需要注意的是，本次ping 的目的为2.2.2.2，源为1.1.1.1，这就是IPSec VPN 加密的感兴趣流。

例4-27 测试IPSec VPN

Inside#ping 2.2.2.2 source 1.1.1.1 re 100

Type escape sequence to abort.

Sending 100, 100-byte ICMP Echos to 2.2.2.2, timeout is 2 seconds: Packet sent with a source address of 1.1.1.1

.!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Success rate is 99 percent (99/100), round-trip min/avg/max = 4/6/8 ms 4.2.6 ASA 查看IPSec VPN 的相关状态

在ASA1 上执行show crypto isakmp sa detail 命令，查看ISAKMP SA 的状态，如例4-28所示。

例4-28 查看ISAKMP SA 的状态

ASA1(config)# show crypto isakmp sa detail Active SA: 1

Rekey SA: 0 (A tunnel will report 1 Active and 1 Rekey SA during rekey) Total IKE SA: 1

1　IKE Peer: 61.128.1.1

Lifetime Remaining: 86257

在ASA1 上执行show crypto ipsec as 命令，查看IPSecSA 的状态，如例4-29 所示。

例4-29 查看IPSec SA的状态

ASA1(config)# show crypto ipsec sa
interface: Outside

Crypto map tag: cry-map, seq num: 10, local addr: 202.100.1.1
access-list vpn permit ip 1.1.1.0 255.255.255.0 2.2.2.0 255.255.255.0
local ident (addr/mask/prot/port): (1.1.1.0/255.255.255.0/0/0) remote ident (addr/mask/prot/port): (2.2.2.0/255.255.255.0/0/0) current_peer: 61.128.1.1

#pkts encaps: 109, #pkts encrypt: 109, #pkts digest: 109

#pkts decaps: 109, #pkts decrypt: 109, #pkts verify: 109

#pkts compressed: 0, #pkts decompressed: 0

#pkts not compressed: 109, #pkts comp failed: 0, #pkts decomp failed: 0

#pre-frag successes: 0, #pre-frag failures: 0, #fragments created: 0

#PMTUs sent: 0, #PMTUs rcvd: 0, #decapsulated frgs needing reassembly: 0

#send errors: 0, #recv errors: 0
local crypto endpt.: 202.100.1.1, remote crypto endpt.: 61.128.1.1
path mtu 1500, ipsec overhead 58, media mtu 1500
current outbound spi: D1C28C1E
inbound esp sas:

spi: 0xD90F1B49 (3641645897)

transform: esp-des esp-md5-hmac none
in use settings ={L2L, Tunnel, PFS Group 2, }

slot: 0, conn_id: 4096, crypto-map: cry-map
sa timing: remaining key lifetime (kB/sec): (4274989/1500) IV size: 8 bytes
replay detection support: Y
outbound esp sas:

spi: 0xD1C28C1E (3519187998)

transform: esp-des esp-md5-hmac none
in use settings ={L2L, Tunnel, PFS Group 2, }

slot: 0, conn_id: 4096, crypto-map: cry-map
sa timing: remaining key lifetime (kB/sec): (4274989/1500) IV size: 8 bytes
replay detection support: Y

在ASA1 上执行show vpn-session db l2l 命令，查看VPN 会话数据库，如例4-30所示。

例4-30 查看VPN会话数据库

ASA1(config)# show vpn-sessiondb l2l

Session Type: LAN-to-LAN

Connection : 61.128.1.1

Index　　: 1　　　　　IP Addr　　: 2.2.2.0

Protocol : IKE IPsec

Encryption : DES 3DES　　　Hashing　　: MD5

Bytes Tx　: 10900　　　　Bytes Rx　　: 10900

Login Time : 01:18:08 UTC Tue Nov 30 1999

Duration : 0h:07m:37s

在ASA1 上执行show crypto protocol statictics ipsec 命令，查看IPSec 协议状态，如例4-31所示。

例4-31 查看IPSec协议状态

ASA1(config)# show crypto protocol statistics ipsec [IPsec statistics]

Encrypt packet requests: 109

Encapsulate packet requests: 109

Decrypt packet requests: 109

Decapsulate packet requests: 109

HMAC calculation requests: 218

SA creation requests: 2

SA rekey requests: 0

SA deletion requests: 0

Next phase key allocation requests: 0

Random number generation requests: 1

Failed requests: 0

4.3 路由器GRE Over IPSec站点到站点VPN

4.3.1 经典IPSec VPN 配置方式问题分析

我们已经介绍过了IPSec VPN 在IOS（路由器）和ASA 上的经典配置，这种配置方式的兼容性非常好，可以和绝大部分非Cisco 厂商的VPN 设备建立IPSec VPN。

图4-8 复杂的VPN网络拓扑

然而，前面介绍的经典IPSec配置并不适合在图4-8所示的这种复杂网络环境中部署。在这个VPN网络拓扑中，站点一和站点二身后存在很多网络，并且每一个站点都运行了动态路由协议，在这种 VPN 网络拓扑使用经典 IPSec VPN 配置会出现如下三大难题。

由于没有虚拟隧道接口，不能让两个站点的动态路由协议贯通。

由于没有虚拟隧道接口，所以很难对通信点之间的明文流量进行控制（ACL、NAT、QoS……）。

感兴趣流过多，是两个站点网络间的组合数（网络 1 到网络 4，网络 1 到网络5，网络1到网络6，网络2到网络4……）。

为了解决经典IPSec VPN配置存在的缺陷，Cisco IOS 提供了两种解决方案，如下所示。

GREOverIPSec（推荐在IOS12.4 以前的路由器上配置）。

SVTI （推荐在IOS 12.4 以后的路由器上配置）。

注意：Cisco ASA只能支持经典的站点到站点配置，所以在部署站点到站点VPN时应该优先选择使用Cisco 4.3.2 分析GRE Over IPSec 解决问题的思路

SVTI 技术我们会在本章的后面部分进行介绍，现在我们来分析GRE Over IPSec如何克服IPSec VPN 经典配置的3 大难题。GRE Over IPSec 这个技术简单来说，就是用GRE提供虚拟隧道，然后再使用IPSec来保护这个隧道。

图4-9 GRE隧道拓扑图

在图4-9所示的GRE隧道拓扑图中，我们在两个站点间配置了一个GRE隧道， GRE隧道的作用就是虚拟地把两个站点连接在一起，并且在两个站点内部网络和隧道网络（172.16.1.0/24）上运行动态路由协议（OSPF），这样两个站点就能够通过隧道接口上运行的OSPF学到远端站点身后网络的路由了。

有鉴于此，在GRE 隧道接口上运行的动态路由协议，可以解决 IPSec VPN 经典配置的第一个难题，并且管理员还可以根据需要在GRE隧道接口上配置ACL、NAT、QoS等技术，进而对通信点之间的明文流量进行控制，这也就解决了上文提到的第二大难题。

图4-10 GRE数据封装示意图

为了说明如何解决第三个难题，我们先通过图4-10来介绍IPSec是如何保护GRE流量的。

图4-10中的A和B分别表示站点一路由器和站点二路由器获取的公网IP地址。读者可以从图4-10中发现一个规律，即不管被GRE封装之前的原始数据格式如何，被封装以后都会变成A和B这两个地址之间的GRE流量。即使是OSPF流量，也会被封装到 A 和B 之间的GRE 流量内。掌握了这个规律以后，我们就可以在两个站点之间配置一个IPSec VPN，感兴趣流只是A 和B 之间的GRE 流量，这样就能够把封装到GRE隧道里边的所有流量进行加密，包括OSPF动态路由协议。综上所述，通过使用GREover IPSec技术可以大大减少感兴趣流的配置，因此也就能够解决经典IPSec VPN配置的第三大难题。

GRE over IPSec 是一个典型的传输模式的IPSec VPN，因为加密的感兴趣流是A和B之间的GRE流量，而感兴趣流在中间承载网络（互联网）中是可路由的，并且加密点也是A 和B，满足加密点等于通信点的条件，所以GRE over IPSec 推荐使用传输模式。

图4-11 是GREoverIPSec 隧道和传输模式示意图。从中可以清楚地看到，传输模式比隧道模式更加优化。与隧道模式相比，传输模式的每个数据包都节约了一个IP头部（20个字节），这样就能够在一个数据包中封装更多的数据，所以推荐读者将GRE over IPSec 配置为传输模式。这里我们必须指出，隧道模式并不是不能使用，只是由于隧道模式相比于传输模式不够优化，所以一般不予采用。

图4-11 GRE Over IPSec封装包结构图

在介绍完GRE over IPSec 的理论知识后，我们开始讲解具体的配置步骤。

4.3.3 实际接线状况

图4-12 GRE over IPSec实验实际接线状况

图4-12 所示为GRE overIPSec 实验的实际接线情况。本次实验一共需要使用3 台路由器，由左至右分别模拟公司站点一（Site1）、互联网路由器（Internet）和公司站点二（Site2）。路由器Site1和Internet2使用接口Fa0/0实现对接，路由器Internet和Site2使用接口Fa1/0实现对接。

4.3.4 实验拓扑介绍

图 4-13 所示为 GRE over IPSec 的实验拓扑。该拓扑是一个经典的 GRE over IPSec站点到站点VPN拓扑，Site1（202.100.1.1）和Site2（61.128.1.1）是两个VPN站点连接互联网的网关路由器，本次实验需要在Site1和Site2之间建立GRE隧道Tunnel0，Tunnel0的网段为172.16.1.0/24。另外，我们还需要在GRE隧道上运行动态路由协议OSPF，使Site1和Site2彼此通过动态路由协议学习到对方站点身后网络路由（1.1.1.0/24和2.2.2.0/24）。最后配置IPSecVPN，以对两个站点间的GRE 流量进行加密。

图4-13 GRE over IPSec实验拓扑

4.3.5 基本网络配置

在配置GRE over IPSec 之前，我们需要首先配置路由器的IP 地址与路由，即执行基本网络配置。例4-32、例4-33和例4-34分别介绍了Site1、Internet和Site2路由器上的基本网络配置。

例4-32 Site1上的基本网络配置

enable

configure terminal

!

hostname Site1

!

interface Loopback0
ip address 1.1.1.1 255.255.255.0

!

interface FastEthernet0/0
ip address 202.100.1.1 255.255.255.0

no shutdown
ip route 0.0.0.0 0.0.0.0 202.100.1.10

!

end

例4-33 Internet上的基本网络配置

enable

configure terminal

!

hostname Internet

!

interface FastEthernet0/0
ip address 202.100.1.10 255.255.255.0

no shutdown

!

interface FastEthernet1/0
ip address 61.128.1.10 255.255.255.0

no shutdown

end

例4-34 Site2上的基本网络配置

enable

configure terminal

!

hostname Site2

!

interface Loopback0
ip address 2.2.2.2 255.255.255.0

!

interface FastEthernet1/0
ip address 61.128.1.1 255.255.255.0

no shutdown

!

ip route 0.0.0.0 0.0.0.0 61.128.1.10

!

end

4.3.6 配置GRE 隧道

基本网络配置完毕以后，现在开始在Site1和Site2之间配置GRE隧道，如例4-35和例4-36所示。在配置完GRE隧道后，还需要对其进行测试，如例4-37所示。

例4-35 Site1上的 GRE隧道配置

Site1(config)#interface tunnel 0

Site1(config-if)#ip address 172.16.1.1 255.255.255.0

Site1(config-if)#tunnel source 202.100.1.1

Site1(config-if)#tunnel destination 61.128.1.1

例4-36 Site2 上的GRE隧道配置

Site2(config)#interface tunnel 0

Site2(config-if)#ip address 172.16.1.2 255.255.255.0

Site2(config-if)#tunnel source fastEthernet 1/0

<tunnel source 配置IP地址与配置接口效果相同>

Site2(config-if)#tunnel destination 202.100.1.1

例4-37 测试GRE隧道

Site1#ping 172.16.1.2

Type escape sequence to abort.

Sending 5, 100-byte ICMP Echos to 172.16.1.2, timeout is 2 seconds: !!!!!

Success rate is 100 percent (5/5), round-trip min/avg/max = 104/124/160 ms 4.3.7 配置动态路由协议OSPF

在Site1路由器上配置OSPF协议，如例4-38所示。

例4-38 Site1上的 OSPF配置

Site1(config)#router ospf 1

Site1(config-router)#network 172.16.1.0 0.0.0.255 area 0

<宣告Tunnel隧道接口网络>

Site1(config-router)#network 1.1.1.0 0.0.0.255 area 0

<宣告Site1身后网络>

在Site2路由器上配置OSPF协议，如例4-39所示。

例4-39 Site2 上的OSPF配置

Site2(config)#router ospf 1

Site2(config-router)#network 172.16.1.0 0.0.0.255 area 0

Site2(config-router)#network 2.2.2.0 0.0.0.255 area 0

在Site1 上执行show ip ospf neighbor 命令，查看OSPF动态路由协议的状态，如例4-40所示。

例4-40 查看动态路由协议状态

Site1#show ip ospf neighbor

<查看OSPF邻居关系>

Site1#show ip route ospf

<查看通过OSPF学习到的路由>

2.0.0.0/32 is subnetted, 1 subnets

O　　2.2.2.2 [110/11112] via 172.16.1.2, 00:00:50, Tunnel0

4.3.8 配置IPSec VPN 保护站点间GRE 流量

在Site1路由器上配置IPsec，如例4-41所示。

例4-41 Site1 上的IPSec 配置

Site1(config)#crypto isakmp policy 10

Site1(config-isakmp)#authentication pre-share

Site1(config)#crypto isakmp key 0 cisco address 61.128.1.1

Site1(config)#ip access-list ex vpn

Site1(config-ext-nacl)#permit gre host 202.100.1.1 host 61.128.1.1

Site1(config)#crypto ipsec transform-set cisco esp-des esp-md5-hmac Site1(cfg-crypto-trans)#mode transport

<GRE over IPSec 推荐配置为传输模式>

Site1(config)#crypto map cisco 10 ipsec-isakmp

Site1(config-crypto-map)#match address vpn

Site1(config-crypto-map)#set transform-set cisco

Site1(config-crypto-map)#set peer 61.128.1.1

Site1(config-crypto-map)#inter fa0/0

Site1(config-if)#crypto map cisco

在Site2路由器上配置IPsec，如例4-42所示。

例4-42 Site2上的 IPSec 配置

Site2(config)#crypto isakmp policy 10

Site2(config-isakmp)#authentication pre-share

Site2(config)#crypto isakmp key 0 cisco address 202.100.1.1

Site2(config)#ip access-list ex vpn

Site2(config-ext-nacl)#permit gre host 61.128.1.1 host 202.100.1.1

Site2(config)#crypto ipsec transform-set cisco esp-des esp-md5-hmac Site2(cfg-crypto-trans)#mode transport

Site2(config)#crypto map cisco 10 ipsec-isakmp

Site2(config-crypto-map)#match address vpn

Site2(config-crypto-map)#set transform-set cisco

Site2(config-crypto-map)#set peer 202.100.1.1

Site2(config)#interface fa1/0

Site2(config-if)#crypto map cisco

4.3.9 测试与查看GRE Over IPSec

在Site1 路由器上执行ping 2.2.2.2 so loopback 0 命令，对GRE over IPSec 进行测试，如例4-43所示。

例4-43 使用ping测试GRE over IPSec

Site1#ping 2.2.2.2 so loopback 0

Type escape sequence to abort.

Sending 5, 100-byte ICMP Echos to 2.2.2.2, timeout is 2 seconds: Packet sent with a source address of 1.1.1.1

!!!!!

Success rate is 100 percent (5/5), round-trip min/avg/max = 212/262/304 ms 在Site1路由器上执行show crypto engine connection active命令，查看加解密状态，如例4-44所示。

例4-44 快速查看加解密状态

Site1#show crypto engine connections active

Crypto Engine Connections

在Site1 路由器上执行show crypto ipsec sa 命令，查看IPSec SA，如例4-45 所示。

例4-45 查看IPSec SA

Site1#show crypto ipsec sa
interface: FastEthernet0/0

Crypto map tag: cisco, local addr 202.100.1.1
protected vrf: (none)

local ident (addr/mask/prot/port): (202.100.1.1/255.255.255.255/47/0) remote ident (addr/mask/prot/port): (61.128.1.1/255.255.255.255/47/0) current_peer 61.128.1.1 port 500

PERMIT, flags={origin_is_acl,}

#pkts encaps: 30, #pkts encrypt: 30, #pkts digest: 30

#pkts decaps: 29, #pkts decrypt: 29, #pkts verify: 29

#pkts compressed: 0, #pkts decompressed: 0

#pkts not compressed: 0, #pkts compr. failed: 0

#pkts not decompressed: 0, #pkts decompress failed: 0

#send errors 18, #recv errors 0
local crypto endpt.: 202.100.1.1, remote crypto endpt.: 61.128.1.1
path mtu 1500, ip mtu 1500, ip mtu idb FastEthernet0/0
current outbound spi: 0xE821E2EC(3894534892)

inbound esp sas:

spi: 0xF4A14E61(4104212065)

transform: esp-des esp-md5-hmac ,
in use settings ={Transport, }

conn id: 7, flow_id: SW:7, crypto map: cisco
sa timing: remaining key lifetime (k/sec): (4449954/3466) IV size: 8 bytes
replay detection support: Y

Status: ACTIVE
inbound ah sas:

inbound pcp sas:

outbound esp sas:

spi: 0xE821E2EC(3894534892)

transform: esp-des esp-md5-hmac ,
in use settings ={Transport, }

conn id: 8, flow_id: SW:8, crypto map: cisco
sa timing: remaining key lifetime (k/sec): (4449954/3465) IV size: 8 bytes
replay detection support: Y

Status: ACTIVE
outbound ah sas:

outbound pcp sas:

4.3.10 其他GRE over IPSec 配置方式

在前文中我们讲解了GRE over IPSec 的经典配置，除了上述配置方法之外，Cisco还为我们提供了另外一种GRE over IPSec 的配置方式，这种新配置和刚刚介绍的经典配置结果完全相同，不过方法更加简单，其具体配置如例4-46和例4-47所示。

值得一提的是，即使管理员在网络一侧使用经典配置，在网络另一侧使用新的配置方式，GRE over IPSec 依然可以正常工作。

例4-46 Site1上GRE over IPSec 的全新配置（可以替换例4-41所示的配置）

Site1(config)#crypto isakmp policy 10

Site1(config-isakmp)#authentication pre-share

Site1(config)#crypto isakmp key 0 cisco address 61.128.1.1

Site1(config)#crypto ipsec transform-set cisco esp-des esp-md5-hmac Site1(cfg-crypto-trans)#mode transport

Site1(config)#crypto ipsec profile ipsecprof

<创建IPSec profile 名字为“ipsecprof”> Site1(ipsec-profile)#set transform-set cisco

Site1(config)#inter tunnel 0

Site1(config-if)#tunnel protection ipsec profile ipsecprof 例4-47 Site2上GRE over IPSec 的全新配置（可以替换例4-42所示的配置）

Site2(config)#crypto isakmp policy 10

Site2(config-isakmp)#authentication pre-share

Site2(config)#crypto isakmp key 0 cisco address 202.100.1.1

Site2(config)#crypto ipsec transform-set cisco esp-des esp-md5-hmac Site2(cfg-crypto-trans)#mode transport

Site2(config)#crypto ipsec profile ipsecprof

Site2(ipsec-profile)#set transform-set cisco

Site2(config)#inter tunnel 0

Site2(config-if)#tunnel protection ipsec profile ipsecprof 由于这是一种全新的 IPSec profile 的配置方式，咋一看很难理解它是如何替代crypto map 的。因为后者仅仅在ipsec profile 下设置了转换集，而没有设置对等体（peer）和感兴趣流的内容，因此读者难免感觉缺少对等体和感兴趣方面的配置。

因此，请读者注意这个ipsec profile 的运用位置：它被运用到了隧道接口，并且在调用的命令中使用了关键字 tunnel protection。很显然，这是在使用这个 ipsec profile来保护隧道。既然是保护隧道，那么保护的流量自然是GRE隧道产生的流量，也就是202.100.1.1和61.128.1.1之间的GRE流量。所以感兴趣流是有的，并且和经典配置中的一样。对等体也绝不缺少，因为保护隧道，隧道的目的自然是IPSec的对等体。在Site1，隧道的目的就是61.128.1.1，这也正是IPSec的对等体。

综上所述，新的IPSec profile 配置方式完全可以替代经典配置，并且配置起来更加简单，而且更好理解。这种配置还会在后文的VTI和DMVPN技术中继续采用。

4.4 路由器SVTI站点到站点VPN

4.4.1 VTI 技术介绍

在IOS12.4 之前，建立安全的站点间隧道只能采用GRE over IPSec 技术。但是从IOS 12.4 开始，Cisco 设计了一个全新的隧道技术，这个技术被称为 Virtual Tunnel Interface（VTI）。其实这就是一个IPSec的隧道技术，使用户无需再依托GRE来创建隧道，而可以直接使用IPSec来创建一个VTI隧道接口。

相比GRE over IPSec 技术，VTI 技术减少了每一个包中GRE 头部的4 个字节，所以每一个包能够承载更多的数据。当然，由于虚拟隧道口的存在，VTI也同样能够解决经典配置IPSec VPN中存在的三大问题。

Virtual Tunnel Interface（VTI）技术分为如下两种类型：

静态VTI（Static VTI，SVTI）；

动态VTI（Dynamic VTI，DVTI）。

SVTI 技术主要用于站点到站点IPSecVPN，本章会在后面对它的配置进行讲解。而DVTI主要用于远程访问VPN，关于DVTI的内容，我们会在后面的EZVPN部分进行介绍。

4.4.2 实际接线状况

图4-14所示为静态VTI实验的实际接线状况。本次实验一共需要使用3台路由器，由左至右分别模拟公司站点一（Site1）、互联网路由器（Internet）和公司站点二（Site2）。路由器Site1和Internet2使用接口Fa0/0实现对接，路由器Internet和Site2使用接口Fa1/0实现对接。

图4-14 Static Virtual Tunnel Interface （SVTI）实验实际接线状况

4.4.3 实验拓扑介绍

图4-15所示为静态VTI站点到站点VPN的实验拓扑。Site1（202.100.1.1）和Site2 （61.128.1.1）是两个VPN站点连接互联网的网关路由器。本实验需要在Site1和Site2之间建立SVTI隧道Tunnel0，Tunnel0的网段为172.16.1.0/24。另外，我们还需要在SVTI隧道上运行动态路由协议OSPF，使Site1和Site2彼此通过动态路由协议学习到对方站点身后网络路由（1.1.1.0/24和2.2.2.0/24）。两个站点之间的流量通过路由的引导进入SVTI隧道并且被IPSec加密。

图4-15 Static Virtual Tunnel Interface （SVTI）的实验拓扑

4.4.4 基本网络配置

在配置SVTI之前，我们需要首先配置路由器的IP地址与路由，即执行基本网络配置。例4-48、例4-49和例4-50分别介绍了Site1、Internet和Site2上基本网络配置。

例4-48 Site1上的本网络配置

enable

configure terminal

!

hostname Site1

!

interface Loopback0
ip address 1.1.1.1 255.255.255.0

!

interface FastEthernet0/0
ip address 202.100.1.1 255.255.255.0

no shutdown
ip route 0.0.0.0 0.0.0.0 202.100.1.10

!

end

例4-49 Internet上的基本网络配置

enable

configure terminal

!

hostname Internet

!

interface FastEthernet0/0
ip address 202.100.1.10 255.255.255.0

no shutdown

!

interface FastEthernet1/0
ip address 61.128.1.10 255.255.255.0

no shutdown

end

例4-50 Site2上的基本网络配置

enable

configure terminal

!

hostname Site2

!

interface Loopback0
ip address 2.2.2.2 255.255.255.0

!

interface FastEthernet1/0
ip address 61.128.1.1 255.255.255.0

no shutdown

!

ip route 0.0.0.0 0.0.0.0 61.128.1.10

!

end

4.4.5 配置SVTI 隧道

在Site1上配置SVTI隧道，如例4-51所示。

例4-51 Site1 上的SVTI 隧道配置

1．配置IPSec Profile

Site1(config)#crypto isakmp policy 10

Site1(config-isakmp)#authentication pre-share

Site1(config)#crypto isakmp key 0 cisco address 61.128.1.1

Site1(config)#crypto ipsec transform-set cisco esp-des esp-md5-hmac <与GRE over IPSec 配置区别一：SVTI技术使用隧道模式>

Site1(config)#crypto ipsec profile ipsecprof

Site1(ipsec-profile)#set transform-set cisco

2．配置SVTI

Site1(config)#interface tunnel 0

Site1(config-if)#ip address 172.16.1.1 255.255.255.0

Site1(config-if)#tunnel source 202.100.1.1

Site1(config-if)#tunnel destination 61.128.1.1

Site1(config-if)#tunnel mode ipsec ipv4

<与GRE over IPSec 配置区别二：SVTI使用IPSec ipv4 隧道模式> Site1(config-if)#tunnel protection ipsec profile

在Site2上配置SVTI隧道，如例4-52所示。

例4-52 Site2 上的SVTI 隧道配置

1．配置IPSec Profile

Site2(config)#crypto isakmp policy 10

Site2(config-isakmp)#authentication pre-share

Site2(config)#crypto isakmp key 0 cisco address 202.100.1.1

Site2(config)#crypto ipsec transform-set cisco esp-des esp-md5-hmac Site2(config)#crypto ipsec profile ipsecprof

Site2(ipsec-profile)#set transform-set cisco

2．配置SVTI

Site2(config)#interface tunnel 0

Site2(config-if)#ip address 172.16.1.2 255.255.255.0

Site2(config-if)#tunnel source 61.128.1.1

Site2(config-if)#tunnel destination 202.100.1.1

Site2(config-if)#tunnel mode ipsec ipv4

Site2(config-if)#tunnel protection ipsec profile ipsecprof 4.4.6 测试并查看隧道状况

在Site1 路由器上执行ping172.16.1.1 命令，测试隧道的连通性，如例4-53 所示。

例4-53 使用ping测试隧道直连通信

Site1#ping 172.16.1.2

Type escape sequence to abort.

Sending 5, 100-byte ICMP Echos to 172.16.1.2, timeout is 2 seconds: !!!!!

Success rate is 100 percent (5/5), round-trip min/avg/max = 220/224/232 ms 在Site1路由器上执行show crypto engine connection active命令，查看加解密状态，如例4-54所示。

例4-54 查看加解密状态

Site1#show crypto engine connections active

Crypto Engine Connections

在Site1 路由器上执行show crypto ipsec as 命令，查看IPSec SA 的状态，如例4-55所示。

例4-55 查看IPSec SA状态

Site1#show crypto ipsec sa
interface: Tunnel0

Crypto map tag: Tunnel0-head-0, local addr 202.100.1.1
protected vrf: (none)

local ident (addr/mask/prot/port): (0.0.0.0/0.0.0.0/0/0) remote ident (addr/mask/prot/port): (0.0.0.0/0.0.0.0/0/0) <感兴趣流为任意源到任意目的的IP流量>
current_peer 61.128.1.1 port 500

PERMIT, flags={origin_is_acl,}

#pkts encaps: 10, #pkts encrypt: 10, #pkts digest: 10

#pkts decaps: 10, #pkts decrypt: 10, #pkts verify: 10

#pkts compressed: 0, #pkts decompressed: 0

#pkts not compressed: 0, #pkts compr. failed: 0

#pkts not decompressed: 0, #pkts decompress failed: 0

#send errors 0, #recv errors 0
local crypto endpt.: 202.100.1.1, remote crypto endpt.: 61.128.1.1
path mtu 1500, ip mtu 1500, ip mtu idb FastEthernet0/0
current outbound spi: 0x924D9D1F(2454560031)

inbound esp sas:

spi: 0x3B5B1A67(995826279)

transform: esp-des esp-md5-hmac ,
in use settings ={Tunnel, }

conn id: 1, flow_id: SW:1, crypto map: Tunnel0-head-0
sa timing: remaining key lifetime (k/sec): (4487011/3076) IV size: 8 bytes
replay detection support: Y

Status: ACTIVE
inbound ah sas:

inbound pcp sas:

outbound esp sas:

spi: 0x924D9D1F(2454560031)

transform: esp-des esp-md5-hmac ,
in use settings ={Tunnel, }

conn id: 2, flow_id: SW:2, crypto map: Tunnel0-head-0
sa timing: remaining key lifetime (k/sec): (4487011/3075) IV size: 8 bytes
replay detection support: Y

Status: ACTIVE
outbound ah sas:

outbound pcp sas:

提示：通过例4-55可以发现，SVTI建立的IPSec SA中，感兴趣流为任意源到任意目的的流量，但是千万不要因此认为所有进入Site 1的流量都会被加密，仅仅只是进入SVTI这个隧道的流量才加密。

这个问题不妨这样理解：GRE over IPSec 和SVTI 技术只是在两台路由器之间建立了一个虚拟隧道，或者说仅仅只是用一根虚拟的网线把这两台路由器连接在一起，进入这根网线的流量就进行加密。至于什么流量会进入这根网线，完全由路由决定。我们在隧道口上通告路由协议，两台路由器通过隧道口学习到对方身后网络，这样，去往远端站点的流量，就会被路由引导进入隧道口，并被GRE over IPSec 或者SVTI进行加密保护。GRE over IPSec 和SVTI 技术只是路由技术的一种拓展，旨在把原有的网络拓展到分支站点。

4.4.7 配置动态路由协议OSPF

在Site1路由器上配置OSPF动态路由协议，如例4-56所示。

例4-56 Site1上的 OSPF配置

Site1(config)#router ospf 1

Site1(config-router)#network 172.16.1.0 0.0.0.255 area 0

Site1(config-router)#network 1.1.1.0 0.0.0.255 area 0

在Site2路由器上配置OSPF协议，如例4-57所示。

例4-57 Site2 上的OSPF配置

Site2(config)#router ospf 1

Site2(config-router)#network 172.16.1.0 0.0.0.255 area 0

Site2(config-router)#network 2.2.2.0 0.0.0.255 area 0

在Site1 路由器上执行show ip ospf neighbor 命令，查看动态路由协议的状态，如例4-58所示。

例4-58 查看动态路由协议状态

Site1#show ip ospf neighbor

Site1#sh ip route ospf

2.0.0.0/32 is subnetted, 1 subnets

O　　2.2.2.2 [110/11112] via 172.16.1.2, 00:00:27, Tunnel0

在Site1 路由器上执行show crypto engine connection sa 命令，查看加解密状态，如例4-59所示。

例4-59 查看加解密状态

Site1#show crypto engine connections aCrypto Engine Connections

4.5 总结

本章一共介绍了4 种Cisco 站点到站点IPSec VPN 的配置方式：分别是经典站点到站点IPSec VPN、ASA 站点到站点IPSec VPN、路由器GRE Over IPSec 站点到站点VPN和路由器SVTI站点到站点VPN。

下面我们对这4种VPN的使用做一下总结。ASA只能通过经典命令配置站点到站点IPSec VPN。ASA 不支持GRE overIPSec 和VTI技术，所以不推荐在站点到站点VPN项目中使用ASA。当然我们后面会介绍到远程访问VPN，ASA在这方面确实具备路由器不可比拟的优势。

如果在建立VPN的两台设备中，一台是Cisco设备，一台是非Cisco设备，那么只能采用IPSec VPN 的经典配置来实施这个VPN。

如果两台VPN设备都是Cisco路由器，并且IOS版本低于12.4，推荐采用GRE over IPSec技术来部署站点到站点VPN。如果IOS版本高于12.4，则推荐采用SVTI技术来部署站点到站点VPN。

第5章 影响IPSec VPN的网络问题

IPSec VPN 主要通过互联网来建立隧道，对于 IPSec VPN而言互联网是一个问题的集合体，动态地址、防火墙和地址转换都会严重影响IPSec VPN。本章的主要目的就是介绍那些影响IPSec VPN 的网络问题，并给出相应的解决方案。

5.1 动态地址问题

5.1.1 问题描述

在第4章中，我们已经介绍了4 种站点到站点的IPSec VPN技术。要部署这4 种IPSec VPN，有一个前提条件要满足，那就是两个站点都需要有固定的IP地址，但是在实际工程中很难满足这个条件。在一般的工程环境中，虽然公司中心站点很有可能拥有固定 IP 地址（当然也有可能使用动态地址），但是分支站点则往往使用的是动态 IP 地址（例如使用 ADSL 的上网链路）。要在这种网络环境部署站点到站点的IPSec VPN，可以采取如下4种解决方案：

动态crypto map；

DDNS；

EzVPN；

GRE over EzVPN（教主自创）。

本章将重点讲解前两种解决方案，而 EzVPN 和 GRE over EzVPN这两种解决方案则会在本书第9章讲解。

5.1.2 动态crypto map 实验

1．实际接线状况

图5-1 所示为动态crypto map 实验的接线情况。在本实验中，总共需要使用3 台路由器，由左至右分别模拟公司中心站点（Center）、互联网路由器（Internet）和公司分支站点（Branch）。路由器Center和Internet使用接口Fa0/0实现对接，路由器Internet和Branch使用接口Fa1/0实现对接。Site1的环回口（loopback0）模拟公司站点一内部网络，Site2的环回口（loopback0）模拟公司站点二内部网络。

图5-1 动态crypto map实验接线状况

2．实验拓扑介绍

图5-2 所示为动态crypto map 实验拓扑，该拓扑是一个典型的站点到站点VPN拓扑，其中Center（202.100.1.1）是中心站点的VPN网关路由器，Branch是分支站点的VPN网关路由器。Branch通过DHCP技术动态从Internet路由器获取IP地址，模拟真实网络中ADSL动态获取地址的情况。本次实验的通信网络为Center路由器身后的1.1.1.0/24 网络和Branch 身后的2.2.2.0/24 网络。本次实验需要使用动态crypto map 技术来解决分支站点动态获取IP地址问题，并在Center和Branch之间建立隧道模式的IPSecVPN，以保护通信网络之间的流量。

图5-2 动态crypto map实验拓扑

3．基本网络配置

在配臵动态crypto map IPSec VPN 之前，我们需要首先配臵路由器的IP 地址与路由，即执行基本网络配臵。例5-1、例5-2和例5-3分别介绍了Center、Internet和Branch路由器上的基本网络配臵。

例5-1 Center上的基本网络配置

enable

configure terminal

!

hostname Center

!

interface Loopback0
ip address 1.1.1.1 255.255.255.0

!

interface FastEthernet0/0
ip address 202.100.1.1 255.255.255.0

no shutdown

!

ip route 0.0.0.0 0.0.0.0 202.100.1.10

!

end

例5-2 Internet上的基本网络配置

enable

configure terminal

!

hostname Internet

!

ip dhcp pool Branch
network 61.128.1.0 255.255.255.0
default-router 61.128.1.10

<配置DHCP地址池，为Branch动态分配IP地址。>

!

interface FastEthernet0/0
ip address 202.100.1.10 255.255.255.0

no shutdown

!

interface FastEthernet1/0
ip address 61.128.1.10 255.255.255.0

no shutdown

end

例5-3 Branch上的基本网络配置

enable

configure terminal

!

hostname Branch

!

interface Loopback0
ip address 2.2.2.2 255.255.255.0

!

interface FastEthernet1/0

ip address dhcp

no shutdown

!

end

当Branch路由器通过DHCP获取了IP地址后，其Console口上所显示的信息如例5-4所示。

例5-4 Branch获取IP地址后Console口所显示的信息

*Mar 1 01:03:16.403: %DHCP-6-ADDRESS_ASSIGN: Interface FastEthernet1/0 assigned DHCP
address 61.128.1.2, mask 255.255.255.0, hostname Branch 在Branch 上执行show ip interface brief 命令，查看Branch 接口的IP 地址，如例5-5所示。

例5-5 查看Branch接口的IP 地址

Branch#show ip interface brief

在Branch 上执行show ip route 命令，查看通过DHCP 获得的默认路由，如例5-6所示。

例5-6 查看Branch通过DHCP 获取的默认路由

Branch#show ip route

2.0.0.0/24 is subnetted, 1 subnets

C　　2.2.2.0 is directly connected, Loopback0

61.0.0.0/24 is subnetted, 1 subnets

C　　61.128.1.0 is directly connected, FastEthernet1/0

S*　0.0.0.0/0 [254/0] via 61.128.1.10

在Branch上执行ping操作，测试Branch和Center路由器之间的网络连通性，如例5-7所示。

例5-7 Branch ping Center 测试网络连通性

Branch#ping 202.100.1.1

Type escape sequence to abort.

Sending 5, 100-byte ICMP Echos to 202.100.1.1, timeout is 2 seconds: .!!!!

Success rate is 80 percent (4/5), round-trip min/avg/max = 28/75/152 ms 4．Branch 经典站点到站点IPSec VPN配置

在本实验中，虽然Branch路由器是动态获取IP地址的，但是Center路由器使用固定IP地址202.100.1.1。因此，在例5-8中，分支站点Branch采用了本书4.1节所介绍的经典站点到站点IPSecVPN 配臵。

例5-8 分支站点Branch上的IPSec VPN配置

Branch(config)#crypto isakmp policy 10

Branch(config-isakmp)#authentication pre-share

Branch(config)#crypto isakmp key 0 cisco address 202.100.1.1

Branch(config)#ip access-list ex vpn

Branch(config-ext-nacl)#permit ip 2.2.2.0 0.0.0.255 1.1.1.0 0.0.0.255

Branch(config)#crypto ipsec transform-set cisco esp-des esp-md5-hmac Branch(config)#crypto map cisco 10 ipsec-isakmp

Branch(config-crypto-map)#match address vpn

Branch(config-crypto-map)#set transform-set cisco

Branch(config-crypto-map)#set peer 202.100.1.1

<公司中心站点有固定地址，Branch 可以使用set peer命令>

Branch(config)#interface fastEthernet 1/0

Branch(config-if)#crypto map cisco

5．Center 动态crypto map IPSec VPN 配置

在本实验中，分支站点Branch动态获取IP地址。因此在例5-9所示的中心站点Center 的配臵中，无法再使用传统的set peer之类的命令来指定对端的IP 地址，只能采用动态crypto map 来解决动态IP 地址问题。

例5-9 中心站点Center上的IPSec VPN配置

Center(config)#crypto isakmp policy 10

Center(config-isakmp)#authentication pre-share

Center(config)#crypto isakmp key 0 cisco address 0.0.0.0 0.0.0.0

<由于Branch端是动态地址，所以只能使用8个零来匹配任意地址，也就是说不管Branch使用什么地址，只要有相同的预共享秘密“cisco”就能建立IPSec VPN，当然这种配置并不安全，推荐使用证书认证。> Center(config)#crypto ipsec transform-set cisco esp-des esp-md5-hmac Center(config)#crypto dynamic-map dymap 10

Center(config-crypto-map)#set transform-set cisco

<动态cryptomap 配置模式下只需设置转换集，任意的peer和感兴趣流都可以被中心站点接受，其实中心站点也无法设置peer和感兴趣流。因为Branch端地址和身后网络中心站点并不知晓。> Center(config)#crypto map cisco 10000 ipsec-isakmp dynamic dymap <一般一台路由器只有一个互联网接口，一个接口只能同时调用一个crypto map。如果这台路由器希望同时和多个对等体，建立多个ipsec vpn，可以通过配置多个crypto map的序号（id）来实现。例如，crypto mapcisco10配置和站点一的IPSec vpn，crypto map cisco 20配置和站点二的IPSec vpn。一般动态crypto map的序号应该配置成为最后（最大）的一个，这样配置的主要目的是为了让那些序号小的明细的crypto map 策略优先得以匹配，如果匹配不上明细策略，剩余的IPSec VPN 连接请求由动态 crypto map 来处理。这次配置中序号被配置成为10000，主要是为了提醒大家注意，动态crypto map 应该配置成为最大的一个序号。> Center(config)#interface fastEthernet 0/0

Center(config-if)#crypto map cisco

6．测试IPSec VPN

在Branch 上执行ping 操作，向Center 主动发起IPSec VPN，如例5-10 所示。

例5-10 分支站点Branch向中心站点Center主动发起IPSec VPN

Branch#ping 1.1.1.1 so 2.2.2.2

Type escape sequence to abort.

Sending 5, 100-byte ICMP Echos to 1.1.1.1, timeout is 2 seconds: Packet sent with a source address of 2.2.2.2

.!!!!

Success rate is 80 percent (4/5), round-trip min/avg/max = 200/245/296 ms 注意：在动态crypto map的IPSec VPN中，必须首先由动态获取IP地址的一方（分支站点Branch）向固定IP地址的一方（中心站点Center）主动发起IPSec VPN。只有当IPSec SA建立以后，固定IP地址的一方（中心Center）才能访问动态获取IP地址的一方（分支站点Branch）。固定IP地址的一方不能主动发起IPSec VPN连接，因为它根本就不知道感兴趣流和Peer是什么。

例5-11 所示为IPSecSA 建立之后中心站点向分支站点的ping 测试结果。

例5-11 中心站点Center向分支站点Branch的ping 测试结果

Center#ping 2.2.2.2 so 1.1.1.1

Type escape sequence to abort.

Sending 5, 100-byte ICMP Echos to 2.2.2.2, timeout is 2 seconds: Packet sent with a source address of 1.1.1.1

!!!!!

Success rate is 100 percent (5/5), round-trip min/avg/max = 156/219/284 ms 在Center 上执行show crypto engine connection active 命令，查看加解密状态，如例5-12所示。

例5-12 在中心站点Center查看加解密状态

Center#show crypto engine connections active

Crypto Engine Connections

7．动态crypto map实验总结

客观地说，动态crypto map 这种IPSec VPN 配臵方式，存在很多缺点。首先，这样配臵的IPSec VPN，中心站点不能主动发起IPSec VPN，因为中心站点并不知道分支站点的IP 地址和感兴趣流。也就是说，IPSec VPN 必须首先由分支站点主动发起，在建立了IPSec SA 后，中心站点才能够访问分支站点。其次，这种配臵方法没有使用虚拟隧道接口，所以不能在中心和分支站点间贯通动态路由协议，更不能使用ACL、QoS和NAT等技术对明文流量进行有效地控制。

动态crypto map 配臵的IPSec VPN，建议部署在一方为Cisco 设备，另一方为非Cisco设备，并且一方有固定IP地址，另一方动态获取IP地址的场合。除了这种特殊情况之外，我们不推荐使用这种配臵方式。如果双方都是Cisco产品，则建议使用Cisco的私有技术——EzVPN。

5.2 动态DNS（DDNS）技术介绍

5.2.1 DDNS 技术介绍

传统的DNS（Domain Name System，域名系统）技术可以将域名解析为IP 地址，从而实现通过域名来访问网络节点的功能。但是，DNS 仅仅提供了域名和 IP 地址之间的静态对应关系，当节点的IP地址发生变化时，DNS无法动态地更新域名和IP地址的对应关系。此时，如果仍然使用域名访问该节点，通过域名解析得到的IP地址就是错误的，从而导致访问失败。

DDNS（Dynamic Domain Name System，动态域名系统）用来动态更新DNS 服务器上域名和IP地址之间的对应关系，以此确保通过域名能够解析到正确的IP地址。

5.2.2 DDNS 在IPSec VPN 的使用

使用DDNS这项技术，我们就可以在两个都是动态获取 IP 地址的站点间轻松建立IPSecVPN。我们可以为动态获取IP 地址的中心站点使用DDNS 技术，将中心站点获取的IP地址动态映射到一个域名。这样一来，无论中心站点获取的IP地址如何变化，映射的域名总是不变的，这样分支站点就可以通过连接中心站点的域名来建立IPSecVPN 了。

5.2.3 DDNS 在IOS上的配置

Cisco IOS 路由器可以支持很多 DDNS 运营商，详细的配臵细节，请参考http://www.cisco.com/en/US/docs/ios/12_3/12_3y/12_3ya8/gt_ddns.html。

要使用DDNS这项技术，首先需要到相应的DDNS运营商去申请服务，虽然很多DDNS运用商都宣称可以免费提供服务，但是根据经验，免费的服务质量往往很差，偶尔还会出现解析错误或者注册失败等问题。如果读者只是为了做实验，那么可以申请免费服务，但若要在实际工程中部署VPN，还是希望大家购买收费服务。现在就以DYNDNS这个厂商提供的DDNS服务为例，来简单介绍一下DDNS的配臵。

现在假设已经在DYNDNS这个DDNS服务提供商申请了如下账号和域名。

用户名：yeslab

密码：yeslabccies

域名：yeslab.mingjiao.org

在例5-13 所示的配臵中，中心站点把PPPOE（Dialer1）动态获取的IP 地址映射到DDNS域名yesalab.mingjiao.org。中心站点的后续配臵，只需按照例5-9中动态cryptomap的配臵即可，这里不再赘述。

例5-13 Cisco IOS路由器上关于DDNS的配置

ip ddns update method yeslab

HTTP
add http://yeslab:yeslabccies@<s>/nic/update?system=dyndns&hostname=<h>&myip=<a> interval maximum 0 1 0 0

<注意:“:”前面配置的“yeslab”为用户名，“:”后面配置的“yeslabccies”为密码，其余配置只需要原封不动地照抄就可以。> interface Dialer1

ip address negotiated
ip ddns update hostname yeslab.mingjiao.org
ip ddns update yeslab host members.dyndns.org

<注意:dialer1为PPPOE拨号虚拟接口，动态获取的公网地址就附在这个接口上。>

例5-14 所示为分支站点IPSec VPN 的配臵。读者需要注意“set peer”后边的域名设臵。

例5-14 分支站点IPSec VPN 的配置

Branch(config) #ip domain-lookup

Branch(config)# ip name-server 8.8.8.8

<配置路由器的DNS服务器为8.8.8.8，使用这个DNS解析中心站点的动态域名“yeslab.mingjiao.org”到IP地址。> Branch(config)#crypto isakmp policy 10

Branch(config-isakmp)#authentication pre-share

Branch(config)#crypto isakmp key 0 cisco address 0.0.0.0

<虽然“set peer”使用了域名，但是本实验依然使用基于地址的预共享密钥认证，这个地址就是动态域名解析得到的IP地址。因为远端的IP地址是动态的，所以使用8个零来匹配任意地址。> Branch(config)#ip access-list ex vpn

Branch(config-ext-nacl)#permit ip 2.2.2.0 0.0.0.255 1.1.1.0 0.0.0.255

Branch(config)#crypto ipsec transform-set cisco esp-des esp-md5-hmac Branch(config)#crypto map cisco 10 ipsec-isakmp

Branch(config-crypto-map)#match address vpn

Branch(config-crypto-map)#set transform-set cisco

Branch(config-crypto-map)# set peer yeslab.mingjiao.org dynamic <设置对等体使用域名“yeslab.mingjiao.org”，注意一定要在配置的域名后面追加一个 dynamic 关键字，这样每次发起连接的时候都会去解析域名所映射的IP地址。> Branch(config)#interface fastEthernet 1/0

Branch(config-if)#crypto map cisco

5.3 加密设备NAT对IPSec VPN的影响

5.3.1 问题描述

作为一个站点的网关路由器，既要完成建立VPN的任务，还应该为内部用户上网执行地址转换（NAT）。但是在一台路由器上配臵的地址转换（NAT）会影响经典命令配臵的IPSec VPN，注意，不会影响有隧道的IPSec 技术，例如GRE over IPSec 和VTI技术。我们会在后续的实验中详细论述这个问题，并提出解决这个问题的方法。

5.3.2 加密设备NAT问题分析实验

1．实际接线状况

图5-3所示为加密设备NAT问题分析实验的实际接线图。本实验一共需要使用3台路由器，由左至右分别模拟公司站点一（Site1）、互联网路由器（Internet）和公司站点二（Site2）。路由器Site1和Internet使用接口Fa0/0实现对接，路由器Internet和Site2 使用接口 Fa1/0 实现对接。Site1 的环回口（loopback0）模拟公司站点一内部网络，Site2的环回口（loopback0）模拟公司站点二内部网络。

图5-3 加密设备NAT问题分析实验实际接线图

2．实验拓扑介绍

图5-4所示为加密设备NAT问题分析的实验拓扑，该拓扑是一个典型的站点到站点VPN拓扑。Site1（202.100.1.1）和Site2（61.128.1.1）是两个VPN站点连接互联网的网关路由器，也是 IPSec VPN 的加密设备。本次实验的通信网络为 Site1 身后的1.1.1.0/24网络和Site2身后的2.2.2.0/24网络。本次实验需要在Site1和Site2之间建立隧道模式的IPSecVPN来保护通信网络之间的流量。当配臵并测试完毕IPSecVPN后，我们会尝试在Site2上配臵PAT地址转换，并且测试在Site2这个加密设备上配臵地址转换会如何对IPSecVPN构成影响，并且提出解决这个问题的方法。

图5-4 加密设备NAT问题分析实验拓扑

3．基本网络与经典IPSec VPN 配置

本次实验的主要目的是测试地址转换对IPSecVPN的影响，而不是介绍经典配臵的IPSec VPN 是如何配臵的。因此下面仅通过例5-15、例5-16 和例5-17 为读者简单展示Site1、Internet 和Site2 路由器上的基本网络与经典IPSecVPN 配臵。

例5-15 Site1上的基本网络与经典IPSec VPN配置

enable

configure terminal

!

hostname Site1

!

crypto isakmp policy 10
authentication pre-share
crypto isakmp key cisco address 61.128.1.1

!

crypto ipsec transform-set cisco esp-des esp-md5-hmac !

crypto map cisco 10 ipsec-isakmp
set peer 61.128.1.1
set transform-set cisco

match address vpn

!

interface Loopback0
ip address 1.1.1.1 255.255.255.0

!

interface FastEthernet0/0
ip address 202.100.1.1 255.255.255.0

crypto map cisco

no shutdown

!

ip route 0.0.0.0 0.0.0.0 202.100.1.10

!

ip access-list extended vpn
permit ip 1.1.1.0 0.0.0.255 2.2.2.0 0.0.0.255

!

end

例5-16 Internet上的基本网络与Telnet登录配置

enable

configure terminal

!

enable password cisco

!

no ip domain lookup

!

hostname Internet

!

interface FastEthernet0/0
ip address 202.100.1.10 255.255.255.0

no shutdown

!

interface FastEthernet1/0
ip address 61.128.1.10 255.255.255.0

no shutdown

!

line vty 0 4

password cisco

!

end

例5-17 Site2上的基本网络与经典IPSec VPN配置

enable

configure terminal

!

hostname Site2

!

crypto isakmp policy 10
authentication pre-share
crypto isakmp key cisco address 202.100.1.1

!

crypto ipsec transform-set cisco esp-des esp-md5-hmac !

crypto map cisco 10 ipsec-isakmp
set peer 202.100.1.1
set transform-set cisco

match address vpn

!

interface Loopback0
ip address 2.2.2.2 255.255.255.0

!

interface FastEthernet1/0
ip address 61.128.1.1 255.255.255.0

crypto map cisco

no shutdown

!

ip route 0.0.0.0 0.0.0.0 61.128.1.10

!

ip access-list extended vpn
permit ip 2.2.2.0 0.0.0.255 1.1.1.0 0.0.0.255

!

end

4．测试并且查看IPSec VPN 状态

配臵完基本网络和经典IPSec VPN 之后，在Site2 路由器上执行ping 操作，以测试这个IPSec VPN 是否可以正常工作，其中，源为2.2.2.2，目的为1.1.1.1，如例5-18所示。

例5-18 在Site2上使用ping测试IPSec VPN

Site2#ping 1.1.1.1 source 2.2.2.2 r 10

Type escape sequence to abort.

Sending 10, 100-byte ICMP Echos to 1.1.1.1, timeout is 2 seconds: Packet sent with a source address of 2.2.2.2

.!!!!!!!!!

Success rate is 90 percent (9/10), round-trip min/avg/max = 156/268/544 ms 在Site2 上执行show crypto engine connection active 命令之后，还可以查看IPSec VPN的加解密状态，如例5-19所示。

例5-19 在Site2上查看IPSec VPN的加解密状态

Site2#show crypto engine connections active

Crypto Engine Connections

5．在Site2上配置PAT转换

现在，IPSec VPN 已经可以正常工作了。为了测试地址转换（NAT）对经典配臵的IPSec VPN 的影响，在Site2 上为内部网络（2.2.2.0/24）配臵PAT 地址转换，复用互联网接口地址（61.128.1.1），如例5-20所示。

例5-20 在Site2上配置PAT 地址转换

Site2(config)#ip access-list extended PAT

Site2(config-ext-nacl)#permit ip 2.2.2.0 0.0.0.255 any Site2(config)#ip nat inside source list PAT interface fastEthernet 1/0 overload Site2(config)#interface fastEthernet 1/0

Site2(config-if)#ip nat outside

Site2(config)#interface loopback 0

Site2(config-if)#ip nat inside

6．测试并查看 PAT转换状态

Site2上的PAT地址转换已经配臵完毕。紧接着我们在Site2上产生满足地址转换条件的ICMP和Telnet流量（见例5-21和例5-22），并且查看PAT地址转换的工作状况（见例5-23）。

例5-21 在Site2上产生满足地址转换条件的ICMP 流量

Site2#ping 61.128.1.10 source loopback 0

Type escape sequence to abort.

Sending 5, 100-byte ICMP Echos to 61.128.1.10, timeout is 2 seconds: Packet sent with a source address of 2.2.2.2

!!!!!

Success rate is 100 percent (5/5), round-trip min/avg/max = 56/108/140 ms 例5-22 在Site2上产生满足地址转换条件的Telnet流量

Site2#telnet 61.128.1.10 /source-interface loopback 0

Trying 61.128.1.10 ... Open

User Access Verification

Password: cisco

Internet>enable

Password: cisco

Internet#show users

例5-23 查看PAT地址转换工作状况

Site2#show ip nat translations

上述测试表明PAT工作正常，Site2能够以2.2.2.2为源访问互联网地址61.128.1.10，并且地址被转换为了Site2外部接口地址（61.128.1.1），同时在Site2也能够查看到相应的转换项。

7．再次测试并且查看IPSec VPN状态

现在，经典配臵的IPSec VPN 和PAT 地址转换已经同时被配臵到了Site2 上。再次在Site2上通过ping 操作来测试IPSecVPN，如例5-24 所示。可以看到，例5-18 中曾经正常工作的IPSecVPN 现在已经无法正常工作了，如例5-24 所示。

例5-24 再次在Site2上测试IPSec VPN

Site2#ping 1.1.1.1 source 2.2.2.2

Type escape sequence to abort.

Sending 5, 100-byte ICMP Echos to 1.1.1.1, timeout is 2 seconds: Packet sent with a source address of 2.2.2.2

U.U.U

Success rate is 0 percent (0/5)

<出现“U”的 ICMP unreachable 信息，使用“debug ip icmp”发现这些 icmp unreachable 信息，都是

Internet设备发送给Site2的“host unreachable”信息>

在Site2 上执行show crypto engine connection active 命令，查看IPSec VPN 的加解密状态，如例5-25所示。

例5-25 在Site2上查看IPSec VPN加解密状态

Site2#show crypto engine connections active

Crypto Engine Connections

<通过查看加解密发现，本次ping操作并没有增加加密流量，依然是当初的9个加密数据包，说明本次ping操作并没有被加密。> 8．分析NAT 转换对IPSec VPN的影响

在分析NAT 转换对IPSec VPN 影响之前，我们先来看Cisco 官方给出的NAT 处理流程图，如图5-5所示。

从图5-5中可以看到，路由器在处理由内到外流量时，NAT技术优先于加密技术处理数据包。在例5-24中，Site2通过ping操作产生源为2.2.2.2，目的为1.1.1.1的流量。这个流量首先被PAT转换为源为61.128.1.1，目的为1.1.1.1的流量，因为转换后的这个流量不再满足感兴趣流（源为2.2.2.0/24，目的为1.1.1.0/24），所以不会被路由器加密。取而代之的是，路由器会转发这个未被加密的流量到Internet（61.128.1.10）。当Internet收到这个数据包后，发现目的地址1.1.1.1没有路由可达（1.1.1.1不是一个全局可路由地址）。所以Internet（61.128.1.10）回送ICMP 主机不可达差错给Site2。这就是在例5-24的ping测试中，出现“U”这种提示的原因。

图5-5 NAT处理流程图

在了解了问题的始末缘由之后，就可以很容易地解决这个问题了。我们只需要按照例5-26 所示的方法来修改Site2 上配臵的PAT 列表，把IPSec VPN 的感兴趣流从这个访问控制列表中排除掉，这样PAT 就不会再转换IPSec VPN 的感兴趣流，IPSec VPN也就能够正常加密数据了。

9．配置PAT 列表排除IPSec VPN感兴趣流

例5-26 修改Site2上的地址转换列表，排除IPSec VPN感兴趣流

Site2(config)#ip access-list ex PAT

Site2(config-ext-nacl)#5 deny ip 2.2.2.0 0.0.0.255 1.1.1.0 0.0.0.255

在Site2 上执行showaccesss-lists PAT 命令，查看修改后的列表，如例5-27 所示。

例5-27 查看修改后的列表

Site2#show access-lists PAT

Extended IP access list PAT

5 deny ip 2.2.2.0 0.0.0.255 1.1.1.0 0.0.0.255

10 permit ip 2.2.2.0 0.0.0.255 any

10．测试IPSec VPN（问题解决）

例 5-27 所示的地址转换列表中排除了感兴趣流，所以可以在 Site2 上成功地对IPSec VPN 进行ping 测试，如例5-28 所示。在例5-29 中可以看到，加解密数据包的数量也相应地有所增加。同时，在Site2 上执行show access-lists PAT 命令，还可以看到旁路感兴趣流的列表条目的匹配项，如例5-30所示。

例5-28 在Site2上使用ping测试IPSec VPN

Site2#ping 1.1.1.1 source 2.2.2.2 re 10

Type escape sequence to abort.

Sending 10, 100-byte ICMP Echos to 1.1.1.1, timeout is 2 seconds: Packet sent with a source address of 2.2.2.2

!!!!!!!!!!

Success rate is 100 percent (10/10), round-trip min/avg/max = 124/225/292 ms 例5-29 在Site2上查看加解密数据包

Site2#show crypto engine connections active

Crypto Engine Connections

例5-30 旁路感兴趣流的列表条目有匹配项

Site2#show access-lists PAT

Extended IP access list PAT

5 deny ip 2.2.2.0 0.0.0.255 1.1.1.0 0.0.0.255 (10 matches) 10 permit ip 2.2.2.0 0.0.0.255 any

注意：问题适用场合

这个问题只会出现在经典配置的IPSec VPN中，而使用虚拟隧道技术的IPSec VPN（GRE over IPSec和VTI）不受影响。因为对于拥有虚拟隧道接口的路由器而言，感兴起流是从隧道口离开的，在隧道口上并没有配置ip nat outside，因此感兴趣流并不会被转换。简而言之，NAT技术并不会影响使用虚拟隧道技术的IPSec VPN。

5.4 中间网络ASA防火墙对IPSec VPN的影响

5.4.1 问题描述

IPSec VPN 和防火墙是安全学习的两大重要技术，IPSec VPN 实现了网络的拓展，防火墙技术实现了网络间的访问控制。由于防火墙会对流量进行过滤，因此它的存在势必会对 IPSec VPN 的通信产生影响。我们现在就通过下面的实验来了解一下 Cisco ASA 防火墙会如何影响IPSec VPN，以及如何解决这个问题。

5.4.2 CiscoASA 防火墙对IPSec VPN 的影响实验

1．实际接线状况

图5-6 所示为Cisco ASA 防火墙对IPSec VPN 影响的实验接线图。本实验一共需要使用两台路由器和一台防火墙，由左至右分别模拟公司站点一（Site1）、互联网防火墙（ASA）和公司站点二（Site2）。路由器Site1的Fa0/0与ASA防火墙的E0/0实现对接，ASA防火墙的E0/1与Site2路由器的Fa1/0接口实现对接。Site1的环回口（loopback0）模拟公司站点一内部网络，Site2的环回口（loopback0）模拟公司站点二内部网络。

图5-6 Cisco ASA防火墙对IPSec VPN影响实验实际接线图

2．实验拓扑

图5-7所示为该实验的拓扑图。该拓扑是一个典型的站点到站点VPN拓扑，Site1 （202.100.1.1）和Site2（61.128.1.1）是两个VPN站点连接互联网的网关路由器，也是IPSecVPN的加密设备。需要加密的感兴趣流依然为Site1身后的1.1.1.0/24网络和Site2身后的2.2.2.0/24网络之间的流量。

图5-7 Cisco ASA防火墙对IPSec VPN影响实验拓扑图

本次实验的目的主要是，介绍两台路由器穿越互联网ASA防火墙，建立IPSec VPN时会出现什么问题，并且通过对问题的分析来解决它。

3．基本网络与经典IPSec VPN 配置

本次实验的主要目的是测试互联网ASA 防火墙对 IPSec VPN 的影响，而不是介绍经典配臵的IPSec VPN 是如何配臵的。因此下面仅通过例5-31、例5-32 和例5-33为读者展示Site1、ASA 和Site2 上的基本网络与经典IPSecVPN 配臵。

例5-31 Site1上的基本网络与经典IPSec VPN配置

enable

configure terminal

!

hostname Site1

!

crypto isakmp policy 10
authentication pre-share
crypto isakmp key cisco address 61.128.1.1

!

crypto ipsec transform-set cisco esp-des esp-md5-hmac !

crypto map cisco 10 ipsec-isakmp
set peer 61.128.1.1
set transform-set cisco

match address vpn

!

interface Loopback0
ip address 1.1.1.1 255.255.255.0

!

interface FastEthernet0/0
ip address 202.100.1.1 255.255.255.0

crypto map cisco

no shutdown

!

ip route 0.0.0.0 0.0.0.0 202.100.1.10

!

ip access-list extended vpn
permit ip 1.1.1.0 0.0.0.255 2.2.2.0 0.0.0.255

!

end

例5-32 ASA上的基本网络配置

enable

configure terminal

!

hostname ASA

!

interface Ethernet0/0

nameif Outside
security-level 0
ip address 202.100.1.10 255.255.255.0

no shutdown

!

interface Ethernet0/1

nameif Inside
security-level 100
ip address 61.128.1.10 255.255.255.0

no shutdown

!

end

例5-33 Site2上的基本网络与经典IPSec VPN配置

enable

configure terminal

!

hostname Site2

!

crypto isakmp policy 10
authentication pre-share
crypto isakmp key cisco address 202.100.1.1

!

crypto ipsec transform-set cisco esp-des esp-md5-hmac !

crypto map cisco 10 ipsec-isakmp
set peer 202.100.1.1
set transform-set cisco

match address vpn

!

interface Loopback0
ip address 2.2.2.2 255.255.255.0

!

interface FastEthernet1/0
ip address 61.128.1.1 255.255.255.0

crypto map cisco

no shutdown

!

ip route 0.0.0.0 0.0.0.0 61.128.1.10

!

ip access-list extended vpn
permit ip 2.2.2.0 0.0.0.255 1.1.1.0 0.0.0.255

!

end

4．测试并分析问题

现在Site1和Site2 上的IPSec VPN 已经配臵完毕。在Site2 上执行ping 操作，触发感兴趣流，以测试IPSec VPN 是否能够正常工作，如例5-34 所示。

例5-34 在Site2上通过ping测试IPSec VPN

Site2#ping 1.1.1.1 so 2.2.2.2

Type escape sequence to abort.

Sending 5, 100-byte ICMP Echos to 1.1.1.1, timeout is 2 seconds: Packet sent with a source address of 2.2.2.2

.....

Success rate is 0 percent (0/5)

从例5-34 中的测试结果可以发现，IPSec VPN 存在问题。一般来说，当IPSec VPN的ping测试出现问题时，推荐读者采取这样一种排错思路，即首先查询是否存在IPSec SA，如果没有IPSec SA，那么问题往往出在IPSec VPN 配臵上。如果存在IPSec SA，就需要先查看触发IPSec VPN 设备的加解密状况，如例5-35 所示。

例5-35 在Site2上查看IPSec VPN加解密状态

Site2#show crypto engine connections active

Crypto Engine Connections

通过例5-35 可以发现，Site2 上不仅存在IPSec SA（所以IPSec VPN 在配臵上应该没有问题），而且还有4个加密数据包。既然Site2把流量加密送出去了，那么下一步就应该是在Site1上查看是否收到了源自于Site2的加密数据包。

在Site1 上执行show crypto engine connection active 命令，查看IPSecVPN 的加解密状态，如例5-36所示。

例5-36 在Site1上查看IPSec VPN加解密状态

Site1#show crypto engine connections active

Crypto Engine Connections

从例 5-36 中可以很清楚地发现，Site1 不仅收到并且解密了数据包，而且还加密了数据包送回给Site2。既然如此，为什么Site2没有收到这些数据包呢？显然，这个问题出现在ASA防火墙上，也就是ASA防火墙丢弃了Site1回送给Site2的加密数据包。在详细解释这个现象之前，我们需要先来了解两个基本概念。

（1）IPSecVPN 产生的网络流量。

流量1：加密点之间的ISAKMP流量，这个流量就是在本书3.3节介绍的9个IKE协商数据包，它们的作用是在两个站点之间协商安全关联（SA）。ISAKMP 的传输层协议为UDP，源目端口都为500。以本实验为例，就是202.100.1.1和61.128.1.1这两个IP地址（两个加密点）之间的UDP/500流量。

流量2：加密点之间的ESP流量，ESP是封装感兴趣流的协议，由于站点到站点IPSecVPN 采用隧道模式，所以封装后的流量就变成了两个加密点之间的ESP 流量，以本实验为例，就是202.100.1.1和61.128.1.1之间的ESP流量。

（2）ASA防火墙基本工作原理。

原理 1：从高安全级别（Inside）到低安全级别（Outside）的流量叫做 Outbound流量，这种流量默认是会被放行的。

原理2：从低安全级别（Outside）到高安全级别（Inside）的流量叫做Inbound流量，这种流量默认是被拒绝的，但是可以使用访问控制列表技术，根据需要放行Inbound流量。

原理3：ASA防火墙默认只对穿越的UDP和TCP流量维护状态化信息（即记录这个会话的源目IP、源目端口等信息）。当这些UDP和TCP流量返回时，防火墙会查询状态化信息，如果匹配上对应条目，那么该流量就被防火墙放行。也就是说，即使这是一个Inbound流量，只要它是以前某一连接的返回数据包（通过查询状态化信息来确认），那么它也能够穿越ASA防火墙。

现在我们来解释一下上面实验中的问题是怎么产生的。在本次测试中，我们选择由Site2（位于防火墙Inside 区域）产生感兴趣流来触发IPSec VPN。在加密感兴趣流之前，首先需要使用ISAKMP（IKE）来协商安全关联。ISAKMP 流量使用UDP/500封装，Site2发起ISAKMP协商，这些流量由内到外（Outbound流量默认允许）穿越ASA防火墙，并且ASA维护UDP会话的状态化信息。由Site1返回的ISAKMP数据包，由于ASA上有相应的状态化表项，所以能够返回Site2。这样在Site1和Site2之间，就能够完成ISAKMP的9个数据包的协商，并且产生安全关联。

安全关联产生之后，Site2 就可以使用 ESP 来封装感兴趣流。ESP 数据包依然由Site2 主动发起，流量由内向外（Outbound 流量默认允许）穿越 ASA 抵达 Site1，但ASA不会对ESP流量维护状态化信息（默认只对UDP/TCP流量维护状态话信息）。Site1收到ESP数据包后进行解密，并且使用ESP封装返回数据包。当返回ESP数据包抵达ASA防火墙时，ASA由于无法找到相应的状态化信息，所以认为这些ESP数据包为Inbound流量，并予以丢弃处理。

5．解决问题

当我们了解了问题产生的全过程，解决问题就会变得非常容易——我们只需要在ASA 上放行由Site1 到Site2 的ESP 流量，就能够让Site2 主动发起的IPSec VPN 正常工作了。但是如果还希望Site1也能够主动发起IPSec VPN，就需要再放行Site1到Site2的ISAKMP（UDP/500）流量。例5-37所示为在ASA上放行了这些流量。

例5-37 在ASA上放行流量

ASA(config)# access-list out permit udp host 202.100.1.1 host 61.128.1.1 eq isakmp ASA(config)# access-list out permit esp host 202.100.1.1 host 61.128.1.1

ASA(config)# access-group out in interface Outside

6．测试并且查看IPSec VPN 状态（问题解决）

在Site2上执行ping操作，对感兴趣流进行测试，如例5-38所示。

例5-38 在Site2上ping感兴趣流测试

Site2#ping 1.1.1.1 so 2.2.2.2

Type escape sequence to abort.

Sending 5, 100-byte ICMP Echos to 1.1.1.1, timeout is 2 seconds: Packet sent with a source address of 2.2.2.2

!!!!!

Success rate is 0 percent (0/5)

在Site2 上执行show crypto engine connection active 命令，查看IPSecVPN 的加解密状态，如例5-39所示。

例5-39 在Site2上查看加解密状态

Site2#show crypto engine connections active

Crypto Engine Connections

7．问题适用场合介绍

IPSec VPN穿越防火墙的问题普遍出现在各种类型的IPSec VPN中，而不仅仅只是经典配臵的IPSec VPN才会有此问题。本实验只是通过经典IPSec VPN来说明这个问题。

5.5 中间网络PAT对IPSec VPN的影响

5.5.1 问题描述

在 IPv4 的网络中，IP 地址是紧缺资源，为了能够让用户上网，我们往往要使用PAT（Port Address Translation）端口地址转换技术（也称为端口多路复用技术）。这种技术可以使一个IP 地址被多个会话所复用。与NAT（Network Address Translation）技术只对IP地址做转换不同，PAT技术为了区分源自于不同主机的会话，不仅仅转换源IP地址，而且还会转换这次会话的源端口号，把它转换成为一个未被使用的大于1023的端口号。从互联网返回的数据包，通过不同的目的端口号来区分不同的会话。实现一个地址的多会话复用。

由于 PAT 转换技术能够实现通过一个 IP 地址，同时让多个用户访问互联网，因此这项技术在IPv4 网络中得到了广泛的使用。有鉴于此，IPSec VPN 如何能够有效穿越PAT转换，就是一个不得不尽兴讨论的问题。接下来我们就通过实验，一步一步来了解和解决这个问题。

5.5.2 PAT 地址转换技术对IPSec VPN 的影响实验

1．实际接线状况

图5-8 所示为PAT 地址转换技术对IPSecVPN 影响实验的接线图。本实验一共需要使用两台路由器和两台防火墙，由左至右分别模拟公司站点一内部网络设备（Inside）、公司站点一（Site1）、互联网防火墙（ASA）和公司站点二（Site2）。路由器Inside的Fa0/0与防火墙Site1的E0/0对接，防火墙Site1的E0/1与防火墙ASA的E0/1对接，防火墙ASA的E0/2与Site2路由器的Fa2/0对接。Inside的环回口（loopback0）模拟公司站点一内部网络，Site2的环回口（loopback0）模拟公司站点二内部网络。

图5-8 PAT地址转换技术对IPSec VPN的影响实验实际接线图

2．实验拓扑介绍

图5-9 所示为PAT 地址转换对IPSec VPN 影响实验的拓扑图。该拓扑是一个站点到站点VPN 拓扑，Site1（202.100.1.1）和Site2（192.168.1.1）是本次IPSecVPN 实验的加密设备。Site2 位于 ASA 防火墙的 Inside 网络，并且使用的是私有网络地址（192.168.1.0/24）。为了能够使Site2访问互联网，并且与Site1建立IPSec VPN，我们在ASA上配臵了PAT地址转换，把内部192.168.1.0/24网络PAT转换到ASA外部接口地址（202.100.1.10）。加密的感兴趣流分别为Site1身后的1.1.1.0/24网络和Site2身后的 2.2.2.0/24 网络之间的流量。本次实验主要的任务是了解 PAT 地址转换对 IPSec VPN的影响，以及解决问题的方法。

图5-9 PAT地址转换技术对IPSec VPN的影响实验拓扑图

3．基本网络与经典IPSec VPN 配置

本小节的主要任务是配臵基本网络和IPSec VPN，为后续的测试搭建网络环境。例5-40、例5-41、例5-42和例5-43分别为Inside、Site1、ASA和Site2上的基本网络配臵和IPSecVPN 配臵。

例5-40 Inside上的基本网络配置

enable

configure terminal

!

hostname Inside

!

interface FastEthernet0/0
ip address 1.1.1.1 255.255.255.0

no shutdown

!

ip route 0.0.0.0 0.0.0.0 1.1.1.10

!

end

例5-41 Site1上的基本网络与经典IPSec VPN配置

enable

configure terminal

!

hostname Site1

!

interface Ethernet0/0

nameif Inside
security-level 100
ip address 1.1.1.10 255.255.255.0

no shutdown

!

interface Ethernet0/1

nameif Outside
security-level 0
ip address 202.100.1.1 255.255.255.0

no shutdown

!

access-list vpn extended permit ip 1.1.1.0 255.255.255.0 2.2.2.0 255.255.255.0

!

route Outside 0.0.0.0 0.0.0.0 202.100.1.10 1

!

crypto ipsec transform-set cisco esp-des esp-md5-hmac !

crypto map cisco 10 match address vpn
crypto map cisco 10 set peer 202.100.1.10

<由于 Site2 的 IP 地址已经被 PAT 转换到 ASA 外部接口地址，所以对于 Site1 而言，远端加密点地址为202.100.1.10> crypto map cisco 10 set transform-set cisco

!

crypto map cisco interface Outside

!

crypto isakmp enable Outside

!

crypto isakmp policy 10
authentication pre-share
encryption 3des
hash md5
group 2

!

no crypto isakmp nat-traversal

<使用上述命令关闭 NAT-T 功能，在 ASA 上 NAT-T 功能默认是关闭的。但是使用“crypto isakmp enableOutside”命令激活ISAKMP后，NAT-T功能也随之被打开。为了测试在没有NAT-T技术时，ESP穿越PAT设备的问题，所以我们预先关闭了这个特性> !

tunnel-group 202.100.1.10 type ipsec-l2l
tunnel-group 202.100.1.10 ipsec-attributes
pre-shared-key cisco

!

end

例5-42 ASA上的基本网络与PAT转换配置

hostname ASA

!

interface Ethernet0/1

nameif Outside
security-level 0
ip address 202.100.1.10 255.255.255.0

no shutdown

!

interface Ethernet0/2

nameif Inside
security-level 100
ip address 192.168.1.10 255.255.255.0

no shutdown

!

global (Outside) 1 interface
nat (Inside) 1 192.168.1.0 255.255.255.0

<把内部网络192.168.1.0/24，PAT转换到ASA外部接口地址>

!

end

例5-43 Site2上的基本网络与经典IPSec VPN配置

enable

configure terminal

!

hostname Site2

!

crypto isakmp policy 10
encr 3des
hash md5
authentication pre-share
group 2

!

crypto isakmp key cisco address 202.100.1.1

!

crypto ipsec transform-set cisco esp-des esp-md5-hmac !

crypto map cisco 10 ipsec-isakmp
set peer 202.100.1.1
set transform-set cisco

match address vpn

!

interface Loopback0
ip address 2.2.2.2 255.255.255.0

!

interface FastEthernet2/0
ip address 192.168.1.1 255.255.255.0

no shutdown

!

ip route 0.0.0.0 0.0.0.0 192.168.1.10

!

ip access-list extended vpn
permit ip 2.2.2.0 0.0.0.255 1.1.1.0 0.0.0.255

!

end

4．测试并且查看IPSec VPN 状态

基本网络与IPSec VPN 配臵完毕后，在ASA 防火墙内部网络的路由器Site2 上执行ping 操作，以测试整个IPSecVPN 是否能够正常工作。该ping 操作的源为2.2.2.2，目的为 1.1.1.1。

例5-44 在Site2上使用ping测试IPSec VPN

Site2#ping 1.1.1.1 so 2.2.2.2

Type escape sequence to abort.

Sending 5, 100-byte ICMP Echos to 1.1.1.1, timeout is 2 seconds: Packet sent with a source address of 2.2.2.2

.....

Success rate is 0 percent (0/5)

在Site2 上执行完ping 操作之后，执行show crypto engine connection active 命令，查看IPSec VPN 的加解密情况，如例5-45 所示。

例5-45 在Site2上查看IPSec VPN的加解密状况

Site2#show crypto engine connections active

Crypto Engine Connections

在例5-44中可以发现，该次ping测试失败。而且，从例5-45的输出结果可以发现，Site2 上不仅有IPSec SA，而且还加密了4 个数据包。按照在5.4 节所介绍的排错思路，我们需要到Site1上去查看加解密状况，如例5-46所示。

由于Site1是ASA，无法使用show crypto engine connections active 命令，因此我们只能使用show crypto ipsecsa 命令来查看加解密状况。

例5-46 在Site1上查看IPSec VPN的加解密状况

Site1# show crypto ipsec sa
interface: Outside

Crypto map tag: cisco, seq num: 10, local addr: 202.100.1.1
access-list vpn permit ip 1.1.1.0 255.255.255.0 2.2.2.0 255.255.255.0
local ident (addr/mask/prot/port): (1.1.1.0/255.255.255.0/0/0) remote ident (addr/mask/prot/port): (2.2.2.0/255.255.255.0/0/0) current_peer: 202.100.1.10

#pkts encaps: 0, #pkts encrypt: 0, #pkts digest: 0

#pkts decaps: 0, #pkts decrypt: 0, #pkts verify: 0

<加解密数据包的数量都为零>

#pkts compressed: 0, #pkts decompressed: 0

#pkts not compressed: 0, #pkts comp failed: 0, #pkts decomp failed: 0

#pre-frag successes: 0, #pre-frag failures: 0, #fragments created: 0

#PMTUs sent: 0, #PMTUs rcvd: 0, #decapsulated frgs needing reassembly: 0

#send errors: 0, #recv errors: 0
local crypto endpt.: 202.100.1.1, remote crypto endpt.: 202.100.1.10
path mtu 1500, ipsec overhead 58, media mtu 1500
current outbound spi: EF1E8A35
inbound esp sas:

spi: 0xFB41E3DB (4215399387)

transform: esp-des esp-md5-hmac none
in use settings ={L2L, Tunnel, }

<注意模式为站点到站点隧道模式>
slot: 0, conn_id: 4096, cryptomap: cisco
sa timing: remaining key lifetime (kB/sec): (4275000/3189) IV size: 8 bytes
replay detection support: Y
outbound esp sas:

spi: 0xEF1E8A35 (4011756085)

transform: esp-des esp-md5-hmac none
in use settings ={L2L, Tunnel, }

slot: 0, conn_id: 4096, cryptomap: cisco
sa timing: remaining key lifetime (kB/sec): (4275000/3189) IV size: 8 bytes
replay detection support: Y

5．问题分析

通过例5-46的输出结果可以发现，Site1没有收到Site2加密的那4个ESP数据包。很明显，这个问题出在防火墙上——它丢弃了Site2发给Site1的ESP数据包。按照防火墙的基本原理，这些数据包是由内向外穿越防火墙（Outbound 流量），应该是可以穿越的。那为什么它们又会被防火墙丢弃呢？

要解释这个问题应该并不难，我们首先来了解一下 PAT 这个技术。Port AddressTranslation叫做端口地址转换，也就是说它不仅仅要转换源IP地址，还要转换传输层（四层）源端口号。ESP是一个三层技术，没有传输层头部，自然就没有传输层端口号。所以ASA无法使用PAT技术对其进行转换，自然就只能丢弃了。

我们可以在ASA 上执行show asp drop 命令，来查看由于PAT 转换失败而丢弃的数据包的数量，如例5-47所示。

例5-47 在ASA上查看由于PAT转换失败造成的丢包数量

ASA(config)# show asp drop

Flow drop:

NAT failed　　　　　　　　8（实际数据包数量的两倍）

6．NAT-T技术介绍

表5-1 IPSec VPN与NAT技术兼容性

表5-1 所示为各种IPSec VPN 工作模式与地址转换技术之间的兼容性关系，首先介绍的就是AH协议。由于AH技术对IP头部的源IP地址与目IP地址字段进行了完整性校验，所以AH 技术封装的IPSec VPN 无法穿越任何地址转换，而且这个问题没有任何解决方法。

我们经常在IPSec VPN 中使用的ESP 隧道模式能够穿越NAT 转换，只是在穿越PAT时，会出现无法转换的问题，但是这个问题可以使用下文将要介绍的NAT-T（NAT Traversal）技术来解决。

CiscoIOS 版本在12.2(13)T 以后开始支持NAT-T 技术。NAT-T 解决问题的思路其实很简单，如图5-10所示。这项技术用来将ESP数据包封装到UDP数据包内（在原ESP头部和外层IP头部之间，插入一个UDP/4500的头部）。使得NAT设备按照处理一个普通UDP数据包的方式对它进行处理。有了NAT-T技术的协助，ESP数据包就能够穿越ASA的PAT了。

图5-10 NAT-T封装示意图

了解了NAT-T工作原理以后，我们还需要了解一下ASA和路由器的默认NAT-T策略。路由器和ASA都支持NAT-T技术，路由器的NAT-T功能默认被打开。ASA虽然默认没有开启NAT-T功能，但是一旦激活ISAKMP，NAT-T技术也随之被开启。所以也可以认为ASA 的IPSecVPN 默认已经开启了NAT-T 技术。

7．NAT-T协商介绍

N AT-T的协商过程如图5-11所示，总共分为如下所述的3个步骤。

步骤1：主要用于判断IPSec双方是否都支持NAT-T技术，如果任何一方不支持NAT-T，那么协商就会失败，IPSecVPN 会使用ESP 封装数据包。

协商主要由图5-11 中的第一阶段IKE 1-2 包交换来实现，双方互相交换NAT-T 的VendorID 来表示自己是否支持NAT-T 技术，只有双方都同时支持NAT-T 技术才有可能使用UDP/4500来封装ESP数据包。

图5-11 NAT-T协商示意图

步骤2：判断两个Peers之间是否有存在地址转换（NAT一对一转换或者PAT多对一转换都为地址转换）。

两个 IPSec VPN 对等体，会在图 5-11 中的第一阶段 IKE 3-4 包中，交换一个叫“NAT-D”的散列值负载，IKE的第3个数据包会传输2个NAT-D负载，其中一个是由第3个ISAKMP数据包的源IP和源端口计算的散列值，另一个是由第3个ISAKMP数据包的目的IP和目的端口计算的散列值。IKE的第4个数据包也会通过相同的方法计算出ISAKMP第4个数据包的两个NAT-D值，并且进行交换。

接收方会对收到的数据包也进行相同的散列计算。如果计算的散列值相同，那就表示在2个对等体之间没有探测到地址转换，在这种情况下即使2个Peer都支持NAT-T技术，也会使用ESP封装数据。如果计算的散列值不相同就表示，在2个对等体之间存在地址转换，在这种情况下设备就会使用NAT-T技术封装后续数据包。

总结：2个Peers之间必须存在地址转换，不管是NAT一对一转换还是PAT多对一转换，才会使用NAT-T技术封装数据。

步骤3：如果在步骤1中发现两个Peers都支持NAT-T技术，又在步骤2中判断Peers之间确实存在地址转换。那么从图5-11的第一阶段IKE 5-6包开始，往后的所有数据都会使用NAT-T技术进行封装。

8．启用NAT-T技术并解决问题

在了解了NAT-T工作细节之后，我们再回头来解决本次实验中出现的问题。其实这个问题本来就不需要解决，因为ASA和路由器默认都支持NAT-T技术，并且它们之间确实存在地址转换。所以Site2就会使用UDP/4500封装ESP数据包，由内向外的UDP流量是完全可以穿越ASA的。上面之所以会出现这个问题，只是因为在配臵ASA IPSec VPN 的时候，预先关闭了NAT-T 这项技术，虽然我们没有在路由器上关闭这项技术，但是通过我们对NAT-T技术的了解，只要Peers中的任一方不支持这项技术，那么就只会使用ESP来封装数据包。为了解决这个问题，我们在ASA上启用NAT-T特性，如例5-48所示。

例5-48 在ASA防火墙Site1上开启NAT-T特性

Site1(config)# crypto isakmp nat-traversal

9．测试并查看NAT-T技术

在例5-48中启用的NAT-T特性并不会影响已经存在的IPSec SA，为了测试NAT-T的工作效果，需要手动清除所有安全关联，并且重新协商IPSec SA。新协商的安全关联才会使用NAT-T这个技术。

在Site1和Site2上清除SA，如例5-49所示。

例5-49 在Site1和Site2上清除SA

Site1# clear crypto isakmp sa

Site1# clear crypto ipsec sa

Site2#clear crypto isakmp

Site2#clear crypto sa

清除SA 后，在Site2上使用ping 操作来测试IPSecVPN，如例5-50 所示。

例5-50 在Site2上使用ping测试IPSec VPN

Site2#ping 1.1.1.1 source 2.2.2.2

Type escape sequence to abort.

Sending 5, 100-byte ICMP Echos to 1.1.1.1, timeout is 2 seconds: Packet sent with a source address of 2.2.2.2

.!!!!

Success rate is 80 percent (4/5), round-trip min/avg/max = 48/124/204 ms 在IPSecVPN 测试通过后，紧接着查看路由器Site2上的加解密状况和IPSec VPN的工作模式，如例5-51所示。

例5-51 在Site2上查看加解密状况和IPSec VPN的工作模式

Site2#show crypto engine connections active

Crypto Engine Connections

Site2#show crypto ipsec sa
interface: FastEthernet2/0

Crypto map tag: cisco, local addr 192.168.1.1
protected vrf: (none)

local ident (addr/mask/prot/port): (2.2.2.0/255.255.255.0/0/0) remote ident (addr/mask/prot/port): (1.1.1.0/255.255.255.0/0/0) current_peer 202.100.1.1 port 4500

PERMIT, flags={origin_is_acl,}

#pkts encaps: 4, #pkts encrypt: 4, #pkts digest: 4

#pkts decaps: 4, #pkts decrypt: 4, #pkts verify: 4

#pkts compressed: 0, #pkts decompressed: 0

#pkts not compressed: 0, #pkts compr. failed: 0

#pkts not decompressed: 0, #pkts decompress failed: 0

#send errors 1, #recv errors 0
local crypto endpt.: 192.168.1.1, remote crypto endpt.: 202.100.1.1
path mtu 1500, ip mtu 1500, ip mtu idb FastEthernet2/0
current outbound spi: 0xAE367A31(2922805809)

inbound esp sas:

spi: 0x9FC03253(2680173139)

transform: esp-des esp-md5-hmac ,
in use settings ={Tunnel UDP-Encaps, }

<如果是普通ESP封装，模式应该为“Tunnel”，采用NAT-T封装之后，名字改为“UDP-Encaps”> conn id: 7, flow_id: SW:7, crypto map: cisco
sa timing: remaining key lifetime (k/sec): (4417669/3546) IV size: 8 bytes
replay detection support: Y

Status: ACTIVE
inbound ah sas:

inbound pcp sas:

outbound esp sas:

spi: 0xAE367A31(2922805809)

transform: esp-des esp-md5-hmac ,
in use settings ={Tunnel UDP-Encaps, }

conn id: 8, flow_id: SW:8, crypto map: cisco
sa timing: remaining key lifetime (k/sec): (4417669/3545) IV size: 8 bytes
replay detection support: Y

Status: ACTIVE
outbound ah sas:

outbound pcp sas:

在Site1 上查看IPSec SA，注意模式为NAT-T 封装的站点到站点隧道模式，如例5-52所示。

例5-52 在Site1上查看IPSec SA

Site1# show crypto ipsec sa
interface: Outside

Crypto map tag: cisco, seq num: 10, local addr: 202.100.1.1
access-list vpn permit ip 1.1.1.0 255.255.255.0 2.2.2.0 255.255.255.0
local ident (addr/mask/prot/port): (1.1.1.0/255.255.255.0/0/0) remote ident (addr/mask/prot/port): (2.2.2.0/255.255.255.0/0/0) current_peer: 202.100.1.10

#pkts encaps: 4, #pkts encrypt: 4, #pkts digest: 4

#pkts decaps: 4, #pkts decrypt: 4, #pkts verify: 4

#pkts compressed: 0, #pkts decompressed: 0

#pkts not compressed: 4, #pkts comp failed: 0, #pkts decomp failed: 0

#pre-frag successes: 0, #pre-frag failures: 0, #fragments created: 0

#PMTUs sent: 0, #PMTUs rcvd: 0, #decapsulated frgs needing reassembly: 0

#send errors: 0, #recv errors: 0
local crypto endpt.: 202.100.1.1/4500, remote crypto endpt.: 202.100.1.10/1025
path mtu 1500, ipsec overhead 66, media mtu 1500
current outbound spi: 9FC03253
inbound esp sas:

spi: 0xAE367A31 (2922805809)

transform: esp-des esp-md5-hmac none
in use settings ={L2L, Tunnel, NAT-T-Encaps, }

<和路由器一样，同样需要注意模式的变换，通过查看模式，就能够快速判断是否采用了NAT-T技术> slot: 0, conn_id: 16384, cryptomap: cisco
sa timing: remaining key lifetime (kB/sec): (4274999/3410) IV size: 8 bytes
replay detection support: Y
outbound esp sas:

spi: 0x9FC03253 (2680173139)

transform: esp-des esp-md5-hmac none
in use settings ={L2L, Tunnel, NAT-T-Encaps, }

slot: 0, conn_id: 16384, cryptomap: cisco
sa timing: remaining key lifetime (kB/sec): (4274999/3409) IV size: 8 bytes
replay detection support: Y

第6章 IPSec VPN中的高可用性技术

6.1 IPSec VPN高可用性技术介绍

任何网络技术为了满足企业级运用，都会设计高可用特性。路由有 HSRP 技术，交换有生成树技术，防火墙有 Failover 技术，IPSec VPN 也不例外，有DPD、RRI 等高可用性技术。本章的主要任务就是介绍这些技术。

在介绍具体特性之前，我们先来看一幅高可用性IPSecVPN的拓扑图，如图6-1所示。

图6-1 IPSec VPN高可用性拓扑图

在图6-1 所示的拓扑中，中心站点有两个IPSecVPN 网关，主用网关IP地址为61.128.1.1，备用网关IP地址为137.78.5.1。

分支站点（IP 地址202.100.1.1）正常情况下与主用网关建立IPSec VPN，数据由主用网关解密，并送入内部网络以访问中心站点内部服务器（IP 地址2.2.2.2）。如果主用网关出现问题，那么分支站点就会尝试与备用网关建立IPSec VPN。分支站点访问内部服务器的数据，需要由备用网关解密并送入内部网络。

为了能够在6.4 节完成图6-1 所示拓扑的IPSec VPN 高可用性实验，我们首先需要介绍两项技术。其中第一项技术叫做Dead Peer Detection（问题对等体检测），它旨在检查有问题的IPSec VPN 网关，并快速切换到备用网关（本章会在6.2 节中对这项技术进行介绍）。另一项技术叫做Reverse Route Injection（反向路由注入），用于解决高可用性IPSec VPN 的路由问题（本章会在6.3 节中对它进行详细介绍）。

6.2 DPD技术介绍

6.2.1 DPD 技术描述

在图6-1 所示的高可用性IPSec VPN 拓扑中，我们希望在主用网关出现问题的情况下能够快速切换到备用网关。但是如何能够快速检测到主用网关出现了问题呢？

在研究DPD技术之前，我们先来回顾一下传统的动态路由协议技术是如何判断故障邻居的。以OSPF为例，两台路由器会周期性地发送Hello数据包，探测对端路由器是否依然Alive（存活）。如果发送的 Hello 数据包在一定时间内没有得到响应。那么发送方就将那个Peer标识为Dead（有问题）。

实际上，很多网络技术都是采用类似技术来探测 Peer 状态的，IPSec VPN 也采用了类似的思路来探测故障网关，这项技术就叫做 Dead Peer Detection（问题对等体检测）。

Cisco 路由器在默认情况下并没有启用这项技术，也就是说如果我们使用以前学习的方法来配臵这个高可用性IPSec VPN，一旦主用网关出现了问题，分支站点是无法发现这个问题的。换句话说，分支站点会继续向故障的主用网关发送加密的数据包，直到IPSec SA 超时为止，而并不会在此期间切换到备用网关，因为分支站点认为和主用网关建立的IPSec SA 依然有效。

这个问题将会在IPSec SA 超时以后得以解决（IPSec SA 的超时时间默认一个小时）。超时之后，分支站点依然会先尝试与主用网关建立IPSecVPN，由于主用网关出现了故障，无法建立IPSec VPN，此时才会切换到备用网关。这样漫长的切换时间在实际工程中是绝对不能忍受的，所以我们需要学习和使用DPD技术，使用它可以更快地探测到有问题的网关，并且快速地将IPSec VPN切换到能够提供服务的网关上去。

6.2.2 DPD工作模式

DPD有周期性工作模式和按需工作模式两种。

1．周期性工作模式

周期性DPD会设臵一个定时器，路由器会按照这个定时器所设臵的时间周期发送DPD数据包（除非这台路由器收到了源自于对端的DPD数据包）。

使用周期性DPD的优势在于，能够更快地检测到有问题的对等体。然而，这样频繁的周期性的发送DPD数据包，会消耗较多的设备资源和网络资源。

2．按需工作模式

DPD按需工作模式是DPD的默认工作模式。在这种工作模式下，DPD信息会基于流量形式的不同而采取不同的发送方式。

如果路由器加密了数据并发给了对等体，但在一定时间内没有解密任何源自于对等体的数据，那么路由器就会向对方发送DPD信息来询问对等体的状态。如果一台路由器暂时不准备加密任何数据，那么它也不会发送DPD信息。即使这个时候对等体已经 Dead（有问题）。鉴于路由器并不准备发送任何数据到这个对等体，因此这个对等体是否有问题，对于本地路由器而言没有任何意义。对等体的问题可能只有等到 IKE和IPSecSA 不得不进行rekey（密钥更新）的时候才会被发现。

综上所述我们会发现，按需工作模式相比于周期性工作模式的DPD，会发送更少的DPD信息，更加节约资源和网络带宽，但检测到有IPSec VPN网关故障所需的时间稍长。

6.2.3 DPD 技术测试

1．实际接线状况

图6-2 测试DPD工作特性实际接线图

图6-2所示为用于测试DPD工作特性的接线图。本实验一共需要使用3台路由器，由左至右分别模拟公司站点一（Site1）、互联网路由器（Internet）和公司站点二（Site2）。路由器Site1和Internet使用接口Fa0/0实现对接，路由器Internet和Site2使用接口Fa1/0实现对接。Site1 的环回口（loopback0）模拟公司站点一内部网络，Site2 的环回口（loopback0）模拟公司站点二内部网络。

2．实验拓扑介绍

图6-3所示为用于测试DPD工作特性的拓扑图。该拓扑是一个典型的站点到站点VPN拓扑。Site1（202.100.1.1）和Site2（61.128.1.1）是两个VPN站点连接互联网的网关路由器，也是IPSecVPN 的加密设备。

图6-3 测试DPD工作特性实验拓扑

本实验的通信网络为Site1身后的1.1.1.0/24网络和Site2身后的2.2.2.0/24网络。本实验需要在Site1和Site2之间建立隧道模式的IPSecVPN来保护通信网络之间的流量，其主要目的是测试DPD的两种工作特性。

3．基本网络与经典IPSec VPN 配置

上面提到，本实验的主要目的是测试DPD的两种工作模式。在进行测试之前，我们首先通过例6-1、例6-2和例6-3来向读者简单展示一下Site1、Internet和Site2上的基本网络和IPSecVPN 配臵。

例6-1 Site1上的基本网络与IPSec VPN配置

Enable

configure terminal

!

hostname Site1

!

crypto isakmp policy 10
authentication pre-share
crypto isakmp key cisco address 61.128.1.1

!

crypto ipsec transform-set cisco esp-des esp-md5-hmac

!

crypto map cisco 10 ipsec-isakmp
set peer 61.128.1.1
set transform-set cisco

match address vpn

!

interface Loopback0
ip address 1.1.1.1 255.255.255.0

!

interface FastEthernet0/0
ip address 202.100.1.1 255.255.255.0

crypto map cisco

no shutdown

!

ip route 0.0.0.0 0.0.0.0 202.100.1.10

!

ip access-list extended vpn
permit ip 1.1.1.0 0.0.0.255 2.2.2.0 0.0.0.255

!

end

例6-2 Internet上的基本网络配置

enable

configure terminal

!

hostname Internet

!

interface FastEthernet0/0
ip address 202.100.1.10 255.255.255.0

no shutdown

!

interface FastEthernet1/0
ip address 61.128.1.10 255.255.255.0

no shutdown

!

end

例6-3 Site2上的基本网络与IPSec VPN配置

enable

configure terminal

!

hostname Site2

!

crypto isakmp policy 10
authentication pre-share
crypto isakmp key cisco address 202.100.1.1

!

crypto ipsec transform-set cisco esp-des esp-md5-hmac

!

crypto map cisco 10 ipsec-isakmp
set peer 202.100.1.1
set transform-set cisco

match address vpn

!

interface Loopback0
ip address 2.2.2.2 255.255.255.0

!

interface FastEthernet1/0
ip address 61.128.1.1 255.255.255.0

crypto map cisco

no shutdown

!

ip route 0.0.0.0 0.0.0.0 61.128.1.10

!

ip access-list extended vpn
permit ip 2.2.2.0 0.0.0.255 1.1.1.0 0.0.0.255

!

end

4．测试没有DPD的状况

现在，经典的IPSec VPN 已经配臵完毕了。默认情况下，DPD 技术并没有被启用，下面我们就通过测试来了解一下，当网络出现问题后IPSec VPN是如何处理数据包的。

当然在制造网络故障之前，我们首先需要制造感兴趣流来触发IPSec VPN（见例6-4），然后再检查IPSec VPN 的加解密状况（见例6-5）。

例6-4 在Site1上通过ping制造感兴趣流，触发IPSec VPN

Site1#ping 2.2.2.2 source 1.1.1.1

Type escape sequence to abort.

Sending 5, 100-byte ICMP Echos to 2.2.2.2, timeout is 2 seconds: Packet sent with a source address of 1.1.1.1

!!!!!

Success rate is 100 percent (5/5), round-trip min/avg/max = 168/192/228 ms 例6-5 在Site1上查看IPSec VPN 的加解密状况

Site1#show crypto engine connections active

Crypto Engine Connections

通过测试表明，经典配臵的IPSec VPN 已经正常工作了。现在，在Site1 上启用ISAKMP的debug，如例6-6所示。

启用ISAKMP debug 后，如果路由器发送ISAKMP 数据包就会产生相应的debug信息，这样我们就能观察路由器是否发送了DPD数据包。由于DPD就是ISAKMP的保活（keepalive）技术，因此所谓发送的DPD数据包，仅仅只是一种特殊的ISAKMP数据包而已。

由于路由器默认并没有启用DPD技术，所以应该不会观察到任何debug信息。

例6-6 启用ISAKMP debug

Site1#debug crypto isakmp

crypto ISAKMP debugging is on

为了测试在没有DPD 技术的情况下IPSec VPN 的工作特点，我们在Internet 路由器上关闭接口Fa1/0，如例6-7所示。

例6-7 在Internet路由器上关闭Fa1/0接口

Internet(config)#interface fastEthernet 1/0

Internet(config-if)#shutdown

由于Internet的接口被关闭，所以现在Site1发出的流量已经无法抵达Site2了。但是由于在默认情况下没有启用DPD 技术，所以Site1 和 Site2 都无法探测到这个问题，它们依然认为本地IPSec SA 有效（并没有超时），所以继续使用它对数据包进行加密，直到IPSec SA 超时为止。

为了证明该现象，我们继续在Site1使用ping进行测试，如例6-8所示。

例6-8 在Site1上使用ping测试IPSec VPN

Site1#ping 2.2.2.2 source 1.1.1.1

Type escape sequence to abort.

Sending 5, 100-byte ICMP Echos to 2.2.2.2, timeout is 2 seconds: Packet sent with a source address of 1.1.1.1

.....

Success rate is 0 percent (0/5)

很明显，由于在Internet 上制造了网络问题，现在IPSec VPN 已经不能正常工作了。但是从例 6-9 所示的输出结果中可以发现，Site1 上的 IPSec SA 依然存在，并且Site1 继续使用这个IPSec SA 加密数据包，虽然这些数据包永远无法抵达Site2。

例6-9 在Site1上查看IPSec VPN 的加解密状况

Site1#show crypto engine connections active

Crypto Engine Connections

通过上述测试，我们了解了这么一个现象，那就是如果不启用 DPD 技术， IPSecVPN 就无法探测出有问题的网关，因此会继续使用有问题的IPSec SA 加密数据包，当然IPSecVPN 也就更不可能快速地切换到备用网关上去了（本次使用主要演示DPD特性，所以并没有提供备用网关）。

5．测试周期性DPD工作特性

在测试周期性DPD工作特性之前，我们先在Site1和Site2上启用周期性工作的DPD，如例6-10所示。

例6-10 在Site1和Site2上启用周期性工作DPD

Site1(config)#crypto isakmp keepalive 10 periodic

Site2(config)#crypto isakmp keepalive 10 periodic

<每10秒发送一个DPD的ISAKMP数据包>

例 6-10 中配臵的 DPD 特性并不会影响已经建立的安全关联，只会在下一次ISAKMP协商之后才会生效，所以例6-11在Site1和Site2上清除老的安全关联。

例6-11 在Site1和Site2上清除安全关联

Site1#clear crypto isakmp

Site1#clear crypto sa

Site2#clear crypto isakmp

Site2#clear crypto sa

为了建立新的安全关联，在Internet路由器上打开Fa1/0接口，如例6-12所示，这样网络就恢复了正常。

例6-12 在Internet路由器上打开Fa1/0接口

Internet(config)#interface fastEthernet 1/0

Internet(config-if)#no shutdown

在Site1 上使用ping 操作来触发IPSec VPN，建立新的安全关联，如例6-13 所示。此时两个站点就会使用周期性DPD 技术，来监控对端IPSec VPN 网关的状况。

例6-13 在Site1上使用ping测试IPSec VPN

Site1#ping 2.2.2.2 source 1.1.1.1

Type escape sequence to abort.

Sending 5, 100-byte ICMP Echos to 2.2.2.2, timeout is 2 seconds: Packet sent with a source address of 1.1.1.1

!!!!!

Success rate is 100 percent (5/5), round-trip min/avg/max = 168/192/228 ms 由于我们在前面的例6-6 中启用了ISAKMP debug，所以在Site1 上能够观察到在Site1发送和接收DPD时显示的debug信息，分别如例6-14和例6-15所示。

例6-14 Site1发送DPD时显示的debug信息

*Mar 1 00:39:42.779: ISAKMP:(1002):Sending NOTIFY DPD/R_U_THERE protocol 1
spi 1718315176, message ID = -1254331589

*Mar 1 00:39:42.779: ISAKMP:(1002): seq. no 0x6178A6C5

*Mar 1 00:39:42.779: ISAKMP:(1002): sending packet to 61.128.1.1 my_port 500 peer_port 500 (I) QM_IDLE

<发送DPD包，序列号为0x6178A6C5>

*Mar 1 00:39:42.779: ISAKMP:(1002):Sending an IKE IPv4 Packet.

*Mar 1 00:39:42.783: ISAKMP:(1002):purging node -1254331589

*Mar 1 00:39:42.783: ISAKMP:(1002):Input = IKE_MESG_FROM_TIMER, IKE_TIMER_IM_ALIVE

*Mar 1 00:39:42.787: ISAKMP:(1002):Old State = IKE_P1_COMPLETE New State = IKE_P1_COMPLETE

*Mar 1 00:39:43.079: ISAKMP (0:1002): received packet from 61.128.1.1 dport 500 sport 500 Global (I) QM_IDLE

*Mar 1 00:39:43.079: ISAKMP: set new node -1378616921 to QM_IDLE

*Mar 1 00:39:43.083: ISAKMP:(1002): processing HASH payload. message ID =-1378616921

*Mar 1 00:39:43.087: ISAKMP:(1002): processing NOTIFY DPD/R_U_THERE_ACK protocol 1
spi 0, message ID = -1378616921, sa = 65CC0858

*Mar 1 00:39:43.087: ISAKMP:(1002): DPD/R_U_THERE_ACK received from peer 61.128.1.1, sequence 0x6178A6C5

<收DPD ACK（确认）包，序列号为0x6178A6C5>

*Mar 1 00:39:43.087: ISAKMP:(1002):deleting node -1378616921 error FALSE reason "Informational (in) state 1"

例6-15 Site1接收DPD时显示的debug信息

*Mar 1 00:39:49.419: ISAKMP (0:1002): received packet from 61.128.1.1 dport 500 sport 500 Global (I) QM_IDLE

*Mar 1 00:39:49.423: ISAKMP: set new node -400415627 to QM_IDLE

*Mar 1 00:39:49.423: ISAKMP:(1002): processing HASH payload. message ID = -400415627

*Mar 1 00:39:49.427: ISAKMP:(1002): processing NOTIFY DPD/R_U_THERE protocol 1
spi 0, message ID = -400415627, sa = 65CC0858

*Mar 1 00:39:49.427: ISAKMP:(1002):deleting node -400415627 error FALSE reason "Informational (in) state 1"

*Mar 1 00:39:49.431: ISAKMP:(1002):Input = IKE_MESG_FROM_PEER, IKE_INFO_NOTIFY

*Mar 1 00:39:49.431: ISAKMP:(1002):Old State = IKE_P1_COMPLETE New State = IKE_P1_COMPLETE

*Mar 1 00:39:49.439: ISAKMP:(1002):DPD/R_U_THERE received from peer 61.128.1.1, sequence 0x4FA7CF1F

<收DPD包，序列号为0x4FA7CF1F>

*Mar 1 00:39:49.439: ISAKMP: set new node 546093684 to QM_IDLE

*Mar 1 00:39:49.443: ISAKMP:(1002):Sending NOTIFY DPD/R_U_THERE_ACK protocol 1
spi 1718315120, message ID = 546093684

*Mar 1 00:39:49.443: ISAKMP:(1002): seq. no 0x4FA7CF1F

*Mar 1 00:39:49.443: ISAKMP:(1002): sending packet to 61.128.1.1 my_port 500 peer_port 500 (I) QM_IDLE

<发DPD ACK（确认）包，序列号为0x4FA7CF1F >

*Mar 1 00:39:49.443: ISAKMP:(1002):Sending an IKE IPv4 Packet.

*Mar 1 00:39:49.447: ISAKMP:(1002):purging node 546093684

*Mar 1 00:39:49.447: ISAKMP:(1002):Input = IKE_MESG_FROM_PEER, IKE_MESG_KEEP_ALIVE

*Mar 1 00:39:49.451: ISAKMP:(1002):Old State = IKE_P1_COMPLETE New State =

IKE_P1_COMPLETE

通过上述debug信息可以发现，ISAKMP的DPD技术已经开始正常工作。由于被设臵为周期性工作模式，所以两台路由器都按照一定的周期来发送DPD信息，当收到对方发送的DPD信息后，回送相应的DPD确认信息。

现在关闭Internet 路由器上的Fa1/0 接口，来测试DPD 技术探测IPSec VPN 网关问题，如例6-16所示。

例6-16 在Internet路由器上关闭Fa1/0接口

Internet(config)#interface fastEthernet 1/0

Internet(config-if)#shutdown

例6-17 所示为Site1 上的DPD debug 信息。从中可以发现，如果Site1 周期性发送的DPD信息没有得到远端确认，它会连续尝试5次发送DPD信息。如果5次尝试后依然没有等到远端的确认，Site1就会马上清除本地的IPSec和ISAKMP安全关联。

例6-17 Site1 上的DPD debug信息

*Mar 1 00:53:11.611: ISAKMP:(1002):Sending NOTIFY DPD/R_U_THERE protocol 1
spi 1718315176, message ID = -1185147481

*Mar 1 00:53:11.615: ISAKMP:(1002): seq. no 0x6178A716

*Mar 1 00:53:11.615: ISAKMP:(1002): sending packet to 61.128.1.1 my_port 500 peer_port 500 (I) QM_IDLE

*Mar 1 00:53:11.615: ISAKMP:(1002):Sending an IKE IPv4 Packet.

*Mar 1 00:53:11.619: ISAKMP:(1002):purging node -1185147481

*Mar 1 00:53:11.619: ISAKMP:(1002):Input = IKE_MESG_FROM_TIMER, IKE_TIMER_IM_ALIVE

*Mar 1 00:53:11.623: ISAKMP:(1002):Old State = IKE_P1_COMPLETE New State = IKE_P1_COMPLETE

*Mar 1 00:53:13.619: ISAKMP:(1002):DPD incrementing error counter (1/5) <五次尝试发送DPD包，探测peer ISAKMP 状况>

*Mar 1 00:53:13.619: ISAKMP: set new node 927493410 to QM_IDLE

*Mar 1 00:53:13.623: ISAKMP:(1002):Sending NOTIFY DPD/R_U_THERE protocol 1
spi 1718315176, message ID = 927493410

*Mar 1 00:53:13.623: ISAKMP:(1002): seq. no 0x6178A717

*Mar 1 00:53:13.623: ISAKMP:(1002): sending packet to 61.128.1.1 my_port 500 peer_port 500 (I) QM_IDLE

*Mar 1 00:53:13.627: ISAKMP:(1002):Sending an IKE IPv4 Packet.

*Mar 1 00:53:13.627: ISAKMP:(1002):purging node 927493410

*Mar 1 00:53:13.631: ISAKMP:(1002):Input = IKE_MESG_FROM_TIMER, IKE_TIMER_PEERS_ALIVE

*Mar 1 00:53:13.631: ISAKMP:(1002):Old State = IKE_P1_COMPLETE New State = IKE_P1_COMPLETE

---------------------省略了2~5次DPD尝试的debug信息----------------------------

*Mar 1 00:53:21.671: ISAKMP (0:1002): No more ipsec tunnels for this SA.

*Mar 1 00:53:21.675: ISAKMP: set new node -1673290772 to QM_IDLE

*Mar 1 00:53:21.675: ISAKMP:(1002): sending packet to 61.128.1.1 my_port 500 peer_port 500 (I) QM_IDLE

*Mar 1 00:53:21.679: ISAKMP:(1002):Sending an IKE IPv4 Packet.

*Mar 1 00:53:21.679: ISAKMP:(1002):purging node -1673290772

*Mar 1 00:53:21.683: ISAKMP:(1002):Input = IKE_MESG_FROM_IPSEC, IKE_PHASE2_DEL

*Mar 1 00:53:21.683: ISAKMP:(1002):Old State = IKE_P1_COMPLETE New State = IKE_P1_COMPLETE

*Mar 1 00:53:21.691: ISAKMP: set new node -1774001225 to QM_IDLE

*Mar 1 00:53:21.695: ISAKMP:(1002): sending packet to 61.128.1.1 my_port 500 peer_port 500 (I) QM_IDLE

*Mar 1 00:53:21.695: ISAKMP:(1002):Sending an IKE IPv4 Packet.

*Mar 1 00:53:21.695: ISAKMP:(1002):purging node -1774001225

*Mar 1 00:53:21.699: ISAKMP:(1002):Input = IKE_MESG_INTERNAL, IKE_PHASE1_DEL

*Mar 1 00:53:21.699: ISAKMP:(1002):Old State = IKE_P1_COMPLETE New State = IKE_DEST_SA *Mar 1 00:53:21.703: ISAKMP:(1002):deleting SA reason "No reason" state (I) QM_IDLE

(peer 61.128.1.1)

<清除所有SA，包括IPSec SA和ISAKMP SA>

*Mar 1 00:53:21.703: ISAKMP: Unlocking peer struct 0x66BE0184 for isadb_mark_sa_deleted(), count 0

*Mar 1 00:53:21.707: ISAKMP: Deleting peer node by peer_reap for 61.128.1.1: 66BE0184

*Mar 1 00:53:21.711: ISAKMP:(1002):deleting node 497240185 error FALSE reason "IKE deleted"

*Mar 1 00:53:21.711: ISAKMP:(1002):deleting node -1782344882 error FALSE reason "IKE deleted"

*Mar 1 00:53:21.715: ISAKMP:(1002):deleting node 496066214 error FALSE reason "IKE deleted"

*Mar 100:53:21.715:ISAKMP:(1002):deletingnode -112306022errorFALSEreason"IKEdeleted"

*Mar 100:53:21.715:ISAKMP:(1002):deletingnode -691195734errorFALSEreason"IKEdeleted"

*Mar 100:53:21.719:ISAKMP:(1002):deletingnode -851170034errorFALSEreason"IKEdeleted"

*Mar 1 00:53:21.719: ISAKMP:(1002):Input = IKE_MESG_FROM_PEER, IKE_MM_EXCH

*Mar 1 00:53:21.723: ISAKMP:(1002):Old State = IKE_DEST_SA New State = IKE_DEST_SA 在例6-17 中，DPD 技术探测到了远端IPSec VPN 网关问题，并且清除了所有的安全关联。在Site1 和Site2 上执行showcrypto engine connections active 命令，可以看到所有的安全关联已经被清除，如例6-18所示。

例6-18 在Site1和Site2上查看安全关联

Site1#show crypto engine connections active

Crypto Engine Connections

ID Interface　Type　Algorithm　　Encrypt　Decrypt IP-Address

<IPSec SA与ISAKMP SA都被清除>

Site2#show crypto engine connections active

Crypto Engine Connections

ID Interface　Type　Algorithm　　Encrypt　Decrypt IP-Address

6．测试按需DPD工作特性

周期性工作模式的DPD技术已经测试完毕，现在开始测试按需工作模式的DPD技术。在Site1和Site2上启用按需工作模式的DPD技术之前，需要清除先前配臵的周期性工作模式DPD的配臵。

在Site1和Site2上启用按需工作模式的DPD，如例6-19所示。

例6-19 在Site1和Site2上启用按需工作模式的DPD

Site1(config)#no crypto isakmp keepalive 10 periodic

<需要预先no掉周期性DPD配置>

Site1(config)#crypto isakmp keepalive 10

Site2(config)#no crypto isakmp keepalive 10 periodic

Site2(config)#crypto isakmp keepalive 10

注意：DPD按需工作模式会基于流量形式的不同而采取不同的发送方式。如果IPSec VPN持续有流量被加密岐，并且还能持续解密对端送过来的加密数据包，那么此时，按需工作模式的DPD就会认为IPSec VPN一切正常，没有必要发送DPD信息。

只有当一个加密数据包被送出，但在一定时间内没有收到任何解密数据包的情况下，DPD 才会怀疑IPSec VPN 出现了问题，并开始发送DPD 信息，用来探测远端IPSec VPN网关状况（按需发送）。

如果很快收到了远端回送的 DPD 确认信息，则表示远端 IPSec VPN 网关一切正常。如果一定时间内没有收到DPD 确认信息，表示远端 IPSec VPN 网关存在问题，此时按需工作模式的DPD会和周期性工作模式的DPD一样，连续发送5个DPD探测包，如果依然没有回应，就会删除所有的安全关联。

在例6-19中，用来启用按需模式DPD而配臵的命令中的10，不是表示每10秒发送一个DPD，而是表示当一个加密包发送出去后，如果10秒内没有收到解密数据包，就发送DPD进行探测。

为了建立新的安全关联，需要在Internet路由器上打开Fa1/0接口，如例6-20所示。这样网络就恢复了正常。

例6-20 在Internet路由器上打开Fa1/0接口

Internet(config)#interface fastEthernet 1/0

Internet(config-if)#no shutdown

在Site1 上执行ping 操作，触发IPSec VPN，并建立新的安全关联，如例6-21 所示。此时两个站点就会使用按需DPD 技术，来监控对端IPSec VPN 网关的状况。

例6-21 在Site1上执行ping操作，触发IPSec VPN

Site1#ping 2.2.2.2 source 1.1.1.1

Type escape sequence to abort.

Sending 5, 100-byte ICMP Echos to 2.2.2.2, timeout is 2 seconds: Packet sent with a source address of 1.1.1.1

!!!!!

Success rate is 100 percent (5/5), round-trip min/avg/max = 168/192/228 ms 在DPD按需工作模式下，如果Site1和Site2之间不发送任何数据，DPD也就没有必要被发送。由于没有任何数据需要发送，所以IPSec VPN 是否存在也就不再重要，因此在Site1上也就看不到任何ISAKMP的debug信息。

例6-22，我们在Internet路由器上关闭Fa1/0接口，用来测试按需工作模式的DPD技术如何探测IPSecVPN网关问题。

例6-22 关闭Internet的Fa1/0接口

Internet(config)#interface fastEthernet 1/0

Internet(config-if)#shutdown

由于在Internet路由器上关闭了Fa1/0，这肯定导致了Site1与Site2之间不能进行通信。但是由于Site1和Site2之间不发送任何数据，因此DPD技术也不会被触发，也就谈不上使用DPD 技术来探测IPSec VPN 网关问题了。既然IPSec VPN 网关问题无法被发现，所以Site1和Site2上的安全关联也就不会被清除。

在Site1上执行ping操作，以便产生加密数据包，如例6-23所示。由于在Internet路由器上关闭接口制造了网络问题，因此 Site1 在一定时间内不会收到解密数据包，这个时候将触发DPD 技术，以发送DPD 信息来探测到有问题的IPSecVPN 网关。

例6-23 在Site1上执行ping操作，产生加密数据包

Site1#ping 2.2.2.2 source 1.1.1.1 repeat 1

在一系列尝试失败之后，Site1上的安全关联将被全部清除，如例6-24所示。

例6-24 Site1上的安全关联已经全部被清除

Site1#show crypto engine connections active

Crypto Engine Connections

ID Interface　Type　Algorithm　　Encrypt　Decrypt IP-Address

注意：虽然此时Site1上的安全关联已经全部被清除，但是Site2的安全关联依然存在，因为Site2没有发送和接收任何数据包，因此也不会有任何的DPD信息被发送。只有当Site2发送加密数据包后，才能够通过DPD技术来清除Site2上的安全关联。

通过上述测试，想必读者已经发现，周期性DPD和按需DPD各有优缺点：周期性工作模式发现问题的速度最快，但是如果IPSec VPN 一切正常，那么周期性发送的DPD就会白白消耗带宽与系统资源；按需工作模式的DPD非常节约资源，但是发现问题的速度较慢，如果两个站点都不发送任何加密数据包，就算中间网络已经出现了问题，也不会被立即探测到。所以我们要根据实际工程的状况来选择适当的DPD技术。

6.3 RRI技术介绍

6.3.1 技术描述

图6-4 为高可用性IPSecVPN 数据包转发路径图。

在图6-4 所示的高可用性IPSec VPN 网络环境中，正常情况下，分支站点会与中心站点主用网关建立IPSec VPN。分支站点加密的数据包在主用网关被解密成明文数据包，这些数据包的源IP地址为1.1.1.1，目的IP地址为2.2.2.2。它们会被主用网关路由转发到内部服务器。

图6-4 数据包在高可用性IPSec VPN网络环境中的流动路径

当内部服务器收到这些数据包后，就会产生相应的返回数据包，这些数据包的源IP地址为2.2.2.2，目的IP地址为1.1.1.1。它们必须被服务器发送到10.1.1.10（主用网关的内部IP 地址），才能够通过主用网关与分支站点之间的IPSec VPN 回送到分支站点。换言之，在内部服务器上应该有目的网段为 1.1.1.0/24，下一跳为 10.1.1.10 的路由。

如图6-5所示，当主用网关出现问题时，分支站点会通过DPD技术探测发现这个有问题的主用网关，并且快速切换到备用网关。此时从分支站点发出的访问内部服务器的数据包会由备用网关进行解密，并且送往内部服务器。内部服务器则会产生返回数据包，其目的IP地址为1.1.1.1。它们要想返回分支站点，只能被发往10.1.1.20（备用网关的内部地址），因为此时分支站点正与备用网关建立IPSecVPN。也就是说，这个时候内部服务器上应该有这样一条路由，它的目的网段为 1.1.1.0/24，下一跳为10.1.1.20。

通过上述分析，我们应该认识到这样一个问题：在图6-4 所示的高可用IPSecVPN解决方案中，内部服务器上返回分支站点的路由（1.1.1.0/24），要根据 IPSec VPN 的状况而变化，即哪台路由器是当前IPSecVPN 的活动网关，返回分支站点路由的下一跳，就应该指向那台路由器的内部接口地址。本小节即将要介绍的 Cisco 反向路由注入（Reverse Route Injection）技术，正是为了解决这个问题而设计的。

图6-5 主用网关出现故障后的数据转发路径图

所谓反向路由注入，顾名思义就是要动态产生一条路由，并且将它注入到路由表中。那么什么时候动态产生这条路由呢？答案是，在产生IPSec SA 的同时也产生这条路由，当IPSec SA 消失时，这条路由也随之消失。换言之，哪台路由器是当前的IPSec VPN活动网关，就需要在那台路由器的路由表中动态注入一条反向路由。

一个路由条目由两个部分组成：目的网段和下一跳。由RRI产生的路由，其目的网段为远端通信网络，下一跳为远端加密点（也可以认为是远端隧道终点）。以图6-4为例，如果在主用网关上产生反向路由注入，这条路由的目的应该为1.1.1.0/24，下一跳应该为 202.100.1.1，而且类型应该为静态路由。如果在内部网络（10.1.1.0/24）运行动态路由协议，并且把这条路由（静态）重分布进入内部网络动态路由协议，就能够正确引导内部服务器返回数据包。

当主用网关活动的时候，就会在主用网关产生这条路由。重分布到内部动态路由协议以后，内部路由器就会学到这条路由（目的为 1.1.1.0/24，下一跳为 10.1.1.10）。同理，如果备用网关为活动，内部路由器就学到这样一条路由（目的为1.1.1.0/24，下一跳为10.1.1.20）。由于同一时间只会有一个活动网关，也就只会产生一条路由，内部服务器同时也就只能学到一条去往 1.1.1.0/24 的路由，因而并不存在同时从主备用网关学到路由的问题。下面我们就通过实验6.3.2，来演示RRI基本配臵命令，并且测试RRI工作特性。

6.3.2 RRI 技术配置与测试

1．实际接线状况

如图6-6所示，本次实验一共需要使用4台路由器，由左至右分别模拟公司站点一（Site1）、互联网路由器（Internet）、公司站点二（Site2）、公司站点二内部服务器（Inside）。路由器Site1和Internet使用接口Fa0/0实现对接，路由器Internet和Site2使用接口Fa1/0实现对接，路由器Site2和Inside使用接口Fa2/0实现对接。Site1的环回口（loopback0）模拟公司站点一内部网络，Site2与Inside直连网络模拟公司站点二内部网络。

图6-6 RRI技术配置与测试实验实际接线图

2．实验拓扑

图6-7所示为配臵RRI技术以及对其进行测试的实验拓扑，该拓扑是一个典型站点到站点VPN拓扑，Site1（202.100.1.1）和Site2（61.128.1.1）是两个VPN站点连接互联网的网关路由器，也是IPSecVPN 的加密设备。

图6-7 RRI技术配置与测试实验拓扑

本次实验的通信网络为Site1身后的1.1.1.0/24网络和Site2身后的2.2.2.0/24网络。本次实验的主要目的是测试RRI特性，我们需要在Site2内部网络（2.2.2.0/24）运行动态路由协议OSPF，并在Site2上启用反向路由注入（RRI）技术，然后把RRI产生的反向路由重分布进入身后的动态路由协议（OSPF）。如果内部服务器（Inside）能够通过OSPF学习到1.1.1.0/24的路由，就解决了内部服务器去往远端通信点的路由。

当然本次实验主要用于展示RRI的配臵命令，以及测试RRI这个技术的工作特性。其实这个拓扑并没有必要使用 RRI 这个技术，因为 RRI 技术应该运用在高可用性的IPSec VPN 拓扑中。

3．基本网络与经典IPSec VPN 配置

本次实验的主要目的是配臵与测试RRI特性，所以在进行测试之前，我们首先通过例6-25、例6-26和例6-27简单展示Site1、Internet、Site2和Inside上的基本网络和IPSec VPN 配臵。

例6-25 Site1上的基本网络与IPSec VPN配置

enable

configure terminal

!

hostname Site1

!

crypto isakmp policy 10
authentication pre-share
crypto isakmp key cisco address 61.128.1.1

!

crypto ipsec transform-set cisco esp-des esp-md5-hmac

!

crypto map cisco 10 ipsec-isakmp
set peer 61.128.1.1
set transform-set cisco

match address vpn

!

interface Loopback0
ip address 1.1.1.1 255.255.255.0

!

interface FastEthernet0/0
ip address 202.100.1.1 255.255.255.0

crypto map cisco

no shutdown

!

ip route 0.0.0.0 0.0.0.0 202.100.1.10

!

ip access-list extended vpn
permit ip 1.1.1.0 0.0.0.255 2.2.2.0 0.0.0.255

!

end

例6-26 Internet上的基本网络配置

enable

configure terminal

!

hostname Internet

!

interface FastEthernet0/0
ip address 202.100.1.10 255.255.255.0

no shutdown

!

interface FastEthernet1/0
ip address 61.128.1.10 255.255.255.0

no shutdown

!

end

例6-27 Site2上的基本网络与IPSec VPN配置
enable

configure terminal

!

hostname Site2

!

crypto isakmp policy 10
authentication pre-share
crypto isakmp key cisco address 202.100.1.1

!

crypto ipsec transform-set cisco esp-des esp-md5-hmac

!

crypto map cisco 10 ipsec-isakmp
set peer 202.100.1.1
set transform-set cisco

match address vpn

!

interface FastEthernet1/0
ip address 61.128.1.1 255.255.255.0

crypto map cisco

no shutdown

!

interface FastEthernet2/0
ip address 2.2.2.1 255.255.255.0

no shutdown

!

router ospf 1
network 2.2.2.0 0.0.0.255 area 0

!

ip route 0.0.0.0 0.0.0.0 61.128.1.10

!

ip access-list extended vpn
permit ip 2.2.2.0 0.0.0.255 1.1.1.0 0.0.0.255

!

end

例6-28 Inside上的基本网络配置

enable

configure terminal

!

hostname Inside

!

interface FastEthernet2/0
ip address 2.2.2.2 255.255.255.0

no shutdown

!

router ospf 1
network 2.2.2.0 0.0.0.255 area 0

!

end

4．RRI配置

在Site2上配臵RRI，并且将RRI动态注入的静态路由，重分布进入内部动态路由协议，如例6-29所示。

例6-29 在Site2上配置RRI

Site2(config)#crypto map cisco 10

Site2(config-crypto-map)#reverse-route

<启用RRI技术>

Site2(config-crypto-map)#set reverse-route tag 10

<RRI 动态产生的静态路由都附上tag 10 的属性，便于重分布>

Site2(config)#route-map RRI-to-OSPF

Site2(config-route-map)#match tag 10

<匹配有tag 10 属性的路由，其实就是匹配了RRI产生的静态路由>

Site2(config)#router ospf 1

Site2(config-router)#redistribute static route-map RRI-to-OSPF subnets <重分布RRI产生的静态路由到OSPF>

5．查看建立IPSec VPN之前路由状态

RRI是伴随着IPSec 安全关联的产生而产生的。所以在IPSec VPN 建立之前，我们通过例6-30和例6-31在Site2和Inside上查看路由表时，并没有发现RRI动态产生的静态路由。

例6-30 查看Site2路由表

Site2#show ip route

Gateway of last resort is 61.128.1.10 to network 0.0.0.0

2.0.0.0/24 is subnetted, 1 subnets

C　　2.2.2.0 is directly connected, FastEthernet2/0

61.0.0.0/24 is subnetted, 1 subnets

C　　61.128.1.0 is directly connected, FastEthernet1/0

S*　0.0.0.0/0 [1/0] via 61.128.1.10

例6-31 查看Inside路由表

Inside#show ip route

Gateway of last resort is not set

2.0.0.0/24 is subnetted, 1 subnets

C　　2.2.2.0 is directly connected, FastEthernet2/0

6．建立IPSec VPN，并查看路由状态

现在开始测试RRI的工作特性，首先，例6-32在Site1使用ping触发了IPSecVPN，当IPSec VPN 成功建立之后，随着IPSec 安全关联的产生，RRI也被动态地注入到了Site2的路由表中。在我们通过例6-33查看Site2路由表时，可以看到这条去往1.1.1.0/24下一跳为202.100.1.1的路由。由于在Site2上配臵了重分布，所以例6-34，在Inside路由器上查看路由表时，可以看到Inside路由器通过OSPF学习到了RRI动态产生的，去往1.1.1.0/24的路由。

例6-32 Site1使用ping触发IPSec VPN

Site1#ping 2.2.2.2 source 1.1.1.1

Type escape sequence to abort.

Sending 5, 100-byte ICMP Echos to 2.2.2.2, timeout is 2 seconds: Packet sent with a source address of 1.1.1.1

!!!!!

Success rate is 100 percent (5/5), round-trip min/avg/max = 112/149/204 ms 例6-33 查看Site2路由表

Site2#show ip route

Gateway of last resort is 61.128.1.10 to network 0.0.0.0

1.0.0.0/24 is subnetted, 1 subnets

S　　1.1.1.0 [1/0] via 202.100.1.1

<RRI产生的静态路由，目的是远端通信点1.1.1.0/24，下一跳是远端加密点202.100.1.1> 2.0.0.0/24 is subnetted, 1 subnets

C　　2.2.2.0 is directly connected, FastEthernet2/0

61.0.0.0/24 is subnetted, 1 subnets

C　　61.128.1.0 is directly connected, FastEthernet1/0

S*　0.0.0.0/0 [1/0] via 61.128.1.10

例6-34 查看Inside路由表

Inside#show ip route

Gateway of last resort is not set

1.0.0.0/24 is subnetted, 1 subnets

O E2　1.1.1.0 [110/20] via 2.2.2.1, 00:10:39, FastEthernet2/0

<Inside服务器通过动态路由协议，学习到远端通信点路由，下一跳是活动IPSec网关的内部IP地址>

2.0.0.0/24 is subnetted, 1 subnets

C　　2.2.2.0 is directly connected, FastEthernet2/0

6.4 链路备份的IPSec VPN介绍

6.4.1 链路备份IPSec VPN

本章在6.1 节就已经引入了一个链路备份的IPSec VPN 拓扑。为了能够实现这个高可用性的IPSec VPN，我们在6.2 节介绍了DPD技术，这项技术可以快速探测到有问题的IPSec VPN 网关，便于高可用性IPSec VPN快速的切换到备用网关。在6.3 节中，我们介绍了RRI 技术，主要解决了在高可用性IPSec VPN 的网络环境中，出现的回包路由问题。所有在6.2节和6.3节中对DPD和RRI技术的介绍，主要是为6.4节要介绍的链路备份的IPSecVPN 进行技术铺垫。现在我们就开始来介绍，并且测试链路备份的IPSec VPN。

6.4.2 链路备份IPSec VPN 配置与测试

1．实际接线状况

在图6-8 所示的链路备份IPSec VPN 实验实际接线图中，一共需要使用5 台路由器，由左至右分别模拟公司分支站点（Branch）、互联网路由器（Internet）、主用网关（Primary）、备用网关（Secondary）和内部服务器（Server）。路由器Branch和Internet使用接口Fa0/0实现对接，路由器Internet和Primary使用接口Fa1/0实现对接，路由器Internet和Secondary使用接口Fa2/0实现对接。路由器Primary，Secondary和Server的Fa3/0接口被桥接到一个相同网络。Branch的环回口（loopback0）模拟分支站点内部网络，Server的环回口（loopback0）模拟中心站点内部网络。

图6-8 链路备份IPSec VPN实验实际接线图

2．实验拓扑

图6-9 所示为链路备份IPSec VPN 实验的拓扑，该拓扑是一个链路备份的站点到站点IPSec VPN 实验拓扑。Branch 模拟分支站点路由器，身后的1.1.1.0/24 模拟分支站点内部网络。Server模拟中心站点内部服务器，身后的2.2.2.0/24模拟中心站点内部网络。

本次实验的加密感兴趣流，就是分支站点1.1.1.0/24和中心站点内部网络2.2.2.0/24之间的流量。在这个拓扑中，中心站点为了提供IPSecVPN 的高可用性，而申请了两条互联网链路，一条是运营商一的 61.128.1.0/24 这条链路，另一条是运营商二的137.78.5.0/24 这条链路。正常情况下分支站点（Branch）会与主用网关（Primary）建立IPSec VPN，如果主用网关（Primary）出现问题，分支站点（Branch）就会快速切换到备用网关（Secondary），实现IPSecVPN 的高可用性。

在这本实验中，我们会使用DPD技术来探测有问题的网关，并使用RRI技术来解决回包路由问题。

图6-9 链路备份IPSec VPN实验拓扑

3．基本网络配置

本部分的主要任务是配臵基本网络，为后续的配臵与测试搭建网络环境。例6-35、例6-36、例6-37、例6-38和例6-39分别为在Branch、Internet、Primary、Secondary和Server上执行的基本网络配臵。

例6-35 Branch上的基本网络配置

enable

configure terminal

!

hostname Branch

!

interface Loopback0
ip address 1.1.1.1 255.255.255.0

!

interface FastEthernet0/0
ip address 202.100.1.1 255.255.255.0

no shutdown

!

ip route 0.0.0.0 0.0.0.0 202.100.1.10

!

end

例6-36 Internet上的基本网络配置

enable

configure terminal

!

hostname Internet

!

interface FastEthernet0/0
ip address 202.100.1.10 255.255.255.0

no shutdown

!

interface FastEthernet1/0
ip address 61.128.1.10 255.255.255.0

no shutdown

!

interface FastEthernet2/0
ip address 137.78.5.10 255.255.255.0

no shutdown

!

end

例6-37 Primary上的基本网络配置

enable

configure terminal

!

hostname Primary

!

interface FastEthernet1/0
ip address 61.128.1.1 255.255.255.0

no shutdown

!

interface FastEthernet3/0
ip address 10.1.1.10 255.255.255.0

no shutdown

!

router ospf 1
network 10.1.1.0 0.0.0.255 area 0

!

ip route 0.0.0.0 0.0.0.0 61.128.1.10

!

end

例6-38 Secondary上的基本网络配置

enable

configure terminal

!

hostname Secondary

!

interface FastEthernet2/0
ip address 137.78.5.1 255.255.255.0

no shutdown

!

interface FastEthernet3/0
ip address 10.1.1.20 255.255.255.0

no shutdown

!

router ospf 1
network 10.1.1.0 0.0.0.255 area 0

!

ip route 0.0.0.0 0.0.0.0 137.78.5.10

!

end

例6-39 Server上的基本网络配置
enable

configure terminal

!

hostname Server

!

interface Loopback0
ip address 2.2.2.2 255.255.255.0

!

interface FastEthernet3/0
ip address 10.1.1.1 255.255.255.0

no shutdown

!

router ospf 1
network 10.1.1.0 0.0.0.255 area 0
network 2.2.2.0 0.0.0.255 area 0

!

end

4．链路备份高可用IPSec VPN 配置

与经典的IPSec VPN 配臵相比，链路备份的IPSec VPN 配臵主要融入了DPD 和RRI这两项技术。例6-40、例6-41、例6-42分别介绍了Branch、Primary和Secondary上，链路部分IPSecVPN的配臵。

例6-40 Branch上的高可用IPSec VPN经典配置

Branch(config)# crypto isakmp policy 10

Branch(config-isakmp)# authentication pre-share

Branch(config)# crypto isakmp key 0 cisco address 61.128.1.1

Branch(config)# crypto isakmp key 0 cisco address 137.78.5.1

<主备用网关第一阶段认证密钥，可以配置为不同密钥>

Branch(config)#crypto isakmp keepalive 10 periodic

<Branch启用周期性工作模式的DPD，快速探测有问题的VPN网关>

Branch(config)# ip access-list extended vpn

Branch(config-ext-nacl)#permit ip 1.1.1.0 0.0.0.255 2.2.2.0 0.0.0.255

Branch(config)# crypto ipsec transform-set cisco esp-des esp-md5-hmac Branch(config)# crypto map cisco 10 ipsec-isakmp

Branch(config-crypto-map)#match address vpn

Branch(config-crypto-map)#set transform-set cisco

Branch(config-crypto-map)#set peer 61.128.1.1

Branch(config-crypto-map)#set peer 137.78.5.1

<先配置的61.128.1.1为主用网关，后配置的137.78.5.1为备用网关，网关的主备用，主要看谁被配置在前面> Branch(config)# interface FastEthernet0/0

Branch(config-if)# crypto map cisco

例6-41 Primary上的高可用IPSec VPN经典配置

Primary(config)#crypto isakmp policy 10

Primary(config-isakmp)#authentication pre-share

Primary(config)#crypto isakmp key 0 cisco address 202.100.1.1

Primary(config)#crypto isakmp keepalive 10 periodic <Branch启用周期性工作模式的DPD，快速探测有问题的VPN网关>

Primary(config)#ip access-list ex vpn

Primary(config-ext-nacl)#permit ip 2.2.2.0 0.0.0.255 1.1.1.0 0.0.0.255

Primary(config)#crypto ipsec transform-set cisco esp-des esp-md5-hmac Primary(config)#crypto map cisco 10 ipsec-isakmp

Primary(config-crypto-map)#match address vpn

Primary(config-crypto-map)#set transform-set cisco

Primary(config-crypto-map)#set peer 202.100.1.1

Primary(config-crypto-map)#reverse-route

Primary(config-crypto-map)#set reverse-route tag 10

<启用反向路由注入技术，并且重分布产生的静态路由到身后动态路由协议，解决回包路由问题>

Primary(config)#interface fastEthernet 1/0

Primary(config-if)#crypto map cisco

Primary(config)#route-map RRI-to-OSPF

Primary(config-route-map)#match tag 10

Primary(config)#router ospf 1

Primary(config-router)#redistribute static route-map RRI-to-OSPF subnets 例6-42 Secondary上的高可用IPSec VPN经典配置

Secondary(config)#crypto isakmp policy 10

Secondary(config-isakmp)#authentication pre-share

Secondary(config)#crypto isakmp key 0 cisco address 202.100.1.1

Secondary(config)#crypto isakmp keepalive 10 periodic

Secondary(config)#ip access-list ex vpn

Secondary(config-ext-nacl)#permit ip 2.2.2.0 0.0.0.255 1.1.1.0 0.0.0.255

Secondary(config)#crypto ipsec transform-set cisco esp-des esp-md5-hmac Secondary(config)#crypto map cisco 10 ipsec-isakmp

Secondary(config-crypto-map)#match address vpn

Secondary(config-crypto-map)#set transform-set cisco

Secondary(config-crypto-map)#set peer 202.100.1.1

Secondary(config-crypto-map)#reverse-route

Secondary(config-crypto-map)#set reverse-route tag 10

Secondary(config)#interface fastEthernet 2/0

Secondary(config-if)#crypto map cisco

Secondary(config)#route-map RRI-to-OSPF

Secondary(config-route-map)#match tag 10

Secondary(config)#router ospf 1

Secondary(config-router)#redistribute static route-map RRI-to-OSPF subnets 5．测试链路备份高可用性IPSec VPN

链路备份的IPSec VPN已经配臵完毕，现在我们开始测试，首先，例6-43在Branch上使用ping触发IPSec VPN。注意为了测试链路的切换，ping的数量需要设臵得多一些。

例6-43 Branch触发IPSec VPN

Branch#ping 2.2.2.2 source 1.1.1.1 repeat 1000000

Type escape sequence to abort.

Sending 1000000, 100-byte ICMP Echos to 2.2.2.2, timeout is 2 seconds: Packet sent with a source address of 1.1.1.1

.!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

正常情况下 Branch 应该与 Primary 建立 IPSec VPN，我们可以通过例 6-44 在Primary上查看加解密状况。

例6-44 在Primary查看IPSec VPN加解密状况

Primary#show crypto engine connections active

Crypto Engine Connections

随着Primary上IPSec安全关联的建立，当我们通过例6-45查看Primary路由表时，就可以发现RRI动态注入的静态路由，1.1.1.0/24（远端通信点）下一跳为202.100.1.1 （远端加密点）。

例6-45 查看Primary 路由表

Primary#show ip route

Gateway of last resort is 61.128.1.10 to network 0.0.0.0

1.0.0.0/24 is subnetted, 1 subnets

S　　1.1.1.0 [1/0] via 202.100.1.1

<反向路由注入产生的静态路由>

2.0.0.0/32 is subnetted, 1 subnets

O　　2.2.2.2 [110/2] via 10.1.1.1, 00:57:30, FastEthernet3/0

10.0.0.0/24 is subnetted, 1 subnets

C　　10.1.1.0 is directly connected, FastEthernet3/0

61.0.0.0/24 is subnetted, 1 subnets

C　　61.128.1.0 is directly connected, FastEthernet1/0

S*　0.0.0.0/0 [1/0] via 61.128.1.10

由于Primary对静态路由进行了重分布，因此我们在通过例6-46查看Server路由表时，可以看到通过动态路由协议学习到的远端通信点（1.1.1.0/24）的路由：下一跳为当前活动网关（Primary）内部接口的IP地址（10.1.1.10）。

例6-46 查看Server路由表

Server#show ip route ospf

1.0.0.0/24 is subnetted, 1 subnets

O E2　1.1.1.0 [110/20] via 10.1.1.10, 00:06:27, FastEthernet3/0

<目的是远端通信点，下一跳是活动VPN网关的内部IP地址>

6．制造Primary网关的链路问题

为了制造Primary网关故障，我们在Internet路由器上关闭了与主用网关Primary对接的接口Fa1/0。

例6-47 关闭Internet路由器的FastEthernet1/0 接口

Internet(config)#interface fastEthernet 1/0

Internet(config-if)#shutdown

7．查看高可用IPSec VPN 切换后效果

例6-48所示为在Branch上看到的ping丢包状况。在由Primary切换到Secondary的过程中，出现了10次丢包。注意，实际丢包数量和切换时间与用户使用的虚拟机或者硬件设备的性能有关。

例6-48 Branch上ping丢包状况

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

!!!!!!!..........!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

由于关闭了 Internet 与 Primary 对接的 Fa1/0，Primary 上启用的 DPD 技术发现Branch网关出现了问题，因此在查看Primary安全关联时，发现所有安全关联均被清除，如例6-49所示。

例6-49 查看Primary 安全关联

Primary#show crypto engine connections active

Crypto Engine Connections

ID Interface　Type　Algorithm　　Encrypt　Decrypt IP-Address

伴随着在Primary上安全关联的消失，通过例6-50查看Primary路由表时可以发现，反向路由注入产生的静态路由也随之消失。

例6-50 查看Primary 路由表

Primary#show ip route

Gateway of last resort is 61.128.1.10 to network 0.0.0.0

1.0.0.0/24 is subnetted, 1 subnets

O E2　1.1.1.0 [110/20] via 10.1.1.20, 00:05:52, FastEthernet3/0

2.0.0.0/32 is subnetted, 1 subnets

O　　2.2.2.2 [110/2] via 10.1.1.1, 01:13:05, FastEthernet3/0

10.0.0.0/24 is subnetted, 1 subnets

C　　10.1.1.0 is directly connected, FastEthernet3/0

61.0.0.0/24 is subnetted, 1 subnets

C　　61.128.1.0 is directly connected, FastEthernet1/0

S*　0.0.0.0/0 [1/0] via 61.128.1.10

此时Branch 已经放弃了与Primary 的IPSec VPN 连接，而切换到了Secondary，通过例6-51 可以看到Secondary上IPSecVPN 的加解密状况。

例6-51 在Secondary上查看IPSec VPN加解密状况

Secondary#show crypto engine connections active

Crypto Engine Connections

伴随着 Secondary 上 IPSec 安全关联的出现， Secondary 路由表中出现了RRI 技术产生的去往远端通信点1.1.1.0/24的路由，下一跳为202.100.1.1（远端加密点），如例6-52所示。

例6-52 查看Secondary路由表

Secondary#show ip route

Gateway of last resort is 137.78.5.10 to network 0.0.0.0

1.0.0.0/24 is subnetted, 1 subnets

S　　1.1.1.0 [1/0] via 202.100.1.1

<由于Secondary为活动网关，有活动的安全关联，所以RRI产生的静态路由，在Secondary网关的路由表中出现> 137.78.0.0/24 is subnetted, 1 subnets

C　　137.78.5.0 is directly connected, FastEthernet2/0

2.0.0.0/32 is subnetted, 1 subnets

O　　2.2.2.2 [110/2] via 10.1.1.1, 01:16:40, FastEthernet3/0

10.0.0.0/24 is subnetted, 1 subnets

C　　10.1.1.0 is directly connected, FastEthernet3/0

S*　0.0.0.0/0 [1/0] via 137.78.5.10

由于Secondary也对静态路由进行了重分布，因此如果通过例6-53查看Server路由表，就可以看到通过动态路由协议学习到的远端通信点（1.1.1.0/24）的路由，下一跳为当前活动网关（Secondary）内部接口的IP地址（10.1.1.20）。

例6-53 查看Server路由表

Server#show ip route ospf

1.0.0.0/24 is subnetted, 1 subnets

O E2　1.1.1.0 [110/20] via 10.1.1.20, 00:12:05, FastEthernet3/0

注意：链路备份的高可用性IPSec VPN，不支持抢占特性。也就是说，如果我们打开了Internet上的Fa1/0接口，让Primary恢复正常，Branch也不会马上切换回Primary，因为Branch会认为当前的Peer（secondary）没有任何问题，并且IPSec SA也没有超时。换言之，只有当IPSec SA超时后，Branch才会考虑重新和Primary建立隧道。

6.5 设备备份IPSec VPN（Redundancy VPN）介绍

6.5.1 设备备份IPSec VPN

在 6.4 部分我们介绍了链路备份的 IPSec VPN，顾名思义这项技术主要对互联网链路进行备份，使用这项技术时，公司需要申请两条互联网链路。如果公司只有一条互联网链路，但却希望提供设备级别的高可用性，那就需要用到接下来将要介绍的设备备份 IPSec VPN。Cisco 对设备备份 IPSec VPN 技术有一个专有的名字，叫做Redundancy VPN。所谓的设备备份的IPSec VPN 技术，就是当主用设备出现故障以后，备用设备会在短时间内替换掉有故障的主用设备，并继续提供IPSec VPN 服务。

6.5.2 设备备份IPSec VPN（Redundancy VPN）配置与测试

1．实际接线状况

图6-10 所示为设备备份IPSec VPN（Redundancy VPN）实验的实际接线图。本实验一共需要使用5台路由器，由左至右分别模拟公司分支站点（Branch）、互联网路由器（Internet）、主用网关（Primary）、备用网关（Secondary）和内部服务器（Server）。路由器Branch和Internet使用接口Fa0/0实现对接，路由器Internet、Primary和Secondary的Fa1/0接口被桥接到一个相同网络。路由器Primary、Secondary和Server的Fa2/0接口被桥接到一个相同网络。Branch的环回口（loopback0）模拟分支站点内部网络， Server的环回口（loopback0）模拟中心站点内部网络。

图6-10 设备备份IPSec VPN实验实际接线图

2．实验拓扑

图6-11 所示为设备备份IPSecVPN（Redundancy VPN）的实验拓扑，该拓扑是一个设备备份的站点到站点IPSec VPN（Redundancy VPN）的实验拓扑。Branch 模拟分支站点路由器，身后的1.1.1.0/24模拟分支站点内部网络。Server模拟中心站点内部服务器，身后的2.2.2.0/24模拟中心站点内部网络。

图6-11 设备备份IPSec VPN实验拓扑

本次实验的加密感兴趣流，就是分支站点1.1.1.0/24和中心站点内部网络2.2.2.0/24之间的流量。中心站点只有一条互联网链路，但是希望实现设备级别的备份。

Redundancy VPN 主要使用 HSRP 技术来提供设备级别的备份，在 Primary 和Secondary所在的外部网络（61.128.1.0/24）使用了HSRP技术，虚拟中心站点网关IP地址为61.128.1.100。分支站点（Branch）与这个虚拟IP 建立IPSec VPN，因此中心站点所提供的设备级备份，对于分支站点而言是透明的。不管活动的IPSecVPN 网关为Primary还是Secondary，分支站点始终认为，它只是在与61.128.1.100这台设备建立IPSecVPN。

在这本实验中，我们依然会使用DPD技术来探测有问题的网关，并使用RRI技术来解决回包路由问题。

3．基本网络配置

本部分的主要任务是配臵基本网络，为后续的配臵与测试搭建网络环境，例6-54、例6-55、例6-56、例6-57和例6-58分别为在Branch、Internet、Primary、Secondary和Server上所执行的基本网络配臵。

例6-54 Branch上的基本网络配置

enable

configure terminal

!

hostname Branch

!

interface Loopback0
ip address 1.1.1.1 255.255.255.0

!

interface FastEthernet0/0
ip address 202.100.1.1 255.255.255.0

no shutdown

!

ip route 0.0.0.0 0.0.0.0 202.100.1.10

!

end

例6-55 Internet上的基本网络配置

enable

configure terminal

!

hostname Internet

!

interface FastEthernet0/0
ip address 202.100.1.10 255.255.255.0

no shutdown

!

interface FastEthernet1/0
ip address 61.128.1.10 255.255.255.0

no shutdown

!

end

例6-56 Primary上的基本网络配置

enable

configure terminal

!

hostname Primary

!

interface FastEthernet1/0
ip address 61.128.1.1 255.255.255.0

no shutdown

!

interface FastEthernet2/0
ip address 10.1.1.10 255.255.255.0

no shutdown

!

router ospf 1
network 10.1.1.0 0.0.0.255 area 0

!

ip route 0.0.0.0 0.0.0.0 61.128.1.10

!

end

例6-57 Secondary上的基本网络配置

enable

configure terminal

!

hostname Secondary

!

interface FastEthernet1/0
ip address 61.128.1.2 255.255.255.0

no shutdown

!

interface FastEthernet2/0
ip address 10.1.1.20 255.255.255.0

no shutdown

!

router ospf 1
network 10.1.1.0 0.0.0.255 area 0

!

ip route 0.0.0.0 0.0.0.0 61.128.1.10

!

end

例6-58 Server上的基本网络配置

enable

configure terminal

!

hostname Server

!

interface Loopback0
ip address 2.2.2.2 255.255.255.0

!

interface FastEthernet2/0
ip address 10.1.1.1 255.255.255.0

no shutdown

!

router ospf 1
network 2.2.2.0 0.0.0.255 area 0
network 10.1.1.0 0.0.0.255 area 0

!

end

4．HSRP配置

Redundancy VPN 的最大特点就是利用HSRP 技术虚拟IP 地址，并且使用这个虚拟IP 地址来建立IPSecVPN。例6-59、例6-60 分别在Primary和Secondary上配臵了HSRP。为HSRP 命名（Standby name）是此配臵的关键点。

例6-59 Primary 上的HSRP配置

Primary(config)#interface fastEthernet 1/0

Primary(config-if)#standby 1 ip 61.128.1.100

Primary(config-if)#standby 1 priority 105

Primary(config-if)#standby 1 preempt

Primary(config-if)#standby 1 name Redun.VPN

<注意：和普通配置HSRP 不一样，需要为HSRP配置一个名字，便于后续在IPSec VPN 中调用，这也是redundancyvpn的配置特点> 例6-60 Secondary 上的HSRP 配置

Secondary(config)#interface fastEthernet 1/0

Secondary(config-if)#standby 1 ip 61.128.1.100

Secondary(config-if)#standby 1 preempt

Secondary(config-if)#standby 1 name Redun.VPN

HSRP配臵完毕后，我们可以通过例6-61在Primary上查看HSRP的状态，需要注意的关键是本地的状态（StateisActive）和备用路由器的IP 地址。

例6-61 在Primary上查看HSRP 状态

Primary#show standby

FastEthernet1/0 - Group 1

State is Active

2 state changes, last state change 00:02:25

Virtual IP address is 61.128.1.100

Active virtual MAC address is 0000.0c07.ac01

Local virtual MAC address is 0000.0c07.ac01 (v1 default)

Hello time 3 sec, hold time 10 sec

Next hello sent in 1.548 secs

Preemption enabled

Active router is local

Standby router is 61.128.1.2, priority 100 (expires in 9.152 sec) Priority 105 (configured 105)

Group name is "Redun.VPN" (cfgd)

5．Redundancy VPN配置

例 6-62、例 6-63 和例 6-64 分别在 Branch、Primary 和 Secondary 上配臵了Redundancy VPN。需要注意例6-63 中反向路由注入与crypto map 调用的技巧。

例6-62 Branch上的IPSec VPN 配置

Branch(config)#crypto isakmp policy 10

Branch(config-isakmp)#authentication pre-share

Branch(config)#crypto isakmp key 0 cisco address 61.128.1.100

Branch(config)#crypto isakmp keepalive 10 periodic

Branch(config)#crypto ipsec transform-set cisco esp-des esp-md5-hmac Branch(config)# ip access-list extended vpn

Branch(config-ext-nacl)#permit ip 1.1.1.0 0.0.0.255 2.2.2.0 0.0.0.255

Branch(config)#crypto map cisco 10 ipsec-isakmp

Branch(config-crypto-map)#match address vpn

Branch(config-crypto-map)#set transform-set cisco

Branch(config-crypto-map)#set peer 61.128.1.100

Branch(config)#interface FastEthernet 0/0

Branch(config-if)#crypto map cisco

例6-63 Primary上的Redundancy VPN配置

Primary(config)#crypto isakmp policy 10

Primary(config-isakmp)#authentication pre-share

Primary(config)#crypto isakmp key 0 cisco address 202.100.1.1

Primary(config)#crypto isakmp keepalive 10 periodic

Primary(config)#crypto ipsec transform-set cisco esp-des esp-md5-hmac Primary(config)#ip access-list extended vpn

Primary(config-ext-nacl)#permit ip 2.2.2.0 0.0.0.255 1.1.1.0 0.0.0.255

Primary(config)#crypto map cisco 10 ipsec-isakmp

Primary(config-crypto-map)#match address vpn

Primary(config-crypto-map)#set transform-set cisco

Primary(config-crypto-map)#set peer 202.100.1.1

Primary(config-crypto-map)#set reverse-route tag 10

Primary(config-crypto-map)#reverse-route static

<注意static这个关键字，如果没有static这个关键字，必须要有IPSec SA才会产生反向路由。一旦敲上static关键字，不管有没有IPSec SA都会产生反向路由。可能有人会问如果Primary 和Secondary都敲这个关键字，难道不会产生路由问题吗？答案是不会的，因为Cisco的RedundancyVPN有这么一特性，只有HSRP的Active路由器才会产生反向路由。也就是说使用上述配置，不管存不存在IPSecSA，只要这台路由器是HSRP 的活动路由器，就会产生反向路由。注意在链路备份拓扑的IPSec VPN 中，不能配置static关键字> Primary(config)#route-map RRI-to-OSPF

Primary(config-route-map)#match tag 10

Primary(config)#router ospf 1

Primary(config-router)#redistribute static route-map RRI-to-OSPF subnets Primary(config)#interface FastEthernet 1/0

Primary(config-if)#crypto map cisco redundancy Redun.VPN

<注意:之所以为RedundancyVPN，关键就是在调用cryptomap的时候，使用redundancy关键字来调用HSRP的名字。哪台路由器是HSRP的活动路由器，就会使用HSRP的虚拟IP地址，来和远端peer（202.100.1.1）建立IPSec VPN> 例6-64 Secondary上的Redundancy VPN配置

Secondary(config)#crypto isakmp policy 10

Secondary(config-isakmp)#authentication pre-share

Secondary(config)#crypto isakmp key 0 cisco address 202.100.1.1

Secondary(config)#crypto isakmp keepalive 10 periodic

Secondary(config)#crypto ipsec transform-set cisco esp-des esp-md5-hmac Secondary(config)#ip access-list extended vpn

Secondary(config-ext-nacl)#permit ip 2.2.2.0 0.0.0.255 1.1.1.0 0.0.0.255

Secondary(config)#crypto map cisco 10 ipsec-isakmp

Secondary(config-crypto-map)#match address vpn

Secondary(config-crypto-map)#set transform-set cisco

Secondary(config-crypto-map)#set peer 202.100.1.1

Secondary(config-crypto-map)#set reverse-route tag 10

Secondary(config-crypto-map)#reverse-route static

Secondary(config)#route-map RRI-to-OSPF

Secondary(config-route-map)#match tag 10

Secondary(config)#router ospf 1

Secondary(config-router)#redistribute static route-map RRI-to-OSPF subnets Secondary(config)#interface FastEthernet 1/0

Secondary(config-if)#crypto map cisco redundancy Redun.VPN

6．测试Redundancy VPN

例6-65所示为Secondary路由表的信息，由于Secondary是HSRP的Standby设备，所以没有RRI产生的静态路由。

例6-65 查看Secondary路由表

Secondary#show ip route

Gateway of last resort is 61.128.1.10 to network 0.0.0.0

1.0.0.0/24 is subnetted, 1 subnets

O E2　1.1.1.0 [110/20] via 10.1.1.10, 00:25:11, FastEthernet2/0

2.0.0.0/32 is subnetted, 1 subnets

O　　2.2.2.2 [110/2] via 10.1.1.1, 00:52:10, FastEthernet2/0

10.0.0.0/24 is subnetted, 1 subnets

C　　10.1.1.0 is directly connected, FastEthernet2/0

61.0.0.0/24 is subnetted, 1 subnets

C　　61.128.1.0 is directly connected, FastEthernet1/0

S*　0.0.0.0/0 [1/0] via 61.128.1.10

例6-66所示为Primary路由表的信息，由于Primary是HSRP的Active路由器，并且反向路由注入配臵了关键字static，所以就算现在还没有IPSec安全关联，也会产生RRI的静态路由。

例6-66 查看Primary 路由表

Primary#show ip route

Gateway of last resort is 61.128.1.10 to network 0.0.0.0

1.0.0.0/24 is subnetted, 1 subnets

S　　1.1.1.0 [1/0] via 202.100.1.1

2.0.0.0/32 is subnetted, 1 subnets

O　　2.2.2.2 [110/2] via 10.1.1.1, 00:53:46, FastEthernet2/0

10.0.0.0/24 is subnetted, 1 subnets

C　　10.1.1.0 is directly connected, FastEthernet2/0

61.0.0.0/24 is subnetted, 1 subnets

C　　61.128.1.0 is directly connected, FastEthernet1/0

S*　0.0.0.0/0 [1/0] via 61.128.1.10

例 6-67 所示为 Server 路由表的信息，由于 Primary 设备已经将 RRI 产生的静态路由重分布到了内部OSPF动态路由协议，所以内部Server能够通过OSPF学习到去往远端通信点1.1.1.0/24的路由，下一跳为Primary路由器内部接口的IP地址10.1.1.10。显然内部路由器Server不会同时从Primary和Secondary学到两条这样的路由，这也再次确认了Redundancy VPN 的特性。

例6-67 查看Server路由表

Server#show ip route

Gateway of last resort is not set

1.0.0.0/24 is subnetted, 1 subnets

O E2　1.1.1.0 [110/20] via 10.1.1.10, 00:29:26, FastEthernet2/0

2.0.0.0/24 is subnetted, 1 subnets

C　　2.2.2.0 is directly connected, Loopback0

10.0.0.0/24 is subnetted, 1 subnets

C　　10.1.1.0 is directly connected, FastEthernet2/0

Redundancy VPN 的另外一个特点是，可以同时在Branch 和Server 上发起并建立IPSec VPN。为了展示它的这个特点，我们从Server 通过ping 来触发IPSec VPN，如例6-68所示。

例6-68 Server触发IPSec VPN

Server#ping 1.1.1.1 source 2.2.2.2 repeat 10000

Type escape sequence to abort.

Sending 10000, 100-byte ICMP Echos to 1.1.1.1, timeout is 2 seconds: Packet sent with a source address of 2.2.2.2

.!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

7．测试设备切换

为了测试RedundancyVPN 的切换，重启Primary路由器，如例6-69 所示。

例6-69 重启Primary 路由器

Primary#reload

System configuration has been modified. Save? [yes/no]: n

Proceed with reload? [confirm]

Redundancy VPN 的切换是由于HSRP 的切换而造成的，由于Primary路由器已经重启，因此在Secondary查看HSRP状态时（见例6-70），会发现此时Secondary已经成为了HSRP的Active路由器。

例6-70 Secondary 查看HSRP 状态

Secondary#show standby

FastEthernet1/0 - Group 1

State is Active

2 state changes, last state change 00:00:54

Virtual IP address is 61.128.1.100

Active virtual MAC address is 0000.0c07.ac01

Local virtual MAC address is 0000.0c07.ac01 (v1 default)

Hello time 3 sec, hold time 10 sec

Next hello sent in 0.000 secs

Preemption enabled

Active router is local

Standby router is unknown

Priority 100 (default 100)

Group name is "Redun.VPN" (cfgd)

伴随着Secondary成为HSRP的Active路由器，在通过例6-71查看Secondary路由表时，就能够发现RRI产生的静态路由。

例6-71 查看Secondary路由表

Secondary#show ip route

Gateway of last resort is 61.128.1.10 to network 0.0.0.0

1.0.0.0/24 is subnetted, 1 subnets

S　　1.1.1.0 [1/0] via 202.100.1.1

2.0.0.0/32 is subnetted, 1 subnets

O　　2.2.2.2 [110/2] via 10.1.1.1, 01:04:21, FastEthernet2/0

10.0.0.0/24 is subnetted, 1 subnets

C　　10.1.1.0 is directly connected, FastEthernet2/0

61.0.0.0/24 is subnetted, 1 subnets

C　　61.128.1.0 is directly connected, FastEthernet1/0

S*　0.0.0.0/0 [1/0] via 61.128.1.10

例6-72所示为在Server上看到的ping丢包状况，在由Primary切换到Secondary的过程中，出现了20多个丢包。注意实际掉包数量和切换时间，与用户使用的虚拟机或者硬件设备的性能有关。

例6-72 查看Server测试丢包状况

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!...................

*Mar 1 01:16:10.363:%OSPF-5-ADJCHG: Process 1, Nbr 61.128.1.1 on FastEthernet2/0 from FULL to DOWN, Neighbor Down: Dead timer expired.....!!!!!!!!!

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

注意：Redundancy VPN技术支持抢占。当然前提是HSRP配置了“preempt”抢战特性。Primary重启完毕后（如果寄存器值为0x2142，就需要使用“copy startup-config running-config”，并且“no shutdown”以太网接口），就能够自动抢占HSRP的活动路由器，并且也会再次成为IPSec VPN的活动网关。

6.6 高可用性站点到站点IPSec VPN最佳方案

6.6.1 高可用性站点到站点IPSec VPN 最佳方案

本章前面已经介绍了链路备份的高可用性VPN解决方案。之所以介绍这种解决方案，是因为大家有必要对其进行了解，但是并不推荐大家在工程中使用这种解决方案。原因是这个解决方案切换速度较慢，而且在基础理论和路由选择这两个方面，理解起来都比较复杂，所以不太推荐读者在纯Cisco设备的情况下，使用这种解决方案。

当然如果一方是 Cisco 设备，另一方为第三方设备，那么这种解决方案就是唯一的选择了。在纯Cisco 设备的情况下，推荐大家使用即将介绍的高可用性 IPSec VPN最佳解决方案。

6.6.2 高可用性站点到站点IPSec VPN 最佳方案配置与测试

1．实际接线状况

图6-12 所示为高可用性站点到站点IPSec VPN 最佳方案的实验接线图。本次实验一共需要使用5台路由器，由左至右分别模拟公司分支站点（Branch）、互联网路由器（Internet）、主用网关（Primary）、备用网关（Secondary）和内部服务器（Server）。路由器Branch和Internet使用接口Fa0/0实现对接，路由器Internet和Primary使用接口Fa1/0实现对接，路由器Internet和Secondary使用接口Fa2/0实现对接。路由器Primary、Secondary和Server的Fa3/0接口被桥接到一个相同网络。Branch的环回口（loopback0）模拟分支站点内部网络，Server 的环回口（loopback0）模拟中心站点内部网络。

图6-12 高可用性站点到站点IPSec VPN最佳方案实验实际接线图

2．实验拓扑

图6-13 所示为高可用性站点到站点IPSec VPN 最佳方案实验拓扑。该拓扑的地址规划与图6-9 完全相同，但是相对于链路备份的IPSec VPN，最佳解决方案的最大的特点就是在Branch和Primary/Secondary之间，建立了两条SVTI虚拟隧道。

图6-13 高可用性站点到站点IPSec VPN最佳方案实验拓扑

隧道的任务就是虚拟地连通Branch和Primary/Secondary，就像用两根虚拟的网线一样，把Branch和Primary/Secondary连接在一起。后面的任务完全由路由技术解决，在全网运行动态路由协议 EIGRP，在这里选择 EIGRP 是因为它的切换速度较快。Branch 可以通过动态路由协议 EIGRP，同时从两个隧道口学习到中心 10.1.1.0/24 和2.2.2.0/24的路由，并且还能够实现负载均衡。

很明显两个网关同时转发数据包，肯定比以前介绍的解决方案（同时只有一个网关转发流量）效率更高。并且我们使用动态路由协议技术替代了DPD和RRI技术，如果某条链路或者设备出现了问题，动态路由协议的邻居关系就会丢失，这样Branch就无法从这个网关学习到中心站点的路由，自然也就不会将加密数据包送到这个网关。

很多人可能会问这么实用的技术为什么现在才进行介绍，这是因为 RRI 和 DPD才是正门正派的VPN技术，并且在后面介绍的VPN中还需要使用。双SVTI的最佳解决方案虽然好，但是主要用的是路由技术，并不涉及任何VPN的知识。

3．基本网络配置

本部分的主要任务是配臵基本网络，为后续的配臵与测试搭建网络环境。例6-73、例6-74、例6-75、例6-76和例6-77分别为在Branch、Internet、Primary、Secondary和Server上执行的基本网络配臵。

例6-73 Branch上的基本网络配置

enable

configure terminal

!

hostname Branch

!

interface Loopback0
ip address 1.1.1.1 255.255.255.0

!

interface FastEthernet0/0
ip address 202.100.1.1 255.255.255.0

no shutdown

!

ip route 0.0.0.0 0.0.0.0 202.100.1.10

!

end

例6-74 Internet上的基本网络配置

enable

configure terminal

!

hostname Internet

!

interface FastEthernet0/0
ip address 202.100.1.10 255.255.255.0

no shutdown

!

interface FastEthernet1/0
ip address 61.128.1.10 255.255.255.0

no shutdown

!

interface FastEthernet2/0
ip address 137.78.5.10 255.255.255.0

no shutdown

!

end

例6-75 Primary上的基本网络配置

enable

configure terminal

!

hostname Primary

!

interface FastEthernet1/0
ip address 61.128.1.1 255.255.255.0

no shutdown

!

interface FastEthernet3/0
ip address 10.1.1.10 255.255.255.0

no shutdown

!

ip route 0.0.0.0 0.0.0.0 61.128.1.10

!

end

例6-76 Secondary上的基本网络配置

enable

configure terminal

!

hostname Secondary

!

interface FastEthernet2/0
ip address 137.78.5.1 255.255.255.0

no shutdown

!

interface FastEthernet3/0
ip address 10.1.1.20 255.255.255.0

no shutdown

!

ip route 0.0.0.0 0.0.0.0 137.78.5.10

!

end

例6-77 Server上的基本网络配置

enable

configure terminal

!

hostname Server

!

interface Loopback0
ip address 2.2.2.2 255.255.255.0

!

interface FastEthernet3/0
ip address 10.1.1.1 255.255.255.0

no shutdown

!

end

4．双SVTI配置

高可用性站点到站点 IPSec VPN 最佳方案的最大特点就是 Branch 和Primary/Secondary之间的两条SVTI虚拟隧道接口，它们就像两根网线一样把Branch和Primary/Secondary虚拟连接在一起。例6-78、例6-79和例6-80分别介绍了在Branch、Primary和Secondary上配臵SVTI虚拟隧道接口的方法。

例6-78 Branch上的SVTI 配置

Branch(config)#crypto isakmp policy 10

Branch(config-isakmp)#authentication pre-share

Branch(config)#crypto isakmp key 0 cisco address 61.128.1.1

Branch(config)#crypto isakmp key 0 cisco address 137.78.5.1

Branch(config)#crypto ipsec transform-set cisco esp-des esp-md5-hmac Branch(config)#crypto ipsec profile ipsecprof

Branch(ipsec-profile)#set transform-set cisco

Branch(config)#interface tunnel 0

Branch(config-if)#ip address 172.16.1.1 255.255.255.0

Branch(config-if)#tunnel source 202.100.1.1

Branch(config-if)#tunnel destination 61.128.1.1

Branch(config-if)#tunnel mode ipsec ipv4

Branch(config-if)#tunnel protection ipsec profile ipsecprof Branch(config)#interface tunnel 1

Branch(config-if)#ip address 172.16.2.1 255.255.255.0

Branch(config-if)#tunnel source 202.100.1.1

Branch(config-if)#tunnel destination 137.78.5.1

Branch(config-if)#tunnel mode ipsec ipv4

Branch(config-if)#tunnel protection ipsec profile ipsecprof 例6-79 Primary上的SVTI配置

Primary(config)#crypto isakmp policy 10

Primary(config-isakmp)#authentication pre-share

Primary(config)#crypto isakmp key 0 cisco address 202.100.1.1

Primary(config)#crypto ipsec transform-set cisco esp-des esp-md5-hmac Primary(config)#crypto ipsec profile ipsecprof

Primary(ipsec-profile)#set transform-set cisco

Primary(config)#interface tunnel 0

Primary(config-if)#ip address 172.16.1.2 255.255.255.0

Primary(config-if)#tunnel source 61.128.1.1

Primary(config-if)#tunnel destination 202.100.1.1

Primary(config-if)#tunnel mode ipsec ipv4

Primary(config-if)#tunnel protection ipsec profile ipsecprof 例6-80 Secondary上的SVTI 配置

Secondary(config)#crypto isakmp policy 10

Secondary(config-isakmp)#authentication pre-share

Secondary(config)#crypto isakmp key 0 cisco address 202.100.1.1

Secondary(config)#crypto ipsec transform-set cisco esp-des esp-md5-hmac Secondary(config)#crypto ipsec profile ipsecprof

Secondary(ipsec-profile)#set transform-set cisco

Secondary(config)#interface tunnel 0

Secondary(config-if)#ip address 172.16.2.2 255.255.255.0

Secondary(config-if)#tunnel source 137.78.5.1

Secondary(config-if)#tunnel destination 202.100.1.1

Secondary(config-if)#tunnel mode ipsec ipv4

Secondary(config-if)#tunnel protection ipsec profile ipsecprof 5．配置并查看动态路由协议EIGRP

现在虚拟的网线已经把Branch和Primary/Secondary连接在了一起，接下来的任务就是在分支站点内部网络、虚拟隧道接口和中心站点内部网络，启用动态路由协议EIGRP。例6-81、例6-82、例6-83和例6-84分别在Branch、Primary、Secondary和Server上配臵了动态路由协议EIGRP。

例6-81 Branch上的动态路由协议（EIGRP）配置

Branch(config)#router eigrp 100

Branch(config-router)#no auto-summary

Branch(config-router)#network 1.1.1.0 0.0.0.255

Branch(config-router)#network 172.16.1.0 0.0.0.255

Branch(config-router)#network 172.16.2.0 0.0.0.255

例6-82 Primary上的动态路由协议（EIGRP）配置

Primary(config)#router eigrp 100

Primary(config-router)#no auto-summary

Primary(config-router)#network 172.16.1.0 0.0.0.255

Primary(config-router)#network 10.1.1.0 0.0.0.255

例6-83 Secondary上的动态路由协议（EIGRP）配置

Secondary(config)#router eigrp 100

Secondary(config-router)#no auto-summary

Secondary(config-router)#network 172.16.2.0 0.0.0.255

Secondary(config-router)#network 10.1.1.0 0.0.0.255

例6-84 Server上的动态路由协议（EIGRP）配置

Server(config)#router eigrp 100

Server(config-router)#no auto-summary

Server(config-router)#network 10.1.1.0 0.0.0.255

Server(config-router)#network 2.2.2.0 0.0.0.255

在查看Server的路由表时（见例6-85），可以发现Server同时从Primary和Secondary学到了去往远端通信点1.1.1.0/24的路由，因此通过EIGRP技术能够实现负载均衡。

例6-85 查看Server路由表

Server#show ip route eigrp

1.0.0.0/24 is subnetted, 1 subnets

D　　1.1.1.0 [90/297374976] via 10.1.1.20, 00:01:08, FastEthernet3/0

[90/297374976] via 10.1.1.10, 00:01:08, FastEthernet3/0

<去往远端通信点1.1.1.0/24，实现了Primary/Secondary的负载均衡>

172.16.0.0/24 is subnetted, 2 subnets

D　　172.16.1.0 [90/297246976] via 10.1.1.10, 00:01:08, FastEthernet3/0

D　　172.16.2.0 [90/297246976] via 10.1.1.20, 00:01:08, FastEthernet3/0

在查看 Branch 的路由表时（见例 6-86），可以发现 Branch 同时从 Primary 和Secondary的虚拟隧道口学到了去往远端通信点2.2.2.0/24的路由，因此通过EIGRP技术能够实现负载均衡。

例6-86 查看Branch路由表

Branch#show ip route eigrp

2.0.0.0/24 is subnetted, 1 subnets

D　　2.2.2.0 [90/297374976] via 172.16.2.2, 00:02:28, Tunnel1

[90/297374976] via 172.16.1.2, 00:02:28, Tunnel0

<去往远端通信点2.2.2.0/24，实现了Tunnel0/Tunnel1的负载均衡>

10.0.0.0/24 is subnetted, 1 subnets

D　　10.1.1.0 [90/297246976] via 172.16.2.2, 00:03:13, Tunnel1

[90/297246976] via 172.16.1.2, 00:03:13, Tunnel0

6．测试VPN故障切换

在Branch上使用ping对VPN的故障切换进行测试，如例6-87所示。注意，测试ping包的数量应该尽量设臵得多一些。

例6-87 Branch使用ping测试IPSec VPN

Branch#ping 2.2.2.2 source 1.1.1.1 repeat 100000

Type escape sequence to abort.

Sending 100000, 100-byte ICMP Echos to 2.2.2.2, timeout is 2 seconds: Packet sent with a source address of 1.1.1.1

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

在Internet上关闭Fa1/0接口，如例6-88所示。该接口是去往Primary网关的接口，这将直接造成Branch与Primary之间的虚拟隧道接口失效。

例6-88 在Internet上关闭fastEthernet 1/0

Internet(config)#interface fastEthernet 1/0

Internet(config-if)#shutdown

例6-89所示为在Branch上查看的VPN切换效果。根据输出，我们可以明显地看出一共只出现了 7 个丢包，这还是在默认 EIGRP 配臵的情况下进行的切换。如果对EIGRP 进行优化，把 SVTI接口上EIGRP 的“hello-interval”和“hold-time”调整得更小，那么切换速度就会更快。

本解决方案主要使用动态路由协议来探测隧道状况，在例6-89中很明显能够看到EIGRP邻居down的debug信息。

例6-89 查看Branch上的VPN 切换

Branch#ping 2.2.2.2 source 1.1.1.1 repeat 100000

Type escape sequence to abort.

Sending 100000, 100-byte ICMP Echos to 2.2.2.2, timeout is 2 seconds: Packet sent with a source address of 1.1.1.1

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

!!.......!!!!!

*Mar 1 01:34:52.931:%DUAL-5-NBRCHANGE: IP-EIGRP(0) 100: Neighbor 172.16.1.2 (Tunnel0) is down: holding time expired

<可以很明显的看到，动态路由协议邻居关系断掉，本解决方案中使用动态路由协议来探测隧道状况，实现隧道间的

快速切换>

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

!!!!!!!!.

Success rate is 95 percent (168/176), round-trip min/avg/max = 20/279/684 ms 注意：如果不希望实验负载均衡，也可以适当调整动态路由协议参数，以实现主用和备用的效果。

第7章 动态多点VPN（DMVPN）

7.1 DMVPN介绍

7.1.1 传统IPSec VPN 高可用性问题分析

从本章开始，我们要介绍Cisco 安全领域最重要的三大IPSec VPN技术。这三大VPN分别是DMVPN（将在本章中进行介绍）、GETVPN（将在第8章进行介绍）和EZVPN（将在第9章进行介绍）。

本章要介绍的DMVPN 是一个高扩展性的IPSec VPN 解决方案，所谓高扩展性，是指适合企业级大规模部署的解决方案，例如，适用于一个企业拥有几百个分支机构的网络环境（对于一个大型连锁企业而言，这种规模并不算夸张）。既然DMVPN是一个高扩展性的IPSec VPN，那么传统的IPSec VPN 技术又存在什么高扩展性的问题呢？现在我们就从传统IPSec VPN 的两种连接拓扑谈起，说说它们存在着什么高扩展性的问题。

图 7-1 所示为传统 IPSec VPN 的星形拓扑，该拓扑存在如下问题。

图7-1 传统IPSec VPN星形拓扑

1．中心站点配置量大

在图 7-1 的中心站点，无论是采用经典配置的 IPSec VPN，还是采用 GRE Over IPSec或SVTI，多一个分支站点就要增加一份配置。因此，如果分支站点数量过多，配置就会变成沉重的负担，并且不容易进行管理。

2．分支站点间流量延时较大

通过观察图7-1，读者不难看出这样一个问题：即两个分支站点间不能直接通信，一个分支站点的数据要抵达另外一个分支站点，首先需要加密数据送往中心，数据在中心站点被第一次解密，然后查询路由判断出隧道，紧接着在中心站点被第二次加密，并送往目的站点。目的站点收到数据后，再进行第二次解密。由于数据被两次加解密，因此大大增加了延时时间。

3．分支站点间流量占用中心带宽

在星形拓扑网络环境，分支站点间的所有流量，都需要经过中心站点进行转发。如果分支站点间流量过大，会大大消耗中心站点的带宽。

综上所述，传统IPSec VPN 的星形拓扑解决方案，很明显不是一个高扩展性的设计，不适合在拥有大量分支站点的网络中部署IPSec VPN。

图7-2 传统IPSec VPN网状模型

图7-2 所示为传统IPSec VPN 的网状模型，该网状拓扑存在如下问题。

1．中心与分支站点配置量大

在图7-2 中，无论采用经典配置的IPSec VPN，还是采用GREOver IPSec 或SVTI，多一个分支站点，所有的站点都要多一份配置。因此，如果分支站点数量过大，那么使用网状拓扑的IPSec VPN，配置将是一场噩梦。

2．分支站点需要维护过多IPSec SA

网状拓扑的IPSec VPN，分支站点要和每一个其他站点建立IPSec SA，如果站点过多，每一个分支站点就会维护很多的IPSec SA，一般分支站点都使用低端路由器产品，例如，Cisco 的18 或者28 系列路由器，而维护如此之多的IPSec SA 会让这些设备的内存和CPU不堪重负。

3．每一个分支站点需要固定IP地址

网状拓扑的IPSec VPN，需要在任意两个站点间建立IPSec VPN，所以每一个分支站点都需要有固定的IP地址。而这在工程中显然很难实现，因为大多数分支机构可能都是使用ADSL这种廉价的技术来接入互联网，因此在绝大多数情况下，分支站点的都是动态IP地址。

7.1.2 DMVPN 的优点

由于传统IPSec VPN 星形和网状拓扑存在高扩展性问题，因此Cisco 提出了自己的高扩展性 IPSec VPN 解决方案，这个解决方案就叫做动态多点 VPN（Dynamic Multipoint VPN）。DMVPN 相比于传统的IPSecVPN 技术有如下4 个优点。

简单的星形拓扑配置，提供了虚拟网状连通性。

分支站点支持动态IP 地址。

增加新的分支站点，无需更改中心站点配置。

分支站点间流量，通过动态产生的站点间隧道进行封装。

7.1.3 DMVPN 的4 大组成协议

要了解DMVPN为什么能够提供上述的4大特点，我们首先需要了解组成DMVPN解决方案的4个协议。

1．动态多点GRE（Multipoint GRE，mGRE）协议

我们在第2章学习过GRE技术，当时介绍的是点对点GRE。而mGRE是一种特殊的GRE技术，这种技术与多点帧中继技术非常类似，是一个典型的NBMA网络。从图7-3所示的mGRE拓扑中可以发现，所有站点的mGRE隧道接口都处于同一个网段（172.16.1.0/24）。进入这个mGRE网络的任何一个分支站点不仅仅能够和中心站点进行通信，而且还能够直接和其他分支站点进行通信。这就显示出了DMVPN的第一个优点：虚拟网状连通性。

图7-3 mGRE拓扑

2．下一跳解析协议（Next Hop Resolution Protocol，NHRP）

如果你认为配置了 mGRE隧道，所有站点就能够直接进行通信，那就大错而特错了。

下面我通过两个例子来说明这个问题。第一个例子是以太网，在以太网中，IP地址为逻辑地址，MAC地址才是物理地址。因此如果一台设备只知道对方的逻辑地址，是不能进行通信的。它必须知道对方逻辑地址所对应的物理地址，才能够向网络发送数据包。大名鼎鼎的ARP技术就是负责在以太网内，动态或者手动映射逻辑地址到物理地址。

第二个例子就是和mGRE拓扑非常类似的多点帧中继网络，每一个帧中继接口都有一个逻辑的IP地址，但是要访问对方的逻辑IP必须要知道它所映射的物理地址。在帧中继网络中物理地址就是 DLCI，我们可以通过手动帧中继映射，或者动态反向ARP技术，将IP地址映射到DLCI。

同样，在mGRE网络中，管理员也需要映射逻辑地址到物理地址，mGRE隧道的虚拟地址就是逻辑地址，每一个站点固定配置或者动态获取的公网IP地址，就是物理地址。下一跳解析协议（NHRP）就是为了实现这个映射而设计的，首先每一个分支站点都需要手动映射中心站点的虚拟IP到公网IP，所以中心站点必须拥有固定IP地址。分支站点有了这个手动映射就能够和中心站点取得联系，并且通过NHRP协议，注册这个分支站点的隧道虚拟 IP 到动态获取的公网 IP。一旦注册成功，中心站点就有所有分支站点的NHRP映射。这样中心站点也能够访问所有注册后的分支站点。

因为注册是动态的，所以分支站点支持动态获取地址。当某一分支站点希望访问另外一个分支站点时，它首先会使用NHRP协议向中心站点（NHRP的服务器）询问目的分支站点隧道虚拟IP所对应的公网IP地址；接下来，中心站点就会将NHRP映射发送给发起方；在发起方收到了目的站点的NHRP映射以后，就能够通过mGRE直接发起隧道访问目的站点了。

由于这个流量是两个分支站点间直接发起的，并不占用中心站点资源，因此从这个角度来看，DMVPN技术是高扩展性的技术。

3．动态路由协议

动态路由协议的主要目的是宣告隧道网络和站点身后私有网络，让每一个站点都能学习到其他站点身后网络的路由。

注意，绝大部分动态路由协议都是使用组播来传输路由更新信息的。但mGRE隧道是典型的NBMA网络，这种网络类型不支持直接承载组播信息，因此我们需要配置组播映射，把组播转换成为单播。

因为只有中心站点才拥有固定IP地址，所以默认只能够配置分支站点和中心站点之间的组播映射。由于组播映射的这个特点，所以动态路由协议的邻居关系，只会出现在分支站点和中心站点之间。

mGRE支持的路由协议包括RIP、EIGRP、OSPF、ODR和BGP。

4．IPSec技术

其实DMVPN 也可以理解成为mGRE over IPSec，而IPSec 就是对mGRE 流量进行加密。mGRE只是一种特殊的GRE技术，IP协议号和GRE一样都也为47。所以在DMVPN 中，IPSec VPN 的配置与GRE over IPSec 中IPSec VPN 配置相同。

图7-4 DMVPN数据封装示意图

在图7-4所示的DMVPN数据封装示意图中，可以发现，DMVPN与GRE over IPSec的封装原理完全相同，依然是加密点等于通信点，推荐使用传输模式进行封装。

7.2 经典DMVPN实验

7.2.1 实际接线状况

图7-5所示为经典DMVPN实验的实际接线图。本实验一共需要使用3台路由器，由上至下分别模拟中心站点（ Hub ）、分支站点一（ Spoke1 ）、分支站点二（Spoke2）。路由器Hub、Spoke1和Spoke2的Fa0/0接口被桥接到一起，用于模拟互联网网络。Hub 的环回口（loopback0）模拟中心站点内部网络，Spoke1 的环回口（loopback0）模拟分支站点一内部网络，Spoke2的环回口（loopback0）模拟分支站点二内部网络。

图7-5 经典DMVPN实验实际接线图

7.2.2 实验拓扑

图7-6和图7-7分别为DMVPN的物理拓扑和逻辑拓扑。该实验主要目的是在3个站点间使用DMVPN 技术，建立站点到站点的IPSecVPN。

如图7-6所示，202.100.1.0/24模拟互联网，中心站点IP地址为202.100.1.100，分支站点一IP地址为202.100.1.1，分支站点二为202.100.1.2。192.168.X.0/24分别模拟各站点内部网络。

在图7-7中，172.16.1.0/24为mGRE隧道网络。中心站点mGRE隧道接口地址为172.16.1.100，分支站点一隧道接口地址为 172.16.1.1，分支站点二隧道接口地址为172.16.1.2。

本次实验需要在mGRE隧道网络和各站点内部网络运行动态路由协议EIGRP，并使用DMVPN技术在各站点间动态建立隧道。

图7-6 经典DMVPN实验拓扑（物理）

图7-7 经典DMVPN实验拓扑（逻辑）

7.2.3 基本网络配置

本部分的主要任务是配置基本网络，为后续的配置与测试搭建网络环境。例7-1、例7-2和例7-3分别为在Hub、Spoke1和Spoke2上所执行的基本网络配置。

例7-1 Hub上的基本网络配置

enable

configure terminal

!

hostname Hub

!

interface Loopback0
ip address 192.168.100.1 255.255.255.0

!

interface FastEthernet0/0
ip address 202.100.1.100 255.255.255.0

no shutdown

end

例7-2 Spoke1 上的基本网络配置

enable

configure terminal

!

hostname Spoke1

!

interface Loopback0
ip address 192.168.1.1 255.255.255.0

!

interface FastEthernet0/0
ip address 202.100.1.1 255.255.255.0

no shutdown

end

例7-3 Spoke2 上的基本网络配置

enable

configure terminal

!

hostname Spoke2

!

interface Loopback0
ip address 192.168.2.1 255.255.255.0

!

interface FastEthernet0/0
ip address 202.100.1.2 255.255.255.0

no shutdown

!

end

7.2.4 mGRE 与NHRP 配置

配置DMVPN的第一大步骤就是配置mGRE，但是单纯地配置mGRE没有任何意义，因为没有NHRP的mGRE隧道接口是不能够正常工作的，就像没有配置帧中继映射的多点帧中继网络一样。所以我们需要通过例7-4、例7-5和例7-6分别在Hub、Spoke1和Spoke2上同时配置mGRE和NHRP。

例7-4 Hub上的基本网络配置

-----------------------------mGRE配置-----------------------------------

Hub(config)#interface tunnel 0

Hub(config-if)#ip address 172.16.1.100 255.255.255.0

Hub(config-if)#tunnel mode gre multipoint

<配置隧道模式为多点GRE>

Hub(config-if)#tunnel source fastEthernet 0/0

Hub(config-if)#tunnel key 12345

<配置隧道密钥为12345，用于标识隧道接口>

-----------------------------NHRP配置-----------------------------------

Hub(config-if)#ip nhrp network-id 10

<激活NHRP，所有站点的“network-id”建议相同>

Hub(config-if)#ip nhrp authentication cisco

<可选配置:激活NHRP 认证，认证密码为cisco>

Hub(config-if)#ip nhrp map multicast dynamic

<动态接收NHRP的组播映射>

例7-5 Spoke1 上的基本网络配置

-----------------------------mGRE配置-----------------------------------

Spoke1(config)#interface tunnel 0

Spoke1(config-if)#ip address 172.16.1.1 255.255.255.0

Spoke1(config-if)#tunnel mode gre multipoint

Spoke1(config-if)#tunnel source fastEthernet 0/0

Spoke1(config-if)#tunnel key 12345

-----------------------------NHRP配置-----------------------------------

Spoke1(config-if)#ip nhrp network-id 10

Spoke1(config-if)#ip nhrp authentication cisco

Spoke1(config-if)#ip nhrp map 172.16.1.100 202.100.1.100

<手动NHRP映射，映射中心站点的隧道虚拟IP到中心站点的公网IP。有了这个映射，分支站点才能访问中心站点> Spoke1(config-if)#ip nhrp map multicast 202.100.1.100

<mGRE 是 NBMA 网络，分支站点要和中心站点建立动态路由协议的邻居关系，必须在每一个分支站点，映射组播到中心站点的公网 IP。这样才能够把分支站点的组播送到中心站点。并且可以看到分支站点间没有组播映射，所以分支站点间没有动态路由协议的邻居关系> Spoke1(config-if)#ip nhrp nhs 172.16.1.100

<NHS就是NHRP服务器，这个配置定义了NHRP服务器地址为中心站点的隧道接口虚拟地址172.16.1.100> 例7-6 Spoke2 上的基本网络配置

-----------------------------mGRE配置-----------------------------------

Spoke2(config)#interface tunnel 0

Spoke2(config-if)#ip address 172.16.1.2 255.255.255.0

Spoke2(config-if)#tunnel mode gre multipoint

Spoke2(config-if)#tunnel source fastEthernet 0/0

Spoke2(config-if)#tunnel key 12345

-----------------------------NHRP配置-----------------------------------

Spoke2(config-if)#ip nhrp network-id 10

Spoke2(config-if)#ip nhrp authentication cisco

Spoke2(config-if)#ip nhrp map 172.16.1.100 202.100.1.100

Spoke2(config-if)#ip nhrp map multicast 202.100.1.100

Spoke2(config-if)#ip nhrp nhs 172.16.1.100

7.2.5 测试 NHRP
mGRE和NHRP配置完毕以后，现在开始测试mGRE和NHRP。例7-7所示为在Hub上查询NHRP注册信息，我们可以看到Spoke1和Spoke2的动态注册。

例7-7 Hub的NHRP 注册信息

Hub#show ip nhrp

172.16.1.1/32 via 172.16.1.1, Tunnel0 created 00:26:49, expire 01:33:10

Type: dynamic, Flags: unique registered

<由于注册动态获取的映射信息>

NBMA address: 202.100.1.1

<映射Spoke1的虚拟IP地址172.16.1.1到公网IP地址202.100.1.1> 172.16.1.2/32 via 172.16.1.2, Tunnel0 created 00:04:44, expire 01:55:15

Type: dynamic, Flags: unique registered

NBMA address: 202.100.1.2

<映射Spoke2的虚拟IP地址172.16.1.2到公网IP地址202.100.1.2> 例7-8所示为在Spoke1上查看NHRP映射信息，默认情况下所有的分支站点都手动配置了中心站点的 NHRP 映射，所以在例 7-8 中我们可以看到类型为“static”的NHRP映射。

例7-8 Spoke1 的NHRP映射信息

Spoke1#show ip nhrp

172.16.1.100/32 via 172.16.1.100, Tunnel0 created 00:37:25, never expire Type: static, Flags: used

<静态的NHRP映射>

NBMA address: 202.100.1.100

<映射Hub的虚拟IP地址172.16.1.100到公网IP地址202.100.1.100> 确认了NHRP在中心站点和分支站点已经正常工作以后，在分支站点一（Spoke1）通过Ping测试访问分支站点二（Spoke2），如例7-9所示。这个测试的主要目的是检查NHRP的动态解析功能。

例7-9 在Spoke1上ping测试Spoke2

Spoke1#ping 172.16.1.2

Type escape sequence to abort.

Sending 5, 100-byte ICMP Echos to 172.16.1.2, timeout is 2 seconds: !.!!!

Success rate is 80 percent (4/5), round-trip min/avg/max = 4/68/136 ms 注意：这是一个只有DMVPN才会出现的现象，DMVPN为了实现零丢包特性，在分支站点一（Spoke1）没有获得NHRP动态解析之前，中心站点（Hub）会帮助分支站点一（Spoke1）代为转发几个数据包，也就是说这些数据包是通过中心站点中转后，才抵达目的站点（Spoke2）的，例7-9中第一个“!”代表的就是这个数据包。

当分支站点一（Spoke1）通过NHRP协议获得了动态解析之后，在分支站点一上查询NHRP的动态解析（见例7-10），分支站点一（Spoke1）会直接建立mGRE隧道与分支站点二（Spoke2）进行通信。在图7-6所示的拓扑中，分支站点一要访问分支站点二需要进行一次ARP操作，由于ARP的超时，造成第二个“.”的丢包，后续的三个数据包，是直接在两个分支站点间进行转发的。

例7-10 Spoke1的NHRP映射信息

Spoke1#show ip nhrp

172.16.1.2/32 via 172.16.1.2, Tunnel0 created 00:00:19, expire 01:59:42

Type: dynamic, Flags: router used

<NHRP服务器动态解析Spoke2的虚拟地址到公网地址>

NBMA address: 202.100.1.2

172.16.1.100/32 via 172.16.1.100, Tunnel0 created 00:41:39, never expire Type: static, Flags: used

NBMA address: 202.100.1.100

7.2.6 动态路由协议EIGRP 配置

配置DMVPN的第二大步骤就是配置动态路由协议。在本次实验中使用动态路由协议 EIGRP，在 mGRE 隧道网络与各站点内部网络配置动态路由协议。例 7-11、例7-12 和例 7-13 分别展示了在中心站点（Hub）、分支站点一（Spoke1）和分支站点二（Spoke2）上动态路由协议EIGRP的配置。

例7-11 在Hub上配置动态路由协议EIGRP

Hub(config)#router eigrp 100

Hub(config-router)#no auto-summary

Hub(config-router)#network 172.16.1.0 0.0.0.255

Hub(config-router)#network 192.168.100.0 0.0.0.255

例7-12 在Spoke1上配置动态路由协议EIGRP

Spoke1(config)#router eigrp 100

Spoke1(config-router)#no auto-summary

Spoke1(config-router)#network 172.16.1.0 0.0.0.255

Spoke1(config-router)#network 192.168.1.0 0.0.0.255

例7-13 在Spoke2上配置动态路由协议EIGRP

Spoke2(config)#router eigrp 100

Spoke2(config-router)#no auto-summary

Spoke2(config-router)#network 172.16.1.0 0.0.0.255

Spoke2(config-router)#network 192.168.2.0 0.0.0.255

7.2.7 测试与调整EIGRP

在中心站点Hub上查看EIGRP的邻居关系，如例7-14所示。我们可以发现中心站点（Hub）已经和两个分支站点建立了EIGRP的邻居关系。

例7-14 查看Hub EIGRP邻居关系

Hub#show ip eigrp neighbors

IP-EIGRP neighbors for process 100

在中心站点Hub上查看通过EIGRP学习到的路由，如例7-15所示。可以发现中心站点（Hub）已经学习到了两个分支站点内部网络的路由。

例7-15 查看Hub 通过EIGRP 学习到的路由

Hub#show ip route eigrp

D　192.168.1.0/24 [90/297372416] via 172.16.1.1, 00:03:20, Tunnel0

D　192.168.2.0/24 [90/297372416] via 172.16.1.2, 00:00:54, Tunnel0

在分支站点（Spoke1）上查看EIGRP的邻居关系，如例7-16所示。可以发现分支站点只会和中心站点建立动态路由协议的邻居关系，而分支站点间没有邻居关系。这主要是由NHRP的组播映射决定的，因为只有在中心站点和分支站点间才存在组播映射，分支站点与分支站点间不存在组播映射。

例7-16 查看Spoke1上的EIGRP 邻居关系

Spoke1#show ip eigrp neighbors

IP-EIGRP neighbors for process 100

在分支站点一（Spoke1）上查看通过EIGRP学习到的路由，如例7-17所示。可以发现分支站点只学习到了中心站点内部网络的路由，而没有学习到其他分支站点内部网络的路由，造成这个问题的主要原因是中心站点隧道接口的水平分割特性。

例7-17 查看Spoke1 通过EIGRP 学习到的路由

Spoke1#show ip route eigrp

D　192.168.100.0/24 [90/297372416] via 172.16.1.100, 00:06:22, Tunnel0

为了解决分支站点只能够学习中心站点内部网络路由的问题，在中心站点（Hub）的隧道接口上关闭水平分割特性，如例7-18所示。

例7-18 在中心站点（Hub）的隧道接口关闭水平分割特性

Hub(config)#interface tunnel 0

Hub(config-if)#no ip split-horizon eigrp 100

中心站点（Hub）隧道接口关闭水平分割特性之后，在分支站点一（Spoke1）上查看路由表（见例7-19），可以发现分支站点一（Spoke1）已经通过动态路由协议EIGRP学习到了分支站点二（Spoke2）内部网络（192.168.2.0/24）的路由。但是路由的下一跳却是中心站点（172.16.1.100）。显然，为了实现DMVPN分支站点间直接通信的特性，我们希望在分支站点一（Spoke1）上学习到的 192.168.2.0/24 的路由，下一跳为172.16.1.2（Spoke2隧道接口虚拟IP地址）。

例7-19 在分支站点一（Spoke1）上查看路由表

Spoke1#show ip route eigrp

D　192.168.2.0/24 [90/310172416] via 172.16.1.100, 00:02:51, Tunnel0

D　192.168.100.0/24 [90/297372416] via 172.16.1.100, 00:02:51, Tunnel0

为了优化分支站点学习到的EIGRP路由，在中心站点（Hub）的隧道接口上关闭了EIGRP的“next-hop-self”特性，见例7-20。

例7-20 在中心站点优化路由

Hub(config)#interface tunnel 0

Hub(config-if)#no ip next-hop-self eigrp 100

在中心站点对EIGRP进行了路由优化之后，在分支站点一（Spoke1）上查看通过EIGRP学习到的路由，如例7-21所示。可以发现分支站点一（Spoke1）学习到了分支站点二（Spoke2）内部网络的路由，下一跳为分支站点二（Spoke2）隧道接口的虚拟IP地址（172.16.1.2）。

例7-21 在分支站点一（Spoke1）上查看通过EIGRP学习到的路由

Spoke1#show ip route eigrp

D　192.168.2.0/24 [90/310172416] via 172.16.1.2, 00:00:52, Tunnel0

D　192.168.100.0/24 [90/297372416] via 172.16.1.100, 00:00:58, Tunnel0

7.2.8 配置IPSec VPN

配置DMVPN 的第三大步骤就是配置IPSecVPN。在DMVPN 这个解决方案中， IPSec VPN 的任务只是对mGRE 的流量进行加密。例7-22、例7-23 和例7-24 分别展示了在中心站点（Hub）、分支站点一（Spoke1）和分支站点二（Spoke2）上配置IPSecVPN的过程。

例7-22 Hub上的IPSec VPN 配置

Hub(config)#crypto isakmp policy 10

Hub(config-isakmp)#authentication pre-share

Hub(config)#crypto isakmp key 0 cisco address 0.0.0.0 0.0.0.0

Hub(config)#crypto ipsec transform-set cisco esp-des esp-md5-hmac Hub(cfg-crypto-trans)#mode transport

Hub(config)#crypto ipsec profile dmvpn-profile

Hub(ipsec-profile)#set transform-set cisco

Hub(config)#interface tunnel 0

Hub(config-if)#ip mtu 1400

<调整MTU，防止IPSec分片>

Hub(config-if)#tunnel protection ipsec profile dmvpn-profile 例7-23 Spoke1上的IPSec VPN 配置

Spoke1(config)#crypto isakmp policy 10

Spoke1(config-isakmp)#authentication pre-share

Spoke1(config)#crypto isakmp key 0 cisco address 0.0.0.0 0.0.0.0

<由于分支站点间是直接建立隧道，所以共享秘密的地址应该是八个零>

Spoke1(config)#crypto ipsec transform-set cisco esp-des esp-md5-hmac Spoke1(cfg-crypto-trans)#mode transport Spoke1(config)#cry ipsec profile dmvpn-profile

Spoke1(ipsec-profile)#set transform-set cisco

Spoke1(config)#interface tunnel 0

Spoke1(config-if)#ip mtu 1400

Spoke1(config-if)#tunnel protection ipsec profile dmvpn-profile 例7-24 Spoke2上的IPSec VPN 配置

Spoke2(config)#crypto isakmp policy 10

Spoke2(config-isakmp)#authentication pre-share

Spoke2(config)#crypto isakmp key 0 cisco address 0.0.0.0 0.0.0.0

Spoke2(config)#crypto ipsec transform-set cisco esp-des esp-md5-hmac Spoke2(cfg-crypto-trans)#mode transport

Spoke2(config)#crypto ipsec profile dmvpn-profile

Spoke2(ipsec-profile)#set transform-set cisco

Spoke2(config)#interface tunnel 0

Spoke2(config-if)#ip mtu 1400

Spoke2(config-if)#tunnel protection ipsec profile dmvpn-profile 7.2.9 查看DMVPN状态

现在DMVPN 已经配置完毕，例7-25 所示为在中心站点Hub 上查看IPSec SA 状态。通过输出信息，我们可以看到中心站点与两个分支站点之间的隧道。这个隧道可以理解为永恒的，只要分支站点在线，这个隧道就会建立。

例7-25 在中心站点Hub上查看IPSec SA状态

Hub#show crypto ipsec sa
interface: Tunnel0

Crypto map tag: Tunnel0-head-0, local addr 202.100.1.100
protected vrf: (none)

local ident (addr/mask/prot/port): (202.100.1.100/255.255.255.255/47/0) remote ident (addr/mask/prot/port): (202.100.1.1/255.255.255.255/47/0) <中心站点和分支站点一之间的IPSec SA>
current_peer 202.100.1.1 port 500

PERMIT, flags={origin_is_acl,}

#pkts encaps: 75, #pkts encrypt: 75, #pkts digest: 75

#pkts decaps: 73, #pkts decrypt: 73, #pkts verify: 73

#pkts compressed: 0, #pkts decompressed: 0

#pkts not compressed: 0, #pkts compr. failed: 0

#pkts not decompressed: 0, #pkts decompress failed: 0

#send errors 0, #recv errors 0
local crypto endpt.: 202.100.1.100, remote crypto endpt.: 202.100.1.1
path mtu 1500, ip mtu 1500, ip mtu idb FastEthernet0/0
current outbound spi: 0x2F2FC538(791659832)

inbound esp sas:

spi: 0x1773EA57(393472599)

transform: esp-des esp-md5-hmac ,
in use settings ={Transport, }

conn id: 1, flow_id: SW:1, crypto map: Tunnel0-head-0
sa timing: remaining key lifetime (k/sec): (4487683/3302) IV size: 8 bytes
replay detection support: Y

Status: ACTIVE
inbound ah sas:

inbound pcp sas:

outbound esp sas:

spi: 0x2F2FC538(791659832)

transform: esp-des esp-md5-hmac ,
in use settings ={Transport, }

conn id: 2, flow_id: SW:2, crypto map: Tunnel0-head-0
sa timing: remaining key lifetime (k/sec): (4487682/3302) IV size: 8 bytes
replay detection support: Y

Status: ACTIVE
outbound ah sas:

outbound pcp sas:

protected vrf: (none)

local ident (addr/mask/prot/port): (202.100.1.100/255.255.255.255/47/0) remote ident (addr/mask/prot/port): (202.100.1.2/255.255.255.255/47/0) <中心站点和分支站点二之间的IPSec SA>
current_peer 202.100.1.2 port 500

PERMIT, flags={origin_is_acl,}

#pkts encaps: 45, #pkts encrypt: 45, #pkts digest: 45

#pkts decaps: 47, #pkts decrypt: 47, #pkts verify: 47

#pkts compressed: 0, #pkts decompressed: 0

#pkts not compressed: 0, #pkts compr. failed: 0

#pkts not decompressed: 0, #pkts decompress failed: 0

#send errors 0, #recv errors 0
local crypto endpt.: 202.100.1.100, remote crypto endpt.: 202.100.1.2
path mtu 1500, ip mtu 1500, ip mtu idb FastEthernet0/0
current outbound spi: 0x90A8655(151684693)

inbound esp sas:

spi: 0x3358DF64(861462372)

transform: esp-des esp-md5-hmac ,
in use settings ={Transport, }

conn id: 3, flow_id: SW:3, crypto map: Tunnel0-head-0
sa timing: remaining key lifetime (k/sec): (4394349/3416) IV size: 8 bytes
replay detection support: Y

Status: ACTIVE
inbound ah sas:

inbound pcp sas:

outbound esp sas:

spi: 0x90A8655(151684693)

transform: esp-des esp-md5-hmac ,
in use settings ={Transport, }

conn id: 4, flow_id: SW:4, crypto map: Tunnel0-head-0
sa timing: remaining key lifetime (k/sec): (4394349/3416) IV size: 8 bytes
replay detection support: Y

Status: ACTIVE
outbound ah sas:

outbound pcp sas:

例7-26 所示为在分支站点一（Spoke1）上查看IPSec SA 状态。通过输出信息，我们会发现在正常情况下，分支站点只维护与中心站点间的永恒隧道。

例7-26 查看Spoke1上的IPSec SA状态

Spoke1#show crypto ipsec sa
interface: Tunnel0

Crypto map tag: Tunnel0-head-0, local addr 202.100.1.1
protected vrf: (none)

local ident (addr/mask/prot/port): (202.100.1.1/255.255.255.255/47/0) remote ident (addr/mask/prot/port): (202.100.1.100/255.255.255.255/47/0) <正常情况分支站点只有和中心站点建立的永恒隧道>
current_peer 202.100.1.100 port 500

PERMIT, flags={origin_is_acl,}

#pkts encaps: 130, #pkts encrypt: 130, #pkts digest: 130

#pkts decaps: 133, #pkts decrypt: 133, #pkts verify: 133

#pkts compressed: 0, #pkts decompressed: 0

#pkts not compressed: 0, #pkts compr. failed: 0

#pkts not decompressed: 0, #pkts decompress failed: 0

#send errors 0, #recv errors 0
local crypto endpt.: 202.100.1.1, remote crypto endpt.: 202.100.1.100
path mtu 1500, ip mtu 1500, ip mtu idb FastEthernet0/0
current outbound spi: 0x1773EA57(393472599)

inbound esp sas:

spi: 0x2F2FC538(791659832)

transform: esp-des esp-md5-hmac ,
in use settings ={Transport, }

conn id: 1, flow_id: SW:1, crypto map: Tunnel0-head-0
sa timing: remaining key lifetime (k/sec): (4457524/3036) IV size: 8 bytes
replay detection support: Y

Status: ACTIVE
inbound ah sas:

inbound pcp sas:

outbound esp sas:

spi: 0x1773EA57(393472599)

transform: esp-des esp-md5-hmac ,
in use settings ={Transport, }

conn id: 2, flow_id: SW:2, crypto map: Tunnel0-head-0
sa timing: remaining key lifetime (k/sec): (4457524/3035) IV size: 8 bytes
replay detection support: Y

Status: ACTIVE
outbound ah sas:

outbound pcp sas:

分支站点间的隧道是按需建立的，例 7-27 所示为在分支站点一（Spoke1）使用ping触发分支站点间流量，动态建立分支站点间隧道。

例7-27 分支站点一（Spoke1）使用ping触发分支站点间流量

Spoke1#ping 192.168.2.1 so 192.168.1.1 re 100

Type escape sequence to abort.

Sending 100, 100-byte ICMP Echos to 192.168.2.1, timeout is 2 seconds: Packet sent with a source address of 192.168.1.1

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Success rate is 100 percent (100/100), round-trip min/avg/max = 60/277/728 ms 由于在分支站点一使用 ping 触发了分支站点间的隧道，因此在分支站点一（Spoke1）查看IPSec SA 时（见例7-28），可以发现分支站点一和分支站点二之间按需建立的IPSec SA。

例7-28 在Spoke1上查看IPSec SA状态

Spoke1#show crypto ipsec sa
interface: Tunnel0

Crypto map tag: Tunnel0-head-0, local addr 202.100.1.1
protected vrf: (none)

----------------------------忽略分支站点和中心站点间IPSec SA信息--------------------
local ident (addr/mask/prot/port): (202.100.1.1/255.255.255.255/47/0) remote ident (addr/mask/prot/port): (202.100.1.2/255.255.255.255/47/0) <按需建立的分支站点之间的IPSec SA>
current_peer 202.100.1.2 port 500

PERMIT, flags={origin_is_acl,}

#pkts encaps: 94, #pkts encrypt: 94, #pkts digest: 94

#pkts decaps: 97, #pkts decrypt: 97, #pkts verify: 97

<加解密包的数量不是100个，再次表明DMVPN的零丢包特性，前几个包是由中心代转>

#pkts compressed: 0, #pkts decompressed: 0

#pkts not compressed: 0, #pkts compr. failed: 0

#pkts not decompressed: 0, #pkts decompress failed: 0

#send errors 0, #recv errors 0
local crypto endpt.: 202.100.1.1, remote crypto endpt.: 202.100.1.2
path mtu 1500, ip mtu 1500, ip mtu idb FastEthernet0/0
current outbound spi: 0xBA39297E(3124308350)

inbound esp sas:

spi: 0x89539D91(2303958417)

transform: esp-des esp-md5-hmac ,
in use settings ={Transport, }

conn id: 3, flow_id: SW:3, crypto map: Tunnel0-head-0
sa timing: remaining key lifetime (k/sec): (4377898/3538) IV size: 8 bytes
replay detection support: Y

Status: ACTIVE
inbound ah sas:

inbound pcp sas:

outbound esp sas:

spi: 0xBA39297E(3124308350)

transform: esp-des esp-md5-hmac ,
in use settings ={Transport, }

conn id: 4, flow_id: SW:4, crypto map: Tunnel0-head-0
sa timing: remaining key lifetime (k/sec): (4377899/3538) IV size: 8 bytes
replay detection support: Y

Status: ACTIVE
outbound ah sas:

outbound pcp sas:

7.2.10 MVPN 中“包治百病”的“大招”

在配置DMVPN的过程当中，很可能出现配置完全正确，但是测试结果异常的现象。这个时候就可以使用如下的“大招”来解决问题。请注意，配置DMVPN出现不可预期的问题比较常见，但是一般都能够使用下面的办法来解决，当然前提是配置没有问题。

步骤1：关闭所有站点的隧道接口，如例7-29所示。

例7-29 在所有站点上关闭隧道接口

Hub(config)#interface tunnel 0

Hub(config-if)#shutdown

Spoke1(config)#interface tunnel 0

Spoke1(config-if)#shutdown

Spoke2(config)#interface tunnel 0

Spoke2(config-if)#shutdown

步骤2：从中心站点开始打开各个站点的隧道接口，如例7-30所示。

例7-30 以中心站点到分支站点的顺序逐次打开隧道接口

Hub(config)#interface tunnel 0

Hub(config-if)#no shutdown

Spoke1(config)#interface tunnel 0

Spoke1(config-if)#no shutdown

Spoke2(config)#interface tunnel 0

Spoke2(config-if)#no shutdown

如果确定配置没有问题，那么这个时候DMVPN就应该能够正常工作了。

7.3 DMVPN第三阶段

7.3.1 DMVPN 三个发展阶段介绍

DMVPN是Cisco的私有VPN技术，这项技术随着IOS的发展而发展，分别是阶段一的星形拓扑设计（Hub-to-Spoke Designs），阶段二的虚拟网状拓扑设计（Spoke-to-Spoke Design）和阶段三的层次化（树状）设计（Hierarchical [Tree-Based]Design）。下面我们就对每一个阶段的DMVPN进行介绍。

1．阶段一：星形拓扑设计（Hub-to-Spoke Designs）

DMVPN第一阶段的星形拓扑设计是DMVPN技术的最原始阶段，除了中心站点为mGRE隧道，所有分支站点均为普通的点对点GRE隧道。在图7-8所示的星形拓扑设计中，分支站点间的流量都必须经过中心站点进行转发。第一阶段星形拓扑DMVPN 的优势在于，增加分支站点并不会增加中心站点的配置量，并且分支站点支持动态获取IP地址。优点仅此而已，因此本书中不再详细介绍。

2．阶段2：虚拟网状拓扑设计（Spoke-to-Spoke Design）

在DMVPN第二阶段的虚拟网状拓扑设计中，所有站点都配置mGRE隧道。在图7-9 所示的虚拟网状拓扑设计中，中心站点与分支站点间维护一个永恒隧道，分支站点与分支站点间则按需建立隧道，形成虚拟网状拓扑，真正实现DMVPN的高扩展性。本章7.2节所介绍的正是DMVPN第二阶段。

图7-8 DMVPN阶段一：星形拓扑设计

图7-9 DMVPN阶段二：虚拟网状拓扑设计

3．阶段3：层次化（树状）设计（Hierarchical [Tree-Based]Design）

第三阶段的层次化（树状）设计是DMVPN的最新发展阶段，主用运用于DMVPN的超大范围部署。图7-10中所示的树状DMVPN拓扑结构，能够实现不同区域的分支站点间直接建立隧道。除此特性外，第三阶段还引入了很多其他特性，我们将会在后续部分进行详细介绍。

图7-10 DMVPN阶段三：层次化（树状）设计

如果使用第二阶段DMVPN实现层次化部署，两个不同DMVPN区域的分支站点必须经过本区域的中心站点才能建立连接，具体效果如图7-11所示。

图7-11 DMVPN第二阶段层次化部署

7.3.2 DMVPN 三个发展阶段比较表

表7-1 DMVPN三个阶段比较表

7.3.3 DMVPN 第二阶段与第三阶段分支站点间隧道处理方法比较表

表7-2 DMVPN 第二阶段与第三阶段分支站点间隧道处理方法比较表

7.3.4 DMVPN 第二阶段NHRP 工作流程介绍

从表7-2中可以发现，阶段三支持汇总路由，并且NHRP的处理方法也和阶段二有明显不同。在对阶段三 NHRP 工作流程详细介绍之前。我们先通过图 7-12 所示的NMRP 工作流程示意图来介绍DMVPN2 阶段二 NHRP 工作流程。

步骤1：分支站点一到分支站点二数据通过中心站点代转。

步骤2：分支站点一将NHRP解析请求发送给中心站点，请求解析分支站点二虚拟IP地址所对应的互联网地址。

步骤3：中心站点回送NHRP解析回应给分支站点一。

步骤4：分支站点一获取分支站点二NHRP解析后，直接建立分支站点间的IPSec隧道，后续数据在站点间IPSec隧道内进行转发。

图7-12 DMVPN第二阶段NHRP工作流程示意图

7.3.5 DMVPN 第三阶段NHRP 工作流程介绍

图7-13 所示为DMVPN 阶段三 NHRP 工作流程图，下面对每一个工作步骤进行详细的介绍。

图7-13 DMVPN第三阶段NHRP工作流程示意图

步骤1：阶段三DMVPN支持中心站点向分支站点发送汇总路由，所以分支站点间流量总是会先被发送到中心站点，并由中心站点转发到目的分支站点。

步骤2：中心站点收到分支站点数据后，回送NHRP重定向（redirect）信息，这个重定向信息的主要目的是告诉分支站点一，中心站点不是最优的下一跳（虽然路由学习的下一跳是中心站点），最优的下一跳是分支站点二的虚拟隧道地址。

注意：由于NHRP重定向能够动态优化路由，所以第三阶段的DMVPN支持中心站点的路由汇总。

步骤3：当分支站点一收到NHRP重定向信息，并得知最优的下一跳不是中心站点而是分支站点二，此时分支站点一会马上发送 NHRP 解析请求给NHRP 服务器（中心站点）。在 DMVPN 阶段三，中心站点不会直接回送NHRP解析回应，而是把这个NHRP解析请求直接发给目的分支站点。

步骤4：分支站点二收到分支站点一所发的NHRP解析请求后，站点二会主动和站点一建立IPSec隧道。

步骤5：站点间IPSec隧道建立后，站点二会在隧道内回送NHRP解析回应给站点一。

注意：DMVPN阶段三采取由目的站点触发IPSec，并且在IPSec隧道内回送NHRP回应信息的方式。这样做的好处在于，如果分支站点二处于一个PAT设备内部，使用阶段三的DMVPN就能够由站点二由内向外主动发起了，但是使用传统的阶段二DMVPN技术，则很难穿越PAT设备，直接在两个分支站点间建立隧道。

步骤6：后续站点间流量就会直接在步骤4建立的IPSec隧道内转发。

现在我们已经介绍了DMVPN阶段三的特点与NHRP工作的细节。紧接着在7.3.6节，我们将开始配置阶段三的DMVPN，并且通过测试来了解DMVPN阶段三的工作特性。

7.3.6 第三阶段DMVPN 实验

1．实际接线状况

图7-14所示为阶段三DMVPN实验实际接线图。本次实验一共需要使用3台路由器，由上至下分别模拟中心站点（Hub）、分支站点一（Spoke1）、分支站点二（Spoke2）。路由器Hub、Spoke1和Spoke2的Fa0/0接口被桥接到一起，用于模拟互联网网络。Hub 的环回口（loopback0）模拟中心站点内部网络，Spoke1 的环回口（loopback0）模拟分支站点一内部网络，Spoke2的环回口（loopback0）模拟分支站点二内部网络。

2．实验拓扑

图7-15和图7-16分别为阶段三DMVPN的物理实验拓扑和逻辑实验拓扑。本次实验主要目的是在3个站点间使用阶段三 DMVPN技术，建立站点到站点的IPSecVPN。202.100.1.0/24 模拟互联网，中心站点IP 地址为202.100.1.100，分支站点一IP 地址为202.100.1.1，分支站点二位202.100.1.2。192.168.X.0/24分别模拟各站点内部网络。

图7-14 第三阶段DMVPN实验实际接线图

图7-15 阶段三DMVPN实验拓扑（物理）

在图7-16中，172.16.1.0/24为mGRE隧道网络。中心站点mGRE隧道接口地址为172.16.1.100，分支站点一隧道接口地址为172.16.1.1，分支站点二隧道接口地址为172.16.1.2。

本实验需要在mGRE隧道网络和各站点内部网络，运行动态路由协议EIGRP，为了展示阶段三 DMVPN的特点，中心站点会通过 EIGRP给所有分支站点发送汇总路由。

图7-16 阶段三DMVPN实验拓扑（逻辑）

3．基本网络配置

这里的主要任务是配置基本网络，为后续的配置与测试搭建网络环境。例7-31、例7-32和例7-33分别为在Hub、Spoke1和Spoke2上所执行的基本网络配置。

例7-31 Hub上的基本网络配置

enable

configure terminal

!

hostname Hub

!

interface Loopback0
ip address 192.168.100.1 255.255.255.0

!

interface FastEthernet0/0
ip address 202.100.1.100 255.255.255.0

no shutdown

end

例7-32 Spoke1上的基本网络配置

enable

configure terminal

!

hostname Spoke1

!

interface Loopback0
ip address 192.168.1.1 255.255.255.0

!

interface FastEthernet0/0
ip address 202.100.1.1 255.255.255.0

no shutdown

end

例7-33 Spoke2上的基本网络配置

enable

configure terminal

!

hostname Spoke2

!

interface Loopback0
ip address 192.168.2.1 255.255.255.0

!

interface FastEthernet0/0
ip address 202.100.1.2 255.255.255.0

no shutdown

!

end

4．mGRE与NHRP配置

基本网络配置完毕之后，紧接着的配置任务就是 mGRE 与 NHRP。例 7-34、例7-35和例7-36分别为在Hub、Spoke1和Spoke2上配置mGRE和NHRP。配置时需要注意阶段三 DMVPN 与阶段二 DMVPN 在配置上的区别：阶段三的 DMVPN 在中心站点（Hub）mGRE 隧道接口下需要多配置一句 ip nhrp redirect 命令，在分支站点（Spoke1 和Spoke2）mGRE 隧道接口下需要多配置一句ip nhrp shortcut命令。

例7-34 Hub上的基本网络配置

Hub(config)#interface tunnel 0

Hub(config-if)#ip address 172.16.1.100 255.255.255.0

Hub(config-if)#tunnel mode gre multipoint

Hub(config-if)#tunnel source fastEthernet 0/0

Hub(config-if)#tunnel key 12345

Hub(config-if)#ip nhrp network-id 10

Hub(config-if)#ip nhrp authentication cisco

Hub(config-if)#ip nhrp map multicast dynamic

Hub(config-if)#ip nhrp redirect

<第三阶段的DMVPN需要要在中心站点启用nhrp重定向，这样中心站点才会给分支站点发送NHRP重定向信息来优化下一跳> 例7-35 Spoke1上的基本网络配置

Spoke1(config)#interface tunnel 0

Spoke1(config-if)#ip address 172.16.1.1 255.255.255.0

Spoke1(config-if)#tunnel mode gre multipoint

Spoke1(config-if)#tunnel source fastEthernet 0/0

Spoke1(config-if)#tunnel key 12345

Spoke1(config-if)#ip nhrp network-id 10

Spoke1(config-if)#ip nhrp authentication cisco

Spoke1(config-if)#ip nhrp map 172.16.1.100 202.100.1.100

Spoke1(config-if)#ip nhrp map multicast 202.100.1.100

Spoke1(config-if)#ip nhrp nhs 172.16.1.100

Spoke1(config-if)#ip nhrp shortcut

<第三阶段的DMVPN需要要在所有分支站点启用NHRP短路，这样才能在分支站点间直接建立隧道> 例7-36 Spoke2上的基本网络配置

Spoke2(config)#interface tunnel 0

Spoke2(config-if)#ip address 172.16.1.2 255.255.255.0

Spoke2(config-if)#tunnel mode gre multipoint

Spoke2(config-if)#tunnel source fastEthernet 0/0

Spoke2(config-if)#tunnel key 12345

Spoke2(config-if)#ip nhrp network-id 10

Spoke2(config-if)#ip nhrp authentication cisco

Spoke2(config-if)#ip nhrp map 172.16.1.100 202.100.1.100

Spoke2(config-if)#ip nhrp map multicast 202.100.1.100

Spoke2(config-if)#ip nhrp nhs 172.16.1.100

Spoke2(config-if)#ip nhrp shortcut

5．动态路由协议EIGRP配置
mGRE 与 NHRP 配置完毕后，接下来的任务就是配置动态路由协议。与阶段二DMVPN实验一样，我们依然选择EIGRP这个动态路由协议，由于阶段三DMVPN支持路由汇总，因此在配置时需要在Hub对路由进行汇总，并且把这条汇总路由推送给分支站点。例7-37、例7-38和例7-39分别为在Hub、Spoke1和Spoke2上配置动态路由协议EIGRP的过程。

例7-37 在Hub上配置动态路由协议EIGRP

Hub(config)#router eigrp 100

Hub(config-router)#no auto-summary

Hub(config-router)#network 172.16.1.0 0.0.0.255

Hub(config)#interface tunnel 0

Hub(config-if)# ip summary-address eigrp 100 192.168.0.0 255.255.0.0

<第三阶段的DMVPN不再需要关闭水平分割，也不再需要no掉ip next-hop-self eigrp 100来优化路由，只需要中心给所有的分支发送一条汇总路由> 例7-38 在Spoke1上配置动态路由协议EIGRP

Spoke1(config)#router eigrp 100

Spoke1(config-router)#no auto-summary

Spoke1(config-router)#network 172.16.1.0 0.0.0.255

Spoke1(config-router)#network 192.168.1.0 0.0.0.255

例7-39 在Spoke2上配置动态路由协议EIGRP

Spoke2(config)#router eigrp 100

Spoke2(config-router)#no auto-summary

Spoke2(config-router)#network 172.16.1.0 0.0.0.255

Spoke2(config-router)#network 192.168.2.0 0.0.0.255

6．配置IPSec VPN

配置DMVPN 最后的任务就是配置IPSec VPN 对mGRE 隧道进行加密。阶段三与阶段二 DMVPN 在IPSec VPN 配置部分是完全相同的。例7-40、例7-41 和例7-42 分别为在Hub、Spoke1 和Spoke2 上执行的IPSec VPN配置。

例7-40 Hub上的IPSec VPN 配置

Hub(config)#crypto isakmp policy 10

Hub(config-isakmp)#authentication pre-share

Hub(config)#crypto isakmp key 0 cisco address 0.0.0.0 0.0.0.0

Hub(config)#crypto ipsec transform-set cisco esp-des esp-md5-hmac Hub(cfg-crypto-trans)#mode transport

Hub(config)#crypto ipsec profile dmvpn-profile

Hub(ipsec-profile)#set transform-set cisco

Hub(config)#interface tunnel 0

Hub(config-if)#ip mtu 1400

Hub(config-if)#tunnel protection ipsec profile dmvpn-profile 例7-41 Spoke1上的IPSec VPN 配置

Spoke1(config)#crypto isakmp policy 10

Spoke1(config-isakmp)#authentication pre-share

Spoke1(config)#crypto isakmp key 0 cisco address 0.0.0.0 0.0.0.0

Spoke1(config)#crypto ipsec transform-set cisco esp-des esp-md5-hmac Spoke1(cfg-crypto-trans)#mode transport

Spoke1(config)#cry ipsec profile dmvpn-profile

Spoke1(ipsec-profile)#set transform-set cisco

Spoke1(config)#interface tunnel 0

Spoke1(config-if)#ip mtu 1400

Spoke1(config-if)#tunnel protection ipsec profile dmvpn-profile 例7-42 Spoke2上的IPSec VPN 配置

Spoke2(config)#crypto isakmp policy 10

Spoke2(config-isakmp)#authentication pre-share

Spoke2(config)#crypto isakmp key 0 cisco address 0.0.0.0 0.0.0.0

Spoke2(config)#crypto ipsec transform-set cisco esp-des esp-md5-hmac Spoke2(cfg-crypto-trans)#mode transport

Spoke2(config)#crypto ipsec profile dmvpn-profile

Spoke2(ipsec-profile)#set transform-set cisco

Spoke2(config)#interface tunnel 0

Spoke2(config-if)#ip mtu 1400

Spoke2(config-if)#tunnel protection ipsec profile dmvpn-profile 7．测试阶段三DMVPN

在例7-37中，在Hub上配置动态路由协议EIGRP时，对路由进行了汇总，因此当我们通过例7-43在Spoke1上查看路由表时，会看到通过EIGRP只学习到了一条由Hub发送给分支站点的汇总路由192.168.0.0/16。

例7-43 在Spoke1上查看路由表

Spoke1#show ip route eigrp

D　192.168.0.0/16 [90/310172416] via 172.16.1.100, 00:00:17, Tunnel0

与阶段二的DMVPN相同，正常情况下分支站点Spoke1只拥有中心站点Hub的NHRP静态映射。从例7-44中，我们可以看到中心站点隧道接口地址172.16.1.100/32类型为static的NHRP映射。

例7-44 在Spoke1上查看NHRP 映射

Spoke1#show ip nhrp

172.16.1.100/32 via 172.16.1.100, Tunnel0 created 00:00:36, never expire Type: static, Flags: used

NBMA address: 202.100.1.100

在Spoke1上使用ping触发站点间流量，如例7-45所示。当我们通过例7-46在Spoke1 上查看 NHRP 映射信息时，可以发现其中增加了分支站点二 172.16.1.2/32 与192.168.2.0/24的NHRP动态映射。

例7-45 Spoke1发起分支站点间流量

Spoke1#ping 192.168.2.1 source 192.168.1.1 repeat 100

Type escape sequence to abort.

Sending 100, 100-byte ICMP Echos to 192.168.2.1, timeout is 2 seconds: Packet sent with a source address of 192.168.1.1

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Success rate is 100 percent (100/100), round-trip min/avg/max = 64/174/568 ms 例7-46 在Spoke1上查看NHRP 映射

Spoke1#show ip nhrp

172.16.1.2/32 via 172.16.1.2, Tunnel0 created 00:01:26, expire 01:58:35

Type: dynamic, Flags: router implicit

NBMA address: 202.100.1.2

<中心站点通过NHRP重定向信息让分支站点产生的NHRP映射>

172.16.1.100/32 via 172.16.1.100, Tunnel0 created 00:03:05, never expire Type: static, Flags: used

NBMA address: 202.100.1.100

192.168.1.0/24 via 172.16.1.1, Tunnel0 created 00:01:25, expire 01:58:35

Type: dynamic, Flags: router unique local

NBMA address: 202.100.1.1

(no-socket)

192.168.2.0/24 via 172.16.1.2, Tunnel0 created 00:01:25, expire 01:58:34

Type: dynamic, Flags: router

NBMA address: 202.100.1.2

<优化的NHRP映射，192.168.2.0/24下一条为172.16.1.2>

经过了例7-45的ping测试，在分支站点一Spoke1上就能够查询到站点一与站点二之间直接建立的IPSec安全关联（见例7-47）。

例7-47 在Spoke1上查看IPSec SA

Spoke1#show crypto ipsec sa
interface: Tunnel0

Crypto map tag: Tunnel0-head-0, local addr 202.100.1.1

--------------------------省略Spoke1和Hub之间IPSec SA 相关信息--------------------
protected vrf: (none)

local ident (addr/mask/prot/port): (202.100.1.1/255.255.255.255/47/0) remote ident (addr/mask/prot/port): (202.100.1.2/255.255.255.255/47/0) <分支站点间IPSec 隧道>
current_peer 202.100.1.2 port 500

PERMIT, flags={origin_is_acl,}

#pkts encaps: 93, #pkts encrypt: 93, #pkts digest: 93

#pkts decaps: 93, #pkts decrypt: 93, #pkts verify: 93

#pkts compressed: 0, #pkts decompressed: 0

#pkts not compressed: 0, #pkts compr. failed: 0

#pkts not decompressed: 0, #pkts decompress failed: 0

#send errors 1, #recv errors 0
local crypto endpt.: 202.100.1.1, remote crypto endpt.: 202.100.1.2
path mtu 1500, ip mtu 1500, ip mtu idb FastEthernet0/0
current outbound spi: 0xFDA815DB(4255651291)

inbound esp sas:

spi: 0xDECB38DE(3737860318)

transform: esp-des esp-md5-hmac ,
in use settings ={Transport, }

conn id: 31, flow_id: SW:31, crypto map: Tunnel0-head-0
sa timing: remaining key lifetime (k/sec): (4590501/3491) IV size: 8 bytes
replay detection support: Y

Status: ACTIVE
inbound ah sas:

inbound pcp sas:

outbound esp sas:

spi: 0xFDA815DB(4255651291)

transform: esp-des esp-md5-hmac ,
in use settings ={Transport, }

conn id: 32, flow_id: SW:32, crypto map: Tunnel0-head-0
sa timing: remaining key lifetime (k/sec): (4590501/3490) IV size: 8 bytes
replay detection support: Y

Status: ACTIVE
outbound ah sas:

outbound pcp sas:

7.4 DMVPN两种高可用性解决方案

7.4.1 解决方案1：单云双中心

DMVPN单云表示只有一个隧道网络，在图7-17所示的单云双中心示意图中，隧道网段为 172.16.1.0/24，并且这个隧道网络内有两个中心站点。每一个分支站点同时和两个中心站点建立两个永久的IPSec隧道，也同时和两个中心站点建立动态路由协议的邻居关系。分支站点会从两个中心站点同时学习到中心内部网络（192.168.1.0/24）的路由。当分支站点访问中心内部网络时，可以利用两个中心站点实现负载均衡。此外，当其中一个中心站点出现问题的时候，另外一个站点能够接管所有流量，以此实现DMVPN的高可用性。

图7-17 DMVPN单去双中心

相对于本章最后要介绍的双云双中心的解决方案，更推荐读者在工程中使用单云双中心的解决方案，因为这种设计在路由结构和配置上都比较简单，而且更加高效。

7.4.2 DMVPN 单云双中心配置

本部分重点介绍DMVPN单云双中心配置。例7-48、例7-49、例7-50、例7-51和例 7-52 分别介绍了如何在中心站点一（Hub1）、中心站点二（Hub2）、分支站点一（Spoke1）、分支站点二（Spoke2）和内部服务器上执行基本的网络与DMVPN配置。

例7-48 中心站点一的配置

enable

configure terminal

!

hostname Hub1

!

crypto isakmp policy 10
authentication pre-share
crypto isakmp key cisco address 0.0.0.0 0.0.0.0
crypto isakmp keepalive 10 periodic

!

crypto ipsec transform-set cisco esp-des esp-md5-hmac mode transport

!

crypto ipsec profile dmvpn-profile
set transform-set cisco

!

interface Tunnel0
bandwidth 1000

<推荐优化DMVPN参数>
ip address 172.16.1.100 255.255.255.0

no ip redirects
ip mtu 1400

ip nhrp map multicast dynamic
ip nhrp map 172.16.1.101 202.100.1.101
ip nhrp map multicast 202.100.1.101

<两个中心之间要彼此映射>
ip nhrp network-id 10
ip nhrp holdtime 360

<推荐优化DMVPN参数>
ip tcp adjust-mss 1360

<推荐优化DMVPN参数>

ip ospf network broadcast
ip ospf cost 100
ip ospf priority 2
delay 1000

<推荐优化DMVPN参数>
tunnel source FastEthernet0/0

tunnel mode gre multipoint
tunnel key 12345
tunnel protection ipsec profile dmvpn-profile

!

interface FastEthernet0/0
ip address 202.100.1.100 255.255.255.0

no shutdown

!

interface FastEthernet1/0
ip address 192.168.100.100 255.255.255.0

no shutdown

!

router ospf 1
log-adjacency-changes
network 172.16.1.0 0.0.0.255 area 0
network 192.168.100.0 0.0.0.255 area 0

!

end

例7-49 中心站点二的配置

enable

configure terminal

!

hostname Hub2

!

crypto isakmp policy 10
authentication pre-share
crypto isakmp key cisco address 0.0.0.0 0.0.0.0
crypto isakmp keepalive 10 periodic

!

crypto ipsec transform-set cisco esp-des esp-md5-hmac mode transport

!

crypto ipsec profile dmvpn-profile
set transform-set cisco

!

interface Tunnel0
bandwidth 1000
ip address 172.16.1.101 255.255.255.0

no ip redirects
ip mtu 1400

ip nhrp map multicast dynamic
ip nhrp map 172.16.1.100 202.100.1.100
ip nhrp map multicast 202.100.1.100
ip nhrp network-id 10
ip nhrp holdtime 360
ip tcp adjust-mss 1360

ip ospf network broadcast
ip ospf cost 105
ip ospf priority 2
delay 1000
tunnel source FastEthernet0/0

tunnel mode gre multipoint
tunnel key 12345
tunnel protection ipsec profile dmvpn-profile

!

interface FastEthernet0/0
ip address 202.100.1.101 255.255.255.0

no shutdown

!

interface FastEthernet1/0
ip address 192.168.100.101 255.255.255.0

no shutdown

!

router ospf 1
log-adjacency-changes
network 172.16.1.0 0.0.0.255 area 0
network 192.168.100.0 0.0.0.255 area 0

!

end

例7-50 分支站点一的配置

enable

configure terminal

!

hostname Spoke1

!

crypto isakmp policy 10
authentication pre-share
crypto isakmp key cisco address 0.0.0.0 0.0.0.0
crypto isakmp keepalive 10 periodic

!

crypto ipsec transform-set cisco esp-des esp-md5-hmac mode transport

!

crypto ipsec profile dmvpn-profile
set transform-set cisco

!

interface Loopback0
ip address 192.168.1.1 255.255.255.0

!

interface Tunnel0
bandwidth 1000
ip address 172.16.1.1 255.255.255.0

no ip redirects
ip mtu 1400
ip nhrp map 172.16.1.100 202.100.1.100
ip nhrp map multicast 202.100.1.100
ip nhrp map 172.16.1.101 202.100.1.101
ip nhrp map multicast 202.100.1.101

<每一个分支站点需要静态配置两个中心站点的NHRP映射>
ip nhrp network-id 10
ip nhrp holdtime 360
ip nhrp nhs 172.16.1.100
ip nhrp nhs 172.16.1.101

<配置两个NHRP服务器>
ip tcp adjust-mss 1360

ip ospf network broadcast
ip ospf priority 0
delay 1000
tunnel source FastEthernet0/0

tunnel mode gre multipoint
tunnel key 12345
tunnel protection ipsec profile dmvpn-profile

!

interface FastEthernet0/0
ip address 202.100.1.1 255.255.255.0

no shutdown

!

router ospf 1
log-adjacency-changes
network 172.16.1.0 0.0.0.255 area 0
network 192.168.1.0 0.0.0.255 area 0

!

end

例7-51 分支站点二的配置

enable

configure terminal

!

hostname Spoke2

!

crypto isakmp policy 10
authentication pre-share
crypto isakmp key cisco address 0.0.0.0 0.0.0.0
crypto isakmp keepalive 10 periodic

!

crypto ipsec transform-set cisco esp-des esp-md5-hmac mode transport

!

crypto ipsec profile dmvpn-profile
set transform-set cisco

!

interface Loopback0
ip address 192.168.2.1 255.255.255.0

!

interface Tunnel0
bandwidth 1000
ip address 172.16.1.2 255.255.255.0

no ip redirects
ip mtu 1400
ip nhrp map 172.16.1.100 202.100.1.100
ip nhrp map multicast 202.100.1.100
ip nhrp map 172.16.1.101 202.100.1.101
ip nhrp map multicast 202.100.1.101
ip nhrp network-id 10
ip nhrp holdtime 360
ip nhrp nhs 172.16.1.100
ip nhrp nhs 172.16.1.101
ip tcp adjust-mss 1360

ip ospf network broadcast
ip ospf priority 0
delay 1000
tunnel source FastEthernet0/0

tunnel mode gre multipoint
tunnel key 12345
tunnel protection ipsec profile dmvpn-profile

!

interface FastEthernet0/0
ip address 202.100.1.2 255.255.255.0

no shutdown

!

router ospf 1
log-adjacency-changes
network 172.16.1.0 0.0.0.255 area 0
network 192.168.2.0 0.0.0.255 area 0

!

end

例7-52 内部服务器的配置

enable

configure terminal

!

hostname Center-Inside

!

interface FastEthernet1/0
ip address 192.168.100.1 255.255.255.0

no shutdown

!

router ospf 1
log-adjacency-changes
network 192.168.100.0 0.0.0.255 area 0

!

end

7.4.3 解决方案2：双云双中心

DMVPN双云表示有两个隧道网络，在图7-18所示的双云双中心示意图中，隧道一网段为 172.16.1.0/24，隧道二网段为 172.16.2.0/24。双中心表示每一个隧道有一个中心站点，两个隧道加在一起就有两个中心。

图7-18 DMVPN双云双中心

双云双中心这种DMVPN，每一个分支站点都需要配置两个mGRE隧道接口，每一个隧道接口需要配置一个NHRP服务器。分支站点需要同时和两个隧道口的两个中心站点建立IPSec隧道和路由协议的邻居关系。与单云双中心一样，分支站点能够通过两个中心站点学习到内部网络（192.168.100.0/24）的路由，也同样能够利用两个分支站点实现负载均衡。只要其中任何一个中心站点出现故障，另外一个中心站点就能够接管所有流量。

相对于单云双中心，双云双中心的路由结构和配置都比较复杂，所以并不推荐在工程中部署。

7.4.4 DMVPN 双云双中心配置

本部分重点介绍DMVPN双云双中心配置。例7-53、例7-54、例7-55、例7-56和例 7-57 分别介绍了如何在中心站点一（Hub1）、中心站点二（Hub2）、分支站点一（Spoke1）、分支站点二（Spoke2）和内部服务器上执行基本的网络与DMVPN配置。

例7-53 中心站点一上的配置

enable

configure terminal

!

hostname Hub1

!

crypto isakmp policy 10
authentication pre-share
crypto isakmp key cisco address 0.0.0.0 0.0.0.0
crypto isakmp keepalive 10 periodic

!

crypto ipsec transform-set cisco esp-des esp-md5-hmac mode transport

!

crypto ipsec profile dmvpn-profile
set transform-set cisco

!

interface Tunnel0

<每一个中心只配置一个mGRE隧道>
bandwidth 1000
ip address 172.16.1.100 255.255.255.0

no ip redirects
ip mtu 1400

ip nhrp map multicast dynamic
ip nhrp network-id 10
ip nhrp holdtime 360
ip tcp adjust-mss 1360

ip ospf network broadcast
ip ospf cost 100
ip ospf priority 2
delay 1000
tunnel source FastEthernet0/0

tunnel mode gre multipoint
tunnel key 12345
tunnel protection ipsec profile dmvpn-profile

!

interface FastEthernet0/0
ip address 202.100.1.100 255.255.255.0

no shutdown

!

interface FastEthernet1/0
ip address 192.168.100.100 255.255.255.0

no shutdown

!

router ospf 1
log-adjacency-changes
network 172.16.1.0 0.0.0.255 area 0
network 192.168.100.0 0.0.0.255 area 0

!

end

例7-54 中心站点二上的配置

enable

configure terminal

!

hostname Hub2

!

crypto isakmp policy 10
authentication pre-share
crypto isakmp key cisco address 0.0.0.0 0.0.0.0
crypto isakmp keepalive 10 periodic

!

crypto ipsec transform-set cisco esp-des esp-md5-hmac mode transport

!

crypto ipsec profile dmvpn-profile
set transform-set cisco

!

interface Tunnel1
bandwidth 1000
ip address 172.16.2.100 255.255.255.0

no ip redirects
ip mtu 1400

ip nhrp map multicast dynamic
ip nhrp network-id 10
ip nhrp holdtime 360
ip tcp adjust-mss 1360

ip ospf network broadcast
ip ospf cost 105
ip ospf priority 2
delay 1000
tunnel source FastEthernet0/0

tunnel mode gre multipoint
tunnel key 54321
tunnel protection ipsec profile dmvpn-profile

!

interface FastEthernet0/0
ip address 202.100.1.101 255.255.255.0

no shutdown

!

interface FastEthernet1/0
ip address 192.168.100.101 255.255.255.0

no shutdown

!

router ospf 1
log-adjacency-changes
network 172.16.2.0 0.0.0.255 area 0
network 192.168.100.0 0.0.0.255 area 0

!

end

例7-55 分支站点一上的配置

enable

configure terminal

!

hostname Spoke1

!

crypto isakmp policy 10
authentication pre-share
crypto isakmp key cisco address 0.0.0.0 0.0.0.0
crypto isakmp keepalive 10 periodic

!

crypto ipsec transform-set cisco esp-des esp-md5-hmac mode transport

!

crypto ipsec profile dmvpn-profile
set transform-set cisco

!

interface Loopback0
ip address 192.168.1.1 255.255.255.0

!

interface Tunnel0

<隧道口一，在这个隧道网络中，中心站点一为NHRP服务器>
bandwidth 1000
ip address 172.16.1.1 255.255.255.0

no ip redirects
ip mtu 1400
ip nhrp map 172.16.1.100 202.100.1.100
ip nhrp map multicast 202.100.1.100

<只配置中心站点一的NHRP映射>
ip nhrp network-id 10
ip nhrp holdtime 360
ip nhrp nhs 172.16.1.100

<中心站点一为NHRP服务器>
ip tcp adjust-mss 1360

ip ospf network broadcast
ip ospf priority 0
delay 1000
tunnel source FastEthernet0/0

tunnel mode gre multipoint
tunnel key 12345
tunnel protection ipsec profile dmvpn-profile shared <配置时一定需要注意“Shared”关键字，这样一个Profile就能同时运用到两个不同隧道> !

interface Tunnel1

<隧道口二，在这个隧道网络中，中心站点二为NHRP服务器>
bandwidth 1000
ip address 172.16.2.1 255.255.255.0

no ip redirects
ip mtu 1400
ip nhrp map 172.16.2.100 202.100.1.101
ip nhrp map multicast 202.100.1.101

<只配置中心站点二的NHRP映射>
ip nhrp network-id 10
ip nhrp holdtime 360
ip nhrp nhs 172.16.2.100

<中心站点二为NHRP服务器>
ip tcp adjust-mss 1360

ip ospf network broadcast
ip ospf priority 0
delay 1000
tunnel source FastEthernet0/0

tunnel mode gre multipoint
tunnel key 54321
tunnel protection ipsec profile dmvpn-profile shared !

interface FastEthernet0/0
ip address 202.100.1.1 255.255.255.0

no shutdown

!

router ospf 1
log-adjacency-changes
network 172.16.1.0 0.0.0.255 area 0
network 172.16.2.0 0.0.0.255 area 0
network 192.168.1.0 0.0.0.255 area 0

!

end

例7-56 分支站点二上的配置

enable

configure terminal

!

hostname Spoke2

!

crypto isakmp policy 10
authentication pre-share
crypto isakmp key cisco address 0.0.0.0 0.0.0.0
crypto isakmp keepalive 10 periodic

!

crypto ipsec transform-set cisco esp-des esp-md5-hmac mode transport

!

crypto ipsec profile dmvpn-profile
set transform-set cisco

!

interface Loopback0
ip address 192.168.2.1 255.255.255.0

!

interface Tunnel0
bandwidth 1000
ip address 172.16.1.2 255.255.255.0

no ip redirects
ip mtu 1400
ip nhrp map 172.16.1.100 202.100.1.100
ip nhrp map multicast 202.100.1.100
ip nhrp network-id 10
ip nhrp holdtime 360
ip nhrp nhs 172.16.1.100
ip tcp adjust-mss 1360

ip ospf network broadcast
ip ospf priority 0
delay 1000
tunnel source FastEthernet0/0

tunnel mode gre multipoint
tunnel key 12345
tunnel protection ipsec profile dmvpn-profile shared !

interface Tunnel1
bandwidth 1000
ip address 172.16.2.2 255.255.255.0

no ip redirects
ip mtu 1400
ip nhrp map 172.16.2.100 202.100.1.101
ip nhrp map multicast 202.100.1.101
ip nhrp network-id 10
ip nhrp holdtime 360
ip nhrp nhs 172.16.2.100
ip tcp adjust-mss 1360

ip ospf network broadcast
ip ospf priority 0
delay 1000
tunnel source FastEthernet0/0

tunnel mode gre multipoint
tunnel key 54321
tunnel protection ipsec profile dmvpn-profile shared !

interface FastEthernet0/0
ip address 202.100.1.2 255.255.255.0

no shutdown

!

router ospf 1
log-adjacency-changes
network 172.16.1.0 0.0.0.255 area 0
network 172.16.2.0 0.0.0.255 area 0
network 192.168.2.0 0.0.0.255 area 0

!

end

例7-57 内部服务器上的配置

enable

configure terminal

!

hostname Center-Inside

!

interface FastEthernet1/0
ip address 192.168.100.1 255.255.255.0

no shutdown

!

router ospf 1
log-adjacency-changes
network 192.168.100.0 0.0.0.255 area 0

!

end

第8章 组加密传输VPN（GETVPN）

8.1 GETVPN概述

组加密传输 VPN（Group Encrypted Transport VPN， GETVPN）是 Cisco 在 IOS（12.4T）版本以后提出的一项全新IPSec VPN 技术。这项技术不同于前面所介绍的所有IPSec VPN技术，它主要运用在全局可路由的网络中，也就是一个公司内部网络中或者即将得到大量部署的IPv6网络中。在这样的网络部署传统的IPSec VPN 技术会遇到很多问题，我们会在接下来的内容中对这些问题逐一进行讨论。

8.2 传统IPSec VPN在企业网内部部署时出现的问题

图8-1是一个大型公司的内部网络示意图，这个公司有很多部门，它们之间是使用MPLSVPN 技术进行互联的。MPLSVPN是一项运营商的VPN技术，这项技术能够通过运营商的网络把客户（公司）虚拟地连接在一起，使整个环境就像一个内部网络一样。这项技术的主要问题就是没有实现数据安全。设计GETVPN 的另一个主要目标就是协助 MPLS VPN 实现数据安全。现在我们就开始讨论在这个网络内部部署传统的IPSec VPN技术会遇到哪些问题，而GETVPN又有哪些特性可以用来克服这些问题。

图8-1 大型公司网络示意图

8.2.1 问题1：影响QoS

图8-2 体现了企业网内部部署QoS的一般方法：首先在流量进入网络的路由器上，为不同流量打上DSCP标记；然后在中间承载网络根据DSCP标记运用相应的QoS技术。在图8-2中，我们为FTP数据打上了DSCP=af11的标记，然后在部门二的路由器上根据 DSCP=af11 这个标记配置限速策略（Police）；同时我们还为语音的 RTP 流量打上了 DSCP=ef 的标记，并在部门二的路由器上根据 DSCP=ef 配置了优先队列（Priority）。这样的QoS 在没有IPSecVPN 加密的网络环境部署不会出现任何问题。

图8-2 企业网内部的QoS部署

在图8-3 中，我们使用IPSec VPN 技术加密从部门一到部门三和部门六的流量，由于加密点不等于通信点，因此我们采用了隧道模式进行加密，这种加密方式会把整个原始数据进行加密，并且增加一个全新的IP头部。这种加密后的数据在穿越中间QoS路由器（部门二路由器）时，由于新增加的IP头部内的DSCP值为0，因此QoS路由器无法对加密前的FTP和RTP流量进行QoS处理，进而影响了QoS的正常工作。

图8-3 IPSec VPN对QoS的影响

8.2.2 问题2：点对点IPSec SA 造成的问题

传统的IPSec安全关联有两个明显的特点，一个是点对点，另一个是单向。也就是说如果在部门一路由器和部门三路由器之间建立IPSec VPN，一共会产生两个点对点的安全关联。

如图8-4所示，部门一路由器使用安全关联一加密的数据只能送到部门三路由器才能解密，同理，部门三路由器使用安全关联二加密的数据只能送到部门一路由器才能解密。很明显使用安全关联一加密的数据如果被发送到部门六是肯定无法实现解密的，因为部门六路由器没有安全关联一。也就是说传统的IPSec技术无法实现“任意到任意”的连接，没有办法让一台路由器加密的数据被网络内部的“任何”一台路由器解密。正是由于这个原因，传统的 IPSec VPN 技术才无法对组播进行加密。

此外，传统点对点IPSecVPN 配置复杂，而且不能实现即时连接。所谓的不能实现即时连接，也就是说当一个语音流量抵达路由器，并需要路由器对其进行加密时，路由器并不能立即加密数据，而需要经过传统 IKE 协商，产生 IPSec SA 后才能够加密数据，这会大大增加语音流量的延时。

综上所述，传统的点对点IPSec SA 存在如下4 个方面的问题。

配置复杂。

无法实现“任意到任意”（AnytoAny）通信。

无法加密组播流量。

无法实现即时连接。

图8-4 点对点安全关联造成的问题

8.2.3 问题3：覆盖路由（Overlay routing）问题

本书在前半部分的内容中已经对 SVTI 和 GRE Over IPSec 等隧道技术进行过介绍。根据前面的内容可知，配置隧道并在隧道上运行动态路由协议，确实能够降低配置的复杂度。但如果把这种隧道技术运用在公司内部网络，就出现了覆盖路由问题，进而增加了路由的复杂程度。

现在介绍一下覆盖路由问题，在一个企业网内部，为了能够实现全网可路由，肯定会配置原生路由（Native routing），在图8-5 中，原生路由为OSPF。如果此时，管理员又在内部网络中了采用 IPSec 的隧道技术，并在隧道上运行了动态路由协议EIGRP，那么隧道上的EIGRP就感觉覆盖（overlay）在OSPF之上，进而产生覆盖路由。这样的覆盖路由设计增加了内部网络路由的复杂程度，并且还容易出现路由环路问题。

图8-5 覆盖路由（overlay routing）问题

8.3 GETVPN技术介绍

从图8-6中，我们可以发现GETVPN的三大特点：一是可以实现任意到任意的连接（Any-to-Any Connectivity）；二是扩展性高（Scalable），三是可以实现实时连接（Real Time）。当然这是最基本的三大特点，下面我们就对GET VPN的特点进行一个总结。

图8-6 GETVPN特点示意图

1．基于原生路由架构的透传解决方案。

2．IP Header Preservation 技术，实现原始 IP头部保留。

3．不影响QoS，不增加网络开销和复杂度。

4．基于 Trusted Group Members 的概念，在Group内的Router使用相同的安全策略，比点对点VPN管理更简单。

5．Group 内成员预先协商安全参数（IPSec SA），实现任意到任意（any-to-any）连接。

6．即时连接，减少类似于语音流量的延时。

7．支持对单播和组播的加密。

8．是一个 WAN 解决方案，需要部署在全局可路由的网络环境，不适合在 IPv4的互联网部署。

由于GETVPN拥有这些特点，所以它能够很好地解决传统IPSec技术在企业网内部部署时出现的三大问题，下面我们就来详细介绍一下GETVPN是如何解决这三大问题的。

8.4 GETVPN如何解决传统IPSec VPN所带来的问题

8.4.1 解决问题1：影响QoS

在介绍GETVPN如何解决QoS问题之前，我们需要先介绍一下GETVPN所采用的IP 头部保留（IP Header Preservation）技术，图8-7 所示为这个技术的工作特点。

图8-7 GETVPN IP头部预留技术示意图

如图8-7所示，GETVPN所采用的IP头部预留技术，会将原始IP头部复制到外层头部并且在两个IP头部中间插入ESP头部，同时对内部的原始IP数据包进行安全保护。因此，采用这项技术能够很好地与原有的QoS技术相互融合。

图8-8为IP头部预留技术在企业网内部部署示意图，由于采用了IP头部预留技术的数据包，外层头部是原始IP头部的一个副本，保留了原始IP头部内的DSCP值。这样中间路由器就可以根据这些DSCP标记来执行QoS了。

图8-8 IP头部预留技术解决QoS问题

8.4.2 解决问题2：点对点IPSec SA 问题

GETVPN 中文名为“组加密传输 VPN”。何谓组加密，组加密的关键就在于GETVPN 使用了一个称为“信任组成员”（Trust Group Members）的全新技术架构，即所有参与加密的企业内部路由器都需要预先加入一个GETVPN组，成为这个组的组成员（Group Member），并且每一个组中至少存在一个密钥服务器（Key Server）。它的主要任务是认证组成员，并且接受他们的注册，而且产生和分发安全关联给注册的组成员。

这样所有的组成员一旦注册成功，就会拥有一个相同的安全关联。这个安全关联同时被用于加解密数据。由于所有的加密路由器都拥有相同的安全关联，因此组内任意一台组成员路由器加密的数据包，能够被相同组内的任何其他组成员路由器进行解密。这样就能够实现任意到任意的通信，并且能够加密组播流量。

由于GETVPN的安全关联并不是被感兴趣流触发而协商产生，而是由组成员注册到密钥服务器后由密钥服务器所发放，因此它可以消除协商安全关联所造成的延时，进而实现即时通信，这就是GETVPN 与传统IPSec VPN 的不同之处。

图8-9 GETVPN单一SA示意图

8.4.3 解决问题3：覆盖路由（Overlay routing）问题

从图8-10中可以看出，由于GETVPN使用了IP 头部预留技术，所以GETVPN是一个典型的无隧道（tunneless）类型的 IPSec VPN，只需企业内部的原生路由来转发数据包，因此消除了配置隧道类型IPSecVPN 所造成的覆盖路由问题。

图8-10 GETVPN使用原生路由

8.5 GETVPN与传统IPSec VPN技术的比较

GETVPN与传统IPSec VPN技术的对比如表8-1所示。

表8-1 GETVPN 与传统IPSec VPN技术比较表

8.6 GETVPN三大组成部分

GETVPN 由三大部分组成，分别是密钥服务器（KS）、组成员（GM）、Group Domain of Interpretation 协议，如图8-11 所示。

1．密钥服务器（Group Controller/Key Server）

GCKS 是一个为组维护策略，创建和维护密钥的路由器。当一个组成员（GM）进行注册的时候，密钥服务器（KS）会向这个组成员（GM）发送密钥和策略。密钥服务器（KS）也会在密钥超时前更新密钥。

服务器会发送两种类型的密钥：加密流量的密钥（TEK）和加密密钥的密钥（KEK）。TEK会成为IPSecSA，这个SA 用于相同组内成员之间的通信。TEK是一个本质的组密钥，它会共享给所有的组成员（GM），并且加密组成员（GM）之间的流量。KEK用于加密更新密钥信息（rekey message），每一个组成员（GM）也用它来解密从密钥服务器（KS）发送过来的更新密钥信息（rekey message）。

图8-11 GETVPN三大组成部分

2．组成员（Group Member）

组成员（GM）是一台路由器，它会在密钥服务器（KS）上进行注册，并且从密钥服务器（KS）获取IPSec SA，并使用这个SA 与属于这个组的其他设备通信，组成员（GM）在密钥服务器（KS）上注册并且提供了一个组ID，并从服务器获取用于这个组的安全策略和密钥。

3．Group Domain of Interpretation （GDOI）

GDOI 协议用于在组成员（GM）和密钥服务器（KS）之间建立安全关联，实现安全的Group内通信，GDOI协议使用的端口号为UDP/848。

8.7 GETVPN工作流程图

图8-12为GETVPN的工作流程图，最初组成员（GM）和密钥服务器（KS）之间进行IKE第一阶段的协商。密钥服务器（KS）通过IKE来认证组成员（GM），并且建立IKE安全关联。并且通过IKE安全关联来保护整个GDOI注册过程。注册是一个“拉”策略的过程，一共包含如下4个内容的交换。

图8-12 GETVPN工作流程图

组成员（GM）向密钥服务器（KS）提供组ID（Group-ID）。

密钥服务器（KS）根据组ID 提供安全关联策略。

组成员（GM）对收到的安全关联进行确认。

密钥服务器（KS）向组成员（GM）提供密钥资源（TEK、KEK）。

通过这个过程，组成员（GM）把密钥服务器（KS）上的安全关联策略和密钥“拉”到了本地。组成员（GM）获取了安全关联和密钥之后，就可以使用这些信息在组成员（GM）间加解密数据。

除了安全关联和密钥以外，组成员（GM）还会从密钥服务器（KS）获取密钥更新安全关联（RekeySA），使用这个安全关联的主要目的是，加密密钥服务器（KS）周期性发送给组成员（GM）的密钥更新信息（Rekey message），密钥更新信息是密钥服务器把策略“推”给组成员的一种方式。如果不出现任何问题，所有组成员会周期性地收到源自于密钥服务器的密钥更新信息。如果组成员在密钥超期之前没有收到密钥更新信息，那么当密钥超时以后，组成员会重新向密钥服务器发起一次注册，把策略“拉”过来。

8.8 两种GETVPN的密钥

如图8-13所示，GETVPN一共有如下两种加密密钥。

加密密钥的密钥（KEK）：在密钥服务器和组成员之间，加密密钥更新（Rekey Message）信息的密钥。

加密流量的密钥（TEK）：在组成员之间，加密组成员身后网络之间流量（用户流量）的密钥。

图8-13 GETVPN的密钥

8.9 GETVPN的3种安全关联（SA）

如图8-14所示，GETVPN一共存在如下3种类型的安全关联。

IKE 安全关联（IKE SA）：密钥服务器使用 IKE 认证组成员，并且使用协商的IKESA 加密GDOI的注册信息。

密钥更新安全关联（Rekey SA）：密钥服务器周期性地发送密钥更新信息（Rekey Message），以此来更新组成员即将过期的安全关联和密钥。密钥更新安全关联就是用于加密密钥更新信息。

IPSec 安全关联（IPSec SA）：配置GETVPN 的本质就是用来加密组成员之间的客户流量，由密钥服务器推送给组成员的 IPSec 安全关联正是用于加密组成员间的客户流量。

图8-14 GETVPN的安全关联

8.10 GETVPN的网络流量

通过分析GETVPN3种类型的安全关联，我们了解到在密钥服务器和组成员之间，存在ISAKMP流量（GDOI被IKE第一阶段安全关联保护）和密钥更新的流量。

在前文中，我们曾经介绍过标准的ISAKMP流量是使用UDP/500来进行传输的，但是在GETVPN环境中，ISAKMP流量则会使用UDP/848进行传输，并且密钥更新信息（使用的也是GDOI 协议，被REKEY SA 的策略与KEK的密钥保护）也是使用UDP/848进行传输的。所以在密钥服务器和组成员之间只需要放行UDP/848的GDOI流量。因为注册是由GM主动发起连接，密钥更新是由KS主动发起连接，所以需要双向放行密钥服务器和组成员之间的UDP/848。

在GM与GM之间不存在GDOI和ISAKMP的流量，有的只是IPSec加密后的数据。所以根据采用的封装协议不同，适当放行ESP或AH流量即可。但是需要注意的是，这些流量的源和目的不是GM的地址，而是GM所保护网络之间的ESP或AH流量。

8.11 协作密钥服务器（Cooperative Key Server）

GETVPN可以支持多个密钥服务器，它们会通过Cisco私有的密钥服务器协作协议（KS Cooperative Protocol）选举出一个首要（Primary）密钥服务器和多个次要（Secondary）密钥服务器。下面介绍一下首要密钥服务器和次要密钥服务器分别承担的任务。

1．首要密钥服务器（Primary KS）：

接受组成员的注册；

产生密钥；

分发密钥；

通知次要密钥服务器同步（同步密钥）；

发送密钥更新信息（Rekey message）。

2．次要密钥服务器（Secondary KS）：

接受组成员的注册；

检测首要密钥服务器是否存在；

通知首要密钥服务器新的组成员（同步组成员信息）；

不发送密钥更新信息。

通过上述对首要和次要密钥服务器的介绍，我们可以了解到，在这两种密钥服务器之间密钥（TEK与KEK）和组成员清单是同步的。但是关于IPSec安全关联的内容并不会自动同步，所以我们需要在首要和次要密钥服务器之间手动同步如下内容。

1．IPSec安全关联相关内容：

感兴趣流（Proxy Identity）；

转换集（Transforms）；

生存时间（Lifetimes）。

2．用于对密钥更新信息（Rekey Message）进行签名的RSA 密钥对。

密钥服务器会对发送的密钥更新信息，使用RSA密钥进行签名，确保密钥更新信息源自于受信任的密钥服务器。为了让次要密钥服务器切换成为首要密钥服务器后，发送的密钥更新信息能够被所有组成员接收，需要预先手动同步首要和次要密钥服务器之间的RSA密钥。

8.12 GETVPN密钥更新特点

GETVPN密钥的更新具有如下所述的特点。

1．密钥更新信息总是由首要密钥服务器（Primary KS）发送。

2．密钥更新信息内包含新的IPSec策略，时间同步信息和新的密钥。

3．两种类型的密钥更新信息：

加密密钥的密钥（KEK）密钥更新信息；

加密数据的密钥（TEK）密钥更新信息。

4．两种密钥更新信息传输方式：

组播密钥更新（默认方式）；

单播密钥更新。

5．密钥更新信息可以周期性触发（密钥生存时间超过），也可以条件触发（修改了策略）。

8.13 GETVPN中的防重放攻击技术

GETVPN 是一种特殊的IPSecVPN 类型，与其他的IPSecVPN 一样依然需要防御重放攻击。但是GETVPN 又和其他类型的IPSec VPN 不同，它可以采用两种不同类型的防重放技术。

第一种就是基于计数器的防重放（Counter-Based Anti-Replay）技术，它是传统IPSec VPN 的默认防重放技术，也就是使用序列号来防止重放攻击。

由于传统的IPSec VPN 技术安全关联总是点对点的，发送方每加密一个数据包，就把发送序列号增加1，接收方每收到一个数据包，同样的也把接收序列号增加1，如果收到重复序列号的数据包就认为这是重放攻击，会把这个数据包丢弃。

这种基于计数器的防重放技术，在传统的点对点IPSec VPN 环境是可以正常工作的，但是在GETVPN 这种一对多的IPSec VPN 环境就很难能够防御重放攻击了。假设发送方加密100个数据包，可能其中50个送往了组成员甲，另外50个去往了组成员乙，如果采用传统的基于计数器的防重放模式，发送方序列号增加 100，但是甲和乙两个组成员序列号只增加50。所以在GETVPN这种一对多的IPSec安全关联环境，无法使用传统的计数器模式的防重放技术。

GETVPN的另外一种防重放技术为基于时间的防重放，首先所有组成员通过密钥更新信息从密钥服务器获取伪时间（和真实的时间不同）和防重放窗口。当某组成员加密数据时，在数据包中附上加密时的时间。另外一个组成员收到这个数据包后，就通过图8-15所示的方法，来过程判断是否应该接收此数据包。接收方会从数据包中提取这个数据包的发送时间，如果这个时间落在图8-15中“接收数据包”的时间范围内，该数据包就会被解密。如果在这个时间范围以外，接收这个数据包的组成员就会认为它是重放的数据包，并予以拒绝。

图8-15 基于时间的防重放攻击

8.14 GETVPN感兴趣流访问控制列表配置指南

GETVPN的主要工作环境是一个大企业的内部网络，一般来说企业内部网络地址都是可以汇总的，例如，部门一网络为10.1.1.0/24，部门二为10.1.2.0/24，依此类推。这样我们就可以使用10.0.0.0/8来对整个企业内部网络实现汇总。在这种网络环境配置感兴趣流就比较简单，可以使用如下的访问控制列表来加密整个网络内任意到任意的流量。

access-list101 permitip10.0.0.00.255.255.255 10.0.0.00.255.255.255

如果GETVPN加密的网络不能进行汇总，例如：部门一网络为10.1.1.0/24，部门二的网络为172.16.1.0/24。那么在这种网络状况部署GETVPN，感兴趣流的配置就会变得比较繁琐了，我们需要配置如下的访问控制列表，才能有效的加密部门一和部门二之间的流量。

Access-list101 permit ip10.1.1.00.0.0.255 172.16.1.00.0.0.255

Access-list101 permit ip172.16.1.00.0.0.255 10.1.1.00.0.0.255

很明显，如果不可汇总的网段越多，GETVPN的感兴趣流配置就会变得越复杂。

在网络内部，有些网段之间的流量可能不希望被某组成员加密，这个时候我们可以在特定组成员上配置访问控制列表，来旁路掉某些流量，使其不被加密。这种列表叫做组成员访问控制列表（GMACL），例如：我们可以配置如下GMACL，来旁路源自于10.1.1.0/24到10.1.3.0/24的流量。

Access-list102 deny10.1.1.00.0.0.25510.1.3.0 0.0.0.255

这个列表只需配置 deny条目，它会被运用到从中心获取的 permit 条目前面来旁路特定网络之间的流量。

8.15 GETVPN实验

8.15.1 实际接线状况

图8-16所示为GETVPN实验的实际接线图，本次实验一共需要使用4台路由器，分别为首要密钥服务器（KS1）、次要密钥服务器（KS2）、组成员一（GM1）和组成员二（GM2）。路由器KS1、KS2、GM1和GM2的Fa0/0接口被桥接到一起，用于模拟公司内部核心网络。GM1 的环回口（loopback0）模拟组成员一保护网络，GM2 的环回口（loopback0）模拟组成员二保护网络，KS1的环回口（loopback0）模拟首要密钥服务器身后网络。

图8-16 GETVPN实验实际接线图

8.15.2 实验拓扑

图8-17所示为GETVPN实验的拓扑。本实验的主要目的是模拟在企业网内部部署GETVPN，这个企业由运营商提供的MPLS VPN 网络进行连通，这个MPLS VPN网段为172.16.1.0/24。

图8-17 GETVPN实验拓扑

在这个GETVPN拓扑中，有两个密钥服务器和两个组成员。组成员保护网络分别为 10.1.1.0/24 和 10.1.2.0/24。密钥服务器身后网络为 10.1.101.0/24，设计这个网络的主要目的是向读者阐明：密钥服务器虽然能够给组成员分发策略和密钥，但是它本生是不能加密数据的。在后续实验中，我们会通过GMACL技术来旁路去往首要密钥服务器身后的流量。

GETVPN需要一个全局可路由的网络环境，在这个网络拓扑中，我们选择OSPF为原生路由（Native Routing），整个拓扑都包括在 OSPF 区域 0 内。全局可路由是GETVPN 相比于其他 VPN 的最大特点，也决定了这个技术只能部署在企业内部，或者即将在全球进行部署的IPv6网络中。

本次实验的感兴趣流为两个组成员内部网络之间的流量，我们会使用由密钥服务器产生，并且通过GDOI 协议分发给组成员的IPSecSA，来加解密感兴趣流。本次实验中的次要密钥服务器主要是为了演示GETVPN的高可用性技术，即当主用密钥服务器出现问题后，次要密钥服务器能够接管所有功能。

8.15.3 基本网络与OSPF 配置

本部分的主要任务是配置基本网络与动态路由协议 OSPF，为后续的配置与测试搭建网络环境。例8-1、例8-2、例8-3和例8-4分别为在KS1、KS2、GM1和GM2上所执行的基本网络与OSPF的配置。

例8-1 KS1上的基本网络与OSPF 配置
enable
configure terminal

!

hostname KS1

!

interface Loopback0
ip address 10.1.101.1 255.255.255.0

!

interface FastEthernet0/0
ip address 172.16.1.101 255.255.255.0
no shutdown

!

router ospf 1
network 10.1.101.0 0.0.0.255 area 0
network 172.16.1.0 0.0.0.255 area 0

!

end

例8-2 KS2上的基本网络与OSPF 配置
enable
configure terminal

!

hostname KS2

!

interface FastEthernet0/0
ip address 172.16.1.102 255.255.255.0
no shutdown

!

router ospf 1
network 172.16.1.0 0.0.0.255 area 0

!

end

例8-3 GM1 上的基本网络与OSPF 配置
enable
configure terminal

!

hostname GM1

!

interface Loopback0
ip address 10.1.1.1 255.255.255.0

!

interface FastEthernet0/0
ip address 172.16.1.1 255.255.255.0
no shutdown

!

router ospf 1
network 10.1.1.0 0.0.0.255 area 0
network 172.16.1.0 0.0.0.255 area 0

!

end

例8-4 GM2 上的基本网络与OSPF 配置
enable
configure terminal

!

hostname GM2

!

interface Loopback0
ip address 10.1.2.1 255.255.255.0

!

interface FastEthernet0/0
ip address 172.16.1.2 255.255.255.0
no shutdown

!

router ospf 1
network 10.1.2.0 0.0.0.255 area 0
network 172.16.1.0 0.0.0.255 area 0

!

end

8.15.4 首要和次要密钥服务器同步RSA 密钥

GETVPN 首要密钥服务器的重要任务就是发送密钥更新信息（Rekey Message），并且首要密钥服务器会使用它的RSA私钥，对密钥更新信息进行签名。当首要密钥服务器出现故障时，次要密钥服务器会晋升为首要密钥服务器，并且继续负责为所有的组成员发送密钥更新信息。为了让新晋升的首要密钥服务器签名的密钥更新信息能够被所有组成员验证，所有的密钥服务器都要预先同步RSA密钥。

例8-5所示为如何在首要密钥服务器上产生和导出密钥，而例8-6则展示了如何将从首要密钥服务器中导出的密钥，导入到次要密钥服务器中。

例8-5 首要密钥服务器产生RSA 密钥

KS1(config)#ip domain name yeslab.net

<为了产生密钥，配置域名>

!

KS1(config)#crypto key generate rsa modulus 1024 label getvpnkey exportable <产生一个名字为getvpnkey，长度为1024位，可导出的RSA密钥对>

!

KS1(config)#crypto key export rsa getvpnkey pem terminal 3des yeslabccies <导出名字为getvpnkey的RSA密钥对，使用3DES加密算法来加密导出后的私钥，加密的密码为yeslabccies> % Key name: getvpnkey

Usage: General Purpose Key

Key data:

-----BEGIN PUBLIC KEY-----

MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCyIeltVTKA9t1aCLwRnD0M3Wko 4ZEJNsRRqZ/42m50OLafgZJX/bdJhsTXScc/YTmJcKi7ZjWurILaEg4UKbBUPYz/

7svVSQ/TUV4DNFk4M8ScWsqa8N8nhNc9Q4BfJCctCf4HY4s12HD/R8JxsiO4SzPQ

YvjNIRJVT9GH9UKy1QIDAQAB

-----END PUBLIC KEY-----

<上面是明文的公钥>

-----BEGIN RSA PRIVATE KEY-----

Proc-Type: 4,ENCRYPTED

DEK-Info: DES-EDE3-CBC,CD0C48C098608AC0

TD5Eu0LSixQzf4GlZTVyOQSkrkr+qVmh8hoNmbu8UZTAHtUzDe0LQuQm9cKe3Gvc 4orXLdhcL1QrlUo4WhvIZ/t+bew5XKpuwyI4d/3wdQYGNY8zlHuXpOkeGTHn5w/f 0RyqY1sDY6xQEvobowc8Aztm28/a/62JbWTdtQXqnbOsuVEQ/97yRm1bZ446aRBC
lDi9aoHuVzYsPNs4WlVVZSMudx7K3lfS2UYgOoLRgQpTq7SbAU/F09zpnJotIxyn izOpUkcJCcUA8tAiLuPVzxnEJf2akfu9ktx+aIqX8K1gUCXDBbjBiChXdpT2vZlJ

ANTRzCtkHmjAHZfUrJ+KNqYQ8j54zD1ADuuKV9DN6ZL75LsHUy5dB6Ef5xg9Bw2M

RnfBiBDERvKwEw+tAfD8u6mGMnyxrWziSCvIFgD5qP1L+dr20wKi+DQufMbMXcYF

0l3mlkkIWzf9RfyrVgGlEcbjIyGGAvMy47EUcLdPZ8rk9p0pwUeKeQQIUOM1r3vN
lARBQicfEhCteZ3q6wq9XJkUfHUPi+fvY0Zdlp/HcEXuMncaBC22r6i1RdSQ9z4q zEtJ526AukU6nf4HrASkldvpxMlrZWgTBwfYBSDCJ5RBcvKwwCIQqzgiK6fyI0VN
x0cL/PHA0n2FTmYtclbMUaVTgeuG5Vny8dXIGZXJ0tkc4omavCFho5bOrZprJuU9

KPotVfWj175e4Tjh37fnT3Y70kLhtrNFUJ808YD//g1k7+tZt/nsg4ZXlSv4uAhg W7gWAR9AlGU1khF9yxUWFUmdRoP3OawMXAdmULBazEFz480ScC8zcA==

-----END RSA PRIVATE KEY-----

<上面为使用3DES加密后的私钥>

例8-6 次要密钥服务器导入RSA 密钥

KS2(config)#crypto key import rsa getvpnkey terminal yeslabccies <导入名字为“getvpnkey”的RSA密钥对，解密密码为“yeslabccies”>

% Enter PEM-formatted public General Purpose key or certificate.

% End with a blank line or "quit" on a line by itself.

<下面是KS1导出公钥的拷贝>

-----BEGIN PUBLIC KEY-----

MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCyIeltVTKA9t1aCLwRnD0M3Wko 4ZEJNsRRqZ/42m50OLafgZJX/bdJhsTXScc/YTmJcKi7ZjWurILaEg4UKbBUPYz/

7svVSQ/TUV4DNFk4M8ScWsqa8N8nhNc9Q4BfJCctCf4HY4s12HD/R8JxsiO4SzPQ

YvjNIRJVT9GH9UKy1QIDAQAB

-----END PUBLIC KEY-----<一次回车>

<两次回车>

% Enter PEM-formatted encrypted private General Purpose key.

% End with "quit" on a line by itself.

<下面是KS1导出私钥的拷贝>

-----BEGIN RSA PRIVATE KEY-----

Proc-Type: 4,ENCRYPTED

DEK-Info: DES-EDE3-CBC,CD0C48C098608AC0

TD5Eu0LSixQzf4GlZTVyOQSkrkr+qVmh8hoNmbu8UZTAHtUzDe0LQuQm9cKe3Gvc 4orXLdhcL1QrlUo4WhvIZ/t+bew5XKpuwyI4d/3wdQYGNY8zlHuXpOkeGTHn5w/f 0RyqY1sDY6xQEvobowc8Aztm28/a/62JbWTdtQXqnbOsuVEQ/97yRm1bZ446aRBC
lDi9aoHuVzYsPNs4WlVVZSMudx7K3lfS2UYgOoLRgQpTq7SbAU/F09zpnJotIxyn izOpUkcJCcUA8tAiLuPVzxnEJf2akfu9ktx+aIqX8K1gUCXDBbjBiChXdpT2vZlJ

ANTRzCtkHmjAHZfUrJ+KNqYQ8j54zD1ADuuKV9DN6ZL75LsHUy5dB6Ef5xg9Bw2M

RnfBiBDERvKwEw+tAfD8u6mGMnyxrWziSCvIFgD5qP1L+dr20wKi+DQufMbMXcYF

0l3mlkkIWzf9RfyrVgGlEcbjIyGGAvMy47EUcLdPZ8rk9p0pwUeKeQQIUOM1r3vN
lARBQicfEhCteZ3q6wq9XJkUfHUPi+fvY0Zdlp/HcEXuMncaBC22r6i1RdSQ9z4q zEtJ526AukU6nf4HrASkldvpxMlrZWgTBwfYBSDCJ5RBcvKwwCIQqzgiK6fyI0VN
x0cL/PHA0n2FTmYtclbMUaVTgeuG5Vny8dXIGZXJ0tkc4omavCFho5bOrZprJuU9

KPotVfWj175e4Tjh37fnT3Y70kLhtrNFUJ808YD//g1k7+tZt/nsg4ZXlSv4uAhg W7gWAR9AlGU1khF9yxUWFUmdRoP3OawMXAdmULBazEFz480ScC8zcA==

-----END RSA PRIVATE KEY-----
quit

% Key pair import succeeded.

8.15.5 首要密钥服务器上的GETVPN 配置

产生RSA密钥并且在密钥服务器间同步之后，我们需要在首要密钥服务器上配置GETVPN。

由于GETVPN的配置步骤过多，为了便于记忆，读者可以使用作者整理的“外三内三”的记忆口诀。所谓“外”就是在进入crypto gdoi group 配置模式之前需要准备的内容，“内”就是进入crypto gdoi group 配置模式之后需要配置的内容。

例8-7所示为“外一”配置ISAKMP第一阶段策略，例8-8所示为“外二”配置感兴趣流，例8-9 所示为“外三”配置IPSec Profile，例8-10 所示为“内一”配置KS1为密钥服务器。

在“内二”配置密钥更新时需要注意，由于同时只能采用一种密钥更新传输方式，因此“内二”部分有两种不同的配置选择，例8-11所示为“内二A”配置单播密钥更新，例8-12所示为“内二B”配置组播密钥更新。例8-13所示为“内三”配置IPSec安全关联。

例8-7 “外一”配置ISAKMP 第一阶段策略

KS1(config)#crypto isakmp policy 10

KS1(config-isakmp)#authentication pre-share

!

KS1(config)#crypto isakmp key 0 cisco address 172.16.1.1

KS1(config)#crypto isakmp key 0 cisco address 172.16.1.2

KS1(config)#crypto isakmp key 0 cisco address 172.16.1.102

<注意:密钥服务器间也使用ISAKMP第一阶段进行认证>

例8-8 “外二”配置感兴趣流

KS1(config)#ip access-list extended getvpntraffic

KS1(config-ext-nacl)#permit ip 10.0.0.0 0.255.255.255 10.0.0.0 0.255.255.255

<本实验企业网内部需要被保护的网络可以被汇总为10.0.0.0/8>

例8-9 “外三”配置IPSec Profile

KS1(config)#crypto ipsec transform-set getvpn-set esp-des esp-md5-hmac <使用此转换集来加密感兴趣流>

KS1(config)#crypto ipsec profile getvpn-profile

KS1(ipsec-profile)#set transform-set getvpn-set

例8-10 “内一”配置KS1为密钥服务器

KS1(config)#crypto gdoi group mygroup

<配置GETVPN组的组名为“mygroup”>

KS1(config-gdoi-group)#identity number 88888

<配置GETVPN组ID为“88888”,所有成员都需要使用相同的ID>

KS1(config-gdoi-group)#server local

<配置本地路由器KS1为密钥服务器>

KS1(gdoi-local-server)#address ipv4 172.16.1.101

<配置服务器地址>

注意：GETVPN同时只能采用一种密钥更新传输方式，因实际配置时需要选择“内二A”或“内二B”两种配置方式中的种。

例8-11 “内二A”配置密钥更新（单播）

KS1(gdoi-local-server)#rekey transport unicast

<配置GETVPN使用单播传输密钥更新信息，注意默认为组播>

KS1(gdoi-local-server)#rekey authentication mypubkey rsa getvpnkey <配置对密钥更新信息作签名的RSA密钥对为“getvpnkey”>

KS1(gdoi-local-server)#rekey algorithm aes 256

<此配置为选项，配置密钥更新信息的加密算法>

例8-12 “内二B”配置密钥更新（组播）

KS1(gdoi-local-server)#rekey authentication mypubkey rsa getvpnkey <配置对密钥更新信息作签名的RSA密钥对为“getvpnkey”>

KS1(gdoi-local-server)#rekey algorithm aes 256

<此配置为选项，配置密钥更新信息的加密算法>

KS1(gdoi-local-server)#rekey address ipv4 106

<定义组播密钥更新流量>

注意：需要提前在全局配置模式配置访问控制列表106

KS1(config)#access-list 106 permit udp host 172.16.1.101 eq 848 host 239.0.1.2 eq 848

<密钥更新信息的组播地址为239.0.1.2，这个地址可以按需配置>

例8-13 “内三”配置IPSec 安全关联

KS1(gdoi-local-server)#sa ipsec 1

<配置第一个IPSec安全关联>

KS1(gdoi-sa-ipsec)#match address ipv4 getvpntraffic

<匹配上感兴趣流>

KS1(gdoi-sa-ipsec)#profile getvpn-profile

<对感兴趣流使用此Profile进行保护>

KS1(gdoi-sa-ipsec)#replay time window-size 2

<此配置为选项，启用基于时间的防重放，窗口大小为2秒>

8.15.6 组成员一GETVPN 配置

配置GETVPN的组成员主要分为三个步骤，分别是例8-14所示的第一步，即配置ISAKMP第一阶段策略；例8-15所示的第二步，即配置GETVPN组；例8-16所示的第三步，即配置Crypto map。

例8-14 配置ISAKMP 第一阶段策略

GM1(config)#crypto isakmp policy 10

GM1(config-isakmp)#authentication pre-share

!

GM1(config)#crypto isakmp key 0 cisco address 172.16.1.101

GM1(config)#crypto isakmp key 0 cisco address 172.16.1.102

<需要配置与首要和次要密钥服务器进行认证的预共享秘密>

例8-15 配置GETVPN 组

GM1(config)#crypto gdoi group mygroup

GM1(config-gdoi-group)#identity number 88888

<需要和密钥服务器配置相同的组ID>

GM1(config-gdoi-group)#server address ipv4 172.16.1.101

<GM1首先向172.16.1.101密钥服务器发起注册>

GM1(config-gdoi-group)#server address ipv4 172.16.1.102

<GM1如果注册172.16.1.101失败，再向172.16.1.102这个密钥服务器发起注册> 例8-16 配置Crypto map

GM1(config)#crypto map cisco 10 gdoi

<使用GDOI 协议为crypto map 提供密钥资源（TEK）>

GM1(config-crypto-map)#set group mygroup

!

GM1(config)#interface fa0/0

GM1(config-if)#crypto map cisco

8.15.7 GETVPN crypto map 调用位置分析

GETVPN 最重要的任务是加密组成员身后网络之间的流量，因此 GETVPN 的感兴趣流显然是组成员之间的流量。我们应该把crypto map 调用在感兴趣流进出的接口。

在图8-18 中，组成员一应该把crypto map 调用在“S0/0”这个接口，相反地，如果把crypto map 调用在面向密钥服务器的接口“Fa0/0”就没有任何意义，因为感兴趣流（组成员身后网络之间的流量）不可能出现在这个接口上。

图8-18 GETVPN crypto map调用位置分析

8.15.8 组成员二GETVPN 配置

组成员二的配置与在8.15.6节中组成员一的配置完全相同，例8-17、例8-18和例8-19分别所示为在组成员二上配置GETVPN的方法。

例8-17 配置ISAKMP 第一阶段策略

GM2(config)#crypto isakmp policy 10

GM2(config-isakmp)#authentication pre-share

!

GM2(config)#crypto isakmp key 0 cisco address 172.16.1.101

GM2(config)#crypto isakmp key 0 cisco address 172.16.1.102

例8-18 配置GETVPN 组

GM2(config)#crypto gdoi group mygroup

GM2(config-gdoi-group)#identity number 88888

GM2(config-gdoi-group)#server address ipv4 172.16.1.101

GM2(config-gdoi-group)#server address ipv4 172.16.1.102

例8-19 配置Crypto map

GM2(config)#crypto map cisco 10 gdoi

GM2(config-crypto-map)#set group mygroup

!

GM2(config)#interface fa0/0

GM2(config-if)#crypto map cisco

8.15.9 查看首要服务器GETVPN 状态

现在KS1、GM1和GM2上的GETVPN都已经配置完毕了，下面需要在首要密钥服务器KS1上查看GETVPN的状态。例8-20所示为GDOI组状态，例8-21所示为在密钥服务器上注册的组成员。

例8-20 首要密钥服务器KS1上查看GDOI组状态

KS1#show crypto gdoi group mygroup

Group Name　　　: mygroup (Unicast)

<GDOI的组名为“mygroup”，密钥更新方式为单播>

Group Identity　　: 88888

Group Members　　　: 2

<已经注册的组成员有2个>

IPSec SA Direction　　: Both

Active Group Server　: Local

Group Rekey Lifetime　: 86400 secs

Rekey Retransmit Period　: 10 secs

Rekey Retransmit Attempts: 2

IPSec SA Number　　: 1

IPSec SA Rekey Lifetime: 3600 secs

Profile Name　　: getvpn-profile

<加密用的IPSec Profile为“getvpn-profile”>

Replay method　　: Time Based

<启用了基于时间的防重放，防重放的时间窗口为2秒>

Replay Window Size　: 2

SA Rekey

Remaining Lifetime　: 2974 secs

ACL Configured　　: access-list getvpntraffic

<感兴趣流为访问控制列表“getvpntraffic”所定义的流量>

Group Server list　　: Local

例8-21 首要密钥服务器KS1上查看注册的组成员

KS1#show crypto gdoi ks members

Group Member Information:

Number of rekeys sent for group mygroup : 0

Group Member ID　: 172.16.1.1

Group ID　　: 88888

Group Name　　: mygroup

Key Server ID　: 172.16.1.101

Rekeys sent　　: 0

Rekeys retries　: 0

Rekey Acks Rcvd　: 0

Rekey Acks missed : 0

Sent seq num :　0　0　0　0

Rcvd seq num :　0　0　0　0

Group Member ID　: 172.16.1.2

Group ID　　: 88888

Group Name　　: mygroup

Key Server ID　: 172.16.1.101

Rekeys sent　　: 0

Rekeys retries　: 0

Rekey Acks Rcvd　: 0

Rekey Acks missed : 0

Sent seq num :　0　0　0　0

Rcvd seq num :　0　0　0　0

8.15.10 查看组成员GETVPN 状态

例8-22 所示为在组成员GM1 上使用show crypto gdoi group mygroup 命令，以查看GDOI组的状态。

例8-22 组成员GM1 上查看GDOI 组状态

GM1#show crypto gdoi group mygroup

Group Name　　　: mygroup

Group Identity　　: 88888

Rekeys received　　: 0

IPSec SA Direction　　: Both

Active Group Server　: 172.16.1.101

Group Server list　　: 172.16.1.101

GM Reregisters in　　: 2439 secs

Rekey Received　　: never

Rekeys received

Cumulative　　: 0

After registration　: 0

ACL Downloaded From KS 172.16.1.101:

access-list permit ip 10.0.0.0 0.255.255.255 10.0.0.0 0.255.255.255

<从KS1获取的感兴趣流>

TEK POLICY:

FastEthernet0/0:

IPsec SA:

sa direction:inbound
spi: 0xF8CE9C11(4174289937)

transform: esp-des esp-md5-hmac
sa timing:remaining key lifetime (sec): (2498)

Anti-Replay : Disabled

IPsec SA:

sa direction:outbound
spi: 0xF8CE9C11(4174289937)

<注意:inbound和outbound两个方向IPSec SA的SPI 相同，表示是一个安全关联> transform: esp-des esp-md5-hmac
sa timing:remaining key lifetime (sec): (2498)

Anti-Replay : Disabled

8.15.11 组成员上测试GETVPN 的加解密

现在在组成员上测试加解密数据。首先，我们通过例8-23在GM1上查看安全关联和加解密状态时，可以看到虽然还没有加密任何感兴趣流数据，但 GM1 上已经出现了IPSec安全关联，这再次体现了GETVPN即时连接的特点。组成员的安全关联不是由感兴趣流触发产生的，而是在注册过程中由密钥服务器发送给组成员的。

例8-24所示为在GM1上使用Ping产生组成员之间的感兴趣流，通过例8-25能够看到IPSec安全关联中对应的加解密数量。

例8-23 在GM1 测试前查看加解密状况

GM1#show crypto engine connections active

Crypto Engine Connections

例8-24 GM1 上通过Ping产生加密的感兴趣流

GM1#ping 10.1.2.1 source 10.1.1.1 repeat 100

Type escape sequence to abort.

Sending 100, 100-byte ICMP Echos to 10.1.2.1, timeout is 2 seconds: Packet sent with a source address of 10.1.1.1

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Success rate is 100 percent (100/100), round-trip min/avg/max = 32/179/432 ms 例8-25 在GM1 测试后查看加解密状况

GM1#show crypto engine connections active

Crypto Engine Connections

8.15.12 在首要密钥服务器KS1 上配置次要密钥服务器KS2

现在开始配置GETVPN的高可用性特性。例8-26所示为管理员在首要密钥服务器KS1上启用了密钥服务器的冗余，并指定了次要密钥服务器的地址。

例8-26 首要密钥服务器KS1配置冗余密钥服务器

KS1(config)#cry gdoi group mygroup

KS1(config-gdoi-group)#server local

KS1(gdoi-local-server)#redundancy

<进入密钥服务器的冗余配置模式>

KS1(gdoi-coop-ks-config)#local priority 100

<配置本地密钥服务器的优先级，KS1为首要服务器，所以值应该比KS2高>

KS1(gdoi-coop-ks-config)#peer address ipv4 172.16.1.102

<指定其他密钥服务器的地址>

8.15.13 配置次要密钥服务器KS2

接下来开始配置次要密钥服务器，它的配置方法与首要密钥服务器相同，依然需要按照“外三内三”的步骤进行配置。例8-27所示即为次要密钥服务器上的GETVPN配置。

例8-27 次要密钥服务器KS2上配置GETVPN

KS2#config t

KS2(config)#crypto isakmp policy 10

KS2(config-isakmp)# authentication pre-share

KS2(config)# crypto isakmp key cisco address 172.16.1.1

KS2(config)#crypto isakmp key cisco address 172.16.1.2

KS2(config)#crypto isakmp key cisco address 172.16.1.101

KS2(config)#ip access-list extended getvpntraffic

KS2(config-ext-nacl)# permit ip 10.0.0.0 0.255.255.255 10.0.0.0 0.255.255.255

KS2(config)# crypto ipsec transform-set getvpn-set esp-des esp-md5-hmac KS2(config)# crypto ipsec profile getvpn-profile

KS2(ipsec-profile)# set transform-set getvpn-set

KS2(config)# crypto gdoi group mygroup

KS2(config-gdoi-group)# identity number 88888

KS2(config-gdoi-group)# server local

KS2(gdoi-local-server)# rekey algorithm aes 256

KS2(gdoi-local-server)# rekey authentication mypubkey rsa getvpnkey KS2(gdoi-local-server)# rekey transport unicast

KS2(gdoi-local-server)# sa ipsec 1

KS2(gdoi-sa-ipsec)# profile getvpn-profile

KS2(gdoi-sa-ipsec)# match address ipv4 getvpntraffic

KS2(gdoi-sa-ipsec)# replay time window-size 2

KS2(gdoi-sa-ipsec)#address ipv4 172.16.1.102

KS2(gdoi-local-server)#redundancy

KS2(gdoi-coop-ks-config)# local priority 75

KS2(gdoi-coop-ks-config)# peer address ipv4 172.16.1.101

8.15.14 查看协作密钥服务器

配置完GETVPN高可用性后，可以通过例8-28在首要密钥服务器KS1上，通过show crypto gdoiks coop 命令，查看首要与次要密钥服务器的工作状态。

例8-28 首要密钥服务器KS1上查看协作密钥服务器状态

KS1#show crypto gdoi ks coop

Crypto Gdoi Group Name :mygroup

Group handle: 2147483650, Local Key Server handle: 2147483650

Local Address: 172.16.1.101

Local Priority: 100

Local KS Role: Primary , Local KS Status: Alive

Primary Timers:

Primary Refresh Policy Time: 20

Remaining Time: 15

Antireplay Sequence Number: 11

Peer Sessions:

Session 1:

Server handle: 2147483651

Peer Address: 172.16.1.102

Peer Priority: 75

Peer KS Role: Secondary , Peer KS Status: Alive

Antireplay Sequence Number: 3

IKE status: Established

Counters:

Ann msgs sent: 9

Ann msgs sent with reply request: 1

Ann msgs recv: 1

Ann msgs recv with reply request: 3

Packet sent drops: 1

Packet Recv drops: 0

Total bytes sent: 1800

Total bytes recv: 359

8.15.15 组成员访问控制列表配置

现在开始介绍组成员访问控制列表这个特性（GM ACL）。首先需要在GM1 上通过ping测试访问KS1身后网络，如例8-29所示。

例8-29 GM1 测试访问KS1身后网络

GM1#ping 10.1.101.1 source 10.1.1.1

Type escape sequence to abort.

Sending 5, 100-byte ICMP Echos to 10.1.101.1, timeout is 2 seconds: Packet sent with a source address of 10.1.1.1

.....

Success rate is 0 percent (0/5)

不难发现，例8-29中的测试是失败的，原因是源为10.1.1.1目的为10.1.101.1的流量满足GETVPN的感兴趣流，因此GM1会对这个流量进行加密。但是密钥服务器KS1 不存在IPSec SA，所以不能对此流量进行解密。

解决方案如例8-30所示，在组成员GM1上配置组成员访问控制列表，旁路掉从10.1.1.0/24到10.1.101.0/24的流量。

当然通过这个测试读者还可以接触到另外一个知识，即密钥服务器虽然产生IPSec安全关联，并且把安全关联通过GDOI协议发送给所有组成员，但是密钥服务器自身却没有IPSec安全关联，也可以认为一台路由器只能同时担当一个角色，不是密钥服务器就是组成员。

例8-30 在组成员GM1 上配置组成员访问控制列表

GM1(config)#ip access-list extended bypass

GM1(config-ext-nacl)#deny ip 10.1.1.0 0.0.0.255 10.1.101.0 0.0.0.255

GM1(config)#crypto map cisco 10

GM1(config-crypto-map)#match address bypass

GM1组成员访问控制列表配置完毕之后，在GM1上再次通过ping访问KS1身后网络，如例 8-31 所示。本次测试由于 GM1 上配置的 GM ACL 旁路掉了源自于10.1.1.0/24到10.1.101.0/24的流量，所以GM1并没有对这个流量进行加密，而是发送了明文的ICMP信息到KS1身后网络，所以测试能够成功。

例8-31 GM1 测试访问KS1身后网络

GM1#ping 10.1.101.1 source 10.1.1.1

Type escape sequence to abort.

Sending 5, 100-byte ICMP Echos to 10.1.101.1, timeout is 2 seconds: Packet sent with a source address of 10.1.1.1

!!!!!

Success rate is 100 percent (5/5), round-trip min/avg/max = 48/120/156 ms 8.16 教主自创版DMVPN + GETVPN实验

8.16.1 实验设计介绍

在第7章中，我们已经对DMVPN进行过详细的介绍，虽然DMVPN是一种高可扩展性的IPSecVPN 技术，但是在实际工程部署的时候，却经常出现中心站点路由器负载过大的情况。

通过分析发现，中心站点的负载压力主要出现在两个方面。第一是中心站点IPSec安全关联过多，有多少个分支站点就有多少对IPSec安全关联，维护安全关联会消耗大量内存资源。第二是动态路由协议的更新信息制造了过多的加密数据包，而这些加密数据包会消耗大量CPU资源。

为了解决这两大问题，本书推荐读者使用作者所设计的 DMVPN+GETVPN 解决方案。首先，为了解决 IPSec 安全关联过多的问题，我们使用 GETVPN 技术统一给DMVPN中心站点和分支站点分发IPSec安全关联，密钥和感兴趣流（加密所有GRE流量），这样不管中心站点还是分支站点都只有一个IPSec安全关联，进而消除了中心站点安全关联过多的问题，降低了内存的消耗。

其次，本实验中彻底取消了动态路由协议，仅使用第三阶段的DMVPN加上静态路由来解决这个问题。因为采用了第三阶段的 DMVPN，分支机构可以配置汇总的静态路由到中心，中心则可以通过NHRP的重定向技术来引导分支站点间直接建立GRE隧道，然后用GETVPN所分发的安全关联和密钥进行加密。

8.16.2 实际接线状况

如图8-19所示，本次实验一共需要使用4台路由器，分别为密钥服务器（KS）、GETVPN组成员一与DMVPN中心站点（GM1-Hub）、GETVPN组成员二与DMVPN分支站点一（GM2-Spoke1）、GETVPN组成员三与DMVPN分支站点二（GM3-Spoke2）。路由器KS、GM1-Hub、GM2-Spoke1和GM3-Spoke2的Fa0/0接口被桥接到一起，用于模拟互联网。GM1-Hub的环回口（loopback0）模拟中心站点内部网络，GM2-Spoke1的环回口（loopback0）模拟分支站点一内部网络，GM3-Spoke2的环回口（loopback0）模拟分支站点二内部网络。

图8-19 教主自创版DMVPN + GETVPN实验实际接线图

8.16.3 实验拓扑

图8-20和图8-21分别为本次实验的物理拓扑和逻辑拓扑。本次实验主要目的是使用第三阶段的DMVPN加上GETVPN技术，降低传统DMVPN中心站点负载过大的问题。

图8-20 教主自创版DMVPN + GETVPN实验物理拓扑

图8-21 教主自创版DMVPN + GETVPN实验逻辑拓扑

本次实验拓扑中一共有4台路由器。其中，GM1-Hub（202.100.1.100）为DMVPN的中心站点，也是GETVPN的组成员一；GM2-Spoke1（202.100.1.1）为DMVPN的分支站点一，也是GETVPN的组成员二；GM3-Spoke2（202.100.1.2）为DMVPN的分支站点二，也是GETVPN的组成员三；KS（202.100.1.101）为GETVPN的密钥服务器。192.168.X.0/24分别模拟各站点内部网络，172.16.1.0/24为mGRE隧道网络。

本次实验不运行任何动态路由协议，通过在中心站点和分支站点配置静态路由来解决路由问题，并且使用第三阶段DMVPN的NHRP重定向技术引导分支站点间直接建立隧道。GETVPN的主要任务是为所有组成员分发安全关联，密钥和感兴趣流（所有GRE流量）。

本实验使用GETVPN 技术替代传统DMVPN 中IPSec VPN 的作用，来对流量进行加密，以减少IPSec安全关联的数量，提供流量的及时加密。

8.16.4 基本网络配置

本部分的主要任务是配置基本网络，为后续的配置与测试搭建网络环境。例8-32、例8-33、例8-34和例8-35分别为在GM1-Hub、KS、GM2-Spoke1和GM3-Spoke2上配置基本网络的方法。

例8-32 GM1-Hub 上的基本网络配置
enable
configure terminal

!

hostname GM1-Hub

!

interface Loopback0
ip address 192.168.100.1 255.255.255.0

!

interface FastEthernet0/0
ip address 202.100.1.100 255.255.255.0
no shutdown

!

end

例8-33 KS上的基本网络配置
enable
configure terminal

!

hostname KS

!

interface FastEthernet0/0
ip address 202.100.1.101 255.255.255.0
no shutdown

!

end

例8-34 GM2-Spoke1 上的基本网络配置
enable
configure terminal

!

hostname GM2-Spoke1

!

interface Loopback0
ip address 192.168.1.1 255.255.255.0

!

interface FastEthernet0/0
ip address 202.100.1.1 255.255.255.0
no shutdown

!

end

例8-35 GM3-Spoke2 上的基本网络配置
enable
configure terminal

!

hostname GM3-Spoke2

!

interface Loopback0
ip address 192.168.2.1 255.255.255.0

!

interface FastEthernet0/0
ip address 202.100.1.2 255.255.255.0
no shutdown

!

end

8.16.5 mGRE 隧道配置

DMVPN由4个部分组成：mGRE、NHRP、动态路由协议和IPSec技术。但是本次实验中只配置mGRE和NHRP两个部分，这是因为本次实验中采用了静态路由来替代动态路由协议，使用GETVPN替代传统的IPSec技术来加密GRE流量。

例8-36、例8-37和例8-38分别为在GM1-Hub、GM2-Spoke1和GM3-Spoke2上配置mGRE与NHRP技术。

例8-36 GM1-Hub 上的mGRE 隧道配置

GM1-Hub(config)#interface tunnel 0

GM1-Hub(config-if)#ip mtu 1400

GM1-Hub(config-if)#ip address 172.16.1.100 255.255.255.0

GM1-Hub(config-if)#tunnel source fastEthernet 0/0

GM1-Hub(config-if)#tunnel mode gre multipoint

GM1-Hub(config-if)#tunnel key 12345

GM1-Hub(config-if)#ip nhrp network-id 10

GM1-Hub(config-if)#ip nhrp map multicast dynamic

GM1-Hub(config-if)#ip nhrp redirect

例8-37 GM2-Spoke1 上的mGRE 隧道配置

GM2-Spoke1(config)#interface tunnel 0

GM2-Spoke1(config-if)#ip mtu 1400

GM2-Spoke1(config-if)#ip address 172.16.1.1 255.255.255.0

GM2-Spoke1(config-if)#tunnel source fastEthernet 0/0

GM2-Spoke1(config-if)#tunnel mode gre multipoint

GM2-Spoke1(config-if)#tunnel key 12345

GM2-Spoke1(config-if)#ip nhrp network-id 10

GM2-Spoke1(config-if)#ip nhrp map 172.16.1.100 202.100.1.100

GM2-Spoke1(config-if)#ip nhrp map multicast 202.100.1.100

GM2-Spoke1(config-if)#ip nhrp nhs 172.16.1.100

GM2-Spoke1(config-if)#ip nhrp shortcut

例8-38 GM3-Spoke2 上的mGRE 隧道配置

GM3-Spoke2(config)#interface tunnel 0

GM3-Spoke2(config-if)#ip mtu 1400

GM3-Spoke2(config-if)#ip address 172.16.1.2 255.255.255.0

GM3-Spoke2(config-if)#tunnel source fastEthernet 0/0

GM3-Spoke2(config-if)#tunnel mode gre multipoint

GM3-Spoke2(config-if)#tunnel key 12345

GM3-Spoke2(config-if)#ip nhrp network-id 10

GM3-Spoke2(config-if)#ip nhrp map 172.16.1.100 202.100.1.100

GM3-Spoke2(config-if)#ip nhrp map multicast 202.100.1.100

GM3-Spoke2(config-if)#ip nhrp nhs 172.16.1.100

GM3-Spoke2(config-if)#ip nhrp shortcut

8.16.6 静态路由配置

在本次实验中，我们采用了第三阶段的DMVPN技术，其主要的目的就是使用静态路由来替代动态路由协议，以降低中心站点的负担。

但这个解决方案同时也会增加中心站点的静态路由配置压力，有多少个分支站点就需要像例8-39那样配置多少条静态路由。

例8-40和例8-41分别为分支站点上的静态路由配置，分支站点只需要配置一条汇总路由指向中心站点即可。

例8-39 GM1-Hub 上的静态路由配置

GM1-Hub(config)#ip route 192.168.1.0 255.255.255.0 172.16.1.1

GM1-Hub(config)#ip route 192.168.2.0 255.255.255.0 172.16.1.2

例8-40 GM2-Spoke1 上的静态路由配置

GM2-Spoke1(config)#ip route 192.168.0.0 255.255.0.0 172.16.1.100

例8-41 GM3-Spoke2 上的静态路由配置

GM3-Spoke2(config)#ip route 192.168.0.0 255.255.0.0 172.16.1.100

8.16.7 配置密钥服务器KS

配置完mGRE与NHRP以后，现在需要开始配置GETVPN的密钥服务器，加上产生RSA密钥这个环节，整个配置步骤可以用“外四内三”进行记忆。其中“外四”分别为例8-42、例8-43、例8-44和例8-45所示，“内三”则分别为例8-46、例8-47和例8-48所示。

例8-42 产生密钥

KS(config)#ip domain name yeslab.net

KS(config)#crypto key generate rsa modulus 1024 label getvpnkey 例8-43 配置ISAKMP 第一阶段策略

KS(config)#crypto isakmp policy 10

KS(config-isakmp)#authentication pre-share

KS(config)#crypto isakmp key 0 cisco address 202.100.1.1

KS(config)#crypto isakmp key 0 cisco address 202.100.1.2

KS(config)#crypto isakmp key 0 cisco address 202.100.1.100

例8-44 配置感兴趣流

KS(config)#ip access-list ex ALL-DMVPN-Traffic

KS(config-ext-nacl)#permit gre any any

例8-45 配置IPSec Profile

KS(config)#crypto ipsec transform-set cisco esp-des esp-md5-hmac KS(config)#crypto ipsec profile ipsecprof

KS(ipsec-profile)#set transform-set cisco

例8-46 配置KS为密钥服务器

KS(config)#crypto gdoi group mygroup

KS(config-gdoi-group)#identity number 88888

KS(config-gdoi-group)#server local

KS(gdoi-local-server)#address ipv4 202.100.1.101

例8-47 配置密钥更新

KS(gdoi-local-server)#rekey authentication mypubkey rsa getvpnkey KS(gdoi-local-server)#rekey transport unicast

例8-48 配置IPSec安全关联

KS(gdoi-local-server)#sa ipsec 1

KS(gdoi-sa-ipsec)#match address ipv4 ALL-DMVPN-Traffic KS(gdoi-sa-ipsec)#profile ipsecprof

8.16.8 配置组成员

现在密钥服务器已经架设完毕，开始配置GETVPN的组成员。例8-49、例8-50和例8-51分别为在GM1-Hub、GM2-Spoke1和GM3-Spoke2上配置GETVPN的组成员。

例8-49 GM1-Hub 上配置组成员的GETVPN

GM1-Hub(config)#crypto isakmp policy 10

GM1-Hub(config-isakmp)#authentication pre-share

GM1-Hub(config)#crypto isakmp key 0 cisco address 202.100.1.101

GM1-Hub(config)#crypto gdoi group mygroup

GM1-Hub(config-gdoi-group)#identity number 88888

GM1-Hub(config-gdoi-group)#server address ipv4 202.100.1.101

GM1-Hub(config)#crypto map cisco 10 gdoi GM1-Hub(config-crypto-map)#set group mygroup

GM1-Hub(config)# interface fastEthernet 0/0

GM1-Hub(config-if)#crypto map cisco

例8-50 GM2-Spoke1 上配置组成员的GETVPN

GM2-Spoke1(config)#crypto isakmp policy 10

GM2-Spoke1(config-isakmp)#authentication pre-share

GM2-Spoke1(config)#crypto isakmp key 0 cisco address 202.100.1.101

GM2-Spoke1(config)#crypto gdoi group mygroup

GM2-Spoke1(config-gdoi-group)#identity number 88888

GM2-Spoke1(config-gdoi-group)#server address ipv4 202.100.1.101

GM2-Spoke1(config)#crypto map cisco 10 gdoi

GM2-Spoke1(config-crypto-map)#set group mygroup

GM2-Spoke1(config)#interface fastEthernet 0/0

GM2-Spoke1(config-if)#crypto map cisco

例8-51 GM3-Spoke2 上配置组成员的GETVPN

GM3-Spoke2(config)#crypto isakmp policy 10

GM3-Spoke2(config-isakmp)#authentication pre-share

GM3-Spoke2(config)#crypto isakmp key 0 cisco address 202.100.1.101

GM3-Spoke2(config)#crypto gdoi group mygroup

GM3-Spoke2(config-gdoi-group)#identity number 88888

GM3-Spoke2(config-gdoi-group)#server address ipv4 202.100.1.101

GM3-Spoke2(config)#crypto map cisco 10 gdoi

GM3-Spoke2(config-crypto-map)#set group mygroup

GM3-Spoke2(config)#interface fastEthernet 0/0

GM3-Spoke2(config-if)#crypto map cisco

8.16.9 测试

现在配置已经完毕，我们可以开始在GM2-Spoke1上通过ping触发流量进行测试。例8-52所示为触发分支站点间的流量进行测试，例8-53所示为触发分支站点与中心站点间的流量进行测试，此外，我们还可以通过例8-54所示的命令来查看安全关联与加解密状况。

例8-52 GM2-Spoke1 通过ping测试分支站点间流量

GM2-Spoke1#ping 192.168.2.1 so 192.168.1.1 repeat 100

Type escape sequence to abort.

Sending 100, 100-byte ICMP Echos to 192.168.2.1, timeout is 2 seconds: Packet sent with a source address of 192.168.1.1

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Success rate is 100 percent (100/100), round-trip min/avg/max = 176/253/540 ms 例8-53 GM2-Spoke1 通过ping测试分支站点与中心站点间流量

GM2-Spoke1#ping 192.168.100.1 so 192.168.1.1 repeat 100

Type escape sequence to abort.

Sending 100, 100-byte ICMP Echos to 192.168.100.1, timeout is 2 seconds: Packet sent with a source address of 192.168.1.1

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Success rate is 100 percent (100/100), round-trip min/avg/max = 144/283/568 ms 例8-54 GM2-Spoke1 查看安全关联与加解密状况

GM2-Spoke1#show crypto engine connections active

Crypto Engine Connections

很容易发现，在这个 DMVPN+GETVPN 的解决方案中，只有一个安全关联在加解密数据。不像传统DMVPN，中心站点需要和每一个分支站点维护一对安全关联，这样的设计降低了中心站点资源的消耗。而且站点间的流量能够得到及时加密，无需再等待IKE协商所造成的延时。这个设计最大的亮点是使用阶段三的DMVPN技术加上静态路由，彻底取消了动态路由协议，消除了加解密路由协议更新包造成的资源消耗。

第9章 Easy VPN

9.1 Easy VPN简介

Easy VPN 也叫做EzVPN，是Cisco 为远程用户和分支办公室提供的一种远程访问 VPN 解决方案。EzVPN 提供了中心的VPN管理，动态的策略分发，降低了远程访问VPN部署的复杂程度，并且增加了扩展和灵活性。

9.1.1 Easy VPN 特点介绍

Easy VPN 是Cisco 的私有技术，只能运用在Cisco 设备之间。

Easy VPN 适用于中心站点地址固定，客户端动态获取地址的环境，并且客户端身后网络环境需要尽可能简单，例如小超市、服装专卖店或者彩票点。

Easy VPN 的策略被配置在中心站点，并且当客户连接的时候推送给客户，因而可以降低分支站点的管理压力。

9.1.2 Easy VPN 中心站点管理的内容

协商的隧道参数，例如地址、算法和生存时间。

使用已配置的参数建立隧道。

动态为硬件客户端配置NAT 或者PAT 地址转换。

使用组/密码、用户/密码认证客户。

管理加解密密钥。

验证、加解密隧道数据。

9.1.3 Easy VPN 的部署

图9-1 为Cisco EzVPN 的部署拓扑。从中可以看到，Cisco EzVPN 部署分为服务器端和客户端两大部分。服务器端可以采用Cisco 路由器、PIX 500 和ASA 5500 系列防火墙，还有VPN 3000 集中器。Cisco EzVPN 是一种远程访问VPN 解决方案，它能够同时为在PC上安装的软件客户端和使用Cisco网络设备的硬件客户端提供VPN服务。

图9-1 Easy VPN部署拓扑

支持Cisco EzVPN 硬件客户端的设备有Cisco 路由器、PIX500 系列防火墙、ASA 5505 防火墙以及VPN 3002 硬件客户端。

9.1.4 Easy VPN IKE 第一阶段两种认证方式

EasyVPN IKE 第一阶段存在两种认证方式：数字证书认证和预共享密钥认证。

1．数字证书认证（rsa-sig）

使用数字证书认证的EzVPN，第一阶段使用标准的6个数据包交换的主模式。

2．预共享密钥（pre-share）

Cisco EzVPN 的预共享密钥认证，与传统站点到站点IPSecVPN 的配置方式不同，传统IPSecVPN 使用一个密码来进行认证，但是Cisco EzVPN 的预共享密钥使用一个组名加上一个密码来进行认证，这是 Cisco 采用的一种特殊处理方式。这样做的好处在于，工程师可以为一个公司内的不同部门配置不同的组，并且把VPN相关的策略与组进行关联。例如，为部门一的用户分配地址池一，部门二的用户分配地址池二。

这里还有一个值得注意的问题是，使用预共享密钥认证的 EzVPN 在第一阶段使用的是三个数据包交换的主动模式（aggressive mode）。

9.2 主动模式3个数据包交换介绍

图9-2 主动模式第一个数据包

图9-2～图9-4分别展示了主动模式的3个数据包交换，读者不难从中发现如下几个特点。

1．上述3个数据包都是通过明文传输的，并没有进行加密保护。

2．认证信息使用散列函数进行保护。

3．主动模式3个数据包完成了主模式6个数据包完成的如下任务。

IKE 第一阶段策略协商。

DH 密钥交换，并产生密钥。

相互认证。

图9-3 主动模式第二个数据包

图9-4 主动模式第三个数据包

4．由于主动模式第一个数据包就产生了DH公共值，因此双方很明显没有预先协商过DH group。所以在进行主动模式交换之前，发起方和接收方需要统一DH group，预共享密钥认证的Cisco EzVPN 必须使用DH group2。

9.3 Cisco EzVPN IKE 的三个阶段

9.3.1 Cisco EzVPN IKE 第一阶段介绍

为了提高客户的可操作性，Cisco Easy VPN 的客户端无须配置任何IKE 策略。无须配置策略并不等于客户端没有策略，只是很多策略已经内建在了客户端（软件/硬件）之中。这些策略会在IKE 第一阶段全部推送给服务器端，由服务器来选择适当的策略，所以策略的最终决定权在于EzVPN服务器。

再次提醒读者注意：由于预共享密钥认证的EzVPN采用的是AM模式，因此DHgroup 策略需要预先统一，Cisco 的EzVPN 如果采用预共享密钥认证，那么DH Group必须被配置为Group2。

下面是教主推荐的EasyVPN IKE 第一阶段策略：

Pre-share+DH group2+ MD5+DES；

Pre-share+DH group2+SHA+3DES。

9.3.2 Cisco EzVPN IKE 第1.5 阶段介绍

Cisco Easy VPN 在第一阶段结束后，第二阶段开始之前，插入了一个全新的1.5阶段。这个阶段主要由如下两个技术组成。

1．XAUTH（Extended Authentication）扩展认证

在第一阶段组名加密码认证的基础之上，再增加了一次用户名和密钥的认证，弥补了主动模式安全性上的问题。

引入AAA技术，使用RADIUS对用户进行认证和授权。

2．MODE-CFG（Mode Configuration）模式配置

为客户推送VPN策略（IP地址、DNS服务器地址、域名……）。

9.3.3 Easy VPN IKE 第二阶段介绍

Easy VPN IKE 第二阶段和普通的IPSec VPN 一样，都为快速模式，客户端依然无须配置任何策略（同样是因为客户端中已经内建了很多策略），这些策略会通过快速模式的第一个数据包，全部推送给服务器端，服务器则会从这些策略中选取其中一个，再通过第二个数据包把选择的策略回送给客户端，所以不管客户端有多少策略，决定权始终掌握在服务器手中。

Cisco Easy VPN 对IKE 第二阶段的策略一般没有特殊要求，只要是ESP 封装应该都能通过。

注意CiscoEasyVPN 不支持AH 封装方式。

下面是教主推荐的EasyVPN IKE 第二阶段策略：
esp-des esp-md5-hmac；
esp-3des esp-md5-hamc。

9.4 Cisco EzVPN软件客户端安装

在安装Cisco EzVPN 软件客户端之前，首先需要从Cisco 网站下载这个客户端，然后按照如下步骤进行安装：解压缩安装文件到临时目录（见图9-5），选择语言（见图9-6），选择安装目录（见图9-7）。最需要注意的是最后一步，客户端安装完毕后需要重启系统（见图9-9）。

图9-5 解压缩文件

图9-6 选择语言

图9-7 配置安装目录

图9-8 重启系统

9.5 EzVPN经典配置实验

9.5.1 实际接线状况

图9-9所示为EzVPN经典配置实验实际接线图。本次实验一共需要使用5台路由器和一台装有Windows XP 操作系统的计算机，由左至右分别为模拟分支站点内部电脑的路由器Private、模拟分支站点EzVPN硬件客户端的路由器Branch、模拟安装了EzVPN 软件客户端的公司员工计算机、模拟互联网路由器的 Internet、模拟中心站点EzVPN服务器的路由器Center，以及模拟中心站点内部服务器的路由器Inside。

图9-9 EzVPN经典配置实验实际接线图

路由器Private和Branch的Fa0/0接口被桥接到一起，用于模拟分支站点内部网络。路由器Branch和Internet的Fa1/0接口与计算机的以太网网卡桥接在一起模拟互联网网络。路由器Internet和Center的Fa2/0接口被桥接到一起模拟互联网网络。路由器Center和Inside的Fa3/0接口被桥接到一起模拟中心站点内部网络。

9.5.2 实验拓扑

图9-10所示为EzVPN经典的配置实验拓扑。本次实验的主要目的是介绍EzVPN经典配置，本次实验分别会介绍由安装EzVPN软件客户端的计算机发起的，到EzVPN服务器Center的EzVPN，此外还会介绍由EzVPN硬件客户端Branch发起的，到EzVPN服务器Center的EzVPN。

图9-10 EzVPN经典配置实验拓扑

本次实验一共有5个主要的配置任务：一是配置Center上的EzVPN服务器；二是配置计算机上的EzVPN软件客户端；三是介绍EzVPN特性；四是配置Branch上的EzVPN硬件客户端；五是测试EzVPN的三种模式及其工作特点。

9.5.3 基本网络配置

本部分的主要任务是配置基本网络，为后续的配置与测试搭建网络环境。例9-1、例9-2、例9-3、例9-4和例9-5分别显示了如何在Private、Branch、Internet、Center和Inside上执行基本的网络配置。

例9-1 Private上的基本网络配置

enable

configure terminal

!

hostname Private

!

enable password cisco

!

no ip domain lookup

!

interface FastEthernet0/0
ip address 172.16.1.10 255.255.255.0

no shutdown

!

ip route 0.0.0.0 0.0.0.0 172.16.1.1

!

line vty 0 15

password cisco

login

!

end

例9-2 Branch上的基本网络配置

enable

configure terminal

!

hostname Branch

!

interface FastEthernet0/0
ip address 172.16.1.1 255.255.255.0

no shutdown

!

interface FastEthernet1/0
ip address 202.100.1.1 255.255.255.0

no shutdown

!

ip route 0.0.0.0 0.0.0.0 202.100.1.10

!

end

例9-3 Internet上的基本网络配置

enable

configure terminal

!

hostname Internet

!

interface FastEthernet1/0
ip address 202.100.1.10 255.255.255.0

no shutdown

!

interface FastEthernet2/0
ip address 61.128.1.10 255.255.255.0

no shutdown

!

end

例9-4 Center上的基本网络配置

enable

configure terminal

!

hostname Center

!

interface FastEthernet2/0
ip address 61.128.1.1 255.255.255.0

no shutdown

!

interface FastEthernet3/0
ip address 10.1.1.1 255.255.255.0

no shutdown

!

ip route 0.0.0.0 0.0.0.0 61.128.1.10

!

end

例9-5 Inside上的基本网络配置

enable

configure terminal

!

hostname Inside

!

enable password cisco

!

no ip domain lookup

!

interface FastEthernet3/0
ip address 10.1.1.10 255.255.255.0

no shutdown

!

ip route 0.0.0.0 0.0.0.0 10.1.1.1

!

line vty 0 15

password cisco

login

!

end

9.5.4 Windows XP 基本网络配置

图9-11所示为如何配置计算机网络适配器的IP地址（202.100.1.100/24）及网关的IP地址（202.100.1.10）。

图9-11 Windows XP计算机上的基本网络配置

9.5.5 Center 路由器上EzVPN 服务器配置

根据9.3 节对EzVPN IKE 三个阶段的介绍，在Center 路由器上配置EzVPN 服务器一共分为5个步骤，其中配置EzVPN的步骤1如例9-6所示，即配置IKE第一阶段策略。

值得注意的是，EzVPN第一阶段预共享密钥认证，与传统的仅仅只使用一个密钥进行认证不同，EzVPN使用组加上密码的方式，完成第一阶段预共享密钥认证。

例9-6 IKE第一阶段策略

Center(config)#crypto isakmp policy 10

Center(config-isakmp)#authentication pre-share Center(config-isakmp)#group 2

Center(config-isakmp)#hash md5

<IKE第一阶段策略，注意DH组必须配置成为2>

Center(config)#crypto isakmp client configuration group ipsecgroup Center(config-isakmp-group)#key yeslabccies

<IKE第一阶段预共享密钥认证用的组名加上密码>

例9-7所示为EzVPN步骤2的配置方法，即配置EzVPN第1.5阶段的XAUTH。

在这一配置过程中，我们需要启用 AAA技术，来对客户进行用户名和密码的认证。

在本次实验中，我们只进行本地数据库认证。不过在大规模的工程部署中，读者可以采用RADIUS服务器对客户进行认证、授权和审计。

例9-7 第1.5阶段XAUTH 配置

Center(config)#aaa new-model

Center(config)#aaa authentication login noacs line none

Center(config)#line console 0

Center(config-line)#login authentication noacs

Center(config)#line aux 0

Center(config-line)#login authentication noacs

<AAA线下保护，保障用户总是可以使用线下的密码登录Console和AUX口>

Center(config)#username ipsecuser password yeslabccies

<XAUTH认证用户名和密码>

Center(config)#aaa authentication login xauth-authen local

<定义XAUTH认证策略，策略名为xauth-authen，使用“local”本地用户数据库进行认证>

例9-8所示为EzVPN步骤3的配置方法，即配置EzVPN第1.5阶段的MODE-CFG。这项技术的主要任务是给客户推送各种EzVPN策略，在本章的9.6节中，我们会对具体的策略进行介绍。

这里介绍使用MODE-CFG为客户推送IP地址池，这也是EzVPN推送给客户的最基本策略，对于软件客户端的EzVPN，地址池策略是不可缺少的。

例9-8 第1.5阶段MODE-CFG配置

Center(config)#ip local pool ippool 123.1.1.100 123.1.1.200

<定义推送给客户端的地址池，名字为ippool>

Center(config)#aaa authorization network mcfg-author local

<定义MODE-CFG的授权策略，名字为mcfg-author使用本地配置策略进行授权>

Center(config)#crypto isakmp client configuration group ipsecgroup Center(config-isakmp-group)#pool ippool

<把定义的策略“地址池”在组 ipsecgroup 下进行调用，通过这种方式就能够实现不同的组（部门）获取不同的

EzVPN策略>

关于如何选择地址池的讨论：

1．地址池的网段，必须在内网可路由；

2．去往地址池（123.1.1.0/24）的数据包，通过内网的路由，最终会被送到 VPN设备Center。

由于在本实验中，模拟内部服务器的路由器 Inside，指默认网关到 Center，所以可以认为选择任何地址池都可以在内部网络路由，并且被送到 Center，所以本实验使用的地址池123.1.1.0/24，只是根据个人习惯随意选定的。

例9-9所示为EzVPN步骤4的配置方法，即配置EzVPN第二阶段的转换集和动态crypto map。由于EzVPN 为远程访问VPN，客户使用的是动态地址，所以在EzVPN中需要采用动态crypto map 的配置方式。

例9-9 第二阶段转换集与动态crypto map配置

Center(config)#crypto ipsec transform-set ezvpnset esp-des esp-md5-hmac Center(config)#crypto dynamic-map dymap 10

Center(config-crypto-map)#set transform-set ezvpnset

例9-10所示为EzVPN步骤5的配置方法，即配置EzVPN第二阶段的crypto map。在配置 crypto map 的同时还需要调用为 XAUTH 所定义的认证策略，以及为MODE-CFG所定义的授权策略，并且启用MODE-CFG技术。

例9-10 第二阶段crypto map 的配置

Center(config)#crypto map cry-map client authentication list xauth-authen <全局调用XAUTH认证策略xauth-authen>

Center(config)#crypto map cry-map isakmp authorization list mcfg-author <全局调用MODE-CFG授权策略mcfg-author>

Center(config)#crypto map cry-map client configuration address respond <启用MODE-CFG特性，不配置此命令无法推送策略给客户>

Center(config)#crypto map cry-map 10 ipsec-isakmp dynamic dymap Center(config)#interface fastEthernet 2/0

Center(config-if)#crypto map cry-map

9.5.6 配置Windows XP 上的EzVPN 软件客户端并查看状态

在9.5.5小节中，我们已经在Center路由器上配置了EzVPN服务器。EzVPN支持两种类型的客户端，一种为EzVPN软件客户端，另一种为EzVPN硬件客户端。这里重点介绍软件客户端配置。

图9-12所示为EzVPN连接入口点配置，首先单击New按钮新建VPN连接入口点，然后在弹出窗口填写连接入口点名称Connection Entry和描述Description，这两个参数只是要求用户进行命名，因此可以根据自己的命名习惯进行配置。接下来需要配置的参数为 Host，这个值必须被配置成为 EzVPN 网关的 IP 地址和域名。紧接着在Authentication面板配置第一阶段认证用的组名和密码。

图9-12 配置EzVPN软件客户端

配置完毕软件客户端（见图9-13）后，首先要选择适当的Connection Entry，然后单击Connect按钮来发起EzVPN连接。在连接过程中会弹出XAUTH认证窗口，此时需要在窗口中输入用户名和密码来完成XAUTH认证，如果拨号成功会在计算机右下角的通知区域显示一个被锁住的小锁。

图9-13 EzVPN软件客户端拨号测试

拨号成功后，开始查看EzVPN软件客户端状态（见图9-14）。首先右键单击通知区域的小锁，这时单击 Statistics 查看状态，于是用户就会看到隧道详情面板 TunnelDetails，在这个面板中我们可以查看到客户端获取的地址（123.1.1.102）、EzVPN服务器地址（61.128.1.1）、本次EzVPN会话所使用的加密算法和验证算法、最后还能查看到加解密数据包的数量。

图9-14 查看EzVPN软件客户端状态

接下来单击路由详情面板 Route Details，在这个面板中能看到 0.0.0.0 的 Secured Routes，这表示接口产生的所有流量都被加密送往了EzVPN服务器。

查看完 EzVPN 软件客户端状态之后，我们来查看系统的网络连接，可以看到有两个适配器，一个是物理网络适配器，一个是 Cisco VPN 虚拟适配器，并且 EzVPN拨号成功之后，这两个适配器都处于“已连接上”状态，并且可以通过 Windows 的ipconfig命令来查看两个不同适配器的IP 地址。很明显EzVPN服务器推送给客户的地址池的地址就附在那个Cisco VPN 虚拟适配器上。

图9-15所示为客户端通过发起流量来对EzVPN的联通性进行测试。在图9-15中，用户首先使用ping命令测试了内部服务器是否联通，其次使用telnet发起对内部服务器的访问。

在登录到内部服务器之后，该用户使用了show user 命令查看了本次登录的源IP地址，这种方法可以确认，客户端是在使用从Cisco VPN 虚拟适配器上获取的地址池中的地址来访问内部服务器的。

图9-15 访问Inside服务器

9.6 EzVPN特性

9.6.1 分割隧道（Split Tunneling）

在默认情况下，使用9.5节在路由器Center上的基本配置，没有启用分割隧道特性。在这种情况下所有的流量都会被加密并且送往中心站点。

如图9-16左边部分所示，EzVPN客户端上网的流量需要通过中心站点VPN网关的转换处理（例如PAT）才能够访问互联网。如果中心没有为VPN流量配置转换策略，那么客户端就只能访问中心站点不能访问互联网了。当然，绝大部分公司可能都没有配置转换，因此一般情况下不启用分割隧道技术就等于只能访问公司的内部资源，而不能访问互联网。

如果启用了分割隧道技术，我们可以推送一个网段给EzVPN客户，告诉EzVPN客户端只有访问这些网段（中心推送的内部网段）的时候，需要加密流量并且送往中心，除此以外的其他地址，都应该正常地通过明文访问，就像图9-16右边部分所示， EzVPN客户不仅能够加密访问中心站点内部资源，还能直接访问互联网。

启用分割隧道技术以后，很明显用户的VPN体验会更好，毕竟他们能够一边办公，一般聊聊天或者看看新闻。但是这样也有很严重的安全隐患，这个时候EzVPN客户很容易成为黑客的跳板。黑客可以通过互联网远程控制EzVPN客户，并且通过他们来访问公司的内部资源。所以Cisco默认并没有启用分割隧道技术，用户同时只能访问一个网络资源，要么公司内部，要么互联网。这样将公司内部资源的安全性最大化。

图9-16 分割隧道（Split Tunneling）示意图

1．配置隧道分割

配置隧道分割策略一共分为两个步骤：步骤1为配置分割隧道列表，如例9-11所示；步骤2为在组下调用隧道分割策略，如例9-12所示。

例9-11 配置分割隧道（Split Tunneling）列表

Center(config)#ip access-list ex Split

Center(config-ext-nacl)#permit ip 10.1.1.0 0.0.0.255 any

<配置一个扩展访问控制列表，源为公司内部需要被加密访问的网段，目的为any>

例9-12 在组下调用分割隧道列表

Center(config)#crypto isakmp client configuration group ipsecgroup Center(config-isakmp-group)#acl Split

<分割隧道技术的访问控制列表在组下进行调用，其实只要是VPN相关的策略都应该在组下进行调用，我们后面学习

的EzVPN特性也都在组下进行调用>

2．测试分割隧道（Split Tunneling）

配置完毕分割隧道后，需要断掉先前的连接，然后重新连接。

图9-17 所示为查看分割隧道状态信息。首先在路由详情面板Route details 中，可以看到隧道分割产生的10.1.1.0/24网络，这表示仅仅只是去往10.1.1.0/24这个网络的流量才会得到加密，其余网络则明文进行访问。

在图9-17的右边部分中，客户端使用ping命令测试了公司内部服务器（10.1.1.1）和互联网路由器（202.100.1.10）。

图9-17 查看分割隧道状态

9.6.2 保存密码（save-password）

默认情况下，使用9.5节在路由器Center上的基本配置，每一次拨号都需要像图9-13一样，输入1.5阶段XAUTH认证用的用户名和密码。

这个过程虽然非常安全，但却很烦人。例如，某些想省事的老板，他们希望能够保存用户名和密码，下次自动拨号时不再被打扰。最需要这个特性的可能是 EzVPN硬件客户端，我们希望在硬件客户端上，保存 1.5 阶段认证的用户名和密码，并且在获取互联网连接或者开机后自动拨号。如果希望实现这些功能，就需要在 EzVPN 网关上，启用保存密码这个特性。

1．配置保存密码（save-password）

保存密码策略的配置方法如例9-13所示，用户需要在ipsecgroup组下配置这个特性。

例9-13 组下配置保存密码

Center(config)#crypto isakmp client configuration group ipsecgroup Center(config-isakmp-group)#save-password

2．测试保存密码（save-password）

测试保存密码特性与测试其他特性一样，都需要先断掉之前的 EzVPN 连接，重新拨号后才能获取新的VPN策略。如图9-18上半部分所示，在弹出的XAUTH认证窗口中多了一个 Save Password 的选择项。单击这个选项后，下次拨号就不会再弹出XAUTH 认证页面，而是使用保存的用户名和密码来自动进行认证。如果希望删除保存的用户名和密码，可以如图9-18下图所示，右键单击Connection Entry并且选择Erase Saved User Password。

图9-18 测试保存密码特性

9.6.3 备用网关（backup-gateway）

与6.4 节的站点到站点高可用性IPSecVPN 一样，EzVPN 也能够支持备用网关。同样能够实现当主用VPN网关失效以后，自动切换到备用VPN网关的操作。

可以通过两种方法来配置备用网关这个特性，第一种方法是客户手动配置EzVPN软件Client，配置方法如图9-19所示。首先进入连接条目Connection Entry编辑页面，单击备用网关Backup Servers面板，单击Add按钮添加新的备用网关的IP地址或者域名。

1．VPN网关配置备用网关特性（backup-gateway）

当然指望那些不太懂网络技术的客户，手动配置备用VPN网关是很不现实的，我们可以利用EzVPN的中心管理和推送策略的特性，把备用VPN网关的配置推送到客户端。

下面我们就介绍一下备用网关的第二种配置方法，即在 VPN 网关上配置备用网关，并且通过MODE-CFG技术推送给客户端。例9-14就是在VPN网关Center上的实例。

图9-19 在EzVPN客户端配置备用网关

例9-14 在VPN网关上配置备用网关特性

Center(config)#crypto isakmp client configuration group ipsecgroup Center(config-isakmp-group)#backup-gateway yeslabfirst.mingjiao.org Center(config-isakmp-group)#backup-gateway yeslabsecondary.mingjiao.org Center(config-isakmp-group)#backup-gateway 3.3.3.3

2．测试备用网关（backup-gateway）

在VPN网关配置完毕备用网关特性后，要测试这个特性，客户端就需要断开先前的EzVPN 连接，然后重新连接。重新连接之后，再次进入连接条目Connection Entry编辑页面，单击备用网关Backup Servers 面板，此时应该能够看到由中心推送给客户的备用网关策略，如图9-20所示。

图9-20 查看EzVPN客户端获取的备用网关

9.6.4 其他EzVPN 特性

最后我们对 EzVPN 其他的特性进行一次简单介绍，例 9-15 中我们对剩余的EzVPN特性进行了配置与介绍。

需要注意的是，为软件客户端提供服务的EzVPN服务器，必须要配置key和pool这两个基本参数。其余配置均为可选配置。

例9-15 配置EzVPN其他特性
crypto isakmp client configuration group ipsecgroup

key yeslabccies

pool ippool

<Key与pool是EzVPN服务器最基本的两个策略>

acl Split
backup-gateway yeslabfirst.mingjiao.org
backup-gateway yeslabsecondary.mingjiao.org
backup-gateway 3.3.3.3
save-password
dns 137.78.19.66

<推送内部DNS服务器给EzVPN客户>
domain yeslab.net

<推送内部域名给EzVPN客户>
split-dns yeslab.net

<分割DNS特性，后缀为yeslab.net的域名，送到内部dns服务器137.78.19.66上去解析，其余域名使用运营商提供的DNS进行解析> wins 137.78.19.68

<推送内部WINS服务器给EzVPN客户>
access-restrict FastEthernet2/0

<限制这个组的客户只能从Fa2/0这个物理接口拨入>

pfs

<启用EzVPN的PFS特性，在第三章中我们曾经讲过这个特性>
max-users 100

<这个组ipsecgroup，最多能够同时拨入100个客户。同时拨号成功的客户数>
max-logins 10

<这个组ipsecgroup，最多支持10个客户同时处于拨入认证状态。主要是为了防止DOS攻击>
netmask 255.255.255.0

<推送地址池掩码给客户，默认地址池掩码为主类掩码，例如123.1.1.100的掩码为255.0.0.0>
banner ^C
welcome to yeslabvpn ^C

<配置拨号成功后的欢迎信息>

9.7 EzVPN硬件客户端

9.7.1 EzVPN 硬件客户端的3 种工作模式

EzVPN 硬件客户端具有 3 种工作模式，分别为客户模式（Client Mode，也称为PAT 模式）、网络扩展模式（Network Extension Mode）和网络扩展加模式（Network Extension PlusMode）。

1．EzVPN 客户模式（Client Mode）

图9-21所示为EzVPN客户模式工作示意图。在EzVPN客户模式中，中心VPN网关会通过MODE-CFG技术，将地址池地址推送给分支站点的EzVPN硬件客户端。分支站点的EzVPN硬件客户端，PAT转换内部网络到获取的地址池的地址，然后使用转换后的地址访问中心站点。由于分支站点的PAT隐藏了身后网络，所以中心站点无法主动发起向分支站点身后网络的访问。

图9-21 EzVPN客户模式工作示意图

2．网络扩展模式（Network Extension Mode）

图9-22所示为EzVPN网络扩展模式工作示意图。在EzVPN网络扩展模式（Network Extension Mode）中，中心站点不会向客户推送地址，客户端使用真实的地址，访问中心站点内部网络，由于分支站点使用真实的地址，所以中心站点也能向分支站点主动发起连接。其实给人的感觉很像普通的站点到站点的VPN，双方都能互相访问。

图9-22 EzVPN网络扩展模式工作示意图

3．网络扩展加模式（Network Extension Plus Mode）

图 9-23 所示为 EzVPN 网络扩展加模式的工作示意图。EzVPN 网络扩展加模式（Network Extension Plus Mode）其实就是在网络扩展模式的基础之上，中心站点依然使用MODE-CFG技术，推送地址池的地址，给分支站点的EzVPN硬件客户端，但是这个地址只是用于网络管理的目的，例如，中心站点可以使用此地址来网管分支站点。

图9-23 EzVPN网络扩展加模式工作示意图

9.7.2 配置EzVPN 硬件客户端客户模式

例9-16所示为在硬件客户端路由器Branch上配置客户模式的EzVPN。它的配置方法和软件客户端基本相同，都需要配置第一阶段认证的 group 加 key，也需要使用peer来配置EzVPN服务器的地址或者域名。不同之处在于硬件客户端需要配置EzVPN的工作模式（mode）和连接方式（connect）。

例9-16 在Branch上配置客户模式的EzVPN

Branch(config)#crypto ipsec client ezvpn Yeslab-Ez-Client

Branch(config-crypto-ezvpn)#connect manual

<配置EzVPN 手动连接，如果配置 connect auto 就是自动连接，自动连接的 EzVPN 当网络连接可用，或者路由器开机后就会自动尝试连接中心站点，为了测试方便本次试验采用手动连接方式> Branch(config-crypto-ezvpn)#group ipsecgroup key yeslabccies

<EzVPN第一阶段认证用的组名和密码>

Branch(config-crypto-ezvpn)#mode client

<配置EzVPN 为客户模式，也叫做PAT 模式。modenetwork-extension 为网络扩展模式，modenetwork-plus为网络扩展加模式> Branch(config-crypto-ezvpn)#peer 61.128.1.1

<通过peer配置中心站点的IP地址或者域名>

Branch(config)#interface FastEthernet 1/0

Branch(config-if)#crypto ipsec client ezvpn Yeslab-Ez-Client outside <配置F1/0（202.100.1.1）为EzVPN的外部接口>

Branch(config)#interface FastEthernet 0/0

Branch(config-if)#crypto ipsec client ezvpn Yeslab-Ez-Client inside <配置F0/0（172.16.1.1）为EzVPN的内部接口>

配置完EzVPN硬件客户端后，我们需要使用例9-17中的命令，来触发EzVPN的连接和提供1.5阶段认证的用户名和密码。

例9-17 手动触发EzVPN连接

Branch#crypto ipsec client ezvpn connect

<通过上面的命令手动触发EzVPN>

*Mar 1 02:29:40.563: EZVPN(Yeslab-Ez-Client): Pending XAuth Request, Please enter the following command:

*Mar 1 02:29:40.563: EZVPN: crypto ipsec client ezvpn xauth

<系统提示通过crypto ipsec client ezvpn xauth命令，提供XAUTH认证用的用户名和密码> Branch#crypto ipsec client ezvpn xauth

Username:ipsecuser

Password:yeslabccies

<提供XAUTH认证用的用户名和密码>

EzVPN连接成功之后，可以使用例9-18中的命令来查看EzVPN的连接状态。需要注意的是客户模式的EzVPN，会从服务器获取地址池的地址（123.1.1.100）。

例9-18 查看EzVPN状态

Branch#show crypto ipsec client ezvpn

Easy VPN Remote Phase: 6

Tunnel name : Yeslab-Ez-Client <EzVPN Tunnel 的名字>

Inside interface list: FastEthernet0/0 <EzVPN内部接口>

Outside interface: FastEthernet1/0 <EzVPN 外部接口>

Current State: IPSEC_ACTIVE

Last Event: MTU_CHANGED

Address: 123.1.1.100 (applied on Loopback10000) <客户模式获取的地址> Mask: 255.255.255.255

DNS Primary: 1.1.1.1 <主动DNS服务器1.1.1.1>

NBMS/WINS Primary: 2.2.2.2 <主动WINS服务器2.2.2.2>

Default Domain: yeslab.net <域名yeslab.net>

Using PFS Group: 2 <EzVPN启用PFS 技术，并且使用DH组2>

Save Password: Allowed <允许EzVPN客户端保存密码>

Split Tunnel List: 1 <分割隧道列表>

Address : 10.1.1.0

Mask: 255.255.255.0

Protocol : 0x0

Source Port: 0

Dest Port : 0

Current EzVPN Peer: 61.128.1.1 <当前连接的EzVPN网关地址>

Backup Gateways <备用网关地址>

(0): yeslabfirst.mingjiao.org

(1): yeslabsecondary.mingjiao.org

(2): 3.3.3.3

9.8 测试EzVPN各种模式的特性

为了让读者能够更加详细地了解EzVPN各种模式的区别，我们在表9-1中对各种模式的EzVPN进行了详细的比较。下面我们就对这个表中的结果进行测试。

表9-1 EzVPN各种模式特性比较表

9.8.1 测试客户模式

首先需要测试的模式为没有隧道分割的客户模式。例9-19所示为EzVPN服务器端的配置。为了测试方便，只保留group下面的key、pool和save-password这三个参数。

例9-19 配置Center的EzVPN 服务器
crypto isakmp client configuration group ipsecgroup

key yeslabccies

pool ippool
save-password

为了测试方便，客户端配置了自动连接connect auto，并且由于EzVPN 服务器允许客户端保存密码，所以在客户端配置了 1.5 阶段认证用的用户名和密码。这样的配置组合，能够让EzVPN客户端在不需要管理员干预的情况下，全自动连接。

例9-20 配置Branch的EzVPN 硬件客户端为客户模式
crypto ipsec client ezvpn Yeslab-Ez-Client

connect auto

group ipsecgroup key yeslabccies

mode client
peer 61.128.1.1

username ipsecuser password yeslabccies

连接成功后，可以使用例9-21的方法在客户端Branch上查看EzVPN连接状态。

这里关键的查看点为客户模式是否获取了IP地址，很明显由于使用的是客户模式的EzVPN，所以Branch获取了EzVPN服务器使用MODE-CFG技术推送的IP地址123.1.1.102。因此第一个测试项目“客户端是否获取地址”的测试结果为“有”，与表9-1中的结果相同。

例9-21 查看客户端EzVPN状态 （查看是否获取地址）

Branch#show crypto ipsec client ezvpn

Easy VPN Remote Phase: 6

Tunnel name : Yeslab-Ez-Client

Inside interface list: FastEthernet0/0

Outside interface: FastEthernet1/0

Current State: IPSEC_ACTIVE

Last Event: MTU_CHANGED

Address: 123.1.1.102 (applied on Loopback10000) <获取地址>

Mask: 255.255.255.255

Save Password: Allowed

Current EzVPN Peer: 61.128.1.1

第二个测试项目为“客户端是否存在PAT，或者有几个PAT”。在Branch路由器上使用show ip nat statistics 命令来查看nat 的状态，如例9-22 所示。可以发现该路由器上存在一个 id:4 的 PAT ，这个 PAT 的主要任务为转换内部地址到地址池地址123.1.1.102。所以本次测试的结果为“一个PAT”。

例9-22 查看客户端是否存在PAT

Branch#show ip nat statistics

Total active translations: 0 (0 static, 0 dynamic; 0 extended) Outside interfaces:

FastEthernet1/0

Inside interfaces:

FastEthernet0/0

Hits: 0 Misses: 0

CEF Translated packets: 0, CEF Punted packets: 0

Expired translations: 0

Dynamic mappings:

-- Inside Source

[Id: 4] access-list enterprise-list pool Yeslab-Ez-Client refcount 0 （存在一个PAT）
pool Yeslab-Ez-Client: netmask 255.255.255.0
start 123.1.1.102 end 123.1.1.102
type generic, total addresses 1, allocated 0 (0%), misses 0

Appl doors: 0

Normal doors: 0

Queued Packets: 0

第三个测试项目为“客户端身后网络客户是否能够访问互联网”。例 9-23 为在Private路由器上，使用ping测试访问互联网路由器（202.100.1.10），测试的结果为“不能”。

紧接着例9-24，我们在Internet路由器上debug测试ICMP数据包发现，客户身后网络不能访问互联网的原因是，Branch没有为内部网络，配置访问互联网的PAT转换。当然在没有启用分割隧道技术的 EzVPN 客户模式，内部网络不能访问互联网是正常现象。

例9-23 测试客户身后内部网络是否能够访问互联网

Private#ping 202.100.1.10

Type escape sequence to abort.

Sending 5, 100-byte ICMP Echos to 202.100.1.10, timeout is 2 seconds: .....（很明显客户身后内部网络不能够访问互联网）

Success rate is 0 percent (0/5)Hits: 0 Misses: 0

例9-24 Internet路由器启用debug测试ICMP 数据包

Internet#debug ip icmp

ICMP packet debugging is on

Internet#

*Mar 1 07:39:22.234: ICMP: echo reply sent, src 202.100.1.10, dst 123.1.1.102

*Mar 1 07:39:24.010: ICMP: echo reply sent, src 202.100.1.10, dst 123.1.1.102

*Mar 1 07:39:26.010: ICMP: echo reply sent, src 202.100.1.10, dst 123.1.1.102

*Mar 1 07:39:28.018: ICMP: echo reply sent, src 202.100.1.10, dst 123.1.1.102

最后一个测试项目为“中心站点是否能够主动发起连接访问客户身后网络”。如例9-25所示，我们需要首先在客户身后网络设备Private使用ping和telnet对中心内部服务器Inside进行测试。

测试的结果为客户身后网络可以访问中心内部网络，但是访问的源地址已经被转换成为地址池的地址123.1.1.102。然后在中心内部网络设备Inside上测试访问客户端身后网络，测试的结果为“不能”访问。

例9-25 测试中心站点是否能够主动发起连接访问客户身后网络

Private#ping 10.1.1.10

Type escape sequence to abort.

Sending 5, 100-byte ICMP Echos to 10.1.1.10, timeout is 2 seconds: !!!!! （客户能够主动访问中心站点）

Success rate is 100 percent (5/5), round-trip min/avg/max = 96/180/352 ms Private#telnet 10.1.1.10

Trying 10.1.1.10 ... Open

User Access Verification

Password:

Inside>sh user

Inside>

Inside#ping 172.16.1.10

Type escape sequence to abort.

Sending 5, 100-byte ICMP Echos to 172.16.1.10, timeout is 2 seconds: ..... （中心站点无法主动访问客户身后网络，因为PAT隐藏了这个网络）

Success rate is 0 percent (0/5)

9.8.2 客户模式加上分割隧道

测试完客户模式后，现在开始测试客户模式加上隧道分割技术。例9-26所示为在EzVPN服务器Center上配置分割隧道技术。

例9-26 配置Center的EzVPN 服务器
crypto isakmp client configuration group ipsecgroup

key yeslabccies

pool ippool
acl Split <启用分割隧道技术>
save-password
ip access-list extended Split
permit ip 10.1.1.0 0.0.0.255 any

<组下只保留上述配置，其余配置与实验一一样>

测试新的模式需要断开之前的 EzVPN 连接，然后重新连接。例 9-27 所示为在EzVPN客户端使用命令清除先前的EzVPN连接，由于EzVPN客户端配置了自动连接特性，所以这会触发下一次EzVPN的连接。

例9-27 在客户端清除EzVPN 连接

Branch#clear crypto ipsec client ezvpn

<通过上述命令清除EzVPN连接，并且EzVPN会自动重新连接>

重新连接成功之后，在客户端Branch上查看了EzVPN状态，如例9-28所示。

由于是客户模式所以依然会获取 IP 地址（123.1.1.103），因此第一个测试项目的结果为“有”。当然除了查看IP地址外，这里还应该注意从EzVPN服务器端获取的隧道分割策略。

例9-28 查看客户端EzVPN状态

Branch#show crypto ipsec client ezvpn

Easy VPN Remote Phase: 6

Tunnel name : Yeslab-Ez-Client

Inside interface list: FastEthernet0/0

Outside interface: FastEthernet1/0

Current State: IPSEC_ACTIVE

Last Event: MTU_CHANGED

Address: 123.1.1.103 (applied on Loopback10000) <获取地址>

Mask: 255.255.255.255

Save Password: Allowed

Split Tunnel List: 1 <获取分割隧道策略>

Address : 10.1.1.0

Mask: 255.255.255.0

Protocol : 0x0

Source Port: 0

Dest Port : 0

Current EzVPN Peer: 61.128.1.1

由于启用了分割隧道策略，所以在客户端查看 NAT 状态时，发现此时存在两个PAT，如例9-29所示。一个是id:6的PAT，这个PAT的主要任务是转换内部网络到外部接口 FastEthernet1/0，目的是为了让内部客户访问互联网。另一个是 id:5 的 PAT，这个PAT的主要任务是转换内部网络到地址池地址123.1.1.103，然后访问公司内部网络。所以第二项测试的结果为“两个PAT”。

例9-29 查看客户端是否存在PAT

Branch#show ip nat statistics

Total active translations: 0 (0 static, 0 dynamic; 0 extended) Outside interfaces:

FastEthernet1/0

Inside interfaces:

FastEthernet0/0

Hits: 59 Misses: 0

CEF Translated packets: 59, CEF Punted packets: 0

Expired translations: 2

Dynamic mappings:

-- Inside Source

[Id: 6] access-list internet-list interface FastEthernet1/0 refcount 0

<第一个用户上网的PAT，PAT转换到外部接口Fa1/0接口地址>

[Id: 5] access-list enterprise-list pool Yeslab-Ez-Client refcount 0

<第二个访问中心内部网络的PAT，转换到地址池地址（123.1.1.103）>
pool Yeslab-Ez-Client: netmask 255.255.255.0
start 123.1.1.103 end 123.1.1.103
type generic, total addresses 1, allocated 0 (0%), misses 0

Appl doors: 0

Normal doors: 0

Queued Packets: 0

由于在客户端查看NAT 时发现存在id:6PAT，所以在Private 上使用ping 和telnet能够成功的访问互联网路由器Internet（见例9-30）。有鉴于此，第三项的测试结果为“能”。

例9-30 测试客户身后内部网络是否能够访问互联网

Private#ping 202.100.1.10

Type escape sequence to abort.

Sending 5, 100-byte ICMP Echos to 202.100.1.10, timeout is 2 seconds: !!!!! <分支站点内部网络能够访问互联网>

Success rate is 100 percent (5/5), round-trip min/avg/max = 28/94/220 ms Private#telnet 202.100.1.10

Trying 202.100.1.10 ... Open

User Access Verification

Password:

Internet>en

Password:

Internet#sh user

由于依然采用客户模式，所以例9-31和例9-25的测试结果完全相同，中心内部网络设备Inside，依然无法访问客户端身后网络设备Private。

例9-31 测试中心站点是否能够主动发起连接访问客户身后网络

Private#ping 10.1.1.10

Type escape sequence to abort.

Sending 5, 100-byte ICMP Echos to 10.1.1.10, timeout is 2 seconds: !!!!! <客户能够主动访问中心站点>

Success rate is 100 percent (5/5), round-trip min/avg/max = 96/180/352 ms Private#telnet 10.1.1.10

Trying 10.1.1.10 ... Open

User Access Verification

Password:

Inside>sh user

Inside>

Inside#ping 172.16.1.10

Type escape sequence to abort.

Sending 5, 100-byte ICMP Echos to 172.16.1.10, timeout is 2 seconds: ..... （中心站点无法主动访问客户身后网络，因为PAT隐藏了这个网络）

Success rate is 0 percent (0/5)

现在大家已经了解了整个测试的方法，表9-1中的其余部分的测试可以使用相同的方法进行测试，这里不再累述。

9.9 ISAKMP Profile 技术

本部分重点介绍ISAKMP Profile，IPSec VPN 的一种新的配置方式。在介绍这项技术之前，我们需要先了解它可以解决什么问题。到目前为止，本书已经介绍了很多种不同类型的VPN，每次实验我们都在一台VPN设备（路由器）上配置一种类型的VPN，例如，站点到站点的VPN、GETVPN、DMVPN，或者本章介绍的EzVPN。因此，我们就有必要介绍一下，如果将多种类型VPN，配置在一台路由器上会出现什么问题，以及配置时需要使用什么技巧。

首先，多种类型的VPN同时配置在一台路由器，确实会出现策略冲突的问题，特别是当站点到站点VPN和EzVPN同时在一台路由器上配置的时候，我们可以通过下面的实验来说明这个问题。

9.9.1 实际接线状况

图9-24所示为L2L与EzVPN混合实验的实际接线图。本次实验一共需要使用4台路由器，由左至右分别为，模式中心站点VPN网关路由器的Center、模拟互联网路由器的Internet、模拟分支站点一VPN网关路由器的Branch1和模拟分支站点二VPN网关路由器的Branch2。

图9-24 L2L与EzVPN混合实验实际接线图

路由器Center的环回口（Loopback0）模拟中心站点内部网络，路由器Center和Internet的 Fa0/0 接口被桥接到一起模拟互联网，路由器 Internet和 Branch1的 Fa1/0接口被桥接在一起模拟互联网网络。路由器Internet和Branch2的Fa2/0接口被桥接到一起模拟互联网网络。路由器Branch1的环回口（Loopback0）模拟分支站点一内部网络，路由器Branch2的环回口（Loopback0）模拟分支站点二内部网络。

9.9.2 实验拓扑

图9-25所示为L2L与EzVPN混合实验拓扑。本次实验的主要目的是介绍站点到站点VPN和EzVPN混合配置时会产生的问题。Center模拟中心站点路由器，Branch1模拟分支站点一路由器，Branch2 模拟分支站点二路由器。中心站点和分支站点一之间建立站点到站点VPN。中心站点和分支站点二之间建立EzVPN，中心为EzVPN服务器，分支站点二是EzVPN的硬件客户端。

9.9.3 基本网络配置

本部分的主要任务是配置基本网络，为后续的配置与测试搭建网络环境。例9-32、例9-33、例9-34和例9-35分别显示了如何在Center、Internet、Branch1和Branch2上执行基本的网络配置。

图9-25 L2L与EzVPN混合实验拓扑

例9-32 Center上的基本网络配置

enable

configure terminal

!

hostname Center

!

interface Loopback0
ip address 172.16.1.1 255.255.255.0

!

interface FastEthernet0/0
ip address 202.100.1.1 255.255.255.0

no shutdown

!

ip route 0.0.0.0 0.0.0.0 202.100.1.10

!

end

例9-33 Internet上的基本网络配置

enable

configure terminal

!

hostname Internet

!

interface FastEthernet0/0
ip address 202.100.1.10 255.255.255.0

no shutdown

!

interface FastEthernet1/0
ip address 61.128.1.10 255.255.255.0

no shutdown

!

interface FastEthernet2/0
ip address 137.78.5.10 255.255.255.0

no shutdown

!

end

例9-34 Branch1上的基本网络配置

enable

configure terminal

!

hostname Branch1

!

interface Loopback0
ip address 10.1.1.1 255.255.255.0

!

interface FastEthernet1/0
ip address 61.128.1.1 255.255.255.0

no shutdown

!

ip route 0.0.0.0 0.0.0.0 61.128.1.10

!

end

例9-35 Branch2上的基本网络配置

enable

configure terminal

!

hostname Branch2

!

interface Loopback0
ip address 192.168.1.1 255.255.255.0

!

interface FastEthernet2/0
ip address 137.78.5.1 255.255.255.0

no shutdown

!

ip route 0.0.0.0 0.0.0.0 137.78.5.10

!

end

9.9.4 配置站点到站点VPN

基本网络配置完毕之后，首先配置Center与Branch1之间的站点到站点的IPSecVPN。例9-36 所示为Center 上站点到站点IPSec VPN 配置，例9-37 所示为Branch1上站点到站点 IPSec VPN 配置。配置时，最好能够让一个策略既能用于站点到站点IPSec VPN，又能用于后续要配置的EzVPN。

例9-36 Center上的站点到站点VPN配置

Center(config)#crypto isakmp policy 10

Center(config-isakmp)# encr 3des

Center(config-isakmp)# hash md5

Center(config-isakmp)# authentication pre-share

Center(config-isakmp)# group 2

<配置第一阶段策略时，应该考虑EzVPN策略，让站点到站点VPN和EzVPN使用一个第一阶段策略。当然配置两个策略，一个用于站点到站点，一个用于EzVPN也可以，但是推荐使用一个策略同时用于站点到站点VPN和EzVPN> Center(config)#crypto isakmp key L2L-key address 61.128.1.1

Center(config)# crypto ipsec transform-set Trans-Set esp-des esp-md5-hmac <这个第二阶段策略也最好能够同时运用于站点到站点VPN和EzVPN>

Center(config)#ip access-list extended L2L-Traffic

Center(config-ext-nacl)# permit ip 172.16.1.0 0.0.0.255 10.1.1.0 0.0.0.255

Center(config)#crypto map cry-map 10 ipsec-isakmp

Center(config-crypto-map)# set peer 61.128.1.1

Center(config-crypto-map)# set transform-set Trans-Set

Center(config-crypto-map)# match address L2L-Traffic

Center(config-if)#interface FastEthernet0/0

Center(config-if)# ip address 202.100.1.1 255.255.255.0

Center(config-if)# crypto map cry-map

例9-37 Branch1上的站点到站点VPN配置

Branch1(config)#crypto isakmp policy 10

Branch1(config-isakmp)# encr 3des

Branch1(config-isakmp)# hash md5

Branch1(config-isakmp)# authentication pre-share

Branch1(config-isakmp)# group 2

Branch1(config)#crypto isakmp key L2L-key address 202.100.1.1

Branch1(config)#crypto ipsec transform-set Trans-Set esp-des esp-md5-hmac Branch1(config)#ip access-list extended L2L-Traffic

Branch1(config-ext-nacl)# permit ip 10.1.1.0 0.0.0.255 172.16.1.0 0.0.0.255

Branch1(config)#crypto map cry-map 10 ipsec-isakmp

Branch1(config-crypto-map)# set peer 202.100.1.1

Branch1(config-crypto-map)# set transform-set Trans-Set

Branch1(config-crypto-map)# match address L2L-Traffic

Branch1(config-if)#interface FastEthernet1/0

Branch1(config-if)# ip address 61.128.1.1 255.255.255.0

Branch1(config-if)# crypto map cry-map

配置完Center 和Branch1 之间的站点到站点IPSecVPN 之后，可以在Branch1 上使用ping进行测试，并且查看加解密状态，如例9-38所示。

例9-38 测试站点到站点VPN

Branch1#ping 172.16.1.1 source loopback 0 repeat 10

Type escape sequence to abort.

Sending 10, 100-byte ICMP Echos to 172.16.1.1, timeout is 2 seconds: Packet sent with a source address of 10.1.1.1

.!!!!!!!!!

Success rate is 90 percent (9/10), round-trip min/avg/max = 68/97/120 ms Branch1#show crypto engine connections active

Crypto Engine Connections

9.9.5 配置EzVPN

配置并测试完毕Center 与Branch1 之间站点到站点IPSecVPN 后，需要在Center上配置EzVPN服务器（见例9-39），并在Branch2上配置EzVPN硬件客户端（见例9-40）。

例9-39 Center上的EzVPN服务器配置

Center(config)#aaa new-model

Center(config)#aaa authentication login noacs line none

Center(config)#aaa authentication login EzVPN-XAUTH local

Center(config)#aaa authorization network EzVPN-MODE-CFG local

Center(config)#username ipsecuser password 0 yeslabccies

Center(config)#ip local pool EzVPN-POOL 123.1.1.100 123.1.1.200

Center(config)#crypto isakmp client configuration group ipsecgroup Center(config-isakmp-group)# key yeslabccies

Center(config-isakmp-group)# pool EzVPN-POOL

Center(cfg-crypto-trans)#crypto dynamic-map dymap 10

Center(config-crypto-map)# set transform-set Trans-Set

<注意不用为EzVPN定义第一阶段策略和第二阶段转换集，使用在第五部分为站点到站点配置的策略即可>

Center(config)# crypto map cry-map client authentication list EzVPN-XAUTH

Center(config)#crypto map cry-map isakmp authorization list EzVPN-MODE-CFG

Center(config)#crypto map cry-map client configuration address respond Center(config)#crypto map cry-map 1000 ipsec-isakmp dynamic dymap <注意一个接口只能运用一个crypto map，但是一个crypto map 可以配置多个ID，每一个ID表示一个VPN，动态crypto map的ID应该最大，保障首先选择明细策略，最后使用动态crypto map> Center(config)#line con 0

Center(config-line)# login authentication noacs

Center(config)#line aux 0

Center(config-line)# login authentication noacs

例9-40 Branch2上的EzVPN 客户端配置

Branch2(config)#crypto ipsec client ezvpn EzVPN

Branch2(config-crypto-ezvpn)# connect manual

Branch2(config-crypto-ezvpn)# group ipsecgroup key yeslabccies Branch2(config-crypto-ezvpn)# mode client

Branch2(config-crypto-ezvpn)# peer 202.100.1.1

Branch2(config-crypto-ezvpn)#interface Loopback0

Branch2(config-if)# crypto ipsec client ezvpn EzVPN inside

Branch2(config-if)#interface FastEthernet2/0

Branch2(config-if)# crypto ipsec client ezvpn EzVPN outside

例9-41所示为在Branch2上测试与Center之间的EzVPN连接，以及使用ping测试EzVPN的加解密。

例9-41 测试EzVPN

Branch2#crypto ipsec client ezvpn connect *Mar 1 00:49:23.171: EZVPN(EzVPN): Pending XAuth Request, Please enter the followingcommand: *Mar 1 00:49:23.171: EZVPN: crypto ipsec client ezvpn xauth

Branch2#crypto ipsec client ezvpn xauth

Username: ipsecuser

Password: yeslabccies

Branch2#ping 172.16.1.1 source 192.168.1.1 repeat 10

Type escape sequence to abort.

Sending 10, 100-byte ICMP Echos to 172.16.1.1, timeout is 2 seconds: Packet sent with a source address of 192.168.1.1

!!!!!!!!!!

Success rate is 100 percent (10/10), round-trip min/avg/max = 104/140/184 ms 9.9.6 EzVPN 对站点到站点VPN的影响

现在Center 与Branch1 之间的站点到站点IPSec VPN，Center 与Branch2 之间的EzVPN都已经分别测试成功了。从表面上看，似乎没有出现任何问题，但是在Branch1上清除先前建立的安全关联（见例9-42），并且重新使用ping测试Branch1和Center之间的站点到站点IPSec VPN 时，就会发现现在这个站点到站点IPSec VPN 已经不能成功建立了。

例9-42 重新测试站点到站点VPN

Branch1#clear crypto isakmp

Branch1#clear crypto sa

<清除VPN安全关联，IKE安全关联和IPSec安全关联>

Branch1#ping 172.16.1.1 source loopback 0 repeat 10

Type escape sequence to abort.

Sending 10, 100-byte ICMP Echos to 172.16.1.1, timeout is 2 seconds: Packet sent with a source address of 10.1.1.1

..........

Success rate is 0 percent (0/10)

Branch1#show crypto engine connections active

Crypto Engine Connections

ID Interface　Type　Algorithm　　Encrypt　Decrypt IP-Address

Branch1#

<在9.9.4部分还可以通的VPN，已经由于EzVPN的影响无法成功建立了>

9.9.7 EzVPN 对站点到站点VPN的影响问题分析

从图9-26中我们可以看到，所有的VPN请求抵达路由器后，首先会查询第一阶段IKE策略。

在9.9 节的实验中，EzVPN 和站点到站点VPN，都会使用crypto isakmp policy 10所定义的策略，这个IKE策略使用预共享密钥认证。站点到站点VPN和EzVPN，分别会找到对应的预共享密钥进行认证，只是站点到站点IPSecVPN 会使用一个key来进行认证，而EzVPN则会使用一个group加上一个key来实现认证。

第一阶段结束后，由于cryptomap cry-map client authentication list EzVPN-XAUTH是一个全局命令，会影响整个crypto map cry-map 下面的所有VPN，也就意味着这个cryptomap 下的所有VPN 都需要进行XAUTH。然而，站点到站点的IPSec VPN 显然是无法进行XAUTH认证的，因此连接失败，EzVPN不受影响成功连接。

图9-26 EzVPN对站点到站点VPN的影响分析图

要解决这个问题有一个很简单的办法，如例9-43所示，使用如下的命令来配置站点到站点的预共享密钥即可。

例9-43 为isakmp key 配置no-xauth 参数

Center(config)#crypto isakmp key 0 L2L-key address 61.128.1.1 no-xauth 在为Isakmpkey配置了no-xauth 参数后，当站点到站点IPSecVPN 完成了第一阶段的协商，就会旁路掉crypto map cry-map client authentication list EzVPN-XAUTH 命令对站点到站点IPSecVPN 的影响，直接查询第二阶段的crypto map 策略。于是，它就会找到ID 等于 10 的crypto map 条目，并成功建立站点到站点的IPSecVPN。整个策略继承关系如图9-27所示。

虽然no-xauth技术成功解决了EzVPN对站点到站点VPN的影响。但是更推荐使用ISAKMP Profile 技术，下面我们就对这个技术进行介绍。

图9-27 no-xauth策略继承图

9.9.8 ISAKMP Profile 技术简介

ISAKMP Profile 技术为IKE 第一阶段协商提供了一种新的配置模型，它主要的作用就是将第一阶段的ISAKMP参数映射到一个IPSec隧道（主要任务是映射第一阶段的身份认证信息到第二阶段策略）。当然这个技术还能够运用于VRF的IPSec VPN、路由器VPN 的证书认证管理和IPSec QoS 技术（这些部分已经超过了本书的范围，可以从现任明教教主出品的“Yeslab CCSP VPN 实验视频”中进行深入的学习）。

ISAKMP Profile 技术普遍运用于一个设备与不同设备建立多种类型VPN 的场合。例如，在一个设备上混合配置站点到站点VPN和EzVPN的场合。

ISAKMP Profile 在配置上主要的特点是，通过match identity命令来匹配VPN 请求中的身份认证信息，然后在crypto map 下调用ISAKMP Profile，实现第一阶段身份认证信息和第二阶段策略的关联，消除了不同VPN策略之间的相互影响。

例9-44 就是修改成为ISAKMPProfile 配置方式之后，Center 路由器上的配置。

例9-44 使用ISAKMP Profile配置EzVPN服务器

enable

configure terminal

!

aaa new-model

!

aaa authentication login noacs line none
aaa authentication login EzVPN-XAUTH local
aaa authorization network EzVPN-MODE-CFG local

!

username ipsecuser password 0 yeslabccies

!

crypto keyring L2L-keyring
pre-shared-key address 61.128.1.1 key L2L-key

<配置站点到站点VPN用的钥匙链>

!

crypto isakmp policy 10
encr 3des
hash md5
authentication pre-share
group 2

!

crypto isakmp client configuration group ipsecgroup

key yeslabccies
pool EzVPN-POOL
crypto isakmp profile L2L-Profile
keyring L2L-keyring
match identity address 61.128.1.1 255.255.255.255

<站点到站点 VPN 用的 ISAKMP Profile，匹配身份（match identity）地址为 61.128.1.1，使用“L2L-keyring”这个钥匙链来认证> crypto isakmp profile EzVPN-Profile

match identity group ipsecgroup
client authentication list EzVPN-XAUTH
isakmp authorization list EzVPN-MODE-CFG

client configuration address respond

<EzVPN 用的ISAKMPProfile，匹配身份（matchidentity）组为ipsecgroup，就采用XAUTH和MODE-CFG等一系列策略。注意这些策略不再是全局策略，不会影响整个 crypto map 的所有 VPN，仅仅只会影响组为ipsecgroup的EzVPN连接> !

crypto ipsec transform-set Trans-Set esp-des esp-md5-hmac

!

crypto dynamic-map dymap 10
set transform-set Trans-Set
set isakmp-profile EzVPN-Profile

<在crypto map（不管是动态还是静态）下引用ISAKMP-Profile，实现第一阶段身份认证信息和第二阶段策略的关联。这样实现了VPN策略之间的相互独立，不会出现相互影响的问题> !

crypto map cry-map 10 ipsec-isakmp
set peer 61.128.1.1
set transform-set Trans-Set
set isakmp-profile L2L-Profile
match address L2L-Traffic

<在crypto map（不管是动态还是静态）下引用ISAKMP-Profile，实现第一阶段身份认证信息和第二阶段策略的关联。这样实现了VPN策略之间的相互独立，不会出现相互影响的问题> crypto map cry-map 1000 ipsec-isakmp dynamic dymap

!

interface FastEthernet0/0
ip address 202.100.1.1 255.255.255.0
crypto map cry-map

!

ip local pool EzVPN-POOL 123.1.1.100 123.1.1.200

!

ip access-list extended L2L-Traffic
permit ip 172.16.1.0 0.0.0.255 10.1.1.0 0.0.0.255

!

line con 0

login authentication noacs
line aux 0

login authentication noacs

!

end

了解完配置方法之后，我们再通过图 9-28 来了解整个 ISAKMP Profile 的策略继承关系。

图9-28 ISAKMP Profile策略继承图

VPN请求抵达路由器后，首先会查询第一阶段IKE策略。EzVPN和站点到站点VPN 都会选择crypto isakmp policy10 命令。这个策略使用预共享密钥认证。

确认了认证策略之后就需要查询 ISAKMP Profile，通过match identity 命令来找到不同的ISAKMP Profile。此时，站点到站点VPN 会使用L2L-Profile 这个ISAKMP Profile 策略，而EzVPN 则会使用EzVPN-Profile 这个ISAKMP Profile 策略。并且我们会在静态或者动态crypto map 下调用ISAKMP Profile，来实现第一阶段身份认证信息到第二阶段策略的映射。

这样配置的好处就在于，以前全局配置的crypto map cry-map client authentication list EzVPN-XAUTH 命令消失了，现在它只出现在ISAKMPProfile EzVPN-Profile 下，因此它也仅仅只会影响身份认证信息为group ipsecgroup 的EzVPN。

使用ISAKMP Profile 技术的好处就在于消除了不同VPN 策略之间的影响，让第一阶段策略和第二阶段策略关联得更加紧密。当然ISAKMPProfile的功能还不仅于此，它还能在VRF的IPSecVPN，VPN 证书认证管理和IPSecQoS 里边得到更多的运用。

9.10 Dynamic Virtual Tunnel Interface（DVTI）技术

我们曾经在本书的4.4节介绍过VTI技术，并且对SVTI的配置进行了详细的介绍。VTI技术一共分为两大部分SVTI和DVTI，SVTI运用于站点到站点VPN，用于替代传统静态crypto map 的配置，并且创建一个虚拟隧道接口，我们可以在这个虚拟隧道接口上对VPN流量运用各种网络技术，例如IOS防火墙、QoS、NAT、动态路由协议等。DVTI技术与SVTI技术类似，只是DVTI技术运用于远程访问的EzVPN， Cisco官方对DVTI的特点作了如下的介绍。

1．替代传统的Dynamicmap 配置。

2．支持加密单播与组播。

3．支持QoS、FW、NetFlow、ACL、NAT和VRF技术（注意不支持在DVTI接口上的动态路由协议）。

4．支持RADIUS服务器推送基于用户和组的策略。

5．克隆虚拟模板（virtual template）配置，动态创建虚拟访问接口（virtual access interfaces）。

在了解了DVTI的基本特性后，我们先来了解一下DVTI的具体配置命令，然后再介绍一下作者对这个技术的理解。

9.10.1 实际接线状况

图9-29 所示为EzVPN DVTI 实验实际接线图。本次实验一共需要使用 3 台路由器，由左至右分别为模拟中心站点 VPN 网关路由器的 Center、模拟互联网路由器的Internet和模拟分支站点VPN网关路由器的Branch。

图9-29 EzVPN DVTI实验实际接线图

路由器Center和Internet的Fa0/0接口被桥接到一起，模拟互联网网络。路由器Internet 和 Branch 的 Fa1/0 接口被桥接到一起，模拟互联网网络。Center 的环回口Loopback0用于模拟中心站点内部网络，Branch的环回口Loopback0用于模拟分支站点内部网络。

9.10.2 实验拓扑

图 9-30 所示为 EzVPN DVTI 的实验拓扑。本次实验的主要目的是介绍 EzVPNDVTI的配置方式。Center模拟中心站点路由器，Branch 模拟分支站点路由器。具体网段与地址如图9-30所示。

图9-30 EzVPN DVTI实验拓扑

在采用了DVTI技术之后，EzVPN一经建立，就会在EzVPN服务器和客户端动态产生一个虚拟访问接口，这个接口的配置源自于对虚拟模板配置的克隆。EzVPN服务器和客户端通过这两个虚拟访问接口虚拟的连接在一起。本次EzVPNDVTI 实验的主要目标为，加密中心站点内部网络“172.16.1.0/24”和分支站点内部网络“10.1.1.0/24”之间的流量。

9.10.3 基本网络配置

本部分的主要任务是配置基本网络，为后续的配置与测试搭建网络环境。例9-45、例9-46和例9-47分别显示了如何在Center、Internet和Branch上执行基本的网络配置。

例9-45 Center上的基本网络配置

enable

configure terminal

!

hostname Center

!

interface Loopback0
ip address 172.16.1.1 255.255.255.0

!

interface FastEthernet0/0
ip address 202.100.1.1 255.255.255.0

no shutdown

!

ip route 0.0.0.0 0.0.0.0 202.100.1.10

!

end

例9-46 Internet上的基本网络配置

enable

configure terminal

!

hostname Internet

!

interface FastEthernet0/0
ip address 202.100.1.10 255.255.255.0

no shutdown

!

interface FastEthernet1/0
ip address 61.128.1.10 255.255.255.0

no shutdown

!

end

例9-47 Branch上的基本网络配置

enable

configure terminal

!

hostname Branch

!

interface Loopback0
ip address 10.1.1.1 255.255.255.0

!

interface FastEthernet1/0
ip address 61.128.1.1 255.255.255.0

no shutdown

!

ip route 0.0.0.0 0.0.0.0 61.128.1.10

!

end

9.10.4 EzVPN DVTI 配置

基本网络配置完毕之后，现在开始配置DVTI。例9-48和例9-49分别显示了如何在Center和Branch上配置DVTI。

注意：配置的关键在于配置中的注释。

例9-48 Center上的EzVPN DVTI 服务器配置

enable

configure terminal

!

aaa new-model

!

aaa authentication login noacs line none
aaa authentication login EzVPN-XAUTH local
aaa authorization network EzVPN-MODE-CFG local

!

username ipsecuser password 0 yeslabccies !

crypto isakmp policy 10
encr 3des
hash md5
authentication pre-share
group 2

!

crypto isakmp client configuration group ipsecgroup

key yeslabccies
pool EzVPN-Pool
save-password
crypto isakmp profile EzVPN-Profile

match identity group ipsecgroup
client authentication list EzVPN-XAUTH
isakmp authorization list EzVPN-MODE-CFG

client configuration address respond
virtual-template 100

<在 ISAKMP Profile 下调用虚拟模板，关联 ipsecgroup 组的用户到这个虚拟模板 100，我们可以在这个模板下配置访问控制列表，NAT地址转换或者QoS相关策略，这些策略自动会运用到这个组的用户> !

crypto ipsec transform-set EzVPN-Trans esp-des esp-md5-hmac

!

crypto ipsec profile IPSec-Profile
set transform-set EzVPN-Trans
set isakmp-profile EzVPN-Profile

<在IPSec Profile下调用ISAKMP Profile，关联第一阶段策略和认证信息到第二阶段策略>

!

interface Virtual-Template100 type tunnel

<配置时一定注意type tunnel 关键字>
ip unnumbered FastEthernet0/0

<注意一定要unnumber任何一个有IP地址的接口，unnumber没有配置IP地址的接口，或者随意手动配置一个IP地址都会造成EzVPN无法正常建立> tunnel source FastEthernet0/0

<隧道的源一定是本地加密点地址>
tunnel mode ipsec ipv4

<“tunnel mode ipsec ipv4”这句话是VTI 技术的关键>
tunnel protection ipsec profile IPSec-Profile

<在虚拟模板下调用IPSec Profile，这样所有动态产生的虚拟访问接口都会被这个IPSec Profile 所保护> !

ip local pool EzVPN-Pool 123.1.1.100 123.1.1.200

!

line con 0

login authentication noacs
line aux 0

login authentication noacs

!

end

例9-49 Branch上的EzVPN DVTI 客户端配置

enable

configure terminal

!

interface Virtual-Template56 type tunnel
ip unnumbered Loopback0

<虚拟模板下只需要ip unnumbered 命令即可，配置注意事项与EzVPN DVTI服务器端相同>

!

crypto ipsec client ezvpn EzVPN-Client

connect auto
group ipsecgroup key yeslabccies

mode client
peer 202.100.1.1
virtual-interface 56

<调用虚拟模板56，这个EzVPN建立以后产生的虚拟访问接口，会克隆虚拟模板56的配置而产生>

username ipsecuser password yeslabccies

!

interface Loopback0
ip address 10.1.1.1 255.255.255.0
crypto ipsec client ezvpn EzVPN-Client inside

!

interface FastEthernet1/0
ip address 61.128.1.1 255.255.255.0
crypto ipsec client ezvpn EzVPN-Client outside

!

end

9.10.5 查看EzVPN DVTI 状态

现在 EzVPN DVTI 技术已经配置完毕，例 9-50 所示为在中心站点 VPN 路由器Center上查看DVTI的状态。

例9-50 在Center上查看EzVPN DVTI 的状态

Center#show crypto session

Crypto session current status

Interface: Virtual-Access2

<动态产生接口Virtual-Access2>

Username: ipsecuser

<EzVPN认证的用户为ipsecuser>

Profile: EzVPN-Profile

<使用的ISAKMP Profile为EzVPN-Profile>

Group: ipsecgroup

<IKE第一阶段认证的组为ipsecgroup>

Assigned address: 123.1.1.101

<为客户推送的地址为123.1.1.101>

Session status: UP-ACTIVE

Peer: 61.128.1.1 port 500

IKE SA: local 202.100.1.1/500 remote 61.128.1.1/500 Active

IPSEC FLOW: permit ip 0.0.0.0/0.0.0.0 0.0.0.0/0.0.0.0

<感兴趣流为进入这个虚拟隧道接口的所有流量>

Active SAs: 2, origin: crypto map

Center#show ip route

Codes: C - connected, S - static, R - RIP, M - mobile, B - BGP

D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area

N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2

E1 - OSPF external type 1, E2 - OSPF external type 2
i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
ia - IS-IS inter area, * - candidate default, U - per-user static route o - ODR, P - periodic downloaded static route

Gateway of last resort is 202.100.1.10 to network 0.0.0.0

172.16.0.0/24 is subnetted, 1 subnets

C　　172.16.1.0 is directly connected, Loopback0

C　202.100.1.0/24 is directly connected, FastEthernet0/0

123.0.0.0/32 is subnetted, 1 subnets

S　　123.1.1.101 [1/0] via 0.0.0.0, Virtual-Access2

<通过Virtual-Access2去往地址池地址123.1.1.101>

S*　0.0.0.0/0 [1/0] via 202.100.1.10

例9-51所示为在分支站点路由器Branch上查看DVTI状态。需要注意的关键是， IPSec的感兴趣流和动态产生的默认路由。

例9-51 在Branch上查看EzVPN DVTI 的状态

Branch#show crypto session

Crypto session current status

Interface: Virtual-Access2

<动态产生接口“Virtual-Access2”>

Session status: UP-ACTIVE

Peer: 202.100.1.1 port 500

IKE SA: local 61.128.1.1/500 remote 202.100.1.1/500 Active

<两个加密点UDP/500之间的IKE安全关联>

IPSEC FLOW: permit ip 0.0.0.0/0.0.0.0 0.0.0.0/0.0.0.0

<感兴趣流为进入这个虚拟隧道接口的所有流量>

Active SAs: 2, origin: crypto map

Branch#show crypto ipsec client ezvpn

Easy VPN Remote Phase: 6

Tunnel name : EzVPN-Client

Inside interface list: Loopback0

Outside interface: Virtual-Access2 (bound to FastEthernet1/0)

<这个EzVPN的外部接口为动态产生的虚拟访问接口“Virtual-Access2”>

Current State: IPSEC_ACTIVE

Last Event: MTU_CHANGED

Address: 123.1.1.101 (applied on Loopback10000)

Mask: 255.255.255.255

Save Password: Allowed

Current EzVPN Peer: 202.100.1.1

Branch# show ip route

Codes: C - connected, S - static, R - RIP, M - mobile, B - BGP

D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area

N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2

E1 - OSPF external type 1, E2 - OSPF external type 2
i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
ia - IS-IS inter area, * - candidate default, U - per-user static route o - ODR, P - periodic downloaded static route

Gateway of last resort is 61.128.1.10 to network 0.0.0.0

202.100.1.0/32 is subnetted, 1 subnets

S　　202.100.1.1 [1/0] via 61.128.1.10

10.0.0.0/24 is subnetted, 1 subnets

C　　10.1.1.0 is directly connected, Loopback0

123.0.0.0/32 is subnetted, 1 subnets

C　　123.1.1.101 is directly connected, Loopback10000

61.0.0.0/24 is subnetted, 1 subnets

C　　61.128.1.0 is directly connected, FastEthernet1/0

S*　0.0.0.0/0 [1/0] via 61.128.1.10

[1/0] via 0.0.0.0, Virtual-Access2

<默认没有启用分割隧道技术，所以产生了一条默认路由出口为动态产生的虚拟访问接口Virtual-Access2，如果启用了分割隧道技术，应该产生一条去往中心内部网络的静态路由，下一条依然为 Virtual-Access2，强烈建议使用分割隧道技术。> 9.11 GRE Over EzVPN完美解决方案

到此为止，本书已经介绍了很多VPN技术，但是没有任何一种技术能够运用在客户和服务器双动态地址，有隧道接口并且运用动态路由协议的这种极端复杂而苛刻的场合。问题在于，上述环境虽然非常苛刻但却屡见不鲜，例如，公司和员工家庭都使用ADSL动态获取地址，但是员工却希望配置一个从家到公司的站点到站点VPN（使用 EzVPN 软件客户端拨号的感觉绝对不如站点到站点 VPN 使用起来爽），还希望有隧道并且能够运行动态路由协议（能够跑通动态路由协议，绝对是一件能让心情为之一爽的事情）。

由此可见，我们确实有必要对以前介绍的VPN技术逐个进行一番分析，了解他们运用在这种场合存在哪些缺陷。

传统的 crypto map 配置的站点到站点 VPN 就不讨论了，因为它基本上什么条件都不符合。而传统的 GRE、GRE Over IPSec 和 DMVPN 技术不支持双动态地址。GETVPN就不是一个互联网技术，所以也不在讨论的范围之内。EzVPN虽然能够支持动态地址（可以使用peer配置中心VPN网关的动态域名），但是不管是EzVPN的哪种配置方式，都不能支持在隧道上运行动态路由协议，虽然DVTI有动态产生的虚拟访问接口，但却不能在这个接口上运行动态路由协议。

综上所述，我们以前所介绍的VPN技术都不能运用在这种复杂而苛刻的场合中。现在我就为大家介绍一下现任明教教主自创的GRE Over EzVPN 完美解决方案，能够在最复杂和苛刻的VPN网络环境中运用。

图9-31 所示为GRE Over EzVPN 的完美解决方案。Center 和Branch 分别模拟中心和分支站点的VPN网关路由器。由于基本网络环境与9.10节完全相同，所以在本实验中省略了对设备基本网络配置的介绍。

图9-31 GRE Over EzVPN完美解决方案

配置GRE Over EzVPN 这个实验，我们首先需要在Center 和Branch 上创建两个环回口（Loopback100）。Center上环回口loopback100地址为1.1.1.1/32，Branch上环回口loopback100地址为2.2.2.2/32。

配置完环回口后，就开始配置一个普通的 EzVPN，唯一需要注意的就是 BranchEzVPN 的Inside 接口为 Loopback100，这样保障了EzVPN 感兴趣流在Branch 端的通信点地址为2.2.2.2/32。紧接着，在EzVPN服务器Center上配置分割隧道技术，使用分割隧道技术把1.1.1.1/32这个网络推送给客户。通过在EzVPN服务器和客户端的努力，我们让EzVPN的感兴趣流为，中心站点的1.1.1.1/32到分支站点2.2.2.2/32之间的流量（注意：客户端使用网络扩展模式）。

可能看到这里，很多人还没有看出门道，感觉作者只是在做一个无聊的 EzVPN演示实验。精彩的部分马上开始。

紧接着要配置的就是 GRE 隧道，在 Center 上配置一个 GRE 隧道，隧道的源为1.1.1.1目的为2.2.2.2。正好相反在Branch上配置的GRE隧道，隧道的源为2.2.2.2目的为1.1.1.1。

这个时候读者不妨好好想想，是不是在Center和Branch之间这个GRE隧道的所有流量（1.1.1.1到2.2.2.2之间的GRE流量）都已经被预先配置EzVPN所加密了？实现了这个实验名字“GREOverEzVPN”。

在Center和Branch之间有了一个联通的GRE隧道，后续的事情就变得比较简单了，只需要配置一个动态路由协议，把Center和Branch的身后网络，还有GRE隧道的网络加入到这个路由协议里，就大功告成了。

9.11.1 配置环回口Loopback100

配置GRE Over EzVPN这个实验，第一步需要在中心和分支站点配置两个环回口。例9-52和例9-53分别为在Center和Branch路由器上创建了两个环回口loopback100。

例9-52 在Center上配置环回口loopback100

Center(config)#interface loopback 100

Center(config-if)#ip address 1.1.1.1 255.255.255.255

例9-53 在Branch上配置环回口loopback100

Branch(config)#interface loopback 100

Branch(config-if)#ip address 2.2.2.2 255.255.255.255

9.11.2 配置EzVPN

这个实验的第二步为配置 EzVPN。EzVPN 最主要的目的是加密两个环回口之间的流量。

例9-54所示为在Center上配置EzVPN服务器，注意需要启用隧道分割和保存密码这两个特性。

例9-55所示为在Branch上配置EzVPN客户端，注意配置环回口为EzVPN的inside接口。

例9-56所示为对EzVPN进行测试，以测试两个环回口之间的流量（感兴趣流）能够正常通信。

例9-54 在Center上配置EzVPN 服务器

Center(config)#aaa new-model

Center(config)#aaa authentication login noacs line none

Center(config)#aaa authentication login EzVPN-XAUTH local

Center(config)#aaa authorization network EzVPN-MODE-CFG local

Center(config)#username ipsecuser password 0 yeslabccies

Center(config)#crypto isakmp policy 10

Center(config-isakmp)# encr 3des

Center(config-isakmp)# hash md5

Center(config-isakmp)# authentication pre-share

Center(config-isakmp)# group 2

Center(config)#crypto isakmp client configuration group ipsecgroup Center(config-isakmp-group)# key yeslabccies

Center(config-isakmp-group)# acl Split

Center(config-isakmp-group)# save-password

<注意配置分割隧道技术和保存密码>

Center(config)#crypto isakmp profile EzVPN-Profile

Center(conf-isa-prof)# match identity group ipsecgroup

Center(conf-isa-prof)# client authentication list EzVPN-XAUTH

Center(conf-isa-prof)# isakmp authorization list EzVPN-MODE-CFG

Center(conf-isa-prof)# client configuration address respond

Center(config)# crypto ipsec transform-set IPSec-Trans esp-des esp-md5-hmac Center(config)#crypto dynamic-map Dynamic-Map 10

Center(config-crypto-map)# set transform-set IPSec-Trans

Center(config-crypto-map)# set isakmp-profile EzVPN-Profile

Center(config)# crypto map cry-map 1000 ipsec-isakmp dynamic Dynamic-Map Center(config)#interface FastEthernet0/0

Center(config-if)# ip address 202.100.1.1 255.255.255.0

Center(config-if)# crypto map cry-map

Center(config)#ip access-list extended Split

Center(config-ext-nacl)# permit ip host 1.1.1.1 any

Center(config-cp)#line con 0

Center(config-line)# login authentication noacs

Center(config-line)#line aux 0

Center(config-line)# login authentication noacs

例9-55 在Branch上配置EzVPN 客户端

Branch(config)#crypto ipsec client ezvpn EzVPN-Client

Branch(config-crypto-ezvpn)# connect auto

<EzVPN 的自动连接也是一个重要特点，不需要感兴趣流的触发，只需设备开机，或者获取互联网的连接即可发起VPN连接> Branch(config-crypto-ezvpn)# group ipsecgroup key yeslabccies

Branch(config-crypto-ezvpn)# mode network-extension <使用网络扩展模式，实现2.2.2.2 到 1.1.1.1 的感兴趣流>

Branch(config-crypto-ezvpn)# peer 202.100.1.1

<EzVPN的最大特点就是不仅仅可以配置IP地址而且还可以配置域名，中心可以使用动态域名技术，客户端动态获

取IP地址，并且通过Peer指定中心的动态域名实现中心和分支站点地址的双动态>

Branch(config-crypto-ezvpn)# username ipsecuser password yeslabccies Branch(config-if)#interface Loopback100

Branch(config-if)# ip address 2.2.2.2 255.255.255.255

Branch(config-if)# crypto ipsec client ezvpn EzVPN-Client inside <注意EzVPN的内部接口是Loopback100，本地通信点>

Branch(config-if)#interface FastEthernet1/0

Branch(config-if)# ip address 61.128.1.1 255.255.255.0

Branch(config-if)# crypto ipsec client ezvpn EzVPN-Client outside 例9-56 测试EzVPN

Branch#show crypto session

Crypto session current status

Interface: FastEthernet1/0

Session status: UP-ACTIVE

Peer: 202.100.1.1 port 500

IKE SA: local 61.128.1.1/500 remote 202.100.1.1/500 Active

IPSEC FLOW: permit ip host 2.2.2.2 host 1.1.1.1

Active SAs: 2, origin: crypto map

Branch#ping 1.1.1.1 source 2.2.2.2 repeat 100

Type escape sequence to abort.

Sending 100, 100-byte ICMP Echos to 1.1.1.1, timeout is 2 seconds: Packet sent with a source address of 2.2.2.2

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Success rate is 100 percent (100/100), round-trip min/avg/max = 136/259/600 ms Branch#show crypto engine connections active

Crypto Engine Connections

9.11.3 配置GRE 隧道

这个实验的第三步为配置GRE隧道。例9-57和例9-58分别显示了如何在Center和Branch上创建GRE隧道接口。配置时需要注意隧道的源和目的分别是两个环回口。例9-59所示为在Branch上测试GRE隧道。

例9-57 在Center上配置GRE 隧道

Center(config)#interface tunnel 0

Center(config-if)#ip address 192.168.1.1 255.255.255.0

Center(config-if)#tunnel source 1.1.1.1

Center(config-if)#tunnel destination 2.2.2.2

例9-58 在Branch上配置GRE 隧道

Branch(config)#interface tunnel 0

Branch(config-if)#ip address 192.168.1.2 255.255.255.0

Branch(config-if)#tunnel source 2.2.2.2

Branch(config-if)#tunnel destination 1.1.1.1

例9-59 在Branch上测试GRE 隧道

Branch#ping 192.168.1.1

Type escape sequence to abort.

Sending 5, 100-byte ICMP Echos to 192.168.1.1, timeout is 2 seconds: !!!!!

Success rate is 100 percent (5/5), round-trip min/avg/max = 260/301/348 ms 9.11.4 动态路由协议

这个实验的最后一步就是配置动态路由协议。例9-60和例9-61分别显示了如何在 Center 和 Branch 上配置动态路由协议 OSPF，并分别宣告中心站点内部网络172.16.1.0/24，分支站点内部网络10.1.1.0/24和GRE隧道网络192.168.1.0/24。

例9-62 所示为在Branch 上对动态路由协议以及整个GRE Over EzVPN 实验进行测试。

例9-60 在Center上配置动态路由协议

Center(config)#router ospf 1

Center(config-router)#network 192.168.1.0 0.0.0.255 area 0

Center(config-router)#network 172.16.1.0 0.0.0.255 area 0

例9-61 在Branch上配置动态路由协议

Branch(config)#router ospf 1

Branch(config-router)#network 192.168.1.0 0.0.0.255 area 0

Branch(config-router)#network 10.1.1.0 0.0.0.255 area 0

例9-62 在Branch上测试动态路由协议

Branch#show ip ospf neighbor

Branch#show ip route ospf

172.16.0.0/32 is subnetted, 1 subnets

O　　172.16.1.1 [110/11112] via 192.168.1.1, 00:09:21, Tunnel0

Branch#ping 172.16.1.1 source 10.1.1.1 repeat 10

Type escape sequence to abort.

Sending 10, 100-byte ICMP Echos to 172.16.1.1, timeout is 2 seconds: Packet sent with a source address of 10.1.1.1

!!!!!!!!!!

Success rate is 100 percent (10/10), round-trip min/avg/max = 252/296/336 ms

第10章 ASA策略图

在第9章我们详细介绍了如何使用路由器（IOS）来实现EzVPN。其实除了路由器，ASA 也能够配置成为 EzVPN 的服务器，并且ASA上的EzVPN特性更多，功能更全面。但是ASA的策略继承关系相当复杂，因此本章将通过对ASA EzVPN 配置的介绍，来详细说明ASA的策略继承关系。

为了更好地解释ASA的策略继承关系，作者专门绘制了一幅 ASA 策略图，如图 10-1 所示，本章也因此图而得名。下面作者会通过这幅图，为读者详细介绍在ASA上的两个重要概念：Tunnel-Group和Group-Policy。

图10-1 ASA策略全图

10.1 Tunnel-Group

Cisco官方对Tunnel-Group作用的解释如下：

Tunnel-Group的主要任务是终结VPN链接，每一个VPN连接都首先被关联到一个特定Tunnel-group，Tunnel group为每一个成员定义了VPN链接的脚本与参数。

读者可以发现，来自 Cisco 官方的解释比较让人费解。作者换一种更简单的语言来给大家进行解读，也就是说，任何VPN连接请求抵达ASA后，ASA的第一个任务就是找到对应的Tunnel-Group来终结这个VPN。找到Tunnel-Group最重要的任务，其实就是决定认证服务器authentication-server-group，也就是决定用户认证到底是使用ASA本地数据库，还是使用RADIUS服务器，抑或使用证书进行认证。

由于站点到站点 VPN 不做用户认证，所以认证服务器这个参数对它没有什么意义，当然站点到站点VPN也可以在Tunnel-group下找到第一阶段认证用的预共享密钥。

10.1.1 站点到站点IPSec VPN Tunnel-Group 查询

VPN类型不同，ASA查询对应Tunnel-Group的方法也有所不同，首先我们来介绍一下站点到站点VPN。应该说它查询Tunnel-Group的方式最为简单，也就是通过发起VPN连接请求站点的IP地址来决定，这也可以简单地看成是由“对端IP地址”来决定。例10-1所示为本书4.2节实验中ASA上Tunnel-Group配置。

例10-1 站点到站点IPSec VPN 在ASA上的Tunnel-Group配置

ASA1(config)# tunnel-group 61.128.1.1 type ipsec-l2l <创建tunnel-group，名字为远端加密点IP 地址，类型为Lan to Lan IPSec> ASA1(config)# tunnel-group 61.128.1.1 ipsec-attributes <进入tunnel-group ipsec 属性配置模式>

ASA1(config-tunnel-ipsec)# pre-shared-key L2Lkey

<配置预共享秘密为L2Lkey>

当一个站点到站点VPN连接请求抵达ASA后，ASA会通过发起此次请求的源IP地址，在本地查找对应类型为ipsec-l2l的Tunnel-group。

在4.2节实验中，发起请求的VPN网关源IP地址为61.128.1.1，于是ASA通过查询找到了对应的 Tunnel-Group 61.128.1.1，然后从这个 Tunnel-Group 的 IPSec 属性（IPSec-attributes）中获取第一阶段认证的预共享密钥 pre-shared-key L2Lkey。如果站点到站点 VPN 找不到对应 IP 地址的 Tunnel-Group ，那么就使用系统默认的Tunnel-Group DefaultL2LGroup。

10.1.2 EzVPN Tunnel-Group 查询

如果抵达ASA的是一个EzVPN连接请求，ASA会使用本次EzVPN第一阶段认证用的组名来查找类型为remote-access的Tunnel-Group。

在第9章中我们经常使用名字为ipsecgroup的EzVPN组，为了终结此次EzVPN会话，需要在 ASA 上配置一个名字为 ipsecgroup 的 Tunnel-Group ，并且为这个Tunnel-Group关联相应的VPN参数，如地址池和XAUTH认证方式，当然Tunnel-Group决定的关键参数还是认证方式。

例10-2 所示为在ASA 上EzVPNTunnel-Group 的配置实例。

例10-2 ASA上的EzVPN Tunnel-Group配置实例

ASA(config)# ip local pool EzVPN-POOL 123.1.1.100-123.1.1.200

ASA(config)# tunnel-group ipsecgroup type remote-access <创建类型为remote-access，名字为ipsecgroup的Tunnel-Group，注意名字应该等于第一阶段认证的组名> ASA(config)# tunnel-group ipsecgroup general-attributes ASA(config-tunnel-general)# address-pool EzVPN-POOL

<在 tunnel-group 的普通属性（general-attributes）下调用地址池参数，可能很多人不明白为什么要在普通属性而不是在 IPSec 属性（ipsec-attributes）下调用，因为不仅仅只有 EzVPN 需要地址池，SSL VPN 和L2TP over IPSec 都需要地址池，这就是我们需要在普通参数下调用地址池的原因> ASA(config-tunnel-general)# tunnel-group ipsecgroup ipsec-attributes ASA(config-tunnel-ipsec)# pre-shared-key yeslabccies <在Tunnel-Group的IPSec属性（ipsec-attributes）下调用预共享秘密参数，因为毕竟只有EzVPN使用组加密钥的认证方式，SSL VPN只是单纯地使用用户和密码的认证> 注意：Tunnel-Group的主要任务是决定认证服务器authentication-server-group，但是你会发现上述配置中并没有配置这个参数。那么tunnel-group ipsecgroup到底使用什么认证服务器呢？我们可以使用show run all tunnel-group ipsecgroup来查看，例10-3就是输出结果。

例10-3 tunnel-group的默认认证服务器为“LOCAL”

tunnel-group ipsecgroup general-attributes
authentication-server-group LOCAL

在例 10-3 中可以看到，所有的 Tunnel-Group 默认的认证服务器都是本地数据库LOCAL，也就是使用本地用户名和密码来实现用户认证。

10.1.3 SSL VPN Tunnel-Group 查询

SSLVPN 查找Tunnel-Group 的方法，可以说是“既简单又复杂”。之所以说简单，是因为在绝大部分情况下，在ASA上配置SSLVPN都不需要配置Tunnel-Group，只需使用默认的Tunnel-Group DefaultWEBVPNGroup 即可。

只有在需要同时使用多种认证服务器的情况下，才有必要配置多个用于SSLVPN的Tunnel-Group来进行选择，如部门一的用户使用本地数据库进行认证，部门二的用户使用RADIUS服务器进行认证，部门三想用证书来认证用户。但是这种情况在实际工程项目中很少遇到。

一般来说，公司都会使用一种认证方式来认证整个公司的所有用户，一种认证方式不等于所有部门的用户都使用一个策略，我们可以使用授权的方式为不同的部分分派不同的策略。既然一种认证方式能够应付绝大部分情况，所以正常情况下都使用默认Tunnel-Group DefaultWEBVPNGroup。

简单的说完了，下面开始说说复杂的，虽然作者觉得下面要介绍的方法几乎没有必要使用，因为没有必要创建多个Tunnel-Group来为不同部分使用不同的认证方式。但不管怎么样，我们还是先来说说Tunnel-Group-List这项技术。

启用这项技术之后，如图10-2 所示，在SSL VPN 登录认证页面的下面部分会出现GROUP这样一个选项，供客户选择Tunnel-Group。当然这种任由用户选择Tunnel-Group的方式显然并不安全，建议使用group-lock技术来锁定用户到Tunnel-Group。

图10-2 使用Tunnel-Group-List技术选择Tunnel-Group

另外一个Tunnel-Group选择方式叫做group-url，图10-3所示为这项技术的工作示意图。

图10-3 使用Group-URL技术选择Tunnel-Group Group-URL 技术主要是通过客户在 IE 游览器中输入的 URL 来查找对应的Tunnel-Group。可以在SSL VPN 设计的时候，为不同的部门设计不同的URL，让不同部门客户连接SS LVPN 的时候使用专属的URL，并且通过Group-URL技术找到对应的Tunnel-Group。当然也建议使用group-lock技术来锁定用户到Tunnel-Group。

10.2 Group-Policy介绍

Group-Policy 决定了特定用户在特定 VPN 中的策略。注意本章开始介绍的Tunnel-Group和用户的VPN策略绝对没有任何关系，Tunnel-Group的主要任务只是根据VPN请求来决定认证服务器。有了认证服务器后就能认证用户，认证的用户可以通过多种方式获取Group-Policy，并从中获取VPN策略。应该说Group-Policy的配置与继承关系是比较复杂的，我们会通过后续的实验来说明这个问题。

10.3 ASA基本EzVPN配置

10.3.1 实际接线状况

图10-4所示为ASA基本EzVPN实验的实际接线图。本次实验一共需要使用3台路由器和1台ASA防火墙，由左至右分别为模拟分支站点VPN网关路由器的Branch、模拟互联网路由器的Internet、模拟中心站点VPN网关防火墙的Center-ASA和模拟中心站点内部服务器的路由器Inside。

图10-4 ASA基本EzVPN实验实际接线图

路由器Branch和Internet的Fa0/0接口被桥接到一起，模拟互联网网络。路由器Internet 的 Fa1/0 和 Center-ASA 的 E0/1 接口被桥接到一起，模拟互联网网络。Center-ASA的E0/2和路由器Inside的Fa2/0接口被桥接到一起。模拟中心站点内部网络。Branch路由器的环回口Loopback0用于模拟分支站点内部网络。

10.3.2 实验拓扑

图10-5所示为ASA基本EzVPN实验拓扑。本次实验的主要目的是介绍ASA上基本EzVPN配置方式。Center-ASA模拟中心站点VPN网关防火墙，Branch模拟分支

站点VPN网关路由器。Branch使用EzVPN客户模式拨号到Center-ASA，中心站点会推送123.1.1.0/24的地址池给客户。客户端转换身后网络172.16.1.0/24到这个地址池，然后访问中心站点内部网络10.1.1.0/24。

图10-5 ASA基本EzVPN实验拓扑

10.3.3 基本网络配置

本节的主要任务是配置基本网络，为后续的配置与测试搭建网络环境。例10-4、例10-5、例10-6和例10-7分别显示了如何在Branch、Internet、Center-ASA和Inside上执行基本的网络配置。

例10-4 Branch上的基本网络配置

enable

configure terminal

!

hostname Branch

!

interface Loopback0
ip address 172.16.1.1 255.255.255.0

!

interface FastEthernet0/0
ip address 202.100.1.1 255.255.255.0

no shutdown

!

ip route 0.0.0.0 0.0.0.0 202.100.1.10

!

end

例10-5 Internet上的基本网络配置

enable

configure terminal

!

hostname Internet

!

interface FastEthernet0/0
ip address 202.100.1.10 255.255.255.0

no shutdown

!

interface FastEthernet1/0
ip address 61.128.1.10 255.255.255.0

no shutdown

!

end

例10-6 Center-ASA上的基本网络配置

enable

configure terminal

!

hostname Center-ASA

!

interface Ethernet0/1

nameif Outside
security-level 0
ip address 61.128.1.1 255.255.255.0

no shutdown

!

interface Ethernet0/2

nameif Inside
security-level 100
ip address 10.1.1.1 255.255.255.0

no shutdown

!

route Outside 0.0.0.0 0.0.0.0 61.128.1.10

例10-7 Inside上的基本网络配置

enable

configure terminal

!

hostname Inside

!

enable password cisco

!

no ip domain lookup

!

interface FastEthernet2/0
ip address 10.1.1.10 255.255.255.0

no shutdown

!

ip route 0.0.0.0 0.0.0.0 10.1.1.1

!

line vty 0 15

password cisco

!

end

10.3.4 基本EzVPN配置

基本网络配置完毕之后，例10-8所示为如何在Center-ASA上配置EzVPN的服务器。读者需要重点注意tunnel-group的配置。

例10-8 Center-ASA上的EzVPN 服务器配置

Center-ASA(config)# ip local pool EzVPN-POOL 123.1.1.100-123.1.1.200

Center-ASA(config)# tunnel-group ipsecgroup type remote-access Center-ASA(config)# tunnel-group ipsecgroup general-attributes Center-ASA(config-tunnel-general)# address-pool EzVPN-POOL

Center-ASA(config)# tunnel-group ipsecgroup ipsec-attributes Center-ASA(config-tunnel-ipsec)# pre-shared-key yeslabccies Center-ASA(config)# username ipsecuser password yeslabccies Center-ASA(config)# crypto isakmp enable Outside

Center-ASA(config)# crypto isakmp policy 10

Center-ASA(config-isakmp-policy)# authentication pre-share Center-ASA(config-isakmp-policy)# encryption 3des

Center-ASA(config-isakmp-policy)# hash sha

Center-ASA(config-isakmp-policy)# group 2

Center-ASA(config)# crypto ipsec transform-set EzVPN-Trans esp-des esp-md5-hmac Center-ASA(config)# crypto dynamic-map dymap 10 set transform-set EzVPN-Trans Center-ASA(config)# crypto map cry-map 10 ipsec-isakmp dynamic dymap Center-ASA(config)# crypto map cry-map interface Outside 在Center-ASA上配置完毕EzVPN服务器端之后，需要在Branch上配置EzVPN的客户端，模式配置为客户模式，如例10-9所示。

例10-9 Branch上的EzVPN 客户端配置

Branch(config)#crypto ipsec client ezvpn EzVPN-Client Branch(config-crypto-ezvpn)#peer 61.128.1.1

Branch(config-crypto-ezvpn)#group ipsecgroup key yeslabccies Branch(config-crypto-ezvpn)#connect manual

Branch(config-crypto-ezvpn)#mode client

Branch(config)#interface fastEthernet 0/0

Branch(config-if)#crypto ipsec client ezvpn EzVPN-Client outside Branch(config)#interface loopback 0

Branch(config-if)#crypto ipsec client ezvpn EzVPN-Client inside 在Branch 上测试 EzVPN，如例 10-10所示。由于没有配置自动连接，所以需要手动触发EzVPN，并且手动输入XAUTH认证的用户名和密码。在查看连接状态时，重点需要查看客户端获取的IP地址（123.1.1.100）。

例10-10 测试EzVPN

Branch#crypto ipsec client ezvpn connect

Branch#crypto ipsec client ezvpn xauth

Username: ipsecuser

Password: yeslabccies

Branch#show crypto ipsec client ezvpn

Easy VPN Remote Phase: 6

Tunnel name : EzVPN-Client

Inside interface list: Loopback0

Outside interface: FastEthernet0/0

Current State: IPSEC_ACTIVE

Last Event: MTU_CHANGED

Address: 123.1.1.100 (applied on Loopback10000)

Mask: 255.255.255.255

Save Password: Disallowed

Current EzVPN Peer: 61.128.1.1

Branch#ping 10.1.1.10 source loopback 0

Type escape sequence to abort.

Sending 5, 100-byte ICMP Echos to 10.1.1.10, timeout is 2 seconds: Packet sent with a source address of 172.16.1.1

!!!!!

Success rate is 100 percent (5/5), round-trip min/avg/max = 64/106/208 ms Branch#show crypto engine connections active

Crypto Engine Connections

Branch#telnet 10.1.1.10 /source-interface loopback 0

Trying 10.1.1.10 ... Open

User Access Verification

Password: cisco

Inside>enable

Password:cisco

Inside#show users

10.3.5 基本EzVPN策略图分析

在10.3 节的基本ASA EzVPN 试验中，除了EzVPN 地址池外，没有配置任何其他策略。因此本次如图10-6所示，在前4个策略继承位置没有获取任何策略。仅仅只是在最后一个，即第5 个策略继承位置 Tunnel-Group Policy 获取了地址池 EzVPN-POOL。所以最终的策略就仅仅只是一个地址池address-pool。

图10-6 基本EzVPN策略图分析

10.4 策略继承位置介绍

10.4.1 第1 策略继承位置：用户属性username attribute

ASA策略图中一共有5个策略继承位置，1个用户最终的VPN策略，会分别从这5个位置继承并且累加得到。如果出现策略冲突，如第2号和第3号位置都配置了1个相同的参数（例如地址池），那么号码位置低的策略优先，而优先的策略会覆盖其他策略。

现在我们就来介绍最优先的，第1 策略继承位置，用户属性username attribute，例10-11 就是在Center-ASA 上为用户ipsecuser 配置用户属性password-storage enable （保存密码）。

例10-11 在用户属性username attribute下配置保存密码特性

Center-ASA(config)# username ipsecuser attributes

Center-ASA(config-username)# password-storage enable 例 10-12所示为在 Branch上测试EzVPN，测试的关键是看客户端是否获取了保存密码这个特性。首先发起一次连接，第一次连接需要输入用户名和密码，当连接成功后查看EzVPN 的状态，能够看到Savepassword:Allowed，这表示客户端已经从服务器端获取了保存密码这个特性，因此当清除连接再次发起 EzVPN 时，就不会再提示需要XAUTH认证了。

例10-12 测试EzVPN

Branch#crypto ipsec client ezvpn connect

<发起第一次EzVPN连接请求>

*Mar 1 00:06:01.479: EZVPN(EzVPN-Client): Pending XAuth Request, Please enter thefollowing command: *Mar 1 00:06:01.479: EZVPN: crypto ipsec client ezvpn xauth Branch#crypto ipsec client ezvpn xauth

<第一次EzVPN连接，需要手动输入用户名和密码，因为现在还没有获取保存密码的策略>

Username: ipsecuser

Password: yeslabccies

Branch#show crypto ipsec client ezvpn

Easy VPN Remote Phase: 6

Tunnel name : EzVPN-Client

Inside interface list: Loopback0

Outside interface: FastEthernet0/0

Current State: IPSEC_ACTIVE

Last Event: MTU_CHANGED

Address: 123.1.1.100 (applied on Loopback10000)

Mask: 255.255.255.255

Save Password: Allowed

<已经从ASA EzVPN 服务器获取了保存密码的VPN策略>

Current EzVPN Peer: 61.128.1.1

Branch#clear crypto ipsec client ezvpn

<清除EzVPN连接状态>

Branch#crypto ipsec client ezvpn connect

<发起第二次EzVPN连接，此次连接不需要再输入XAUTH的认证信息，即可成功连接>

用户属性ASA策略图分析

现在我们通过图10-7来分析一下策略继承关系。本次实验在第1号策略继承位置，用户属性username attribute 继承了password-storage，并且在第5 号策略继承位置获取了地址池EzVPN-POOL，由于这两个VPN策略并不冲突，所以本次VPN连接的最终策略是这2个策略的累加。

图10-7 EzVPN策略图分析（用户属性）

10.4.2 第2 策略继承位置：用户组策略user group-policy

我们已经介绍过ASA上的Group-Policy，Group-Policy决定了一个用户的VPN策略。如果我们要为一个公司部署 ASA 的 VPN ，首先应该为不同部门创建不同的Group-Policy，并且在不同部门的Group-Policy下面，配置和部门相关的VPN策略，最后再把不同部门的用户关联到特定部门的Group-Policy。这才是在ASA上最优化、最简单的 VPN 策略继承方案。用户关联的 Group-Policy 就叫做用户组策略 user group-policy。

例10-13 所示为在Center-ASA 上创建group-policy usergroup-policy，并且为它配置隧道分割策略，最后再把用户ipsecuser关联到这个group-policy。

例10-13 在用户组策略user group-policy下配置分割隧道特性

Center-ASA(config)# access-list Split permit ip 10.1.1.0 255.255.255.0 any Center-ASA(config)# group-policy usergroup-policy internal Center-ASA(config)# group-policy usergroup-policy attributes Center-ASA(config-group-policy)# split-tunnel-policy tunnelspecified Center-ASA(config-group-policy)# split-tunnel-network-list value Split <创建用户组策略user-group-policy，并在其下配置隧道分割策略>

Center-ASA(config)# username ipsecuser attributes

Center-ASA(config-username)# vpn-group-policy usergroup-policy <用户ipsecuser关联组策略user-group-policy>

例10-14所示为在Branch上测试EzVPN，首先我们需要清除已经建立的EzVPN，然后重新连接，最后查看EzVPN状态。在例10-13中，读者可以看到客户端已经获得了隧道分割策略。

例10-14 测试EzVPN

Branch#clear crypto ipsec client ezvpn

<清除上一次EzVPN的连接状态>

Branch#crypto ipsec client ezvpn connect

<发起新一次EzVPN连接>

Branch#show crypto ipsec client ezvpn

Easy VPN Remote Phase: 6

Tunnel name : EzVPN-Client

Inside interface list: Loopback0

Outside interface: FastEthernet0/0

Current State: IPSEC_ACTIVE

Last Event: MTU_CHANGED

Address: 123.1.1.100 (applied on Loopback10000)

Mask: 255.255.255.255

Save Password: Allowed

Split Tunnel List: 1

Address : 10.1.1.0

Mask: 255.255.255.0

Protocol : 0x0

Source Port: 0

Dest Port : 0

<已经获取了中心推送的隧道分割策略>

Current EzVPN Peer: 61.128.1.1

ASA策略图分析

现在我们通过图10-8来分析一下策略继承关系。本次实验在第1号策略继承位置用户属性username attribute 继承了password-storage，第2 号策略继承位置用户组策略user group-policy 继承了分割隧道策略，并且在第5 号策略继承位置获取了地址池EzVPN-POOL，由于这些VPN策略并不冲突，所以本次VPN连接的最终策略是这3个策略的累加。

图10-8 EzVPN策略图分析（用户组策略）

10.4.3 第3 策略继承位置：Tunnel-Group默认组策略Default-group-policy

同样是group-policy，用户直接关联的group-policy叫做用户组策略，这个组策略只影响关联它的用户。Tunnel-Group也可以关联group-policy，叫做tunnel-group默认组策略，这个策略会影响被这个tunnel-group终结的所有VPN会话。

我们可以这样来使用 Tunnel-Group 默认组策略：把一个公司所有用户都相同的VPN 策略单独配置一个 Group-policy，例如欢迎信息（banner），并在公司默认的Tunnel-Group 下调用这个 Group-policy，这样这个公司的所有用户都会获取这个欢迎信息。然后根据不同部门对VPN的需求，配置不同的用户组策略。

例10-15所示为创建group-policy tunnel-group-policy并且在这个group-policy下配置欢迎信息，最后把这个group-policy关联到tunnel-group ipsecgroup。

例10-15 Tunnel-Group默认组策略配置欢迎信息banner

Center-ASA(config)# group-policy tunnel-group-policy internal Center-ASA(config)# group-policy tunnel-group-policy attributes Center-ASA(config-group-policy)# banner value Welcome Yeslab Center-ASA(config)# tunnel-group ipsecgroup general-attributes Center-ASA(config-tunnel-general)# default-group-policy tunnel-group-policy <在Tunnel-group下调用group-policy>

例10-16所示为在Branch上测试EzVPN，首先我们需要清除已经建立的EzVPN，然后重新连接，最后查看 EzVPN 状态，可以看到当重新连接时，出现了配置的欢迎信息WelcomeYeslab。

例10-16 测试EzVPN

Branch#clear crypto ipsec client ezvpn

<清除上一次EzVPN的连接状态>

Branch#crypto ipsec client ezvpn connect

<发起新一次EzVPN连接>

Branch#Welcome Yeslab

<可以看到欢迎信息Welcome Yeslab>

*Mar　1　01:56:43.411:　%CRYPTO-6-EZVPN_CONNECTION_UP:　(Client)　User=ipsecuser Group=ipsecgroup　Client_public_addr=202.100.1.1　Server_public_addr=61.128.1.1

Assigned_client_addr=123.1.1.100

*Mar 1 01:56:45.027: %LINK-3-UPDOWN: Interface Loopback10000, changed state to up *Mar 1 01:56:46.027: %LINEPROTO-5-UPDOWN: Line protocol on Interface Loopback10000, changed state to up

Branch#show crypto ipsec client ezvpn

Easy VPN Remote Phase: 6

Tunnel name : EzVPN-Client

Inside interface list: Loopback0

Outside interface: FastEthernet0/0

Current State: IPSEC_ACTIVE

Last Event: MTU_CHANGED

Address: 123.1.1.100 (applied on Loopback10000)

Mask: 255.255.255.255

Save Password: Allowed

Split Tunnel List: 1

Address : 10.1.1.0

Mask: 255.255.255.0

Protocol : 0x0

Source Port: 0

Dest Port : 0

Current EzVPN Peer: 61.128.1.1

ASA策略图分析

现在我们通过图10-9来分析一下策略继承关系。本次实验在第1号策略继承位置用户属性username attribute 继承了password-storage，第2 号策略继承位置用户组策略usergroup-policy继承了分割隧道策略，第3 号策略继承位置Tunnel-group 默认组策略获取了欢迎信息banner。并且在第5号策略继承位置获取了地址池EzVPN-POOL，由于这些VPN策略并不冲突，所以本次VPN连接的最终策略是这4个策略的累加。

10.4.4 第4 策略继承位置：默认全局组策略DfltGrpPolicy

ASA 有一个默认全局组策略 DfltGrpPolicy，这个组策略不会出现在 ASA 的running-config 中，只能使用命令show running-config all group-policy才能一睹芳容。

这个默认全局组策略会影响ASA的所有VPN，也可以说所有的VPN用户都会从它继承VPN 策略，如果在这个组策略中配置了一个欢迎信息（banner），SSL VPN 和EzVPN拨号成功的客户都会看到这个欢迎信息。由于影响太广，因此不建议修改这个组策略，下面对这个策略的修改只是为了演示ASA策略图的继承关系。

图10-9 EzVPN策略图分析（Tunnel-Group默认组策略）

例10-17所示为在Center-ASA上修改默认全局组策略DfltGrpPolicy，在这个策略下配置备用网关1.1.1.1。

例10-17 默认全局组策略配置备用服务器backup-servers

Center-ASA(config)# group-policy DfltGrpPolicy attributes Center-ASA(config-group-policy)# backup-servers 1.1.1.1

<这个策略无需调用，它为全局默认策略，影响所有VPN。不仅仅配置所有EzVPN的备用VPN网关服务器为1.1.1.1，所有SSLVPN的备用VPN网关服务器也为1.1.1.1。由于影响甚广所以需要小心使用> 例10-18所示为在Branch上测试EzVPN。首先我们需要清除已经建立的EzVPN，然后重新连接，最后查看EzVPN状态，可以看到EzVPN客户端已经获得了备用网关Backup Gateway 1.1.1.1。

例10-18 测试EzVPN

Branch#clear crypto ipsec client ezvpn

<清除上一次EzVPN的连接状态>

Branch#crypto ipsec client ezvpn connect

<发起新一次EzVPN连接>

Branch#show crypto ipsec client ezvpn

Easy VPN Remote Phase: 6

Tunnel name : EzVPN-Client

Inside interface list: Loopback0

Outside interface: FastEthernet0/0

Current State: IPSEC_ACTIVE

Last Event: MTU_CHANGED

Address: 123.1.1.100 (applied on Loopback10000)

Mask: 255.255.255.255

Save Password: Allowed

Split Tunnel List: 1

Address : 10.1.1.0

Mask: 255.255.255.0

Protocol : 0x0

Source Port: 0

Dest Port : 0

Current EzVPN Peer: 61.128.1.1

Backup Gateways

(0): 1.1.1.1

<获取VPN备用网关>

ASA策略图分析

现在我们通过图10-10来分析一下策略继承关系。本次实验在第1号策略继承位置用户属性username attribute 继承了password-storage，第2 号策略继承位置用户组策略user group-policy 继承了分割隧道策略，第3 号策略继承位置Tunnel-group 默认组策略获取了欢迎信息 banner，第4 号策略继承位置默认全局组策略获取了 backup-servers 策略，并且在第5 号策略继承位置获取了地址池“EzVPN-POOL”。由于这些VPN策略并不冲突，所以本次VPN连接的最终策略是这5个策略的累加。

图10-10 EzVPN策略图分析（默认全局组策略）

10.5 ASA策略图策略优先顺序测试

我们已经介绍了ASA策略图的5个位置，并且分别在这5个位置配置了5个不相同的策略，用户的最终策略为这 5 个策略的总和。但是如果策略相同，例如，5个位置都配置了地址池策略，那么继承位置靠前的策略优先。

下面我们就通过实验来证实这个特点，例10-19到例10-22分别在第1号～第4号位置为客户配置地址池。

例10-19 第1号策略继承位置配置vpn-framed-ip-address

Center-ASA(config)# username ipsecuser attributes

Center-ASA(config-username)# vpn-framed-ip-address 1.1.1.1 255.255.255.0

例10-20 第2号策略继承位置配置address-pools POOL2

Center-ASA(config)# ip local pool POOL2 2.2.2.100-2.2.2.200

Center-ASA(config)# group-policy usergroup-policy attributes Center-ASA(config-group-policy)# address-pools value POOL2

例10-21 第3号策略继承位置配置address-pools POOL3

Center-ASA(config)# ip local pool POOL3 3.3.3.100-3.3.3.200

Center-ASA(config)# group-policy tunnel-group-policy attributes Center-ASA(config-group-policy)# address-pools value POOL3

例10-22 第4号策略继承位置配置address-pools POOL4

Center-ASA(config)# ip local pool POOL4 4.4.4.100-4.4.4.200

Center-ASA(config)# group-policy DfltGrpPolicy attributes Center-ASA(config-group-policy)# address-pools value POOL4

10.5.1 测试1：第1号策略继承位置

现在我们已经在5个策略继承位置配置了地址池策略，策略出现了冲突那么继承位置靠前的策略优先。

在例10-23的测试中，我们可以发现客户端Branch获取的地址为1.1.1.1。这正好是在第1号策略继承位置上配置的vpn-framed-ip-address。因此证明了高优先级策略覆盖低优先级策略的特点。

例10-23 在Branch上查看获取的IP地址

Branch#clear crypto ipsec client ezvpn

<清除上一次EzVPN连接状态>

Branch#crypto ipsec client ezvpn connect

<发起新一次EzVPN连接>

Branch#show crypto ipsec client ezvpn

Easy VPN Remote Phase: 6

Tunnel name : EzVPN-Client

Inside interface list: Loopback0

Outside interface: FastEthernet0/0

Current State: IPSEC_ACTIVE

Last Event: MTU_CHANGED

Address: 1.1.1.1 (applied on Loopback10000)

<获取了第1号继承位置所配置的vpn-framed-ip-address策略>

Mask: 255.255.255.255

Save Password: Allowed

Split Tunnel List: 1

Address : 10.1.1.0

Mask: 255.255.255.0

Protocol : 0x0

Source Port: 0

Dest Port : 0

Current EzVPN Peer: 61.128.1.1

Backup Gateways

(0): 1.1.1.1

10.5.2 测试2：第2号策略继承位置

为了测试第2号策略继承位置的策略，我们在例10-24中，清除了第1号策略继承位置所配置的vpn-framed-ip-address策略，并通过例10-25清除了以前的连接，然后重新发起新的连接进行测试。

读者会发现客户端Branch获取的地址为2.2.2.100，这正好是在第2号策略继承位置上配置的address-poolsPOOL2。

例10-24 在ASA上清除配置

Center-ASA(config)# username ipsecuser attributes

Center-ASA(config-username)# no vpn-framed-ip-address 1.1.1.1 255.255.255.0

例10-25 EzVPN客户端测试

Branch#clear crypto ipsec client ezvpn

<清除上一次EzVPN连接状态>

Branch#crypto ipsec client ezvpn connect

<发起新一次EzVPN连接>

Branch#show crypto ipsec client ezvpn

Easy VPN Remote Phase: 6

Tunnel name : EzVPN-Client

Inside interface list: Loopback0

Outside interface: FastEthernet0/0

Current State: IPSEC_ACTIVE

Last Event: MTU_CHANGED

Address: 2.2.2.100 (applied on Loopback10000)

<获取了第2号继承位置所配置的地址池POOL2>

Mask: 255.255.255.255

Save Password: Allowed

Split Tunnel List: 1

Address : 10.1.1.0

Mask: 255.255.255.0

Protocol : 0x0

Source Port: 0

Dest Port : 0

Current EzVPN Peer: 61.128.1.1

Backup Gateways

(0): 1.1.1.1

10.5.3 测试3：第3号策略继承位置

为了测试第3号策略继承位置的策略，我们通过例10-26清除了在第2号策略继承位置所配置的address-pools POOL2，并通过例10-27 清除了以前的连接，然后重新发起新的连接进行测试。

读者会发现客户端Branch获取的地址为3.3.3.100，这正好是在第3号策略继承位置上配置的address-pools POOL3。

例10-26 在ASA上清除配置

Center-ASA(config)# group-policy usergroup-policy attributes Center-ASA(config-group-policy)# no address-pools value POOL2

例10-27 EzVPN客户端测试

Branch#clear crypto ipsec client ezvpn

<清除上一次EzVPN连接状态>

Branch#crypto ipsec client ezvpn connect

<发起新一次EzVPN连接>

Branch#show crypto ipsec client ezvpn

Easy VPN Remote Phase: 6

Tunnel name : EzVPN-Client

Inside interface list: Loopback0

Outside interface: FastEthernet0/0

Current State: IPSEC_ACTIVE

Last Event: MTU_CHANGED

Address: 3.3.3.100 (applied on Loopback10000)

<获取了第3号继承位置所配置的地址池“POOL3”>

Mask: 255.255.255.255

Save Password: Allowed

Split Tunnel List: 1

Address : 10.1.1.0

Mask: 255.255.255.0

Protocol : 0x0

Source Port: 0

Dest Port : 0

Current EzVPN Peer: 61.128.1.1

Backup Gateways

(0): 1.1.1.1

10.5.4 测试4：第4号策略继承位置

为了测试第4号策略继承位置的策略，我们通过例10-28清除了在第3号策略继承位置所配置的 address-pools POOL3，并通过例10-29 清除了以前的连接，然后重新发起新的连接进行测试。

读者会发现客户端Branch获取的地址为4.4.4.100。这正好是在第4号策略继承位置上配置的address-pools POOL4。

例10-28 在ASA上清除配置:

Center-ASA(config)# group-policy tunnel-group-policy attributes Center-ASA(config-group-policy)# no address-pools value POOL3

例10-29 EzVPN客户端测试

Branch#clear crypto ipsec client ezvpn

<清除上一次EzVPN连接状态>

Branch#crypto ipsec client ezvpn connect

<发起新一次EzVPN连接>

Branch#show crypto ipsec client ezvpn

Easy VPN Remote Phase: 6

Tunnel name : EzVPN-Client

Inside interface list: Loopback0

Outside interface: FastEthernet0/0

Current State: IPSEC_ACTIVE

Last Event: MTU_CHANGED

Address: 4.4.4.100 (applied on Loopback10000) <获取了第4号继承位置所配置的地址池“POOL4”>

Mask: 255.255.255.255

Save Password: Allowed

Split Tunnel List: 1

Address : 10.1.1.0

Mask: 255.255.255.0

Protocol : 0x0

Source Port: 0

Dest Port : 0

Current EzVPN Peer: 61.128.1.1

Backup Gateways

(0): 1.1.1.1

10.5.5 测试5：第5号策略继承位置

为了测试第5号策略继承位置的策略，我们通过例10-30清除了在第4号策略继承位置所配置的address-pools POOL4，并通过例10-31 清除了以前的连接，然后重新发起新的连接进行测试。

读者会发现客户端Branch获取的地址为123.1.1.100，这正好是在第5号策略继承位置上配置的address-pool EzVPN-POOL。

例10-30 在ASA上清除配置

Center-ASA(config)# group-policy DfltGrpPolicy attributes Center-ASA(config-group-policy)# no address-pools value POOL4

例10-31 EzVPN客户端测试

Branch#clear crypto ipsec client ezvpn

<清除上一次EzVPN连接状态>

Branch#crypto ipsec client ezvpn connect

<发起新一次EzVPN连接>

Branch#show crypto ipsec client ezvpn

Easy VPN Remote Phase: 6

Tunnel name : EzVPN-Client

Inside interface list: Loopback0

Outside interface: FastEthernet0/0

Current State: IPSEC_ACTIVE

Last Event: MTU_CHANGED

Address: 123.1.1.100 (applied on Loopback10000)

<获取了第5号继承位置所配置的地址池EzVPN-POOL>

Mask: 255.255.255.255

Save Password: Allowed

Split Tunnel List: 1

Address : 10.1.1.0

Mask: 255.255.255.0

Protocol : 0x0

Source Port: 0

Dest Port : 0

Current EzVPN Peer: 61.128.1.1

Backup Gateways

(0): 1.1.1.1

10.6 ASA策略图总结

介绍完ASA策略图后，我们了解到ASA上的VPN策略是相当复杂而且灵活的。由此可见，解决一个问题没有一套固定的方案，可以说是条条大路通罗马。这样复杂的继承关系会让人不知所措，所以作者决定给大家推荐一个套路化的实施方案，在这里介绍它并不表示这是唯一答案，仅仅只是作者推荐的一个方案。

图10-11 教主推荐ASAVPN策略继承解决方案

这个解决方案的思路比较简单，只在ASA策略图的两个位置继承策略——第2号位置的用户组策略和第5号位置的Tunnel-group默认组策略。

把整个公司所有用户都相同的 VPN 策略定义成一个 group-policy ，并且在Tunnel-Group下调用，然后为每一个部门的用户定义不同的用户组策略，并把不同部门的用户关联到这个group-policy即可。用户的最终策略就是tunnel-group默认组策略加上特定部门的用户组策略的集合。

当然事情也可以变得更简单：如果认为两层 group-policy 的继承关系比较复杂，也可以不用配置tunnel-group默认组策略，只是单独地为每一个部门配置用户组策略。如果实施的项目非常简单，所有用户的VPN策略都一样，那么只配置一个tunnel-group默认组策略就搞定了。

10.7 ASA动态Crypto map 配置

在第5章第一个实验中，我们就已经介绍了路由器上动态crypto map 的配置，但是一直没有介绍如何在ASA 上，配置动态crypto map 的站点到站点VPN，这是因为当时很难向读者解释ASA上tunnel-group的作用。

现在，我们已经介绍了ASA策略图，了解了Tunnel-group的特点——即它主要任务就是终结一个VPN 连接，因此，我们就可以通过例10-32 来展示在 ASA 上配置动态crypto map 的方法了。

例10-32 ASA上的动态crypto map配置
tunnel-group DefaultL2LGroup ipsec-attributes
pre-shared-key yeslabccies

<DefaultL2LGroup是类型为ipsec-l2l的默认tunnel-group，如果通过IP地址没有找到对应的tunnel-group，就使用这个默认tunnel-group 来终结剩余的站点到站点的IPSec VPN。上面两句配置等同于IOS 中的“crypto isakmp key 0 yeslabccies address 0.0.0.0 0.0.0.0”这个命令的作用> crypto isakmp enable outside
crypto isakmp policy 10
authentication pre-share

encryption des

hash sha
group 1
crypto ipsec transform-set Dynamic-SET esp-des esp-md5-hmac crypto dynamic-map dymap 10 set transform-set Dynamic-SET
crypto map cry-map 1000 ipsec-isakmp dynamic dymap
crypto map cry-map interface outside

10.8 ASAL2TP over IPSec 配置

L2TP over IPSec 是一个Windows 操作系统都支持的VPN 类型，在ASA 上配置这个VPN有很多值得注意的细节，特别是Tunnel-group的处理方法。例10-33就是作者对这个特殊VPN配置的整理，大家需要严重注意加粗部分的配置。

例10-33 ASA上的L2TP over IPSec 配置
ip local pool clientvpnpool 123.1.1.100-123.1.1.200 mask 255.255.255.0
username l2tpuser password cisco mschap

<此用户名和密码用于微软的mschap认证，需要特殊的加密处理>
cry ipsec transform-set cisco esp-des esp-sha-hmac
crypto ipsec transform-set cisco mode transport

<L2TP over IPSec也是一个经典的传输模式IPSec VPN 类型>
crypto dynamic-map cisco 10 set transform-set cisco
crypto map cisco 10 ipsec-isakmp dynamic cisco

crypto map cisco interface outside
crypto isakmp identity address

<需要专门配置通过IP地址来进行ISAKMP的认证>

crypto isakmp enable outside
crypto isakmp policy 10
authentication pre-share

encryption des

hash sha
group 1
tunnel-group DefaultRAGroup general-attributes
address-pool clientvpnpool
tunnel-group DefaultRAGroup ipsec-attributes
pre-shared-key yeslabccies
tunnel-group DefaultRAGroup ppp-attributes

no authentication chap

<需要在默认的tunnel-group DefaultRAGroup 下配置地址池和IPSec VPN 的预共享认证密钥>

附录A Cisco模拟器配置指南

A.1 模拟器桥接介绍

本书中的所有实验都可以使用Cisco模拟器来完成，本章的主要目的是给大家介绍如何配置Cisco模拟器。

虽然现在大家能够在网上找到很多不同类型的模拟器，但是推荐大家还是按照本书的要求来架设，因为只有这样才能够做出和本书一样的实验效果。

本书主要涉及了两种Cisco设备，一种是Cisco路由器，另一种是Cisco ASA 防火墙，现在我们就开始介绍如何配置这两种设备的模拟器。

在介绍实际配置之前，我们先来介绍一下图A-1。位于图A-1四周的长条表示4 个微软环回口Microsoft Loopback Adapter，每一台路由器和ASA都有4个物理网口。

所有路由器的Fa0/0接口，还有ASA的E0/0接口，都被接到了第1 个微软环回口Microsoft Loopback Adapter，这个接口的名字叫做VM1。所有路由器的Fa1/0接口，还有ASA的E0/1接口，都被接到了第2个微软环回口Microsoft Loopback Adapter#2，这个接口的名字叫做VM2。所有路由器的Fa2/0接口，还有ASA的E0/2接口，都被接到了第3个微软环回口Microsoft Loopback Adapter #3，这个接口的名字叫做VM3。所有路由器的Fa3/0接口，还有ASA的E0/3接口，都被接到了第4个微软环回口 Microsoft Loopback Adapter #4，这个接口的名字叫做VM4。

图A-1 模拟器桥接示意图

这4个环回口起到的作用就像我们网络中的集线器，就像把相应的路由器和ASA的接口接到了同一台集线器上。

现在我们通过图 A-2，来了解一下如何使用我设计的这个模拟器来搭建书中的实验环境。

图A-2 模拟器桥接实例1

图 A-2 上面部分是本书中的图 2-3，下面部分是模拟器桥接示意图。很明显我们不需要做任何特殊设置，Site1和Internet的Fa0/0已经通过环回口VM1桥接在了一起。只需在 Site1 和 Internet 的 Fa0/0 上配置相同网段的 IP 地址既能正常通信。Site2 和Interface的Fa1/0也是通过同样的原理被桥接到了一起。

图A-3所示为如何使用作者设计的模拟器，来搭建书中图4-6的实验拓扑。

图A-3 模拟器桥接实例2

我们使用微软的环回口VM1把Inside路由器的Fa0/0和ASA1的E0/0桥接到了一起，根据同样的方式也把ASA1的E0/1和Internet的Fa1/0、Internet的Fa2/0和Site2的Fa2/0桥接到了一起。

A.2 配置步骤介绍

整个模拟器的配置过程包含如下10个部分：

1．创建微软环回口；

2．安装WinPcap；

3．获取微软环回口的gen-eth值；

4．修改路由器模拟器脚本；

5．计算Idle-PC值；

6．安装VMwareworkstation；

7．配置VMwareworkstation 桥接；

8．加载与配置ASA模拟器；

9．配置NamedPipeTCPProxy；

10．连接设备。

在配置模拟器之前需要通过 http://u.115.com/file/bhfq2z2k#链接获取“模拟器文件”。

A.3 创建微软环回口

本次实验以 32 位旗舰版 Windows 7 为基础平台来进行介绍。首先第一步右键单击开始菜单中的“计算机”，然后单击“属性”进入“系统”配置面板，紧接着如图A-4所示，右键单击电脑（名字就是电脑的主机名），然后单击“添加过时硬件”。

接下来我们就会进入“添加硬件”向导，选择“安装我手动从列表选择的硬件（高级）”然后再单击“下一步”，如图A-5所示。

图A-4 添加过时硬件

图A-5 手动选择硬件

接下来会弹出一个“常见硬件类型”选择框，在其中选择“网络适配器”，然后单击“下一步”，如图A-6所示。

图A-6 硬件网络适配器

在“选择网络适配器”面板中，“厂商”选择“Microsoft”，网络适配器选择“Microsoft Loopback Adapter”，如图A-7 所示。

图A-7 选择Microsoft LoopbackAdapter 紧接着多次单击“下一步”直到完成添加硬件向导。通过上述相同的方法连续添加4 个微软环回口适配器“Microsoft Loopback Adapter”。

4个环回口添加完毕后，可以在“网络连接”面板中，看到4个刚刚添加的微软环回口，如图A-8所示。推荐大家修改环回口的名字为VM1、VM2、VM3和VM4。

名字修改完毕之后，右键进入每一个环回口的属性面板，推荐大家取消选择这个连接使用的所有项目，如图A-9所示。然后重启计算机，这样配置模拟器的第一个任务创建微软环回口就完成了。

图A-8 网络连接

图A-9 取消环回口连接使用的所有项目

A.4 安装WinPcap

首先需要对从网盘下载的“模拟器文件”压缩包进行解压缩，在解压后文件夹的根目录你会找到 WinPcap_4_0_2.exe 这个文件。双击这个文件进行安装，安装的整个过程没有什么需要注意，只需要不断单击“下一步”按钮，然后单击“完成”按钮即可。

A.5 获取微软环回口的gen-eth值

现在我们需要获取每一个微软环回口的gen-eth值。首先我们需要禁用除VM1之外的所有接口，这样做的好处在于计算的结果肯定是VM1的gen-eth值。紧接着在“模拟器文件/路由器模拟器”这个目录下找到“xp_获取gen-eth.bat”这个文件，然后双击运行。

接下来的任务就是新建一个文本文档把 VM1 的 gen-eth 值记录下来，如图 A-10所示。通过相同的办法，我们可以把其余4个微软环回口的gen-eth值记录下来。

图A-10 记录VM1的gen-eth

图A-11为gen-eth值最终记录结果，注意计算完毕后需要把所有接口打开。

图A-11 gen-eth值最终记录结果

A.6 修改路由器模拟器脚本

接下来的任务就是修改路由器模拟器脚本，如图A-12所示。只需要把每一台路由器脚本中的gen-eth值替换成为图A-11中的记录结果即可。注意，不要修改其他字段。

A.7 计算Idle-PC值

在“模拟器文件/路由器模拟器”这个目录下找到“xp_获取idle-pc.bat”这个文件，然后双击运行。如图A-13所示，进入路由器后，同时按住Ctrl+“]”组合键，然后松手，再按“i”键，这样就可以计算模拟器的Idle-PC值，最后用对应最大count（count=71）的Idle-PC值，替换每一个路由器脚本中的Idle-PC字段。

图A-12 修改路由器模拟器脚本

图A-13 计算机Idle-PC值

A.8 安装VMware workstation

首先大家需要从 http://www.vmware.com/cn/购买正版 VMware Workstation，然后双击安装介质进行安装。

整个安装过程没有太多需要注意的地方，只需要在图 A-14 所示的位置，选择典型安装“Typical”，然后多次单击击“Next”按钮即可完成。

图A-14 安装VMware workstation

A.9 配置VMware workstation桥接

VMware workstation 安装完毕之后，打开 VMware workstation，并选择“Virtual Network Editor”菜单命令，如图A-15 所示。

图A-15 编辑Virtual Network Editor

图A-16 Virtual Network Editor配置

进入“Virtual Network Editor”配置面板后（见图A-16），需要分别把VMnet0 和Microsoft Loopback Adapter 桥接（Bridge）在一起，把VMnet2 和Microsoft Loopback Adapter #2 桥接（Bridge）在一起，把VMnet3 和Microsoft Loopback Adapter #3 桥接（Bridge）在一起，把VMnet4 和Microsoft Loopback Adapter#4 桥接（Bridge）在一起。

A.10 加载与配置ASA模拟器

VMware Workstation 桥接配置完毕后，接下来需要打开“模拟器文件\ASA 模拟器\asa_1.4”文件夹内的asa.vmx 文件（见图A-17），这样可以在VMware Workstation 中加载ASA模拟器。

图A-17 加载ASA模拟器文件

ASA 模拟器在VMware Workstation 加载成功后，需要确认ASA 模拟器的配置，如图A-18 所示。一定要保障模拟器的NetworkAdapter 被桥接到了VMnet0，Network Adapter2 被桥接到了 VMnet2，Network Adapter3 被桥接到了 VMnet3，Network Adapter4被桥接到了VMnet4。

图A-18 查看ASA模拟器配置

最后还需要确认Serial Port 的named pipe 配置，名字为“\\.\pipe\vmwaredebug”，本端为服务器“This end is the server”，远端为应用程序“The other end is an application”，如图A-19所示。

图A-19 查看ASA模拟器Serial Port配置

A.11 配置Named Pipe TCP Proxy

接下来的任务就是配置 Named Pipe TCP Proxy。这个软件的主要作用就是连接ASA模拟器的console口，并且把它代理到一个本地TCP端口。这样我们就可以通过Telnet这个本地TCP端口来访问ASA模拟器的console口了。

我们可以在“模拟器文件\ASA模拟器”这个目录找到这个软件，只需如图A-20所示进行配置即可。这个配置把ASA模拟器的console口转换到了本地TCP/5003端口。

图A-20 配置Named Pipe TCP Proxy A.12 连接设备

现在路由器和 ASA 模拟器都已经配置完毕。表 A-1 所示为每一台模拟器的具体连接方式。以R1 为例，要访问R1 的console 口只需要Telnet127.0.0.1 的3001 号端口，建议大家使用SecureCRT来进行连接。

表A-1 模拟器设备连接表

图书在版编目（CIP）数据

Cisco IPSec VPN实战指南/秦柯著．--北京：人民邮电出版社，2012.5

ISBN　978-7-115-27003-0

Ⅰ．①C…　Ⅱ．①秦…　Ⅲ．①虚拟网络—指南　Ⅳ．①TP393.01-62

中国版本图书馆CIP数据核字（2012）第014950号

内容提要

这是一本全面介绍Cisco IPSec VPN的图书，主要涉及在Cisco路由器和ASA硬件防火墙上的IPSec VPN技术。

本书一共分为10章，分别介绍了VPN 技术、GRE 技术与配置、IPSec 基本理论、站点到站点IPSec VPN、影响 IPSec VPN 的网络问题、IPSec VPN 中的高可用性技术、动态多点 VPN（DMVPN）、组加密传输 VPN （GETVPN）、Easy VPN、ASA 策略图等。本书附录还详细地介绍了Cisco 模拟器的配置与使用。使用附录中介绍的模拟器可以实现本书中介绍的所有实例，因此本书的第一个特点就是实例的可操作性很强。本书的第二个特点就是采用了不同的讲述方式，作者不是生硬地介绍各种IPSec VPN 特性，而是结合多年Cisco 安全教学经验，首先展示各种IPSec VPN的故障现象，然后深入浅出、一步一步地分析导致这些故障的原因，最后给出相应的解决方案，让读者能够学习到整个排错和分析的过程与思路。本书的第三个特点就是大量作者原创的独门VPN解决方案，在一些特殊部署环境使用这些解决方案会得到意想不到的效果。

本书适合正在准备参加CCNA安全（640-553）、SECURE（642-637）、FIREWALL（642-617）、VPN（642-647）、CCIE安全笔试（350-018）以及CCIE安全实验考试的考生阅读，也是从事Cisco安全技术的工程师必不可少的现场参考资料。

Cisco IPSec VPN 实战指南

◆著　秦柯

责任编辑　傅道坤

◆人民邮电出版社出版发行　　北京市崇文区夕照寺街14号

邮编　100061　　电子邮件　315@ptpress.com.cn 网址　http://www.ptpress.com.cn 北京鑫正大印刷有限公司印刷

◆开本：800×1000　1/16

印张：21

字数：423千字　　2012年5月第1版

印数：1–3500册　　2012年5月北京第1次印刷

ISBN　978-7-115-27003-0

定价：55.00元

读者服务热线：(010)67132705　印装质量热线：(010)67129223

反盗版热线：(010)67171154

Cisco IPSec VPN 实战指南 秦柯　著 封面 目录 扉页 关于作者 献词 致谢 前言 第1章 VPN技术简介 1.1 VPN产生背景 1.2 VPN的两种连接方式 1.2.1 站点到站点（Site to Site） 1.2.2 远程访问（Remote Access） 第2章 GRE 2.1 GRE技术简介 2.2 GRE基本实验 2.2.1 实验实际接线状况介绍 2.2.2 实验拓扑 2.2.3 实验介绍 2.2.4 基本网络配置 2.2.5 GRE 和动态路由协议OSPF 配置 2.2.6 查看状态与测试 第3章 IPSec基本理论 3.1 基本原理介绍 3.2 IPSec框架 3.2.1 散列函数 3.2.2 加密算法 3.2.3 封装协议 3.2.4 密钥有效期 3.3 互联网密钥交换协议IKE（Internet Key Exchange） 3.3.1 IKE 与ISAKMP 3.3.2 IKE 的2 个阶段与3 个模式 第4章 站点到站点IPSec VPN 4.1 经典站点到站点IPSec VPN 4.1.1 实际接线状况 4.1.2 实验拓扑介绍 4.1.3 基本IP 地址配置 4.1.4 VPN 路由分析 4.1.5 IOS IPSec VPN 的经典配置 4.1.6 测试IPSec VPN 4.1.7 查看IPSec VPN 的相关状态 4.2 ASA站点到站点IPSec VPN 4.2.1 实际接线状况 4.2.2 实验拓扑介绍 4.2.3 基本网络配置 4.2.4 ASA 站点到站点 IPSec VPN 配置 4.2.5 测试IPSec VPN 4.2.6 ASA 查看IPSec VPN 的相关状态 4.3 路由器GRE Over IPSec站点到站点VPN 4.3.1 经典IPSec VPN 配置方式问题分析 4.3.2 分析GRE Over IPSec 解决问题的思路 4.3.3 实际接线状况 4.3.4 实验拓扑介绍 4.3.5 基本网络配置 4.3.6 配置GRE 隧道 4.3.7 配置动态路由协议OSPF 4.3.8 配置IPSec VPN 保护站点间GRE 流量 4.3.9 测试与查看GRE Over IPSec 4.3.10 其他GRE over IPSec 配置方式 4.4 路由器SVTI站点到站点VPN 4.4.1 VTI 技术介绍 4.4.2 实际接线状况 4.4.3 实验拓扑介绍 4.4.4 基本网络配置 4.4.5 配置SVTI 隧道 4.4.6 测试并查看隧道状况 4.4.7 配置动态路由协议OSPF 4.5 总结 第5章 影响IPSec VPN的网络问题 5.1 动态地址问题 5.1.1 问题描述 5.1.2 动态crypto map 实验 5.2 动态DNS（DDNS）技术介绍 5.2.1 DDNS 技术介绍 5.2.2 DDNS 在IPSec VPN 的使用 5.2.3 DDNS 在IOS上的配置 5.3 加密设备NAT对IPSec VPN的影响 5.3.1 问题描述 5.3.2 加密设备NAT问题分析实验 5.4 中间网络ASA防火墙对IPSec VPN的影响 5.4.1 问题描述 5.4.2 CiscoASA 防火墙对IPSec VPN 的影响实验 5.5 中间网络PAT对IPSec VPN的影响 5.5.1 问题描述 5.5.2 PAT 地址转换技术对IPSec VPN 的影响实验 第6章 IPSec VPN中的高可用性技术 6.1 IPSec VPN高可用性技术介绍 6.2 DPD技术介绍 6.2.1 DPD 技术描述 6.2.2 DPD工作模式 6.2.3 DPD 技术测试 6.3 RRI技术介绍 6.3.1 技术描述 6.3.2 RRI 技术配置与测试 6.4 链路备份的IPSec VPN介绍 6.4.1 链路备份IPSec VPN 6.4.2 链路备份IPSec VPN 配置与测试 6.5 设备备份IPSec VPN（Redundancy VPN）介绍 6.5.1 设备备份IPSec VPN 6.5.2 设备备份IPSec VPN（Redundancy VPN）配置与测试 6.6 高可用性站点到站点IPSec VPN最佳方案 6.6.1 高可用性站点到站点IPSec VPN 最佳方案 6.6.2 高可用性站点到站点IPSec VPN 最佳方案配置与测试 第7章 动态多点VPN（DMVPN） 7.1 DMVPN介绍 7.1.1 传统IPSec VPN 高可用性问题分析 7.1.2 DMVPN 的优点 7.1.3 DMVPN 的4 大组成协议 7.2 经典DMVPN实验 7.2.1 实际接线状况 7.2.2 实验拓扑 7.2.3 基本网络配置 7.2.4 mGRE 与NHRP 配置 7.2.5 测试 NHRP 7.2.6 动态路由协议EIGRP 配置 7.2.7 测试与调整EIGRP 7.2.8 配置IPSec VPN 7.2.9 查看DMVPN状态 7.2.10 MVPN 中“包治百病”的“大招” 7.3 DMVPN第三阶段 7.3.1 DMVPN 三个发展阶段介绍 7.3.2 DMVPN 三个发展阶段比较表 7.3.3 DMVPN 第二阶段与第三阶段分支站点间隧道处理方法比较表 7.3.4 DMVPN 第二阶段NHRP 工作流程介绍 7.3.5 DMVPN 第三阶段NHRP 工作流程介绍 7.3.6 第三阶段DMVPN 实验 7.4 DMVPN两种高可用性解决方案 7.4.1 解决方案1：单云双中心 7.4.2 DMVPN 单云双中心配置 7.4.3 解决方案2：双云双中心 7.4.4 DMVPN 双云双中心配置 第8章 组加密传输VPN（GETVPN） 8.1 GETVPN概述 8.2 传统IPSec VPN在企业网内部部署时出现的问题 8.2.1 问题1：影响QoS 8.2.2 问题2：点对点IPSec SA 造成的问题 8.2.3 问题3：覆盖路由（Overlay routing）问题 8.3 GETVPN技术介绍 8.4 GETVPN如何解决传统IPSec VPN所带来的问题 8.4.1 解决问题1：影响QoS 8.4.2 解决问题2：点对点IPSec SA 问题 8.4.3 解决问题3：覆盖路由（Overlay routing）问题 8.5 GETVPN与传统IPSec VPN技术的比较 8.6 GETVPN三大组成部分 8.7 GETVPN工作流程图 8.8 两种GETVPN的密钥 8.9 GETVPN的3种安全关联（SA） 8.10 GETVPN的网络流量 8.11 协作密钥服务器（Cooperative Key Server） 8.12 GETVPN密钥更新特点 8.13 GETVPN中的防重放攻击技术 8.14 GETVPN感兴趣流访问控制列表配置指南 8.15 GETVPN实验 8.15.1 实际接线状况 8.15.2 实验拓扑 8.15.3 基本网络与OSPF 配置 8.15.4 首要和次要密钥服务器同步RSA 密钥 8.15.5 首要密钥服务器上的GETVPN 配置 8.15.6 组成员一GETVPN 配置 8.15.7 GETVPN crypto map 调用位置分析 8.15.8 组成员二GETVPN 配置 8.15.9 查看首要服务器GETVPN 状态 8.15.10 查看组成员GETVPN 状态 8.15.11 组成员上测试GETVPN 的加解密 8.15.12 在首要密钥服务器KS1 上配置次要密钥服务器KS2 8.15.13 配置次要密钥服务器KS2 8.15.14 查看协作密钥服务器 8.15.15 组成员访问控制列表配置 8.16 教主自创版DMVPN + GETVPN实验 8.16.1 实验设计介绍 8.16.2 实际接线状况 8.16.3 实验拓扑 8.16.4 基本网络配置 8.16.5 mGRE 隧道配置 8.16.6 静态路由配置 8.16.7 配置密钥服务器KS 8.16.8 配置组成员 8.16.9 测试 第9章 Easy VPN 9.1 Easy VPN简介 9.1.1 Easy VPN 特点介绍 9.1.2 Easy VPN 中心站点管理的内容 9.1.3 Easy VPN 的部署 9.1.4 Easy VPN IKE 第一阶段两种认证方式 9.2 主动模式3个数据包交换介绍 9.3 Cisco EzVPN IKE 的三个阶段 9.3.1 Cisco EzVPN IKE 第一阶段介绍 9.3.2 Cisco EzVPN IKE 第1.5 阶段介绍 9.3.3 Easy VPN IKE 第二阶段介绍 9.4 Cisco EzVPN软件客户端安装 9.5 EzVPN经典配置实验 9.5.1 实际接线状况 9.5.2 实验拓扑 9.5.3 基本网络配置 9.5.4 Windows XP 基本网络配置 9.5.5 Center 路由器上EzVPN 服务器配置 9.5.6 配置Windows XP 上的EzVPN 软件客户端并查看状态 9.6 EzVPN特性 9.6.1 分割隧道（Split Tunneling） 9.6.2 保存密码（save-password） 9.6.3 备用网关（backup-gateway） 9.6.4 其他EzVPN 特性 9.7 EzVPN硬件客户端 9.7.1 EzVPN 硬件客户端的3 种工作模式 9.7.2 配置EzVPN 硬件客户端客户模式 9.8 测试EzVPN各种模式的特性 9.8.1 测试客户模式 9.8.2 客户模式加上分割隧道 9.9 ISAKMP Profile 技术 9.9.1 实际接线状况 9.9.2 实验拓扑 9.9.3 基本网络配置 9.9.4 配置站点到站点VPN 9.9.5 配置EzVPN 9.9.6 EzVPN 对站点到站点VPN的影响 9.9.7 EzVPN 对站点到站点VPN的影响问题分析 9.9.8 ISAKMP Profile 技术简介 9.10 Dynamic Virtual Tunnel Interface（DVTI）技术 9.10.1 实际接线状况 9.10.2 实验拓扑 9.10.3 基本网络配置 9.10.4 EzVPN DVTI 配置 9.10.5 查看EzVPN DVTI 状态 9.11 GRE Over EzVPN完美解决方案 9.11.1 配置环回口Loopback100 9.11.2 配置EzVPN 9.11.3 配置GRE 隧道 9.11.4 动态路由协议 第10章 ASA策略图 10.1 Tunnel-Group 10.1.1 站点到站点IPSec VPN Tunnel-Group 查询 10.1.2 EzVPN Tunnel-Group 查询 10.1.3 SSL VPN Tunnel-Group 查询 10.2 Group-Policy介绍 10.3 ASA基本EzVPN配置 10.3.1 实际接线状况 10.3.2 实验拓扑 10.3.3 基本网络配置 10.3.4 基本EzVPN配置 10.3.5 基本EzVPN策略图分析 10.4 策略继承位置介绍 10.4.1 第1 策略继承位置：用户属性username attribute 10.4.2 第2 策略继承位置：用户组策略user group-policy 10.4.3 第3 策略继承位置：Tunnel-Group默认组策略Default-group-policy 10.4.4 第4 策略继承位置：默认全局组策略DfltGrpPolicy 10.5 ASA策略图策略优先顺序测试 10.5.1 测试1：第1号策略继承位置 10.5.2 测试2：第2号策略继承位置 10.5.3 测试3：第3号策略继承位置 10.5.4 测试4：第4号策略继承位置 10.5.5 测试5：第5号策略继承位置 10.6 ASA策略图总结 10.7 ASA动态Crypto map 配置 10.8 ASAL2TP over IPSec 配置 附录A Cisco模拟器配置指南 版权