Настройка VPN IKEv2 сервера Mikrotik
В этой инструкции описана настройка VPN сервера IKEv2 на Mikrotik на базе ключей, без паролей. Это максимально безопасный вариант VPN, подбирать пароль в этом случае бессмысленно. Это затрудняет начальную настройку сервера, требует отправки клиенту сформированных сертификатов, что в некоторых случаях может быть менее удобным. Но, как и всегда, действует правило «вам шешчки или ехать?» — больше безопасности — меньше удобства. Это верно почти всегда.
Освоить MikroTik Вы можете с помощью онлайн-куса «Настройка оборудования MikroTik». Курс основан на официальной программе MTCNA. Автор курса – официальный тренер MikroTik. Подходит и тем, кто уже давно работает с микротиками, и тем, кто еще их не держал в руках. В курс входит 162 видеоурока, 45 лабораторных работ, вопросы для самопроверки и конспект.
IKE означает «Internet Key Exchange» и чтобы было, чем обмениваться, это надо сначала настроить. В общем, весь процесс настройки VPN сервера состоит из двух частей, по большому счету: выпуск и экспорт ключей и сертификатов и настройка IPSec. Дополнительно приведен пример firewall. Итак, есть микротик, VPN IKEv2 будем «вешать» на IP адрес 1.2.3.4. Можно и по доменному имени, а можно по публичному IP-адресу, без доменного имени. Рассмотрю вариант, когда доменного имени нет.
UPD: Можно также использовать сервис sn.mynetname.net (url микротика станет вроде 12345.sn.mynetname.net, где 12345 — серийный номер вашего микротика) но, честно говоря, просто не пользовался этим сервисом сам в течении длительного времени, поэтому рекомендовать этот вариант доменного имени не стал.
1. Точное время
Настройка времени важна для любого VPN, поэтому сразу проверим/настроим часовой пояс и синхронизацию времени:
/system clock set time-zone-name=Europe/Moscow
/system ntp client set enabled=yes server-dns-names=0.ru.pool.ntp.org,1.ru.pool.ntp.org
2. Сертификаты и ключи
Наш микротик будет:
а) выдавать и удостоверять ключи для себя (сервер VPN) и удаленных клиентов, для чего сначала будет настроен CA («удостоверяющий центр»),
б) выполнять роль VPN-сервера.
CA («удостоверяющий центр» — выдает заверенные сертификаты сервера и клиентов):
Подумайте, как лучше называть сертификаты. Вы не сможете это потом поменять без существенных проблем, особенно, если настраиваете рабочую систему, а не для себя одного. Если по имени сертификата будет неясно, для чего он и от чего, через какое-то время может возникнуть путаница, особенно, если объектов будет много.
/certificate add name=cacert organization=»Bozza.ru» common-name=»cacert» key-size=4096 days-valid=3650 key-usage=crl-sign,key-cert-sign trusted=yes
/certificate sign cacert
Не забывайте подписывать все выпускаемые сертификаты! CA подписывает сам себя, а потом CA подписывает все остальные сертификаты!
Серверный сертификат:
/certificate add name=Mikrotik organization=»Bozza.ru» common-name=»1.2.3.4″ subject-alt-name=IP:»1.2.3.4″ key-size=4096 days-valid=3650 key-usage=tls-server
/certificate sign Mikrotik ca=»cacert»
Клиентский сертификат:
Внимательно и аккуратно заполняйте поля Common Name и Subject Alt. Name — на основании этих полей на клиенте будет происходить проверка пользователя! Если допустить опечатку на этом месте, потом придется перевыпускать этот сертификат, а это немного заморочный процесс — выпуск, экспорт, скопировать, перенести и т.д.
Либо по стечению обстоятельств, либо это реально такое ограчение, но при выпуске сертификата, в левой части которого (до символа @) были заглавные буквы, Windows не подключалась к серверу с ошибкой 13801 «Неприемлемые учетные данные проверки подлинности ike».
/certificate add name=»vpnuser1@1.2.3.4″ organization=»Bozza.ru» common-name=»vpnuser1@1.2.3.4″ key-size=4096 days-valid=1095 key-usage=tls-client subject-alt-name=email:vpnuser1@1.2.3.4
/certificate sign vpnuser1 ca=»cacert»
В итоге, у нас есть ключи и сертификаты «cacert» (CA, выпускает и подписывает сертификаты), «Mikrotik» (VPN сервер), «vpnuser1» (клиент).
Экспорт ключей
Для установки на клиентский компьютер/смартфон надо экспортировать сертификат и ключ клиента, защитив пакет паролем:
/certificate export-certificate vpnuser1@1.2.3.4 type=pkcs12 export-passphrase=p@ssw0rd555
и сертификат CA «cacert» (только сертификат, БЕЗ ПРИВАТНОГО КЛЮЧА!):
На картинке опечатка закралась, экспорт происходит именно cacert, а не Mikrotik.
/certificate export-certificate cacert type=pem
Скачайте из Files файлы «cert_export_cacert.crt» и «cert_export_vpnuser1@1.2.3.4.p12» на клиентский компьютер и импортируйте сертификат и закрытый ключ в Личные сертификаты (если это Windows). Сертификат «ca» надо установить в «Доверенные корневые центры сертификации».
Сертификат должен стать для клиента VPN (неважно, Mac, Win, iPhone, Android) ДОВЕРЕННЫМ! Для этого и нужно экспортировать cacert и сделать его доверенным сертификатом CA на клиенте.
На iPhone можно отправить письмо с вложенными файлами сертификатов и установить их через Профили.
3. IKE VPN
3.1) Pool:
Клиентам VPN лучше всегда давать отдельные IP-адреса, отличные от основного диапазона. Создадим пул адресов для VPN:
/ip pool add name=»ike_vpn_pool» ranges=»10.0.100.2-10.0.100.30″
3.2) Modeconfig:
/ip ipsec mode-config add name=»modeconfig_ikev2″ address-pool=»ike_vpn_pool» address-prefix-length=32 split-include=0.0.0.0/0 static-dns=10.0.100.1 system-dns=no
/ip ipsec mode-config add address-pool=»ike_vpn_pool» address-prefix-length=32 name=»modeconfig_ikev2″ split-include=192.168.88.0/24 static-dns=10.0.100.1 system-dns=no
где 192.168.88.0/24 — сеть, маршрут к которой будет передан клиенту. Т.е. после установки VPN соединения клиент сможет сразу обращаться к ресурсам этой сети.
Если клиенты после подключения к удаленной сети должны иметь возможность обращаться к ресурсам удаленной сети не по IP, а по имени (например, server.office.local, а не 192.168.88.146), то надо передать клиенту не только маршрут до сети, но и сообщить ему адрес DNS сервера, отвечающего за разрешение имен в удаленной сети:
/ip ipsec mode-config add address-pool=»ike_vpn_pool» address-prefix-length=32 name=»modeconfig_ikev2″ split-include=192.168.88.0/24 static-dns=192.168.88.1 system-dns=no
где 192.168.88.1 — IP-адрес DNS-сервера (в данном случае, это IP самого микротика).
3.3) Profile:
Касается т.н. фазы 1 (Phase 1, Security Association, SA), на которой согласовываются тип аутентификации, группа Diffie-Hellman, алгоритм шифрования. SA (фазы 1) существует определенное время, в течение которого устройства должны завершить вторую фазу. Если не успевают, то повторяется фаза 1.
/ip ipsec profile add name=»profile_ikev2″ dh-group=modp1024,modp1536,modp2048 enc-algorithm=aes-128,aes-192,aes-256 hash-algorithm=sha256 nat-traversal=yes proposal-check=obey
3.4) Peer (кого и куда принимаем):
/ip ipsec peer add name=»peer_ikev2″ exchange-mode=ike2 address=0.0.0.0/0 local-address=1.2.3.4 passive=yes send-initial-contact=yes profile=»profile_ikev2″
— принимаем всех (0.0.0.0/0) на внешний адрес микротика (1.2.3.4) — адресов-то может быть много и не обязательно это будет публичный IP.
3.5) Proposal:
/ip ipsec proposal add name=»proposal_ikev2″ auth-algorithms=sha1,sha256,sha512 enc-algorithms=aes-128-cbc,aes-128-ctr,aes-128-gcm,aes-192-ctr,aes-192-gcm,aes-256-cbc,aes-256-ctr,aes-256-gcm lifetime=1h pfs-group=none
Относится к так называемой второй фазе (Phase 2, IPSec SA), когда устанавливается, как будет проходить шифрование и аутентификация (проверка, что получены именно те данные, которые были отправлены) данных, а также частота обновления ключей. По-умолчанию, ключи обновляются каждые 8 часов (это время можно менять параметром lifetime).
3.6) Policy group:
/ip ipsec policy group add name=group_ikev2
3.7) Policy:
/ip ipsec policy add src-address=0.0.0.0/0 dst-address=10.0.100.0/24 protocol=all template=yes group=»group_ikev2″ action=encrypt ipsec-protocols=esp proposal=»proposal_ikev2″
3.8) Identity (для каждого пользователя — свой):
Внимательно и аккуратно выбирайте параметры. Для сертификата «vpnuser1@1.2.3.4» указывается Remote ID «vpnuser1@1.2.3.4» и проверка того, имеет ли право удаленный пользователь подключиться или нет, будет происходить на основании данных из сертификата:
- «Remote ID Type» определяет, какой ID ожидается от удаленного клиента. Например, тип » user fqdn «, доступный только в IKEv2, позволяет указать полное имя удаленного клиента в виде «vpnuser1@1.2.3.4».
- «Match By» определяет, с чем сравнивать «peers identity» (ID удаленного клиента) — с сертификатом (из Remote Certificate) или с данными из поля Remote ID. Не все клиенты могут прислать кастомный ID. Например, встроенный VPN клиент в Windows не позволяет указать Remote ID, а просто предлагает «использовать сертификат компьютера».
/ip ipsec identity add auth-method=digital-signature certificate=Mikrotik remote-certificate=vpnuser1@1.2.3.4 generate-policy=port-strict match-by=certificate mode-config=»modeconfig_ikev2″ peer=»peer_ikev2″ policy-template-group=»group_ikev2″ remote-id=user-fqdn:vpnuser1@1.2.3.4
Дальше надо настроить firewall.
4. FIREWALL
Сферический firewall в вакууме, нужно аккуратно адаптировать эти правила в ваш firewall.
Пожалуйста, внимательно смотрите, что вы разрешаете или запрещаете в firewall. Любые сертификаты будут бессмысленны, если вы случайно разрешите input на внемнем интерфейсе.
INPUT (разрешить входящие на 500/udp И 4500/udp):
/ip firewall filter
add action=drop chain=input comment=»invalid» connection-state=invalid
add action=accept chain=input comment=»established» connection-state=established
add action=accept chain=input comment=»related» connection-state=related
add action=accept chain=input connection-state=new dst-port=500 protocol=udp
add action=accept chain=input connection-state=new dst-port=4500 protocol=udp
.
add action=drop chain=input comment=»drop everything else»
ЗЫ: еще пишут в примерах, что надо разрешить протокол ipsec-esp, но я проверял 🙂 отключение ни чему не мешает, поэтому и добавлять лишнее не будем.
FORWARD:
/ip firewall filter
add action=drop chain=forward comment=»invalid» connection-state=invalid
add action=accept chain=forward comment=»established» connection-state=established
add action=accept chain=forward comment=»related» connection-state=related
add action=accept chain=forward comment=»in:ipsec» ipsec-policy=in,ipsec
add action=accept chain=forward comment=»VPN-to-LAN» dst-address=\
192.168.88.0/24 ipsec-policy=in,ipsec src-address=10.0.100.0/24
NAT
Чтобы VPN-клиенты могли выходить в интернет, настроим NAT:
/ip firewall nat
add action=src-nat chain=srcnat ipsec-policy=out,none out-interface=ether1-gateway src-address=10.0.100.0/24 to-addresses=1.2.3.4
add action=masquerade chain=srcnat comment=»default» out-interface=ether1-gateway
5. Настройка клиентов
iPhone
Передать сертификаты в iPhone можно следующими способами:
1) по email (сертификаты как вложение), открыть вложенный cacert и vpnclient1 программой Mail и установить профиль;
2) по ссылке открыть в Safari и установить профиль
3) передать по AirDrop с MacBook, к примеру.
Стоит подумать, как лучше, потому что в данном случае передается ключ для доступа, а не какая-то ерунда. При отправке по email потом надо удалить письмо из отправленных, входящих, из корзины и еще где там может осесть письмо — автоархив какой-нить. Если передать надо удаленному клиенту, вариантов не много. Но если настраивается устройство, доступное локально — стоит заморочиться.
Например, можно на компе открыть микро-веб сервер, например, с помощью Python:
cd c:\certs\
python -m http.server 8080
и с iPhone в Safari открыть http://ip-address-компа
Установите сертификаты и ключ через профили (там все интуитивно, описывать, думаю, не стоит). А саму настройку VPN IKEv2 — просто приведу картинку-скрин экрана:
Обратите внимание на то, что локальный ID повторяет имя (Name, Common Name, Subject Alternative Name) клиентского сертификата.
Аутентификация пользователя происходит автоматически, на основании данных из сертификата.
MacOS
Суть процесса: открываете «Связка ключей», в ней импортируете сначала cacert (доверенный центр сертификации), а потом сертификат vpnuser1. В «Системные настройки» в пункте «Сеть» добавляете VPN подключение, тип IKEv2, поля заполняете так же как в iOS (картинка выше), выбираете сертификат и все. Готово.
Windows 7/10
Суть такая — сертификат устанавливается в учетную запись компьютера, а не пользователя (по-умолчанию, certmgr.msc предлагает именно Пользователя). mmc.exe — Сертифкаты — Учетная запись компьютера.
Там уже добавляете в доверенные корневые cacert, а в Личные — vpnuser1 (Сертификаты — Личное — Сертификаты, правой мышкой — Все задачи — Импорт).
Ну и настраиваете IKEv2 VPN стандартно.
Что меня в этом месте бесит прямо-таки сильно — сертификат доступен ЛЮБОЙ учетной записи на компьютере. Например, установили вы так VPN в учетке user1. Потом зашли под другой учеткой в windows, а сертификат там уже есть. А вариант, когда сертификат устанавливается в Личные пользовательские сертификаты, не сработает, потому что это уже потребует EAP-TLS аутентификации (протокол расширенной проверки подлинности), а, как это часто бывает в мелочах, микротик как сервер не поддерживает EAP.
В общем, все, если все верно, VPN должен подключиться. На самом деле, совсем не факт, что все сразу заработает, логи и светлая голова вам в помощь. Спрашивайте в комментариях, если что-то вызываает вопросы, может, где очепятка, а я не заметил. Но в целом материал проверен руками, не раз. Удачи!
Источник