Для реализации схемы, показанной ниже, будем использовать следующее реальное физическое оборудование, также прошу заметить что названия интерфейсов условны и в реализации не применяются (реализовать ssl vpn в unl-eve не удалось, так как ни iol ни vios команды для конфигурирования webvpn не поддерживают):
Cisco 881 (C880DATA-UNIVERSALK9-M 15.2(4)M4)
Windows 7 x64 + AnyConnect 4.4
Схема подключения:
Для начала, что такое SSL VPN (или WEBVPN) от Cisco. Это своего рода наследник easy vpn или ipsec vpn, который позволяет по протоколу ssl (443 порт) удаленно подключиться к вашей корпоративной или домашней сети. Кроме простоты настройки и относительно «легкого» конфига, самым большим доводом за использование ssl является то, что он использует практически повсеместно «открытый» 443 порт для подключения, т.е. если бы вы, например, использовали ipsec, то необходимо было бы на межсетевом экране или же на граничном роутере открывать isakmp (500) порты, наверняка разрешить nat-t (4500), и еще вдобавок разрешить трафик esp, тогда как в случае с ssl подключение проходит по 443 порту, который в большинстве своем разрешен для хостов. Кроме этого не надо на стороне клиента производить каких либо настроек, удаленному пользователю достаточно знать всего лишь внешний ip или dns имя роутера, а также логин и пароль для входа (при использовании easyvpn помимо вышеперечисленного нужен pre-share ключ, а также наименование client configuration group).
Настройка:
1. Для начала необходимо активировать лицензию на роутере, в нашем случае используется cisco 881 c ios 15.2(4), для ознакомительной активации на 60 дней вводим след. команду в privilege режиме:
license modify priority SSL_VPN high
После чего соглашаемся с лицензионным соглашением.
2. Далее копируем дистрибутив any connect на роутер любым удобным способом(копирование лучше производить в заранее созданную директорию webvpn, так как если просто скопировать в корень flash, то при установке создастся копия файла установки в той же директории, соответственно займет больше места на flash) и устанавливаем его:
mkdir flash:/webvpn
copy tftp: flash:/webvpn/
crypto vpn anyconnect flash:/webvpn/anyconnect-win-4.4.00243-k9.pkg
3. Включаем aaa (необходим, чтобы указать authentication list на нашем Web шлюзе (webvpn gateway)), заводим локальных пользователей (логин и пароль, которые здесь указываем необходимы для подключения к порталу из интернета, по типу внешнийадресроутера) и активируем https сервер:
aaa new-model
aaa authentication login SSL_USERS local
username admin secret ***************
ip http secure-server
4. Генерируем RSA ключи, создаем trustpoint и затем генерируем самоподписанный сертификат:
crypto key generate rsa label SSLKEY modulus 1024
crypto pki trustpoint SALAM_TRUSTPOINT
enrollment selfsigned
serial-number
subject-name CN=firewallcx-certificate
revocation-check crl
rsakeypair SSLKEY
crypto pki enroll SALAM_TRUSTPOINT
5. Настраиваем пул адресов, который будет выдаваться клиентам и создаем WebVPN Gateway, для команды ip interface вместо интерфейса можно указать непосредственно ip адрес командой ip address **** port 443:
ip local pool WEBVPN_POOL 10.0.0.11 10.0.0.15
webvpn gateway WEBVPN_GW
ip interface Dialer1 port 443
ssl trustpoint SALAM_TRUSTPOINT
inservice
6. Далее создаем и привязываем к нашему gateway так называемый webvpn context, в котором указаваем ранее созданный auth list, максимальное кол-во подключаемых пользователей, а также приветствие отображаемое при входе на портал через браузер(команда inservice в этом и предыдущем шаге активирует webvpn gateway и context):
webvpn context WEBVPN_CON
title "Assalyamu alyaikum"
login-message "Salyam"
aaa authentication list SSL_USERS
gateway WEBVPN_GW
max-users 5
inservice
7. Там же в конфигурации webvpn context создаем policy group, в которой задаем наш пул адресов, указываем какой трафик от клиентов будет заворачиваться в туннель (в нашем случае, когда destination у клиентов будут сети 192.168.1.0 /24 или 172.16.1.0/24 в таблице маршрутизации на клиентах появятся соответствующие записи только для этих двух сетей, указывающие на то, что этот трафик будет уходить в шифрованный туннель), команда functions svc-enabled указывает, что удаленный пользователь может подключаться с помощью самостоятельно установленного клиента anyconnect, т.е. не надо заходить через браузер:
policy group WEBVPN_POLICY
functions svc-enabled
svc address-pool "WEBVPN_POOL" netmask 255.255.255.0
svc split include 192.168.1.0 255.255.255.0
svc split include 172.16.1.0 255.255.255.0
default-group-policy WEBVPN_POLICY
8. Если у нас на внешнем интерфейсе висит ACL, то необходимо дописать правило:
permit tcp any host «внешний адрес роутера» eq 443
В итоге запускаем на нашем клиенте браузер, вводим внешний адрес нашего роутера 212.212.0.1 и видим приглашение:
Осталось ввести логин пароль и установить соединение, на этом бы все, но есть один нюанс.
Если обратиться к нашей схеме, то сеть 192.168.1.0/24, та самая к которой мы подключаемся, находится за NATом, настройка NAT для роутера R1 следующая:
ip nat inside source list NAT_POOL interface Dialer1 overload
где NAT_POOL:
ip access-list extended NAT_POOL
permit ip 192.168.1.0 0.0.0.255 any
что произойдет если мы будем пинговать сеть 192.168.1.0 с подключившегося по vpn клиента(клиент получил адрес 10.0.0.12)? Пакеты от него зашифрованными будут уходить на R1, тот в свою очередь создает ответ с destination 10.0.0.12 и смотрит в таблицу маршрутизации:
R1#sh ip route 10.0.0.12
Routing entry for 10.0.0.12/32
Known via "static", distance 0, metric 0
Routing Descriptor Blocks:
* directly connected, via Virtual-Access3
Route metric is 0, traffic share count is 1
R1#sh interfaces virtual-access 3
Virtual-Access3 is up, line protocol is up
Hardware is Virtual Access interface
Description: ***Internally created by SSLVPN context WEBVPN_CON***
Interface is unnumbered. Using address of Dialer1 (212.212.0.1)
MTU 1406 bytes, BW 100000 Kbit/sec, DLY 100000 usec,
reliability 255/255, txload 1/255, rxload 1/255
Encapsulation SSL
SSL vaccess
Т.е. пакеты уходят с интерфейса dialer 1, а согласно вот этой замечательной таблице порядка операций над трафиком
после routing у нас идет NAT, а наше правило nat говорит нам, что наш source заменится на публичный адрес и в таком виде уйдет на клиента, который понятия не имеет о нашем внешнем адресе, следовательно пинг не пройдет и ничего работать не будет, исправляем добавлением следующей команды в acl NAT_POOL:
ip access-list extended NAT_POOL
1 deny ip 192.168.1.0 0.0.0.255 10.0.0.0 0.0.0.255
И, альхьамдулиЛлях1, все работает!
Комментарии (15)
NAI
16.03.2017 17:58Как у вас с загрузкой CPU при использовании AnyConnect на 881?
Запускал AnyConnect на 861. Скорость у клиента 200-300 кбайт\с и CPU Utilation 100%.Тот же EasyVPN летает на 3-5 клиентах и загрузка не поднимается выше 50-60%.
На складе валяется 881, вот и думаю менять или оно того не стоит.xamzaibnm
16.03.2017 18:05Насчет скорости на клиенте не скажу, но CPU Utilitation и близко не 100%
Еще один нюанс, если на 881 обновите ios выше чем 15.3, то лицензия на SSL VPN будет уже включена в advsec, вот что говорит cisco:
IOS 15.3 and beyond — earlier versions offer Right to Use* licenses. Starting in 15.3(3)M, the SSLVPN feature is available after you boot into a securityk9 technology-package
navion
16.03.2017 19:021921 тоже ложится от SSLVPN. Можно настроить IKEv2 через AnyConnect с ручной установкой профайлов или встроенный в Windows клиент — там всё намного лучше, так как шифрование аппаратное.
NAI
17.03.2017 09:58Можно подробнее? В целом, всем устраивает EasyVPN, но он не поддерживается Win10.
xamzaibnm
18.03.2017 07:51На 8.1 easy работает, может на 10 тоже эта ссылка поможет https://habrahabr.ru/post/157807/
NAI
18.03.2017 22:40На 8.1 EasyVPN работает из коробки (пользователи не жаловались). С бубном можно поставить и на 10ку, но… после каждого апдейта MS чет допиливает и нужно искать новый бубен. Проще объяснить сотрудникам, что Win10 не поддерживается, чем писать многостраничные инструкции и телепатить «а почемуж у них там не включилось...»
navion
18.03.2017 18:09Чуть не забыл, IKEv2 с FlexVPN прекрасно сосуществуют, так что второй можно настроить только для страдальцев с десяткой и макосью.
e1t1
18.03.2017 07:312 NAI — попробуйте Shrew, в отличие от родного можно запускать больше одного. На 10 тоже работает.
NAI
18.03.2017 23:00Спасибо, попробую. Правда проект не развивается с 2013 и нет гарантий, что MS его не выпилит из своей системы, как это происходит с EasyVPN («Данное приложение устарело и было удалено»)
gosha-z
18.03.2017 07:31У меня почему-то 4.x брыкался, пока не поставил «честные» сертификаты от того же Let's Encrypt. Брыкался даже со снятой галкой Block Connections to Untrusted Servers.
NAI
18.03.2017 22:58У меня стоит сертификат от WoSign (полученный еще в 15 году). Есть мнение, что так как в 800-серии нет аппаратной поддержки шифрования, длинна ключа в 256 бит и кладет CPU.
Как я понял, в 800-серия вообще все лежит на CPU, в отличии от ASA. Тыц Плюс с cisco (более актуальных данных не нашел)navion
18.03.2017 23:38Вроде наоборот, в ASA (и ISR 4000) стоит мощный x86, а в ISR дохлый MIPS, который спасает лишь выделенный криптомодуль.
tuttofatto
Благодарю. Кратко и понятно.