2024年5月25日发(作者:)

Cisco路由器实现IPSEC VPN配置(站点到站点)

目标

a. 分公司172.16.10.0/24,网络的主机可以通过VPN访问总部服务器10.10.33.0/24,

但不能访问Internet

b. 分公司的其它客户端(172.16.0.0/24)可以访问Internet

实验设备

1、Cisco路由器(IOS为12.4)

2、客户机3台,IP地址,见拓扑图,F0/0连接外网

实验步骤

R1上的配置

Router(config)#hostname R1

R1(config)#int f0/0

R1(config-if)#ip add 100.0.0.1 255.255.255.0

R1(config-if)#no sh

R1(config-if)#int f0/1

R1(config-if)#ip add 172.16.10.254 255.255.255.0

R1(config-if)#no sh

//配置默认路由

R1(config-if)#ip route 0.0.0.0 0.0.0.0 100.0.0.2

在IPSEC中,IKE被用来自动协商SA和密钥,如果被关闭用crypto isakmp enable

启用

R1(config)#crypto isakmp policy 1 //建立IKE协商策略,编号为1

R1(config-isakmp)#encryption 3des //设置加密使用的算法为3DES

R1(config-isakmp)#hash sha //设置密钥认证的算法为sha

R1(config-isakmp)#authentication pre-share //告诉router要先使用预共享密

钥,手工指定

R1(config-isakmp)#group 2

R1(config-isakmp)#lifetime 10000 //声明SA的生存时间为10000,超过后SA将

重新协商

R1(config-isakmp)#exit

R1(config)#crypto isakmp key 0 test address 100.0.0.2

//设置加密密钥为test,要求二端的密码相匹配,和对端地址(总部Router地址)

配置访问控制列表

注意:

1. 当一个路由器接收到发往另一个路由器的内部网络报文时,IPSEC被启动,访问列

表被用于确定哪些业务 将启动IKE和IPSEC协商

2. Crypto访问控制列表必须是互为镜像的,如:R1加密了所有流向R2的TCP流量,

则R2必须加密流回R1的所有TCP流量

R1(config)#access-list 100 permit ip 172.16.10.0 0.0.0.255 10.10.33.0

0.0.0.255

//定义从172.16.10.0网络发往10.10.33.0的报文全部加密

//配置IPSEC传输模式,用于定义VPN隧道的认证类型,完整性与负载加密

R1(config)#crypto ipsec transform-set vpn-set esp-des ah-sha-hmac

R1(cfg-crypto-trans)#mode tunnel //可选

R1(cfg-crypto-trans)#exit

R1(config)#crypto ipsec security-association lifetime seconds 1800 //定义生存

周期1800秒

//配置caypt map(加密映射)

R1(config)#crypto map test-map 1 ipsec-isakmp //创建crypto map

//IPSEC-ISAKMP表示采用自动协调,名为test-map,编号1为优先级,越小优先

级越高

R1(config-crypto-map)#set peer 100.0.0.2 //设定crypto map所对应的VPN链

路对端IP

R1(config-crypto-map)#set transform-set vpn-set //指定crypto map所使用传

输模式名

R1(config-crypto-map)#match address 100 //指定此crypto map使用的访问控

制列表

R1(config-crypto-map)#exit

//将映射应用到对应的接口上,VPN就可生效了

R1(config)#int f0/0

R1(config-if)#crypto map test-map

//配置PAT

R1(config)#access-list 1 deny 172.16.10.0 0.0.0.255 //研发部不能访问Internet

R1(config)#access-list 1 permit 172.16.0.0 0.0.255.255 //其它部门可以访问

Internet

R1(config)#ip nat inside source list 1 interface f0/0 overload //在F0/0上启用

PAT

R1(config)#int f0/0

R1(config-if)#ip nat outside

R1(config)#int f0/1

R1(config-if)#ip nat inside

R2上的配置(总部上路由器设置)

R2(config)#int f0/0

R2(config-if)#ip add 100.0.0.2 255.255.255.0

R2(config-if)#no sh

R2(config)#int f0/1

