博文大纲:

  • 一、虚拟专用网相关概念
  • 二、IPSec 虚拟专用网的基本概念
  • 三、ISAKMP/IKE阶段1及阶段2的建立过程
  • 四、IPSec 虚拟专用网的配置实现
  • 五、总结

前言:由于“Virtual Private Network”(请看首字母,就知道是什么咯)是敏\感词汇,所以在博文中使用它的中文名字“虚拟专用网”来代替。

一、虚拟专用网相关概念。

1、虚拟专用网的定义

虚拟专用网就是在两个网络实体之间建立的一种受保护的连接,这两个实体可以通过点到点的链路直接相连,但通常情况下他们会相隔较远的距离。

对于定义中提到的“受保护”一词,可以从以下几个方面理解:

  • 通过使用加密技术防止数据被窃听。
  • 通过数据完整性验证防止数据被破坏、篡改。
  • 通过认证机制实现通信方身份确认,来防止通信数据被截获和回放。 此外,虚拟专用网技术还定义了以下功能:
  • 何种流量需要被保护。
  • 数据被保护的机制。
  • 数据的封装过程。

实际生产环境中的虚拟专用网解决方案不一定包含上面所有功能,还要由具体的环境需求和实现方式决定,而且很多企业可能采用不止一种的虚拟专用网解决方案。

2、虚拟专用网的连接模式

虚拟专用网的连接模式有两种:传输模式和隧道模式。

(1)传输模式:

在整个虚拟专用网的传输过程中,IP包头并没有被封装进去,这就意味着从源端的数据始终使用原有的IP地址进行通信。而传输的实际数据载荷被封装在虚拟专用网报文中,对大多数虚拟专用网传输而言,虚拟专用网的报文封装过程就是数据的加密过程,因此,第三者无法破解数据内容,但却可以清晰的知道通信双方的地址信息。

由于传输模式封装结构相对简单,因此传输效率较高,多用于通信双方在同一个局域网内的情况。

(2)隧道模式:

隧道模式下,虚拟专用网设备将整个三层数据报文封装在虚拟专用网数据内,再为封装后的数据报文添加新的IP包头。由于在新IP包头中封装的是虚拟专用网设备的IP地址信息,所以当第三者截获数据后,不但无法了解实际载荷数据的内容,同时也无法知道实际通信双方的地址信息。数据包封装后如下:

由于隧道模式的虚拟专用网在安全性和灵活性方面具有很大的优势,在企业环境中应用非常广泛,如:总公司和分公司跨广域网的通信、移动用户在公网访问公司内部资源等。

3、虚拟专用网的类型

通常情况下,虚拟专用网的类型分为站点到站点虚拟专用网和远程访问虚拟专用网。

(1)站点到站点虚拟专用网:

站点到站点虚拟专用网就是通过隧道模式在虚拟专用网网关之间保护两个或更多的站点之间的流量,站点间的流量通常是指局域网之间(L2L)的通信流量。L2L虚拟专用网多用于总公司与分公司、分公司之间在公网上传输重要的业务数据,主要针对某个网段的流量可以使用虚拟专用网。

(2)远程访问虚拟专用网:

远程访问虚拟专用网通常用于单用户设备与虚拟专用网网关之间的通信连接,单用户设备一般为一台PC或小型办公网络等。远程访问虚拟专用网对安全性的要求较高,更适用于隧道模式。

要想实现隧道模式的通信,就需要给远程访问客户端分配两个IP地址:一个是它自己的网卡IP地址,另一个是内网地址,也就是说,远程客户端在虚拟专用网建立过程中同时充当虚拟专用网网关(使用本身的IP地址)和终端用户(使用内网地址)。

虚拟专用网技术涉及到的概念及算法太多,这里不啰嗦了。

