Сетевое, серверное, телекоммуникационное и торговое оборудование, AutoID и видеонаблюдение, ИБП и АКБ

Настройка EasyVPN на Cisco (split tunneling)

Который раз убеждаюсь в том, что какие доки не бери с cisco.com, а как готовое решение они не пойдут, постоянно что-то да в них недосказано, что-то упущено. Хочется верить, что это делалось на благо, а не из корыстных побуждений ))) Хотя, в любом случае, то, что заставляет мозг работать – есть на благо, как ни крути )) Вот так, у меня собственно и было на днях. Пришлось разбираться, что называется «с нуля» качать кучу доков, в том числе и официальных, перелопачивать форумы, и прочие статьи. Вот этот опыт я и хочу увековечить в цифре, чтоб не потерялся, ну и ещё кому-нибудь пригодился.
В общем, понадобилось связать удалённые филиалы нашей организации с сеткой. Основное требование – это защищённость, наличие шифрования канала и простота в настройке у клиентов. Остановился я на цисковской технологии EasyVPN, тут вам и поддержка IPSec, и минимализм в настройках на клиентской части, что с одной стороны облегчает развёртывание VPN инфраструктуры, а с другой повышает безопасность, т.к. все параметры взаимодействия и политики безопасности, в данном случае, располагаются на центральном сервере сети VPN, к которому подключаются удаленные устройства - аппаратные и программные VPN-клиенты.

Сеть Cisco

 

 Итак, дано:
1)Роутер Cisco 2821;
2)Клиентские машинки, имеющие выход в инет и не имеющие статического IP;
3)Сеть предприятия;
Настройка cisco:
В первую очередь настраиваем aaa:
aaa new-model
!
aaa authentication login vpn_xauth_1 local
aaa authorization network vpn_group_1 local
!
Тут vpn_xauth_1 и vpn_group_1, ну скажем так, профили пользовательской и групповой аутентификации и авторизации, в них указывается порядок получения групповых и пользовательских политик, в нашем случае local обозначает, что настройки беруться из конфига циски, сейчас у меня настроена аутентификация через радиус, но об этом в отдельной заметке, т.к. это отдельная история, и чтобы никого не путать разберём сначала локальный вариант.
Далее добавляем пользователя, который будет у нас логиниться при установлении vpn-соединения:
username cisco password cisco
Настраиваем протокол isakmp (неотъемлемая часть протокола IPSec предназначена для шифрованного обмена ключами):
crypto isakmp policy 1
 encr 3des
 authentication pre-share
 group 2

В данном случае pre-share обозначает, что для генерации ключа будет использован не сертификат, а некоторая строка pre shared key, которая будет задана администратором для каждой группы.
Далее идут групповые настройки для подключения:
crypto isakmp client configuration group remote-clients
 key megakey123
 dns 192.168.1.10
 domain domain.local
 pool POOL_1
 acl 100

Тут remote-clients произвольное имя групповой политики таких политик может быть много. Всё зависит от ваших требований к сетям VPN. Key – это и есть вышеупомянутый pre shared key для группы remote-clients.  Pool – имя локального пула ip-адресов которые будут выдаваться клиентам. Acl – имя аксесс-листа, в моём случае это нужно для организации split tunneling. Что такое split tunneling? Дело в том, что, в моём случае, большая часть удалённых клиентов выходит в инет посредствам 3G-модемов и при установлении vpn-подключения будет «теряться интернет», просто пакеты адресованные узлам сети Интернет пойдут через VPN-соединение, и дойдя до циски теряться, т.к. узлов с такими адресами в нашей сети нет, так, что этим правилом access-list, относящимся к split tunneling мы блокируем все адреса не относящиеся к нашей сети, чтобы циска их блокировала, и пакеты не терялись, а отправлялись в глобальную сеть. Ну это так, немного забегая вперёд, само же правило будет ниже, здесь только ссылка на него. Почему именно split tunneling? Да потому что (опять же повторюсь) в нашем случае раздавать инет через наш шлюз не рационально, и бессмысленно, учитывая мобильность клиентов.  Пакеты, адресованные узлам сети Интернет, фактически будут проходить через Интернет дважды, во-первых, через VPN соединение, которое и так устанавливается через инет (и весьма не быстрый канал), а во-вторых, с нашего шлюза до адресата уже непосредственно в инете, что будет порождать задержки и увеличивать нагрузку на наш шлюз. Так же и биллинг для vpn-клиентов становится бессмысленным, учитывая тот факт, что соединение через vpn можно разорвать и пользоваться интернетом напрямую. Другое дело стационарные офисы имеющие свою сеть и постоянное соединение по vpn с центральным офисом, тут уже split tunneling не нужен, вот для этого и пригодятся нам групповые политики, для кого-то можно разрешить пользоваться «личным» инетом, а кому-то можно и запретить. Ладно, вернёмся к нашим баранам ))
Настраиваем профиль для isakmp. Он пригодится нам для дальнейшей настройки IPSec:
crypto isakmp profile ike-profile-1
   match identity group remote-clients
   client authentication list vpn_xauth_1
   isakmp authorization list vpn_group_1
   client configuration address respond
   virtual-template 1
!

