Cisco配置VPN IPSec

实验拓扑

00.png

配置运营商网络

在配置VPN之前,首先要保证模拟的运营商网络是可以正常通信的,这里我配置的是OSPF,需要注意的是两边的路由器不要把内网网段也给宣告出去了,如果是这样那VPN也就没有存在的意义了。
首先是左边的R1:

Router(config)#int f0/0
Router(config-if)#ip add 202.1.1.1 255.255.255.0
Router(config-if)#no shut
Router(config-if)#exit
Router(config)#router ospf 1
Router(config-router)#net 202.1.1.0 0.0.0.255 area 0

中间的R0:

Router(config)#int f0/0
Router(config-if)#ip add 202.1.1.254 255.255.255.0
Router(config-if)#no shut
Router(config)#int f0/1
Router(config-if)#ip add 210.1.1.254 255.255.255.0
Router(config-if)#no shut
Router(config-if)#exit
Router(config)#router ospf 1
Router(config-router)#net 202.1.1.0 0.0.0.255 area 0
Router(config-router)#net 210.1.1.0 0.0.0.255 area 0

右边的R2:

Router(config)#int f0/0
Router(config-if)#ip add 210.1.1.1 255.255.255.0
Router(config-if)#no shut
Router(config-if)#exit
Router(config)#router ospf 1
Router(config-router)#net 210.1.1.0 0.0.0.255 area 0

等待收敛完成验证网络是否可以正常通信。

配置内网

内网过于简单这里不再赘述,我的左边的区域1的网段是10.0.1.0/24,右边的区域2是10.0.2.0/24,网关则分别为1.1和2.1。

配置IPSec(site to site)

R1:

Router(config)#crypto isakmp enable #启用IKE,默认即为启动
Router(config)#crypto isakmp policy 1 #定义IKE安全策略集1
Router(config-isakmp)#authentication pre-share #IKE验证方式胃预共享密钥
Router(config-isakmp)#encryption 3des #IKE加密方式为3des
Router(config-isakmp)#group 1 #IKE使用Diffie-Hellman组1
Router(config-isakmp)#hash md5 #IKE的Hash验证为MD5
Router(config-isakmp)#exit
Router(config)#crypto isakmp key cyne address 210.1.1.1 #两端的KEY必须一致,210.1.1.1是对端的公网地址
Router(config)#crypto ipsec transform-set lab ah-md5-hmac esp-3des #定义VPN使用IPSec策略集,lab为策略集名称
Router(config)#access-list 100 permit ip 10.0.1.0 0.0.0.255 10.0.2.0 0.0.0.255 #定义在R1上需要加密的流量
Router(config)#crypto map test 110 ipsec-isakmp #定义加密图
Router(config-crypto-map)#match address 100 #在加密图中声明加密流量列表
Router(config-crypto-map)#set peer 210.1.1.1 #对端公网ip
Router(config-crypto-map)#set transform-set lab #在加密图中调用IPSec的策略集lab
Router(config-crypto-map)#exit
Router(config)#int f0/0
Router(config-if)#crypto map test #将加密图应用到此端口
Router(config-if)#exit 
Router(config)#ip route 10.0.2.0 255.255.255.0 f0/0 #指定VPN的静态路由

R2:

Router(config)#crypto isakmp enable
Router(config)#crypto isakmp policy 1
Router(config-isakmp)#authentication pre-share 
Router(config-isakmp)#encryption 3des
Router(config-isakmp)#group 1
Router(config-isakmp)#hash md5
Router(config-isakmp)#exit
Router(config)#crypto isakmp key cyne address 202.1.1.1 #两端的KEY必须一致,202.1.1.1是对端的公网地址
Router(config)#crypto ipsec transform-set lab ah-md5-hmac esp-3des
Router(config)#access-list 100 permit ip 10.0.2.0 0.0.0.255 10.0.1.0 0.0.0.255
Router(config)#crypto map test 110 ipsec-isakmp 
Router(config-crypto-map)#match address 100 
Router(config-crypto-map)#set peer 202.1.1.1 #对端公网ip
Router(config-crypto-map)#set transform-set lab
Router(config-crypto-map)#exit
Router(config)#int f0/0
Router(config-if)#crypto map test
Router(config-if)#exit 
Router(config)#ip route 10.0.1.0 255.255.255.0 f0/0

验证结果

使用区域1内的PC ping 区域2中的PC,发现已经可以通信:
01.png

NAT + IPSec VPN

NAT和IPSec存在一些不兼容的情况,比如NAT更改了IP头部中的源地址和目的地址,校验和会被重新计算并修改,所以导致被对端IPSec丢弃等等。

那如果配置了NAT之后应该如何让IPSec正常工作呢?今天在敲实验的时候思考了很久,最后找到了通过更改ACL也就是更改IPSec的“感兴趣”流量来解决,简单拓扑如下:
21.png
两端公网接入路由器的ACL进行如下配置:

R1#sh access-lists 100
Extended IP access list 100
    permit ip 172.16.5.0 0.0.0.255 172.16.2.0 0.0.0.255
    permit ip 172.16.2.0 0.0.0.255 218.18.1.0 0.0.0.3
    permit ip 218.18.1.0 0.0.0.3 172.16.2.0 0.0.0.255
R2#sh access-lists 100
Extended IP access list 100
    permit ip 172.16.2.0 0.0.0.255 172.16.5.0 0.0.0.255
    permit ip host 218.18.1.2 172.16.2.0 0.0.0.255
    permit ip 172.16.2.0 0.0.0.255 218.18.1.0 0.0.0.3

上述ACL的作用也就是把NAT之后的公网IP地址加入到IPSec的感兴趣流量中。当然,这也只是我在实验中自己摸索的解决方法。

参考链接

https://wenku.baidu.com/view/aec4df5a5727a5e9856a61eb
http://www.solves.com.cn/doc-view-2025.html