关于虚拟专用网技术涉及到的理论方面知识如下,感兴趣的话可以自行查阅相关资料: 1、加密算法 * 对称加密算法(DES、3DES、AES等) * 非对称加密算法(RSA、DSA、DH等,前两种常用于验证功能, DH被用来实现IPSec中的Internet密钥交换(IKE)协议) 2、数据报文验证 * 数据报文验证包括的两个方面:数据来源验证(身份验证)和报文完整性验证。 * 虚拟专用网技术对数据进行来源验证通常借助散列算法HMAC实现的。 * HMAC常用的两种算法(MD5和SHA)。

二、IPSec 虚拟专用网的基本概念

IPSec技术实现虚拟专用网是目前最为广泛的一种应用,为了可以在工作中快速的定位问题所在,所以了解IPSec的建立过程尤为重要。

1、IPSec连接过程:

IPSec的连接过程如下: 1、流量触发IPSec; 2、建立管理连接; 3、建立数据连接。

(1)流量触发IPSec

简而言之,言而简之就是通过ACL来明确哪些流量需要被“保护”。详细来说,就是IPSec建立过程是由对等体之间发送的流量触发的。一旦有虚拟专用网的流量经过虚拟专用网网关,连接过程便开始建立了,当然,手动配置也可以实现这一过程。在配置设备实现此步骤前,需要明确哪些流量需要被“保护”。

(2)建立管理连接

IPSec使用ISAKMP/IKE阶段1来构建一个安全的管理连接。这里需要注意的是,这个管理连接只是一个准备工作,它不被用来传输实际的数据。在配置设备实现此步骤前,需要明确设备如何实现验证,使用何种加密及认证算法,使用哪种DH组等问题。

(3)建立数据连接

IPSec基于安全的管理连接协商建立安全的数据连接,而ISAKMP/IKE阶段2就是来完成这个任务的,数据连接用于传输真正的用户数据。在配置设备实现此步骤前,需要明确使用何种安全协议,针对具体的安全协议应使用加密或验证算法,以及数据传输的模式(隧道模式或传输模式)等问题。

经过IPSec建立的三部曲后,虚拟专用网流量就可以按照协商的结果被加密/解密了。但是虚拟专用网并不是一次性的,无论是管理连接还是数据连接都有一个生存周期与之关联,一旦到期连接会被中止,如果需要继续传输虚拟专用网数据,连接需要重新被构建,这种设计主要是处于安全考虑。

IPSec 虚拟专用网属于安全技术,并非所有的Cisco设备都支持该功能,需要IOS名称中的功能集中涵盖K8或K9,如下:

三、ISAKMP/IKE阶段1及阶段2的建立过程

1、ISAKMP/IKE阶段1

(1)阶段1(是双向的)的相关概念:

阶段1的交换过程有两个模式:主模式和积极模式。积极模式比主模式快,主模式比积极模式安全,我下面的配置是基于主模式进行的。

无论虚拟专用网的类型是站点到站点还是远程访问,都需要完成三个任务:

  • 协商采用何种方式建立管理连接。
  • 通过DH算法共享密钥信息。
  • 对等体彼此进行身份验证。

在主模式中,这三个任务是通过六个数据报文完成的:前两个数据包用于协商对等体间的管理连接使用何种安全策略(交换ISAKMP/IKE传输集);中间两个数据包通过DH算法产生并交换加密算法和HMAC功能所需的密钥;最后两个数据包使用预共享密钥等方式执行对等体间的身份验证。需要注意的是,前四个报文是明文传输的,后面两个报文才是密文传输,前四个数据包通过各种算法最终产生的密钥用于第5、和第6个数据包及后续数据的加密。

(2)ISAKMP/IKE阶段1建立过程:

1)交换ISAKMP/IKE传输集

ISAKMP/IKE传输集就是一组用来保护管理连接的安全策略,也有人将它称之为IKE策略或ISAKMP策略。

ISAKMP/IKE传输集主要包括以下几个方面:

  • 加密算法:DES、3DES或AES(一般用AES,安全性更高些)。
  • HMAC功能:MD5或SHA-1(一般使用SHA-1,同样,因为安全性高)。
  • 设备验证的类型:预共享密钥或使用RSA签名(我这里使用预共享密钥,配置简单些)。
  • DH密钥组:Cisco支持1、2、5、7(Cisco的路由器不支持密钥组7)。
  • 管理连接的生存周期。

