路由上实现IPsec vpn穿越NAT

随着Internet的不断普及,低廉的上网费用促使越来越多的企业选择了通过VPN来实现远程连接,相比专线、帧中继、ATM等传统广域网连接,VPN不但成本要低出很多,而且安全性方面也不亚于它们,今天我们主要来介绍一下利用路由器来实现IPsec VPN站点到站点的远程连接,同时利用NAT实现上Internet

实验设备:思科路由器三台
实验拓扑:
http_imgload.cgi

拓扑介绍:
R0和R2路由器模拟公司两地的远程接点。R1路由器模拟Internet,可使用两个公网IP代替
实验过程:

一、基本配置

R0路由:
R0(config)#int f1/0
R0(config-if)#ip address 192.168.50.100 255.255.255.0 配置接口IP地址
R0(config-if)#no shutdown
R0(config)#int f0/0
R0(config-if)#ip address 192.168.5.1 255.255.255.0 配置接口IP地址
R0(config-if)#no shutdown
R0(config)#ip route 0.0.0.0 0.0.0.0 192.168.50.254 设置默认静态路由出去
R1路由:
R1(config)#int f0/0
R1(config-if)#ip address 192.168.50.254 255.255.255.0 配置接口IP地址
R1(config-if)#no shutdown
R1(config)#int f1/0
R1(config-if)#ip add 192.168.60.254 255.255.255.0 配置接口IP地址
R1(config-if)#no shutdown
R2路由:
R2(config)#int f1/0
R2(config-if)#ip address 192.168.60.100 255.255.255.0 配置接口IP地址
R2(config-if)#no shutdown
R2(config)#int f0/0
R2(config-if)#ip address 192.168.6.1 255.255.255.0 配置接口IP地址
R2(config-if)#no shutdown
R2(config)#ip route 0.0.0.0 0.0.0.0 192.168.60.254 设置默认静态路由出去

二、VPN配置

第一步 配置IKE协商

R0(config)#crypto isakmp policy 100    建立IKE协商策略
R0(config-isakmap)# authentication pre-share   设置路由要使用的预先共享的密钥
R0(config)# crypto isakmp key jxxh address 192.168.60.100 设置共享密钥和对端地址 jxxh是密钥
R2(config)#crypto isakmp policy 100    建立IKE协商策略
R2(config-isakmap)# authentication pre-share   设置路由要使用的预先共享的密钥
R2(config)# crypto isakmp key jxxh address 192.168.50.100 设置共享密钥和对端地址 jxxh是密钥

第二步 配置IPSEC相关参数

R0(config)# crypto ipsec transform-set jxxhshm esp-des 配置传输模式以及验证的算法和加密的的算法jxxhshm这里是给这个传输模式取个名字
R0(config)# access-list 101 permit ip 192.168.5.0 0.0.0.255 192.168.6.0 0.0.0.255这里是定义访问控制列表
R2(config)# crypto ipsec transform-set jxxhshm esp-des 两边的传输模式的名字要一样
R2(config)# access-list 101 permit ip 192.168.6.0 0.0.0.255 192.168.5.0 0.0.0.255

第三步 应用配置到接口

R0(config)#crypto map jxxhmap 110 ipsec-isakmp 采用IKE协商,优先级为110 这里的jxxhmap是一个表的名字
R0(config-crypto-map)#set peer 192.168.60.100 指定VPN链路对端的IP地址
R0(config-crypto-map)#set transform-set jxxhshm指定先前所定义的传输模式
R0(config-crypto-map)#match address 101 指定使用的访问控制列表,这里的MATCH是匹配的意思
R0(config)# int f1/0
R0(config-if)# crypto map jxxhmap 应用此表到端口
R2(config)#crypto map jxxhmap 110 ipsec-isakmp 采用IKE协商,优先级为110 这里的jxxhmap是一个表的名字
R2(config-crypto-map)#set peer 192.168.50.100 指定VPN链路对端的IP地址
R2(config-crypto-map)#set transform-set jxxhshm指定先前所定义的传输模式
R2(config-crypto-map)#match address 101 指定使用的反问控制列表,这里的MATCH是匹配的意思
R2(config)# int f1/0
R2(config-if)# crypto map jxxhmap 应用此表到端口

三、验证

好了,配到这里我们就已经完成IPSEC VPN的配置,接下来我们可以验证一下在C0这台PC上ping C1结果为ping通,表明VPN已经完成,同时我们还可以使用show命令查看crypto状态
R0#show crypto ipsec sa
R0#show crypto isakmp sa
R0# show crypto isakmp policy
接下来,我们再测试一下能否ping通外网在C0这台PC上ping  www.jxxhdn.com不通,原因很简单,因为现在还没做NAT,R1的并不知道192.168.5.0这个私有网络号该如何到达

四、NAT配置

R0(config)#access-list 102 deny ip 192.168.5.0 0.0.0.255 192.168.6.0 0.0.0.255 这是关键所在,否则VPN将失效
R0(config)#access-list 102 permit ip any any
R0(config)#ip nat inside source list 102 int f1/0 overload 配置NAT
R0(config)#int f1/0
R0(config)#ip nat outside
R0(config)#int f0/0
R0(config)#ip nat inside
R2(config)#access-list 102 deny ip 192.168.6.0 0.0.0.255 192.168.5.0 0.0.0.255 这是关键所在,否则VPN将失效
R2(config)#access list 102 permit ip any any
R2(config)#ip nat inside source list 102 int f1/0 overload 配置NAT
R2(config)#int f1/0
R2(config)#ip nat outside
R2(config)#int f0/0
R2(config)#ip nat inside
小结:在这个实验中,关键是ipsec vpn 和NAT的访问控制列表不能冲突,前往对方私用网络的源IP不要转换成公网IP,而去公网的源地址则转换