R2(config-if)#ip add 10.10.33.254 255.255.255.0

R2(config-if)#no sh

R2(config-if)#ip route 0.0.0.0 0.0.0.0 100.0.0.1

//IPSEC VPN的配置,含义与R1基本相同

R2(config)#crypto isakmp policy 1 //建立IKE协商策略,编号为1

R2(config-isakmp)#encryption 3des

R2(config-isakmp)#hash sha //设置密钥认证的算法为sha

R2(config-isakmp)#authentication pre-share //告诉router要先使用预共享密钥,

手工指定

R2(config-isakmp)#group 2

R2(config-isakmp)#lifetime 10000

R2(config-isakmp)#exit

R2(config)#crypto isakmp key 0 test address 100.0.0.1

//设置共享密钥为test,要求二端的密码相匹配,和对端地址(总部Router地址)

R2(config)#access-list 100 permit ip 10.10.33.0 0.0.0.255 172.16.10.0 0.0.0.255

//定义从10.10.33.0网络发往172.16.10.0的报文全部加密

R2(config)#crypto ipsec transform-set vpn-set esp-des ah-sha-hmac //加密算

法二边要匹配

R2(cfg-crypto-trans)#mode tunnel

R2(cfg-crypto-trans)#exit

R2(config)#crypto ipsec security-association lifetime seconds 1800

R2(config)#crypto map test-map 1 ipsec-isakmp

//IPSEC-ISAKMP表示采用自动协调,名为test-map,编号1为优先级,越小优先

级越高

R2(config-crypto-map)#set peer 100.0.0.1 //设定crypto map所对应的VPN链

路对端IP

R2(config-crypto-map)#set transform-set vpn-set //指定crypto map所使用传

输模式名

R2(config-crypto-map)#match address 100 //指定此crypto map使用的访问控

制列表

R2(config-crypto-map)#exit

应用到接口,生效

R2(config-crypto-map)#int f0/0

R2(config-if)#crypto map test-map

相关验证结果的查看命令

显示ISAKMP协商策略的结果

R2#sh crypto isakmp policy

查看管理连接SA的状态

R2#sh crypto isakmp sa

R2#sh crypto ipsec transform-set

显示IPSEC变换集

R2#sh crypto ipsec transform-set

显示数据数据连接SA的细节信息

R2#sh crypto ipsec sa

显示Crypto Map的信息

R2#sh crypto map

按上面的配置好后,发现用分公司172.16.10.0/24可以ping通10.10.33.0/24,但

是从抓包来看,流量并未使用ipsec vpn,而是直接传输的,ipsec vpn没有生效。通过抓

包发现,采用上面的配置时,若使用172.16.10.0/24 ping 10.10.33.0/24,源地址是

100.0.0.1,也就是路由器的外部全局地址,但是ipsec的隧道兴趣流规则定义是对于源地

址为172.16.10.0 0.0.0.255目标地址为 10.10.33.0 0.0.0.255的流量才使用,于是我

认为应该在R1添加一句access-list 100 permit ip 100.0.0.0 0.0.0.255 10.10.33.0

0.0.0.255让源地址为100.0.0.1的流量也是兴趣流。添加后再ping时,发现ping不通

10.10.33.0/24了,于是抓包,从wireshark里面看有quick mode的网络包,说明流

量已经是走ipsec vpn了,但是由于某些原因未能通讯上,此时再看R2的CONSOLE,

发现有“Processing of Quick mode failed”消息提示。通过检查R2的配置,发现兴

趣流也没有定义是源地址为100.0.0.2,目上标地址是172.16.10.0的情况,于是我觉得

可能是ipsec vpn协商失败导致的,因为过来的是ipsec流量,但是返回的数据却不是,

因而失败。所以我再在R2上添加了一条ACL:access-list 100 permit ip 10.10.33.0

0.0.0.255 100.0.0.0 0.0.0.255,后来再ping就通了,从网络包看也是使用esp封装的。

总结:感兴趣流量的源地址和目标地址应该是peer两端的地址,而不是内网的地址