2)通过DH算法实现密钥交换

上一步只是协商管理连接的安全策略,而共享密钥的产生与交换就要通过DH算法来实现。

3)实现设备间的身份验证

设备身份验证时最常用的方法就是预共享密钥,即在对等体之间通过带外的方式共享密钥,并存储在设备的本地。设备验证的过程可以通过加密算法或HMAC功能两种方法实现,而加密算法很少用于身份验证,多数情况都会通过HMAC功能实现。

2、ISAKMP/IKE阶段2

(1)阶段2(是单向的)的相关概念:

ISAKMP/IKE阶段2主要是在两个IPSec对等体间建立数据连接,其主要完成以下任务:

  • 定义对等体间需要保护何种流量(通过ACL来匹配)。
  • 定义用来保护数据的安全协议。
  • 定义传输模式。
  • 定义数据连接的生存周期及密钥刷新的方式。

(2)ISAKMP/IKE阶段1建立过程:

1)安全关联

IPSec需要在两个对等体之间建立一条逻辑连接,这就要使用一个被称为安全关联的信令协议,这是因为IPSec需要无连接的IP协议在安全运行之前就要称为面向连接的协议。SA的连接是在源点和终点之间的单向连接,如果需要双向连接,就需要两个SA连接,每个方向一个。

SA连接由三个要素定义:

  • 安全参数索引(SPI):用于唯一标识每条SA连接。
  • 安全协议的类型:IPSec定义了两种安全协议,即AH(认证头协议)和ESP(封装安全载荷协议)。
  • 目的IP地址。

ISAKMP/IKE阶段2具有上面这种特性,也就是说ISAKMP/IKE的数据连接实际是通过两个单向连接建立的。而两个连接采用的加密或认证方式都是相同的,这就使ISAKMP/IKE阶段2这个特征不易被发现。

2)ISAKMP/IKE阶段2的传输集:

数据连接的传输集定义了数据连接是如何被保护的。与管理连接的传输集类似,对等体设备可以保存一个或多个传输集,但其内容完全不同。

数据连接的传输集内容如下:

  • 安全协议: AH 协议、ESP协议。
  • 连接模式:隧道模式,传输模式。
  • 加密方式:对于ESP而言,有DES、3DES、AES-128、AES-192、AES-256或不使用加密算法。
  • 验证方式:MD5或SHA-1。

上述相关加密/验证方式自己查阅其他资料吧,说起来太多了。关于连接模式就是文章开头说的那两种。

3)ISAKMP/IKE阶段2的安全协议

IPSec的数据连接可以通过安全协议实现对数据连接的保护:AH协议和ESP协议。可以通过其中一个协议来实现数据的加密和验证,如使用ESP协议;也可以使用两个协议一起来实现。AH使用IP协议号51,ESP使用IP协议号50。

AH协议提供以下安全功能:

  • 数据完整性;
  • 数据验证;
  • 保护数据回放功能。

AH协议保护整个数据报文,但易变的字段除外,如IP包头中的TTL值等。

AH协议只是实现验证功能,而并未提供任何形式的数据加密;而且正因为其对于整个IP数据报文实现验证功能,所以它与NAT或PAT不能一起使用。

ESP在RFC 2402中有明确的定义,它与AH的区别如下:

  • ESP对用户数据实现加密功能。
  • ESP只对IP数据的有效载荷进行验证,不包括外部的IP包头。

因此,如果有第三者对IP包头内容进行更改,ESP是无法检测到的。而NAT也会修改外层的IP信息,所以ESP可以和NAT共用,所以,AH无论如何也不能和NAT共用,而ESP却可以,再配置NAT-T技术,ESP甚至还可以和PAT共用(ESP默认情况下不能穿越PAT设备,因为PAT会修改传输层头部的端口信息,而传输层的头部在ESP的封装中是被加密的,所以PAT无法修改端口信息。而NAT-T技术就是通过额外增加一个传输层头部让PAT可以工作)。

