Remoteaccess VPN
VPN server 端
第一阶段
- 1. 策略
- 2 Pre-share(不是单纯的key,而是group+key)
- 2 DH GROUP2
- 2. AM(3个包)密码的安全性由HASH来保障
第1.5阶段
- 1. xauth(1.安全2.用户认证3.AAA)
- 2. mode-config(推送策略1.ip 2.DNS 3.tunnel split 4.dns split等等)
第2阶段QM (策略)
Remote access vpn的策略怎么样构建?
Remote access vpn第一阶段的认证策略我们使用pre-share key,当然我们可以使用证书来认证。远程访问VPN第一阶段内建的策略都是DHGROUP 2的,group 1是不行的。因为客户端内建的策略都是group 2的,所以这一点一定要注意。在站点到站点的VPN当中,如果我们选择了预共享密钥方式来验证的时候,我们只需敲上一个crypto isakmp key,然后写上对方的IP地址就可以了,通过一个单纯的KEY来验证对方。但是远程访问VPN中并没有通过一个key来验证对方,而是通过一个group+key,两者的组合作为一个预共享密钥来验证的;为什么要有这样一个设计呢?因为在实际的应用环境会存在很多的部门,我们可以为每个部门创建一个GROUP,为每一个group创建一个key,我们可以基于group的不同,部门的不同推送不同的策略,做不同的认证方法。这就是远程访问VPN第一阶段的认证不使用单纯的key,而要使用group+key的原因。所以我们可以使用组的方法,把用户分开,基于不同的组做相应的策略。
远程访问vpn的预共享密钥认证方法的第一阶段采用的是积极模式(AM),只有3个包,而站点到站点的VPN第一阶段采用的是主模式(MM)共6个包,主模式的6个包中的第5,6个包是在加密的环境下进行的密钥的交换,但是积极模式只有3个包,密钥并没有采用加密方式,当然肯定不是明文传送的,密钥的安全性是有HASH来保障的。其实就是将密钥通过HASH做相应扰乱发送给对方的。当然这样的方式是不够安全的,因为他的安全性不够,所以提供了增强型的认证--1.5阶段,第一阶段的group+key认证完了之后,在做一个Xauth,<做一个用户名和密码的认证>。
做一次增强型的认证有以下好处:首先是会比以前更安全,因为1.5阶段是加密的,其次提供了一个用户的认证。再者,Xauth引入了AAA机制,我们可以通过AAA服务器而不是用本地来做用户名和密码的认证,这是xauth的作用。
在1.5阶段,还有一个重要的东西就是mode confige,它的作用就是为我们的客户推送策略,比如为客户端推送一个内网IP地址,这个是必须推送的策略,如果内网有dns服务器,同样可以推送DNS地址给我的客户,还有tunnel的分割技术。
最后就是QM阶段,第二阶段,跟site-to-site的QM是一样的,三个包的交互。
下面我们来看一下远程访问VPN的配置过程:
1
GW(config)#interface f0/0
GW(config-if)#ip add 10.0.0.1 255.255.255.0
GW(config-if)#no shutdown
GW(config-if)#exit
GW(config)#int f1/0
GW(config-if)#ip add 192.168.1.1 255.255.255.0
GW(config-if)#no shutdown
GW(config-if)#exit
GW(config)#ip route 0.0.0.0 0.0.0.0 10.0.0.2
第一阶段策略
GW(config)#crypto isakmp policy 1
GW(config-isakmp)#encryption 3des
GW(config-isakmp)#group 2
GW(config-isakmp)#hash md5
GW(config-isakmp)#authentication pre-share
GW(config-isakmp)#exit
第一阶段group+key认证此阶段采用HASH算法保障key的安全,显然安全性不够。
GW(config)#crypto isakmp client configuration group vpngroup
GW(config-isakmp-group)#key cisco
GW(config-isakmp-group)#exit
因为第一阶段group+key的认证不够安全,所以引入xauth增强型认证,来认证用户名,密码。xauth特性需要引入AAA模式,这个阶段称之为1.5阶段,在1.5阶段的认证方式采用加密方法
启用AAA服务
GW(config)#aaa new-model
做xauth的认证策略名字叫baidu,客户端从本地(local<GW>)来拿用户名和密码
GW(config)#aaa authentication login baidu local
GW端指定的用户名为cisco 密码是ccnp
GW(config)#username cisco password ccnp
xauth认证成功后为客户端分配的IP地址池,地址池的名字是vpnpool ,地址段是123.1.1.100到123.1.1.200
GW(config)#ip local pool vpnpool 123.1.1.100 123.1.1.200
策略的授权需要在组中进行,如地址池,隧道分割,dns分割等等。
GW(config)#crypto isakmp client configuration group vpngroup
GW(config-isakmp-group)#pool vpnpool
通过网络访问方式在路由器本地实现策略的授权,策略的名字google
GW(config)#aaa authorization network google local
第二阶段,定义如何保护感兴趣流,创建传输集
GW(config)#crypto ipsec transform-set baiduset esp-3desesp-md5-hmac
GW(cfg-crypto-trans)#exit
因为远程访问VPN无法确定对端的ip地址,也就无从知道相应的感兴趣流,所以要创建动态MAP,在动态map中调用传输集
GW(config)#crypto dynamic-map dymap 1
GW(config-crypto-map)#set transform-set baiduset
GW(config-crypto-map)#reverse-route //向网关注入反向路由。
GW(config-crypto-map)#exit
创建静态map,在静态MAP中调用动态map,
GW(config)#crypto map vpnmap 1 ipsec-isakmp dynamic dymap
在静态MAP中匹配认证策略,授权策略,向VPN客户端推送IP地址的方法是respond
GW(config)#crypto map vpnmapclient authentication list baidu
GW(config)#crypto map vpnmapisakmp authorization list google
GW(config)#crypto map vpnmap client configuration addressrespond
在VPN网关接口上调用静态map
GW(config)#int f0/0
GW(config-if)#crypto map vpnmap
INSIDE
INSIDE(config)#int f0/0
INSIDE(config-if)#ip add 192.168.1.2 255.255.255.0
INSIDE(config-if)#no shutdown
INSIDE(config-if)#exit
INSIDE(config)#no ip routing
INSIDE(config)#ip default-gateway 192.168.1.1
INSIDE(config)#exit
ISP
ISP(config)#int f0/0
ISP(config-if)#ip add 10.0.0.2 255.255.255.0
ISP(config-if)#no shutdown
ISP(config-if)#exit
ISP(config)#int f1/0
ISP(config-if)#ip add 12.1.1.1 255.255.255.0
ISP(config-if)#no shutdown
客户端验证
第一步:Group+key验证: 组名vpngroup密码:cisco
第二步:xauth 1.5阶段验证:用户名cisco,密码:ccnp
第三步:验证成功后给VPN客户端从VPN池中分配IP地址,获得了123.1.1.102
自动向网关注入一个反向路由,下一跳地址指向12.1.1.2
GW#show ip route
Gateway of last resort is 10.0.0.2 tonetwork 0.0.0.0
10.0.0.0/24 is subnetted, 1 subnets
C 10.0.0.0 is directly connected, FastEthernet0/0
123.0.0.0/32 is subnetted, 1 subnets
S 123.1.1.102 [1/0] via 12.1.1.2
C 192.168.1.0/24 is directly connected, FastEthernet1/0
S* 0.0.0.0/0 [1/0] via 10.0.0.2
此时VPN客户端的路由表中可以发现去往192.168.1.0网段是从123.1.1.102出去的路由条目。
查看客户端路由表使用route print 命令即可。
可以实现与内网inside主机的通信了。
在inside主机上启用HTTP服务,测试VPN
INSIE(config)#ip http server
INSIE(config)#ip http authentication local
INSIE(config)#username huarong privilege 15password ccnp
INSIE(config)#
vpn client 的状态
因为没有在Vpn网关上做隧道分离,所以默认所有的流量都要加密,即0.0.0.0-0.0.0.0的流量都走VPN通道
做隧道分离,任何VPN客户端访问192.168.1.0网段的主机的流量走vpn通道并加密,其余的不加密,正常访问。
GW(config)#access-list 102 permit ip 192.168.1.0 0.0.0.255any
GW(config)#crypto isakmp client configuration groupvpngroup
GW(config-isakmp-group)#acl 102
GW(config-isakmp-group)#exit
关于easy VPN反向路由注入的解释:
VPN网关向客户端推送完策略后,会注入反向路由,原因是pc访问inside主机时,网关肯定有inside主机的路由,流量是可以过去的,但是返回的包vpn网关没有办法发给pc,如果要让返回的包来到pc,必须要有路由,所以需要注入反向路由,会根据分配给PC的ip地址如123.1.1.102/32位的路由,下一跳指向pc的公网地址12.1.1.2.
关于easy VPN地址池是否可以分配与内网地址段相同的解释
其实分配同样网段的ip地址在不冲突的情况下也是可以的,因为路由器是最长匹配,反向路由是32位的,池是可以分配同一个网段,但IP地址不能冲突。