Где, match identity group – имя созданной ранее группы на которую будет распространятся данные настройки шифрования (если групп несколько, то и этих строк тоже должно быть несколько); ike-profile-1 – имя профиля; client authentication list – метод аутентификации (точнее его имя, см. выше); isakmp authorization list – метод авторизации (так же его имя, так же см. выше); virtual-template 1 – интерфейс к которому происходит подключение, в нашем случае виртуальный, привязанный к реальному (см. настройки ниже).
Создаём профиль трансформы (не знаю как правильнее на великом и могучем сказать):
crypto ipsec transform-set transform-1 esp-3des esp-sha-hmac
transform-1 – имя профиля, может быть произвольным, остальное параметры IPSec отвечающие за алгоритм шифрования и хэширования соответственно.
Далее непосредственно настройки профиля IPSec:
crypto ipsec profile Cisco_Profile1
 set transform-set transform-1
 set isakmp-profile ike-profile-1

Cisco_Profile1 - имя профиля, может быть произвольным. set transform-set – указывается имя профиля ipsec transform-set (см. чуть выше). set isakmp-profile - указывается имя профиля isakmp.
На этом с параметрами криптографии покончено, теперь перейдём к созданию нашего виртуального туннельного интерфейса:
interface Virtual-Template1 type tunnel
 ip unnumbered GigabitEthernet0/1
 tunnel mode ipsec ipv4
 tunnel protection ipsec profile Cisco_Profile1

Тут особо уже и нечего расписывать, после всего вышесказанного догадаться по логике вещей не сложно, единственно, что можно уточнить – это GigabitEthernet0/1 – внешний сетевой интерфейс циски.
Создаём пул раздаваемых айпишников, помните, мы назвали его POOL_1 ;)
ip local pool POOL_1 192.168.7.1 192.168.7.100
Можно для каждой групповой политики задать свой пул, правда советую не увлекаться, тут есть грабли )) Всё дело в том, что для каждого подключившегося клиента циска создаёт SA (Security Association), по умолчанию время жизни SA – 1 час, и если задать по одному айпишнику для каждого подключения в группе, может получиться неприятная ситуация, когда произойдёт случайный разрыв связи (пропадёт инет у клиента, или комп зависнет, или модем), айпишник окажется в «подвешенном» состоянии на час, и за неимением свободного адреса в пуле, клиент за ново сможет подключиться только через час )) Время жизни SA конечно же можно уменьшить, но и увлекаться этим тоже не стОит, т.к. при выходе таймаута циска будет пересчитывать ключи, когда у тебя один – два клиента – это не страшно, но когда ближе к 20 это уже может вызвать значительную нагрузку на процессор роутера. Время жизни SA можно посмотреть так:
show crypto ipsec security-association lifetime
Занятость ip-адресов и кол-во подключившихся по группам можно посмотреть так:
show ip local pool
Ну и в завершение, access-list для split tunneling:
access-list 100 permit ip 192.168.0.0 0.0.255.255 any
Т.е. мы разрешаем проход трафика в нашу сеть.

Клиентская часть
В качестве клиента можно использовать:
1)Аппаратный роутер или файервол Cisco;
2)Программный клиент Cisco VPN Client для windows;
3) Программный клиент Shrew Soft VPN Client для windows;
4) Программный клиент Shrew Soft VPN Client для Linux and BSD
5) Программный клиент VPNC для FreeBSD;
6) Программный клиент VPNC для Linux;
7) Программный клиент VPNC для Android;
Может и ещё что-то есть, я не задавался вопросом, но мне и этого вполне хватает ))
Аппаратный клиент в этой заметке я рассматривать не буду, т.к. планирую посвятить этому отдельную статейку. Остановлюсь на программном клиенте для Windows, т.к. все остальные клиенты настраиваются практически одинаково, есть только разница в установке, но это тема уже отдельного поста, если будет желание, напишу позже.
Итак, качаем, устанавливаем, запускаем ))

Cisco VPN Client

 

Создаём новое подключение - нажимаем кнопку New. Заполняем поля в форме создания нового подключения:

VPN Client

 

- Connection Entry – Название подключения (произвольно);
- Description – Ремарка (произвольно);
- Host – Внешний адрес нашего роутера Cisco;
Ставим галку на групповой аутентификации (вроде по умолчанию там уже должна стоять).
-  name – имя группы (именно группы, а не пользователя, аутентификация-то групповая);
- password – тут вводим pre shared key для этой группы;
Всё, настройка завершена, нажимаем Save. В главном окне программы видим наше сохранённое подключение.

Подключение VPN Cisco

 

Подключаемся, кликаем на connect. Если всё нормально, и программа «подружилась» с циской, т.е. аутентификация прошла успешно, наступает пора авторизации, т.е. ввода пары логин/пасс – это именно тот пользователь, которого мы вносили с конфиг.

Аутентификация VPN

Вот тут немного остановлюсь и расскажу про один момент, дело в том, что если оставить групповые настройки именно в таком виде, в котором я их привёл для группы remote-clients, то имя и пароль придётся вводить каждый раз при подключении, если же мы люди ленивые, или… кхым… пользователи слишком… талантливые, и не могут запомнить пароль, а бумажки вечно куда-то теряют, и если безопасность не критична, можно разрешить клиентской программе «запоминать» пароль, для этого, в групповые настройки для нашей группы remote-clients нужно добавить строчку save-password, в общем это будет выглядеть так:
crypto isakmp client configuration group remote-clients
 key megakey123
 dns 192.168.1.10
 domain domain.local
 pool POOL_1
 acl 100
save-password
Тогда на форме ввода пароля появится чек-бокс «Save Password», как на картинке. Иначе его не будет.
Вообще, для особо ленивых случаев, или когда нужно установить массу клиентов, или когда время на установку ограниченно, можно полностью настроить подключение на одном компьютере, и затем экспортировать его в файл, далее настройка рабочего места будет заключаться в установке Cisco VPN Client и импорте файла настроек, что очень удобно, т.к. не требует высокой квалификации устанавливающего.