四、IPSec 虚拟专用网的配置实现

上面啰嗦那么一大堆,好消耗耐心,还是来个实际配置吧!

网络环境如下:

环境分析:

1、总公司内网使用192.168.1.0/24网段地址,分公司使用192.168.2.0/24网段地址。R2路由器为公网上的路由器。R1及R3分别为总公司及分公司的网关服务器,所以一定会存在默认路由指向公网的路由器。 2、总公司的内网及分公司的内网之间要建立虚拟专用网,但如果不配置别的东西,是会影响内网访问Internet的,一般都是既可以建立虚拟专用网,也可以访问Internet,所以这个问题也要解决。

需求如下:

1、要求实现总公司192.168.1.0/24和分公司的192.168.2.0/24网段通过虚拟专用网实现互通,并且不要影响这两个网段访问公网,也就是R2路由器(访问公网路由器,通过端口复用的PAT技术实现,不要在R2路由器上配置任何路由)。

开始配置:

1、自己配置相关的接口地址,并且开启接口,这里不详细写出来了,配置接口IP地址格式如下:

路由器配置接口IP地址

R1#conf t
R1(config)#in f0/0
R1(config-if)#ip add 200.0.0.1 255.255.255.0
R1(config-if)#no sh

GNS3模拟器中PC机配置IP地址

PC1> ip 192.168.1.1 192.168.1.254     #配置IP及网关

2、配置R1路由器:

R1(config)#ip route 0.0.0.0 0.0.0.0 200.0.0.2     #配置默认路由
#'以下是配置ISAKMP策略(也就是管理连接的配置)'
R1(config)#crypto isakmp policy 1    #策略序列号为“1”,范围是1~10000,数值越小,优先级越高
R1(config-isakmp)#encryption aes   #配置加密算法
R1(config-isakmp)#hash  sha    #hash命令指定验证过程中采用的散列算法
R1(config-isakmp)#authentication pre-share   #声明设备认证方式为“预先共享密钥”
R1(config-isakmp)#group 2   #采用DH算法的强度为group2
R1(config-isakmp)#lifetime 10000   #可选,管理连接生存周期,默认为86400s(24小时)
R1(config-isakmp)#exit
R1(config)#crypto isakmp key 6 2019.com address 201.0.0.2  #配置“预先共享密钥”
#'下面是数据连接配置'
R1(config)#access-list 101 permit ip 192.168.1.0 0.0.0.255 192.168.2.0 0.0.0.255    #定义虚拟专用网保护的流量   
R1(config)#crypto ipsec transform-set test-set ah-sha-hmac esp-aes #数据连接协商参数,“test-set”是自定义的名称
R1(cfg-crypto-trans)#mode tunnel   #可选,配置为隧道模式,默认就是隧道模式
R1(cfg-crypto-trans)#exit
R1(config)#crypto map test-map 1 ipsec-isakmp    #将数据连接相关配置设定为MAP,“test-map”是自定义的名字
% NOTE: This new crypto map will remain disabled until a peer
        and a valid access list have been configured.
R1(config-crypto-map)#set peer 201.0.0.2    #虚拟专用网对端地址
R1(config-crypto-map)#set transform-set test-set    #将数据连接关联刚才创建的传输集
R1(config-crypto-map)#match address 101   #匹配的ACL
R1(config-crypto-map)#int f0/0     #进入外部接口
R1(config-if)#crypto map test-map      #应用在外网接口
#'下面是要解决内部主机访问互联网问题'
R1(config-if)#access-list 102 deny   ip 192.168.1.0 0.0.0.255 192.168.2.0 0.0.0.255   #拒绝虚拟专用网的流量
R1(config)#access-list 102 permit ip any any    #放行其他任何流量
R1(config)#ip nat inside source list 102 int f0/0 overload    #采用端口复用的PAT方式,解决内网访问互联网的问题
#'下面是进入相关接口启用NAT功能'。
R1(config)#int f0/0
R1(config-if)#ip nat outside 
R1(config-if)#in f1/0
R1(config-if)#ip nat inside 

