Сервер в кармане, или просто о сложном!

главная - Статьи - Mikrotik

Настройка VPN IKEv2 сервера Mikrotik

Дата обновления: 15.01.2021

Теги: Mikrotik VPN сервер

В этой инструкции описана настройка VPN сервера IKEv2 на Mikrotik на базе ключей, без паролей. Это максимально безопасный вариант VPN, подбирать пароль в этом случае бессмысленно. Это затрудняет начальную настройку сервера, требует отправки клиенту сформированных сертификатов, что в некоторых случаях может быть менее удобным. Но, как и всегда, действует правило "вам шешчки или ехать?" - больше безопасности - меньше удобства. Это верно почти всегда.

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, поэтому сразу проверим/настроим часовой пояс и синхронизацию времени:

Mikrotik - NTP

В терминале:

/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 ("удостоверяющий центр" - выдает заверенные сертификаты сервера и клиентов):

Mikrotik - 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 подписывает все остальные сертификаты!

Серверный сертификат:

Mikrotik - VPN server certificate

В терминале:

/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 - на основании этих полей на клиенте будет происходить проверка пользователя! Если допустить опечатку на этом месте, потом придется перевыпускать этот сертификат, а это немного заморочный процесс - выпуск, экспорт, скопировать, перенести и т.д.

Mikrotik VPN Client Certificate

В терминале:

/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" (клиент).

Экспорт ключей

Для установки на клиентский компьютер/смартфон надо экспортировать сертификат и ключ клиента, защитив пакет паролем:

Mikrotik VPN - Export Client Key and Certificate

В терминале:

/certificate export-certificate vpnuser1@1.2.3.4 type=pkcs12 export-passphrase=p@ssw0rd555

и сертификат CA "cacert" (только сертификат, БЕЗ ПРИВАТНОГО КЛЮЧА!):

Mikrotik Export Server Certificate (PEM)

На картинке опечатка закралась, экспорт происходит именно 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:

Address pool

В терминале:

/ip pool add name="ike_vpn_pool" ranges="10.0.100.2-10.0.100.30"

 

3.2) Modeconfig:

IPSec - Mode Config

В терминале:

/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. 

IPSec Profile

В терминале:

/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 (кого и куда принимаем):

IPSec - 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:

IPSec 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:

IPSec Group

В терминале:

/ip ipsec policy group add name=group_ikev2

 

3.7) Policy:

IPSec 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" и проверка того, имеет ли право удаленный пользователь подключиться или нет, будет происходить на основании данных из сертификата:

IPSec Identity

  • "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 на внемнем интерфейсе.

Mikrotik VPN IKEv2 Firewall Example

 

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:

Mikrotik Firewall NAT IPSec

/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 сертификаты мне удобнее всего электронной почтой - составляете письмо для учетной записи, которая настроена в программе Mail, при получении письма кликните на вложении - сертификате vpnclient1 и cacert. Установите сертификаты и ключ через профили (там все интуитивно, описывать, думаю, не стоит). А саму настройку VPN IKEv2 - просто приведу картинку-скрин экрана:

Обратите внимание на то, что локальный ID повторяет имя (Name, Common Name, Subject Alternative Name) клиентского сертификата.

Аутентификация пользователя происходит автоматически, на основании данных из сертификата.

iPhone IKEv2 VPN Settings

MacOS

Суть процесса: открываете "Связка ключей", в ней импортируете сначала cacert (доверенный центр сертификации), а потом сертификат vpnuser1. В "Системные настройки" в пункте "Сеть" добавляете VPN подключение, тип IKEv2, поля заполняете так же как в iOS (картинка выше), выбираете сертификат и все. Готово.

Windows 7/10

Тут я тоже пока не успел "наскринить", но суть такая - сертификат устанавливается в учетную запись компьютера, а не пользователя (по-умолчанию, certmgr.msc предлагает именно Пользователя). mmc.exe - Сертифкаты - Учетная запись компьютера.

Там уже добавляете в доверенные корневые cacert, а в Личные - vpnuser1 (Сертификаты - Личное - Сертификаты, правой мышкой - Все задачи - Импорт).

Ну и настраиваете IKEv2 VPN стандартно.

Что меня в этом месте бесит прямо-таки сильно - сертификат доступен ЛЮБОЙ учетной записи на компьютере. Например, установили вы так VPN в учетке user1. Потом зашли под другой учеткой в windows, а сертификат там уже есть. А вариант, когда сертификат устанавливается в Личные пользовательские сертификаты, не сработает, потому что это уже потребует EAP-TLS аутентификации (протокол расширенной проверки подлинности), а, как это часто бывает в мелочах, микротик как сервер не поддерживает EAP.

 

В общем, все, если все верно, VPN должен подключиться. На самом деле, совсем не факт, что все сразу заработает, логи и светлая голова вам в помощь. Спрашивайте в комментариях, если что-то вызываает вопросы, может, где очепятка, а я не заметил. Но в целом материал проверен руками, не раз. Удачи!


13.12.2020 23:40 Makarenko
Спасибо! А что насчет your-serail-number.sn.mynetname.net если нет доменного имени? В интерфейсе есть, VPN Access?
13.12.2020 23:47 bzzz
Хороший вопрос, кстати. Сам просто не пользовался этим sn.mynetname.net. Может, зря. Добавил про это в статью небольшую ремарку. Спасибо!
15.01.2021 21:34 mikemousse
На макоси проверил вчера - все пашет, спасибо.
19.01.2021 13:48 pkpav
Настроил, спасибо! Но вопрос - не пингуются хосты локалок, если подключаюсь к vpn изнутри. Локалки две. Vpn адреса не из локалок. Снаружи все ок, изнутри - трабл. Что может быть?
19.01.2021 13:57 bzzz
Проверьте firewall, можно так замудрить, что мама дорогая. Запустите torch, посмотрите трафик, который идет. Пингуйте, к примеру, и смотрите трафик.
19.01.2021 13:58 bzzz
Идея в том, что надо найти откуда ноги у проблемы растут. А потом искать решение проблемы.

Авторизуйтесь для добавления комментариев!


    забыли пароль?    новый пользователь?