Меня всегда интересовало, что же такого легкого в EzVPN, что позволяет Cisco называть его так :) Настройка сервера может быть весьма и весьма развесистой, однако кардинальных отличий от Site-to-Site не так уж и много и заключаются они в так называемой ISAKMP/IKE Phase 1.5, а конкретно в механизме XAUTH.
Cisco Easy VPN оперирует двумя понятиями – Cisco Easy VPN сервер и Cisco Easy VPN Remote (удаленный агент). В качестве агента могут выступать некоторые маршрутизаторы, ASA МСЭ, компьютеры с установленным Cisco VPN Client. OS X и iPhone/iPad имеют встроенные IPSec клиенты поддерживающие XAUTH (racoon).
Я не буду останавливаться на настройке Cisco Systems Easy VPN Client, однако покажу, как можно настроить маршрутизатор в качестве этого самого клиента (что само по себе не очень актуально из-за разнообразия других технологий, обеспечивающих связность удаленных площадок, но может быть полезно для понимания механизмов взаимодействия).
Настройка Site-to-Site не сильно отличается от Remote Access. Похожие моменты это – политики первой фазы ISAKMP/IKE, transform sets, dynamic & static crypto maps. На этих вещах я подробно останавливаться не буду, если есть желание, то перечитайте статью о site-to-site VPN’ах. И так, приступим, начав с настройки Easy VPN Server.
Определимся с AAA
AAA (Authentication, Authorization, Accounting) используется Easy VPN для применения групповых политик и авторизации, а так же для аутентификации пользователей (XAUTH). Easy VPN сервер может получать информацию о пользователях и группах либо из локальной базы, либо с radius-сервера. Смысл в последнем появляется, когда у вас большая база пользователей и пара-другая точек входа. Настройка AAA сводится к следующему:
Rx(config)# aaa new-model Rx(config)# aaa authentication login authentication_list method1 [method2...] Rx(config)# aaa authorization network authorization_list method1 [method2...] Rx(config)# username username [ password | secret ] password
Команда aaa new-model включает AAA на маршрутизаторе.
aaa authentication login позволяет пользователям проходить XAUTH аутентификацию (так называемая фаза 1.5) на маршрутизаторе. authentication_list будет использоваться далее как один из параметров crypto map или ISAKMP профиля. В методах можно использовать локальную базу пользователей (в этом случае база заполняется с помощью команды username …) и/или radius сервер. Можно указать несколько методов аутентификации, которые маршрутизатор будет использовать в порядке указанном вами.
aaa authorization network указывает AAA сервер, который будет использоваться для обработки политик IPSec remote access групп. Так же можно указать local базу, radius базу или обе.
Создание групп
Если вы выбрали метод авторизации local для aaa authorization network, то совсем не лишним будет создать группы на маршрутизаторе. Делается это так:
Rx(config)# ip local pool VPN_POOL 1st_ip_addr 2nd_ip_addr Rx(config)# crypto isakmp client configuration address-pool local VPN_POOL Rx(config)# crypto isamkp client configuration group [ group_name | default ] Rx(config-isakmp-group)# key pre_shared_key Rx(config-isakmp-group)# pool VPN_POOL Rx(config-isakmp-group)# domain fqdn.domain.local Rx(config-isakmp-group)# dns 1st_DNS_server [2nd_DNS_server] Rx(config-isakmp-group)# split-dns fqdn.domain.local Rx(config-isakmp-group)# wins 1st_WINS_server [2nd_WINS_server] Rx(config-isakmp-group)# include-local-lan Rx(config-isakmp-group)# netmask mask Rx(config-isakmp-group)# acl ACL_name_or_# Rx(config-isakmp-group)# backup-gateway [ IP_address | hostname ] Rx(config-isakmp-group)# save-password Rx(config-isakmp-group)# pfs Rx(config-isakmp-group)# max-logins #_of_simultaneous_logins Rx(config-isakmp-group)# max-users #_of_users Rx(config-isakmp-group)# access-restrict interface_name Rx(config-isakmp-group)# group-lock Rx(config-isakmp-group)# exit
Объяснение очевидных настроек опущено.
ip local pool – создает пул адресов, которые будут назначены пользователям remote access VPN.
crypto isakmp client configuration address-pool local VPN_POOL – позволяет вам связать адресный пул, созданный с помощью команды ip local pool. Если в дальнейшем при конфигурации remote access группы вы не укажите пул адресов, то будет использоваться пул, указанный с помощью этой команды. Так же эта команда позволяет нескольким группам использовать один и тот же пул.
crypto isamkp client configuration group – непосредственно создает группу, которая будет использоваться в процессе авторизации.
key – pre-shared ключ, который будет использоваться в процессе авторизации.
pool – указывает пул из которого будут выделяться ip для подключения Remote Access клиентов.
split-dns – при включении этой опции DNS запросы к домену будут направлены на внутренние DNS сервера, все остальные запросы будут обслуживаться DNS серверами провайдера.
include-local-lan – клиент получает доступ к сетям, присутствующим в его локальной таблице маршрутизации без включения опции split-tunnel.
netmask – назначает клиенту маску подсети для виртуального адаптера.
acl – опция, иначе называемая split-tunnel. Клиенту сообщается список сетей, до которых нужно шифровать трафик. Весь остальной трафик будет отправляться в не шифрованном виде по общим сетям передачи данных. Обратите внимание на то, что настраивается этот split-tunnel ACL с точки зрения маршрутизатора. К примеру, мы хотим чтобы клиенты отправляли трафик только до сети 192.168.1.0/24, которая находится за нашим маршрутизатором-EasyVPN сервером, по зашифрованному каналу:
Rx(config)# ip access-list extended split-tunnel Rx(config-ext-nacl)# remark define protected traffic Rx(config-ext-nacl)# permit ip 192.168.1.0 0.0.0.255 any
backup-gateway – сообщает клиенту резервный Easy VPN сервер. Можно указать до 10 серверов.
save-password – позволяет клиенту сохранять пароль, который указывается в процессе аутентификации (XAUTH).
pfs – опция, указывающая на то, что для каждого обмена второй фазы будет использована новая пара ключей, созданных по алгоритму DH
access-restrict – указывает на интерфейсы, которые могут использовать пользователи указанной группа для терминирования защищенных каналов.
group-lock – опция, заставляющая клиента вводить не только имя пользователя и пароль, но и имя группы с pre-shared ключом.
Dynamic & Static Crypto maps
Последнее что осталось – это связать все настройки в крипто карты и применить их на нужном интерфейсе.
Dynamic crypto map
Rx(config)# crypto dynamic-map dynamic_map_name #_number Rx(config-crypto-m)# set transform-set tset_name [ tset_name1 ... tset_name6] Rx(cofnig-crypto-m)# reverse-route
Команда reverse-route, напомню, отвечает за функционал RRI (reverse route injection). При ее подаче в режиме конфигурации динамической крипто карты внутренний адрес клиента (client mode) или частный адрес сети (network extension mode) появляется как статический маршрут в таблице маршрутизации Easy VPN сервера.
Static crypto map и XAUTH
Для начало нам надо связать dynamic crypto map с static crypto map:
Rx(config)# crypto map stat-cmap-name seq_# ipsec-isakmp dynamic dyn-cmap-name
Если вы планируете использоваться и dynamic и static crypto map, то назначайте динамическим картам номера выше, чем статическим. Одновременную работу S2S & remote access VPN (функционал ISAKMP профилей) мы рассмотрим в следующей статье.
Затем нам надо указать группу, которая будет использоваться для авторизации в данной крипто карте:
Rx(config)# crypto map stat-cmap-name isakmp authorization list authorization_list
Укажем маршрутизатору, где искать данные, для аутентификации пользователей:
Rx(config)# crypto map stat-cmap-name client authentication list authentication_list
Дальше решается, кто должен инициировать применение политик IKE Mode Config – сервер (ключ initiate) или клиент (ключ respond):
Rx(config)# crypto map stat-cmap-name client configuration address [initiate | respond]
Программные и аппаратные Cisco Easy VPN клиенты сами инициируют IKE Mode Config. Ключ initiate видимо остался для совместимости с какими-то старыми реализациями протокола.
Альтернативно можно указать время, которое отводится пользователю для прохождения аутентификации командой crypto isakmp xauth timeout seconds. Значение по умолчанию равно 60 секундам.
Мониторинг
show crypto session group – показывает активные группы и количество подключенных клиентов
show crypto session brief – показывает активные группы и пользователей
На этом настройка Cisco Easy VPN Server окончена и после применения static crypto map на интерфейса пользователи cisco easy vpn client должны получить возможность подключаться к вашей сети. Настройку клиента я опущу из-за ее очевидности, а вот на конфигурации аппаратных клиентов мы остановимся подробнее.
Настройка Cisco Easy VPN Remote
В качестве Cisco Easy VPN Client могут выступать не только программные клиенты, но и вполне себе взрослые маршрутизаторы. Настройка их весьма проста по сравнению с сервером и единственное что стоит держать в голове это три режима работы Easy VPN клиента – client mode, network extension mode, network extension plus mode.
Главное ограничение client mode состоит в том, что устройства или пользователи, которые находятся за Cisco Easy VPN Server не могут инициировать подключения к устройствам, которые находятся за Cisco Easy VPN Client. В client mode NAT/PAT настраивается автоматически.
Network extension mode симулирует S2S подключение, позволяя устройствам, находящимся за Cisco Easy VPN Server получать доступ к ресурсам за Cisco Easy VPN Client. В этом случае никакие адреса из внутреннего диапазона не назначаются клиенту. Каждая сеть за клиентом, работающим в network extension mode, должна быть уникальной по понятным причинам.
Network extension plus mode – есть комбинация из client mode и network extension mode. В процессе IKE Mode Config loopback адресу маршрутизатора назначается адрес из пула.
Непосредственно настройка сводится к следующему – указывается DHCP Pool (по желанию):
Rx(config)# ip dhcp pool DHCP_POOL Rx(dhcp-config)# network IP_network [subnet_mask | /prefix_length ] Rx(dhcp-config)# default-router Rx_ip_addr Rx(dhcp-config)# domain-name fqdn.domain.local Rx(dhcp-config)# dns-server 1st_DNS_server 2nd_DNS_server Rx(dhcp-config)# netbios-name-server 1st_WINS_server 2nd_WINS_server Rx(dhcp-config)# lease [ days [hours [minutes]] | infinite ]
Создается Easy VPN Client профиль и активируется на интерфейсах:
Rx(config)# crypto ipsec client ezvpn profile_name Rx(config-crypto-ezvpn)# group group_name key group_password_key Rx(config-crypto-ezvpn)# peer EzVPN_server_remote_ip_addr Rx(config-crypto-ezvpn)# mode [ client | network-extension ] Rx(config-crypto-ezvpn)# connect [auto | manual] Rx(config-crypto-ezvpn)# username username password password Rx(config)# interface interface Rx(config-if)# crypto ipsec client ezvpn profile_name [ outside | inside ]
Если групповой профиль на Easy VPN сервере сконфигурирован без опции save-password, позволяющей клиентам сохранять пароль, то толку от настройки клиента
Rx(config-crypto-ezvpn)# username username password password
не будет. Вам будет предложено руками в режиме user или exec mode указать имя пользователя и пароль с помощью команды crypto ipsec client ezvpn xauth.
Мониторинг и выявление неполадок Cisco Easy VPN Client (Remote)
show crypto ipsec client ezvpn – отображает информацию о текущем состоянии активных туннелей включая политики, полученные с сервера в процессе IKE Config Mode.
show ip nat statistics – отображает настройку NAT/PAT клиента работающего в client mode.
debug crypto ipsec client ezvpn – помогает выявлять неполадки в конфигурации Cisco Easy VPN.
clear crypto ipsec client ezvpn – удаляет все активные туннели.
Ну и традиционно сочные конфиги для самых терпеливых:
По легенде RA1 работает в client mode и на группу, в которую он входит применен ACL разрешающий ему отправлять трафик, который не предназначен для 192.168.1.0/24 в обход защищенного канала передачи информации. RA2 работает в network extension mode и весь трафик будет отправлен в зашифрованный канал.
main (Cisco Easy VPN Server) configuration:
main(config)# aaa new-model main(config)# aaa authentication login ra-usrs local main(config)# aaa authorization network ra-grps local main(config)# username ra1 secret ra1pwd main(config)# username ra2 secret ra2pwd main(config)# crypto isakmp policy 100 main(config-isakmp)# encryption aes 128 main(config-isakmp)# hash sha main(config-isakmp)# authentication pre-share main(config-isakmp)# group 2 main(config-isakmp)# exit main(config)# crypto isakmp keepalive 20 3 main(config)# crypto isakmp nat keepalive adasdasd main(config)# ip local pool ra1pool 192.168.20.10 192.168.20.20 main(config)# ip access-list extended split-acl main(config-ext-nacl)# permit ip 192.168.1.0 0.0.0.255 any main(config-ext-nacl)# exit main(config)# crypto isakmp client configuration group ra1_grp main(config-isakmp-group)# key ra1key main(config-isakmp-group)# save-password main(config-isakmp-group)# pool ra1pool main(config-isakmp-group)# domain fqdn.domain.ltd main(config-isakmp-group)# acl split-acl main(config-isakmp-group)# exit main(config)# crypto isakmp client configuration group ra2_grp main(config-isakmp-group)# key ra2key main(config-isakmp-group)# save-password main(config-isakmp-group)# domain fqdn.domain.ltd main(config-isakmp-group)# exit main(config)# crypto ipsec transform-set tset1 esp-aes esp-sha-hmac main(cfg-crypto-tran)# exit main(config)# crypto dynamic-map dyn-cmap 10 main(config-crypto-m)# set transform-set tset1 main(config-crypto-m)# reverse-route main(config-crypto-m)# exit main(config)# crypto map stat-cmap client authentication list ra-usrs main(config)# crypto map stat-cmap isakmp authorization list ra-grps main(config)# crypto map stat-cmap client configuration address respond main(config)# crypto map stat-cmap 10 ipsec-isakmp dynamic dyn-cmap main(config)# interface fa0/0 main(config-if)# description Local LAN main(config-if)# ip address 192.168.1.1 255.255.255.0 main(config-if)# exit main(config)# interface fa0/1 main(config-if)# description Internet Connection main(config-if)# ip address 10.1.1.1 255.255.255.0 main(config-if)# crypto map stat-cmap
RA1 (Cisco Easy VPN Client) configuration – client mode:
RA1(config)# crypto ipsec client ezvpn ra1 RA1(config-crypto-ezvpn)# connect auto RA1(config-crypto-ezvpn)# mode client RA1(config-crypto-ezvpn)# peer 10.1.1.1 RA1(config-crypto-ezvpn)# username ra1 password ra1pwd RA1(config-crypto-ezvpn)# group ra1_grp key ra1key RA1(config-crypto-ezvpn)# xauth userid mode local RA1(config-crypto-ezvpn)# exit RA1(config)# interface FastEthernet0/0 RA1(config-if)# ip address 192.168.4.1 255.255.255.0 RA1(config-if)# crypto ipsec client ezvpn ra1 inside RA1(config-if)# exit RA1(config)# interface FastEthernet0/1 RA1(config-if)# ip address 172.16.20.1 255.255.255.0 RA1(config-if)# crypto ipsec client ezvpn ra1
*Mar 1 04:36:04.650: %CRYPTO-6-ISAKMP_ON_OFF: ISAKMP is ON *Mar 1 04:36:05.734: %CRYPTO-6-EZVPN_CONNECTION_UP: (Client) User=ra1 Group=ra1_grp Client_public_addr=172.16.20.1 Server_public_addr=10.1.1.1 Assigned_client_addr=192.168.20.10 *Mar 1 04:36:07.390: %LINK-3-UPDOWN: Interface Loopback0, changed state to up *Mar 1 04:36:08.390: %LINEPROTO-5-UPDOWN: Line protocol on Interface Loopback0, changed state to up
RA2 (Cisco Easy VPN Client) configuration – network extension mode:
RA2(config)# crypto ipsec client ezvpn ra2 RA2(config-crypto-ezvpn)# connect auto RA2(config-crypto-ezvpn)# group ra2_grp key ra2key RA2(config-crypto-ezvpn)# mode network-extension RA2(config-crypto-ezvpn)# peer 10.1.1.1 RA2(config-crypto-ezvpn)# username ra2 password ra2pwd RA2(config-crypto-ezvpn)# xauth userid mode local RA2(config-crypto-ezvpn)# exit RA2(config)# int fa0/1 RA1(config-if)# ip address 172.16.30.1 255.255.255.0 RA2(config-if)# crypto ipsec client ezvpn ra2 outside RA2(config)#int fa0/0 RA1(config-if)# ip address 192.168.5.1 255.255.255.0 RA2(config-if)# crypto ipsec client ezvpn ra2 inside
*Mar 1 00:31:54.643: %CRYPTO-6-ISAKMP_ON_OFF: ISAKMP is ON *Mar 1 00:31:55.431: %CRYPTO-4-IKMP_NO_SA: IKE message from 10.1.1.1 has no SA and is not an initialization offer *Mar 1 00:31:56.351: %CRYPTO-6-EZVPN_CONNECTION_UP: (Client) User=ra2 Group=ra2_grp Client_public_addr=172.16.30.1 Server_public_addr=10.1.1.1 NEM_Remote_Subnets=192.168.5.0/255.255.255.0 *Mar 1 00:31:56.999: %LINEPROTO-5-UPDOWN: Line protocol on Interface NVI0, changed state to up
Вот такой вот Easy VPN от Cisco Systems.