**注:由于当有NAT和虚拟专用网流量时,优先匹配NAT,后匹配虚拟专用网,所以要在上面做PAT时,拒绝虚拟专用网的流量。 ** 3、配置R3路由器:

由于R3和R1路由器的配置大同小异(甚至很多配置必须一样,比如共享密钥、采用的算法,否则无法建立虚拟专用网),以下就不注释了

R3(config)#ip route 0.0.0.0 0.0.0.0 201.0.0.1
R3(config)#crypto isakmp policy 1
R3(config-isakmp)#encryption aes
R3(config-isakmp)#hash  sha
R3(config-isakmp)#authentication pre-share
R3(config-isakmp)#group 2
R3(config-isakmp)#lifetime 10000
R3(config-isakmp)#exit
R3(config)#crypto isakmp key 6 2019.com address 200.0.0.1
R3(config)#access-list 101 permit ip 192.168.2.0 0.0.0.255 192.168.1.0 0.0.0.255       
R3(config)#crypto ipsec transform-set test-set ah-sha-hmac esp-aes
R3(cfg-crypto-trans)#mode tunnel
R3(cfg-crypto-trans)#exit
R3(config)#crypto map test-map 1 ipsec-isakmp
% NOTE: This new crypto map will remain disabled until a peer
        and a valid access list have been configured.
R3(config-crypto-map)#set peer 200.0.0.1
R3(config-crypto-map)#set transform-set test-set
R3(config-crypto-map)#match address 101
R3(config-crypto-map)#int f0/0
R3(config-if)#crypto map test-map
R3(config-if)#
*Mar  1 00:51:55.511: %CRYPTO-6-ISAKMP_ON_OFF: ISAKMP is ON
R3(config-if)#$ 102 deny   ip 192.168.2.0 0.0.0.255 192.168.1.0 0.0.0.255    
R3(config)#access-list 102 permit ip any any
R3(config)#ip nat inside source list 102 int f0/0 overload
R3(config)#int f0/0
R3(config-if)#ip nat outside
R3(config-if)#in f1/0
R3(config-if)#ip nat inside 

配置至此,就可以实现PC1及PC2互通了(虚拟专用网的作用),并且两台PC机都可以ping通R2路由器,要知道,虽然R1和R3路由器有默认路由指向R2路由器,但是R2路由器是没有到192.168.1.0和2.0网段的路由的,这就是PAT的作用。可以自己进行ping测试。

4、附带一些查看配置的命令:

R1#show crypto isakmp policy     #查看ISAKMP协商策略的配置结果
R1#show crypto isakmp sa            #查看管理连接SA的状态
R1#show crypto ipsec transform-set        #查看IPSec传输集
R1#show crypto ipsec security-association lifetime    #查看数据连接建立的生存周期
R1#show crypto ipsec sa    #查看数据连接SA的细节信息
R1#show crypto map    #查看crypto  Map的信息,这个命令可以查看到crypto  map的名称、
//ACL、对等体的IP地址、应用Crypto  map的接口等。

五、总结

  1. 由于涉及的技术、算法等一系列技术太多,所以进行故障排错可能没那么简单,可以使用“show run”命令,查看所有配置,对照两台路由器上有哪些配置是不匹配的,然后进行重新配置。
  2. 一定要注意当NAT和虚拟专用网流量同时存在时,会优先匹配NAT,后匹配虚拟专用网,所以要在做PAT映射时,通过扩展ACL拒绝去往分公司内网的虚拟专用网的流量,否则会直接进行PAT,然后转发,最后会导致因为R1路由器没有去往192.168.2.0/24的路由而丢弃数据包。

———————— 本文至此结束,感谢阅读 ————————