在之前写过了Cisco路由器之IPSec 虚拟专用网;在Cisco的ASA防火墙上实现IPSec虚拟专用网。这两篇博文都是用于实现总公司和分公司之间建立虚拟专用网的,那么还有一种使用很多的情况,就是出差人员想要访问公司内网的资源呢?由于出差人员只是单一的一个客户端,所以和前两篇博文不一样,前两篇博文.da.建.虚.拟.专.用网,两端设备都是路由器或防火墙,有固定的IP地址,所以呢,并不能实现出差人员访问,这篇博文的目的,就是实现出差人员可以访问公司内网资源的,这个技术被称之为——Easy 虚拟专用网。
传送门:
Cisco路由器之IPSec 虚拟专用网:https://blog.51cto.com/14227204/2448319
Cisco ASA 实现 IPSec 虚拟专用网:https://blog.51cto.com/14227204/2448965
一、在路由器上实现Easy 虚拟专用网需要配置什么?这篇博文将写下如何在路由器上实现Easy 虚拟专用网。如果网关设备是Cisco ASA防火墙,配置可参考:
1、XAUTH身份验证
在原有的IPSec协议上,并没有用户验证的功能,所以引入了一个RFC的草案——XAUTH。它是一个虚拟专用网网关的增强特性,提供用户名和密码的方式来验证用户身份。由于这个过程是在两个连接建立之间完成的,所以被戏称为“阶段1.5”(关于两个阶段的介绍,可以参考Cisco路由器之IPSec 虚拟专用网,有详细的介绍)。
谈到用户验证自然就涉及到了用户名和密码的存储方式,通常情况下有两种方式:
- 存储在虚拟专用网网关设备的内部数据库中,实现简单,我接下来就使用这种方式;
- 存储在第三方设备上,如一台AAA服务器。
2、组策略
要实现Easy 虚拟专用网,那么一定要在虚拟专用网设备上配置一些策略,然后,当客户端来连接虚拟专用网设备时,经过身份验证后,主动将配置的策略推送给客户端,以便成功建立连接,那么这个提前被配置的策略就被称之为组策略。
组策略包含如下:
(1)地址池:可以使虚拟专用网设备像DHCP服务器一样为每个通过验证的客户端“推送”IP地址。这样,由于客户端的IP地址是虚拟专用网网关动态分配的,虚拟专用网设备自然也就知道该与哪个IP建立虚拟专用网连接。示意图如下:
(2)DNS和网关:和DHCP服务器一样,除了给客户端分配IP地址以外,还要分配网关和DNS,这样客户端就拥有了内网的IP、网关及DNS等必备的资源,真正成为内网的一员,如下所示:
(3)交换共享密钥:在远程访问虚拟专用网中,虚拟专用网网关需要与多组客户端“共享密钥”,因此在配置虚拟专用网时需要为每组客户端设置不同的共享密钥,客户端的密钥并不是虚拟专用网网关推送的,而是需要用户通过客户端软件配置在主机上,而这个过程一般是由公司的网络管理员来实现的,那么这个密钥自然是保存在客户端主机本地了,因此才有了“阶段1.5”的存在,如下:
(4)分离隧道:默认情况下,客户端与虚拟专用网网关建立隧道后,只能访问内网授权的资源,这是因为隧道会允许所有的流量,也就是说所有的流量必须经过隧道到达公司内网,自然也就不允许任何流量fang wen wai wang ,而对于客户端来说,fang wen wai wang,再正常不过了,所以需要针对远程访问虚拟专用网配置ACL来分离隧道,通过配置ACL,所有“permit”的流量都被加密传输,所有“deny”的流量都被明文传输,而加密的流量就是通过隧道访问公司内网的流量,明文的流量就是访问Internet的流量,将这个ACL应用到组策略中即可实现需求,如下:
(5)分离DNS:当客户端主机通过远程访问虚拟专用网连接到公司内网,即使隧道分离后,客户端访问Internet的web服务器时,也需要使用公司内网的DNS解析,但这不是一个合理的过程,如果客户端每次访问百度,都要经过公司内网进行DNS解析,其实是没必要的,太浪费资源了,所以要实现客户端访问公司内网的web服务器时,使用公司内网的DNS解析,若访问百度,则使用Internet的DNS,如果要实现不同的域名使用不同的DNS,就需要用到了分离DNS,如下图:
3、动态crypto map
因为我们无法实现在虚拟专用网设备的静态crypto map中指定客户端的地址(客户端的地址由虚拟专用网的DHCP服务分发,不是固定的),所以需要将静态crypto map中需要的参数被动态填充,使用动态crypto map 必须采用ISAKMP/IKE发起协商,而且在实现远程访问虚拟专用网的时候通常在虚拟专用网网关上同时配置静态和动态的crypto map,因为只有一台具有静态配置的设备可以发起IPSec的隧道,也正是如此,动态的crypto map很少被用于L2L(局域网to局域网)会话建立。
在实现远程访问虚拟局域网的时候,一般会先配置transform-set,因为指定传输集与peer的IP地址无关,可以将传输集直接应用到动态crypto map;由于在接口上只能配置一个crypto map,且虚拟专用网网关上必须有静态crypto map,所以需将动态crypto map 应用到静态的crypto map中,再将静态crypto map应用到接口上,这就是配置crypto map的一般思路,如下图所示:
二、配置实例
1、环境如下:
2、环境分析:
(1)在公司网关路由器上配置虚拟专用网,客户端(出差人员)可以连接到虚拟专用网,并访问内网提供的DNS服务及HTTP(www.test.com ) 服务(使用该域名访问,内网中的DNS负责解析该域名),为了简化环境,所以集成到一台服务器上了。
(2)客户端连接到虚拟专用网后,还可以使用Internet的DNS及HTTP服务,模拟www.baidu.com 网站服务,并使用Internet上的服务器提供的DNS服务解析该域名。
(3)自行配置正确的路由器接口及各个服务器的IP、网关、路由(服务器配置相应的网关,路由器R1只需配置接口IP及一条默认路由指向R2路由器即可,R2路由器除了接口IP以外什么都不要配置,尤其是路由表,否则可能测试不出来虚拟专用网的效果)。
(4)客户端需要安装Cisco提供的客户端软件进行连接。
3、配置前准备:
(1)下载客户端使用的软件,并安装在客户端,用来连接虚拟专用网(我这里是windows 7的client安装包,如果客户端是Windows 10,请参考博文:Windows 10 安装虚拟专用网client端):https://blog.51cto.com/14154700/2431163
(2)自行配置路由器接口IP地址及路由(这些基础配置命令就不展示了,我之前的博文有写到过,或者自行百度吧)。
(3)自行配置各个服务器及客户端的IP及网关。
(4)自行在相关服务器上搭建web服务及DNS服务(这两个服务不是这篇博客想要介绍的,我这里简单搭了一个,我之前的博文有搭相关服务的,可以自行查看)。
4、开始配置
公司内网路由器配置(接口IP自行配置):
Router(config)#ip route 0.0.0.0 0.0.0.0 200.0.0.1 # 配置一条向外的默认路由
Router(config)#aaa new-model # 开启三A
#以下是为远程访问虚拟专用网客户端进行认证及授权。
# “ test1-authen”是自定义的认证名称,“local”表示本地认证方式,
#也可以使用“group radius”,路由器会转发给指定的RADIUS服务器进行验证,
#这里就使用“local”了,方便。
Router(config)#aaa authentication login test-authen local # 认证
Router(config)#aaa authorization network test-author local # 授权
Router(config)#username zhangsan secret 123123 # AAA的认证用户及密码
#以下是"配置虚拟专用网阶段1",是指定管理连接的相关参数,加密算法等
Router(config)#crypto isakmp policy 10
Router(config-isakmp)#encryption 3des
Router(config-isakmp)#hash sha
Router(config-isakmp)#authentication pre-share
Router(config-isakmp)#group 2
#阶段1至此配置完毕
Router(config-isakmp)#exit
#接下来"配置阶段1.5",就是需要在管理连接后建立成功后,推送给客户端的配置了。
#以下是配置一个地址池,池中的地址是向客户端分发的,
#地址池的网段地址,不可以和内网使用同一网段,否则将会影响最终通信
Router(config)#ip local pool test-pool 192.168.1.200 192.168.1.210
#以下是定义一个命名的ACL,这个ACL是推送给客户端使用的,只有ACL允许的源地址是可以被客户端访问的
Router(config)#ip access-list extended split-acl
#这个ACL是允许192.168.0.0去往任何地址,当推送到客户端时,就会反过来。
#变成了允许任何IP地址访问192.168.0.0。因为这里的源地址是站在路由器的角度的。
Router(config-ext-nacl)#permit ip 192.168.0.0 0.0.0.255 any
#以下是创建用户组
Router(config)#crypto isakmp client configuration group test-group
Router(config-isakmp-group)#key 321321 # 用户组密码
Router(config-isakmp-group)#pool test-pool # 应用刚才定义的地址池
Router(config-isakmp-group)#dns 192.168.0.10 # 指定dns
Router(config-isakmp-group)#acl split-acl # 应用acl
Router(config-isakmp-group)#split-dns test.com # 指定要分离出来的域名
Router(config-isakmp-group)#exit
#阶段1.5至此就配置完毕了。
#"配置阶段2,也就是数据连接的相关配置"
Router(config)#crypto ipsec transform-set test-set esp-3des esp-sha-hmac # 配置传输集
Router(cfg-crypto-trans)#exit
Router(config)#crypto dynamic-map test-dymap 1 # 创建动态map,“1”是序号,用来定义优先级
Router(config-crypto-map)#set transform-set test-set #在动态crypto map中定义transform-set(传输集)
Router(config-crypto-map)#exit
#以下是配置应用到静态crypto map中,由于同一台网关设备还会存在和分公司的虚拟专用网静态map,
#所以建议将这种方式的虚拟专用网配置的序号靠后一点,优先匹配与分公司之间的虚拟专用网静态map,这里定义为1000
Router(config)#crypto map test-stamap 1000 ipsec-isakmp dynamic test-dymap #引用刚才创建的动态map
# 以下配置是让客户端发起连接
Router(config)#crypto map test-stamap client authentication list test-authen
Router(config)#crypto map test-stamap isakmp authorization list test-author
Router(config)#crypto map test-stamap client configuration address respond
Router(config)#int f 0/1
Router(config-if)#crypto map test-stamap # 应用到接口
公司网关路由器上关于虚拟专用网的配置已经完成了,现在使用客户端安装专用软件,连接虚拟专用网,并测试访问即可。
客户端配置如下:
使用客户端进行访问验证: