因为本篇文章,就是IPsec的实验配置的话,它们两端的IP地址是固定的
那么就用第一阶段的主模式(Main Mode)
和第二阶段的快速模式(Quick Mode)就好啦
因为对端是动态地址接入,就是它的地址不固定,这个时候就需要用到动态安全策略啦
为什么要用动态安全策略?
因为,对端就是R3,可以是通过PPPoE拨号来获取到IP地址,这个时候的话,它是有一个租期的,那到了时间,R3的公网地址就会改变,而我R1的话,是可以按照动态安全策略来进行动态调整,就不会像地址固定那样的被动
还有,对于R1来说,对端R3的IP地址并不知道,这个时候就不能从R1这端主动发起建立IPsec VPN隧道的请求,得让R3来进行请求。
而且,R1的话,它的远端对等体IP地址就是 0.0.0.0 ,这样子只需要我的预共享密钥一致,就能够匹配成功,这样子也可以实现动态调整。 并且,R1这边是不用去设置ACL的,等到它建立起IPsec VPN隧道的时候,在IPsec SA的信息中,就携带着需要保护的流量,可以往下翻翻看啦
R1为企业总部网关,R3为企业分部网关,分部与总部通过公网建立通信。分部子网为202.101.23.0/24,总部子网为202.101.12.0/24。
企业希望对分部子网与总部子网之间相互访问的流量进行安全保护。分部与总部通过公网建立通信,可以在分部网关与总部网关之间建立一个IPSec隧道来实施安全保护。
基础配置,实现全网互通(命名 + IP地址 + 静态路由)保证两端路由可达
第一阶段 IKE SA
① 设置IKE的策略,里面包含开启预共享密钥的认证、加密算法、DH组等内容
② 配置预共享密钥和远端对等体地址
对于R1的远端对等体地址,我们要设置为 0.0.0.0
第二阶段 IPsec SA
R1:(固定地址)
因为不知道R3的IP地址,就不用去配置ACL和对等体IP地址
① 转换集
② 创建动态安全策略dynamic-map,调用转换集
③ 配置安全策略组map,封装动态的安全策略,并在接口上调用
R3:(动态地址接入)
和固定地址的一样,因为已知对端R1的IP地址
① 转换集
② ACL : 匹配保护的流量,即定义需要IPSec保护的数据流
③ 配置安全策略组map,并引用ACL、IPSec转换集和对等体IP地址,确定对何种数据流采取何种保护方法
在接口上应用安全策略组map,使接口具有IPSec的保护功能
IPsec VPN 本质:阶段一保护阶段二 阶段二保护数据
配置R1的基础配置,再用默认路由实现公网可达
R1(config)#int e0/0
R1(config-if)#no shutdown
R1(config-if)#ip address 202.101.12.1 255.255.255.0
R1(config-if)#ex
R1(config)#int e0/1
R1(config-if)#no shutdown
R1(config-if)#ip address 192.168.10.254 255.255.255.0
R1(config-if)#ex
R1(config)#ip route 0.0.0.0 0.0.0.0 202.101.12.2 ##配置默认路由指向ISP运营商,实现公网可达
协商出IKE SA ,对第二阶段IPsecSA的协商过程做保护
## 创建IKE的策略,优先级为10
R1(config)#crypto isakmp policy 10
R1(config-isakmp)#encryption 3des ## 用3des加密
R1(config-isakmp)#authentication pre-share ## 身份认证用预共享密钥
R1(config-isakmp)#hash md5 ## 配置完整性校验方式为 md5
R1(config-isakmp)#group 5 ## 设置 DH 组 5
R1(config-isakmp)#ex
## 配置与共享密钥为 520,对方的密钥也要是一致才能匹配成功,才能协商IKE SA
## 因为对端R3 是动态地址接入,并不知道对端IP地址,就用0.0.0.0 来指定
R1(config)#crypto isakmp key 520 address 0.0.0.0
在阶段1建立的IKE SA的保护下完成IPSec SA的协商
## 创建转换集 myset(名字)
## 封装协议(esp-md5完整性校验 3des 加密 )
R1(config)#crypto ipsec transform-set myset esp-3des esp-sha256-hmac
R1(cfg-crypto-trans)#mode tunnel ## 传输方式用隧道传输
R1(cfg-crypto-trans)#exit
## 创建一个动态安全策略dymap,引用IPsec转换集
R1(config)#crypto dynamic-map dymap 10
R1(config-crypto-map)#set transform-set myset
R1(config-crypto-map)#ex
## 因为动态的安全策略不能直接在接口上调用
## 我们就用常用的安全策略来封装这个动态策略dymap,然后再接口上调用
R1(config)#crypto map mymap 10 ipsec-isakmp dynamic dymap
## 在出接口上调用mymap
R1(config)#int e0/0
R1(config-if)#crypto map mymap ##进入接口,调用其安全策略mymap
R1(config-if)#ex
ISP_R2(config)#int e0/0
ISP_R2(config-if)#no shutdown
ISP_R2(config-if)#ip address 202.101.12.2 255.255.255.0
ISP_R2(config-if)#ex
ISP_R2(config)#int e0/1
ISP_R2(config-if)#no shutdown
ISP_R2(config-if)#ip address 202.101.23.2 255.255.255.0
ISP_R2(config-if)#ex
配置R3的基础配置,再用默认路由实现公网可达
R3(config)#int e0/0
R3(config-if)#no shut
R3(config-if)#ip address 202.101.23.3 255.255.255.0
R3(config-if)#ex
R3(config)#int e0/1
R3(config-if)#no shut
R3(config-if)#ip address 192.168.20.254 255.255.255.0
R3(config-if)#ex
R3(config)#ip route 0.0.0.0 0.0.0.0 202.101.23.2 ##配置默认路由指向ISP运营商,实现公网可达
协商出IKE SA ,对第二阶段IPsecSA的协商过程做保护
## 创建IKE的策略,优先级为10
R3(config)#crypto isakmp policy 10 ## 用策略来存放IKE的配置
R3(config-isakmp)#encryption 3des ## 用3des加密
R3(config-isakmp)#authentication pre-share ## 身份认证用预共享密钥
R3(config-isakmp)#hash md5 ## 配置完整性校验方式为 md5
R3(config-isakmp)#group 5 ## 设置 DH 组 5
R3(config-isakmp)#ex
## 配置预共享密钥为 520,对方的密钥也要是一致才能匹配成功,才能协商IKE SA
R3(config)#crypto isakmp key 520 address 202.101.12.1
在阶段1建立的IKE SA的保护下完成IPSec SA的协商
## 创建转换集 myset(名字)
## 封装协议(esp-md5完整性校验 3des 加密 )
R1(config)#crypto ipsec transform-set myset esp-3des esp-sha256-hmac
R1(cfg-crypto-trans)#mode tunnel ## 传输方式用隧道传输
R1(cfg-crypto-trans)#exit
## 协商感兴趣流量,也就是需要保护的流量
R3(config)#access-list 100 permit ip 192.168.20.0 0.0.0.255 192.168.10.0 0.0.0.255
## 将配置的内容都引用在安全策略mymap里面 ,使用ike自动协商
R3(config)#crypto map mymap 10 ipsec-isakmp
R3(config-crypto-map)#match address 100 ## 匹配ACL 100
R3(config-crypto-map)#set peer 202.101.12.1 ## 设置对端对等体地址
R3(config-crypto-map)#set transform-set myset ## 绑定转换集 myset
R3(config-crypto-map)#ex
## 在出接口上调用
R3(config)#int e0/0
R3(config-if)#crypto map mymap ##进入接口,调用其安全策略mymap
R3(config-if)#ex
因为我是在EVE中来操作思科模拟器,所以我就用路由器来模拟PC电脑,就需要关闭路由功能
PC1(config)#no ip routing ## 关闭路由功能
PC1(config)#ip default-gateway 192.168.10.254 ## 配置网关
PC1(config)#int e0/0
PC1(config-if)#no shutdown
PC1(config-if)#ip address 192.168.10.1 255.255.255.0
PC1(config-if)#ex
PC2(config)#no ip routing ## 关闭路由功能
PC2(config)#ip default-gateway 192.168.20.254 ## 配置网关
PC2(config)#int e0/0
PC2(config-if)#no shutdown
PC2(config-if)#ip address 192.168.20.1 255.255.255.0
PC2(config-if)#ex
因为R3是动态地址分配,这个时候R1是不清楚R3的具体IP地址的,所以PC1 是不能拿来触发IPsec VPN隧道的,如下图所示,PC1 ping 不通PC2的 IP地址
那这个时候,我们就要用R3主动去Ping R1,因为R3是知道R1的准确的IP地址,所以,必须得要用动态获取地址的一端主动发起通信过程,才能成功坚持IPsec VPN
里面主模式交换六个报文,成功协商IKE SA
而快速模式的三个报文,就成功的协商IPsec SA
这两个出来就成功建立了 IPsec VPN,对流量实施了加密啦~
① 查看IKE SA的基本信息
② 查看IPsec SA的基本信息
R1# show crypto ipsec sa
从图中我们就可以知道:
远端的IP地址: 202.101.23.3
需要保护的流量(ACL):
本地:192.168.10.0/24 → 远端: 192.168.20.0/24
为什么要清楚掉IKE / IPsec呢?
因为,这个IPsec VPN它是按照第一次配置的代码来执行的,当我们想改一下传输模式或者加密方式等等,就需要先清除掉之前的SA信息,就是IPsec SA和IKE SA,这样子才能去完成修改,切记哦
清除 IKE SA的命令:
R1#clear crypto isakmp
清除 IPsec VPN的命令:
R1
hostname R1
int e0/0
no shut
ip address 202.101.12.1 255.255.255.0
ex
int e0/1
no shut
ip address 192.168.10.254 255.255.255.0
ex
ip route 0.0.0.0 0.0.0.0 202.101.12.2
crypto isakmp policy 10
encryption 3des
authentication pre-share
hash md5
group 5
ex
crypto isakmp key 520 address 202.101.23.3
crypto ipsec transform-set myset esp-3des esp-sha256-hmac
mode tunnel
ex
crypto dynamic-map dymap 10
set transform-set myset
ex
crypto map mymap 10 ipsec-isakmp dynamic dymap
int e0/0
crypto map mymap
ex
R3
hostname R3
int e0/0
no shutdown
ip address 202.101.23.3 255.255.255.0
ex
int e0/1
no shutdown
ip address 192.168.20.254 255.255.255.0
ex
ip route 0.0.0.0 0.0.0.0 202.101.23.2
crypto isakmp policy 10
encryption 3des
authentication pre-share
hash md5
group 5
ex
crypto isakmp key 520 address 202.101.12.1
crypto ipsec transform-set myset esp-3des esp-sha256-hmac
mode tunnel
exit
access-list 100 permit ip 192.168.20.0 0.0.0.255 192.168.10.0 0.0.0.255
crypto map mymap 10 ipsec-isakmp
match address 100
set peer 202.101.12.1
set transform-set myset
ex
int e0/0
crypto map mymap
ex