Корпоративный VPN

Корпоративный VPN в виде OpenVPN, SSTP, L2TP IPsec, PPTP, а так же IKEv2 с доменной авторизацией Active Directory и контролем сетевых прав доступа по группам пользователей.

Профессиональная настройка MikroTik
Без предоплаты

Telegram: @Engineer_MikroTik

Вся настройка будет выполняться на RouterOS 7, где есть полноценная поддержка UDP на OpenVPN и Push Routes, а так же получение сертификата Let’s Encrypt

Данная статья полностью закрывает потребности практически любой компании имеющей Active Directory (или ресурсы для его установки). А так же применима на CHR без покупки оборудования MikroTik.

Корпоративный VPN

Перед прочтением статьи посмотрите видео от Романа Козлова, затем посмотрите его после прочтения статьи, и еще раз после первый попытки настройки.

Active Directory

Установка контроллера домена

В сети должен быть контроллер домена Active Directoty.
Если у вас его нет, пройдемся по шагам установки и настройки.

Запускаем панель управления Добавить роли и компоненты
Запускаем панель управления
Добавить роли и компоненты
Корпоративный VPN
Далее
Установка ролей или компонентов
Установка ролей или компонентов
Далее
Выбираем сервер
Выбираем сервер
Далее
Доменные службы Active Directory Добавить компоненты
Доменные службы Active Directory
Добавить компоненты
Далее
Корпоративный VPN
Далее
Корпоративный VPN
Далее
Автоматический перезапуск Установить
Автоматический перезапуск
Установить
Дожидаемся установки
Дожидаемся установки
Корпоративный VPN
Закрыть
Теперь настроим AD повышая сервер до контроллера домена
Теперь настроим AD повышая сервер до контроллера домена
Создаем новый лес
Создаем новый лес
Обязательно создаем реальный купленный домен, чтобы можно было приобрести коммерческий TLS сертификат!
Корпоративный VPN
Задаем пароль и режим работы леса/домена
Корпоративный VPN
Далее
Корпоративный VPN
Далее
Корпоративный VPN
Далее
Корпоративный VPN
Далее
Установить И ждем перезагрузки
Установить
И ждем перезагрузки
На моем стенде динамический IP, по этому есть предупреждение

Теперь у вас есть свой Active Directory.

Сервер политики сети

Для авторизации сотрудников по VPN используется RADIUS сервер от Microsoft в виде Network Policy Server (NPS), который сейчас установим и активируем.

Добавить роли и компоненты
Добавить роли и компоненты
Корпоративный VPN
Далее
Установка ролей и компонентов
Установка ролей и компонентов
Выбираем сервер
Выбираем сервер
Выбираем Службы политики сети и доступа
Выбираем Службы политики сети и доступа
Корпоративный VPN
Далее
Корпоративный VPN
Далее
Корпоративный VPN
Установить
Корпоративный VPN
И ждем установки
После установки находим NPS
После установки находим NPS
Зарегистрировать сервер в Active Directory
Зарегистрировать сервер в Active Directory

В дальнейшем настройка NPS будет идти параллельно с настройкой корпоративного VPN.

TLS сертификат

На забудьте настроить NTP Client перед генерацией сертификатов.

Для IKEv2 используется сертификат. В данной статье это будет Let’s Encrypt сертификат. Как его получить написано в инструкции Let’s Encrypt. Либо вы можете использовать корпоративный CA или купленный коммерческий сертификат.

Let’s Encrypt

Получим TLS сертификат Let’s Encrypt по инструкции.

Корпоративный VPN
Заведем доменное имя по примеру gw01.net.1Side.ru, которое привязываем A записью к IP адресу MikroTik

Закидываем в RouterOS скрипт получения и продления сертификата из инструкции по ссылке.

После запуска скрипта получаем в System > Certificates готовый сертификат, который можно использовать дальше для настройки.
После запуска скрипта получаем в System > Certificates готовый сертификат, который можно использовать дальше для настройки.

Коммерческий

Можно приобрести коммерческий сертификат на 1 год и не забывать его обновлять. Если у вас несколько VPN точек входа, то приобрести wildcard сертификат.

Самоподписанный

Для OpenVPN используется самоподписанный CA, который распространяется в конфигурации. Этим же CA подписываются сертификаты для пользователей. А в случае доменных ПК, этот сертификат будет установлен автоматически и IKEv2 будет работать на нем.

Создание CA

Корпоративный VPN
Создаем сразу на 1000 лет, чтобы не вспоминать о продлении
(на самом деле будет 4984 дня)
Корпоративный VPN
Свойства crl sign и key cert. sign

Подписание CA +CRL

Корпоративный VPN
Нажимаем Sign
И указываем сертифкат CA (сам себя)
CA CRL Host сервер отозванных сертификатов
Корпоративный VPN
Самоподписание завершено

Сертификат и ключ сервера

Если у вас уже есть CA, то подписать лучше существующим.

Корпоративный VPN
Так же на 1000 лет (на самом деле будет 4984 дня) и обязательно указываем DNS и Common Name
Корпоративный VPN
Для OpenVPN сервера другие свойства ключа
digital signature
key enciphement
tls server
Корпоративный VPN
Подписываем ранее созданным CA

Сертификат и ключ клиента

Использовать сертификат для клиента помимо логина-пароля я считаю верхом паранойи, но оно имеет место быть в сверх защищенных средах, но точно не в компаниях на 10 человек.

Наш тестовый пользователь имеет учетную запись mikrotik-vpn, для него и создадим сертификат.

Корпоративный VPN
Указываем название сертификата Name
Common Name логин пользователя
Срок действия 180 дней (возможна практика постоянных обновлений сертификатов для максимальной безопасности)
Корпоративный VPN
tls client
Корпоративный VPN
Подписываем CA

Группы VPN пользователей

Всегда делите права сотрудников VPN минимум на 3 группы доступа. В частных случаях есть смысл выделять группы для внешних подрядчиков.

  1. vpn_hell — доступ только до терминальной фермы
  2. vpn_purgatory — права как hell +расширенные доступы
  3. vpn_paradise — полный доступ в сеть

MikroTik

IP > Pool Создаем пул IP адресов для VPN
IP > Pool
Создаем пул IP адресов для VPN

По имени пула будет назначаться политика доступа к сети.

/ip pool
add name=vpn_hell ranges=10.88.253.2-10.88.253.200
add name=vpn_paradise ranges=10.88.255.2-10.88.255.200
add name=vpn_purgatory ranges=10.88.254.2-10.88.254.200
PPP > Profiles
PPP > Profiles

Так как политика будет назначаться по имени пула IP, отдельные профили нужны для быстрой ручной отладки на локальных пользователях.

/ppp profile
add local-address=10.88.255.1 name=vpn_paradise remote-address=vpn_paradise
add local-address=10.88.254.1 name=vpn_purgatory remote-address=vpn_purgatory
add local-address=10.88.253.1 name=vpn_hell remote-address=vpn_hell

Active Directory

Корпоративный VPN

VPN Server

Подробнее о VPN можно прочитать в официальной справке

https://help.mikrotik.com/docs/display/ROS/Virtual+Private+Networks

Находится в разделе PPP
Находится в разделе PPP

MTU VPN

Для прохождения всех узких мест, где может срезаться MTU - используйте значение 1400
Для прохождения всех узких мест, где может срезаться MTU — используйте значение 1400

Default Profile

Используем по умолчанию самый закрытый профиль
Используем по умолчанию самый закрытый профиль

PPTP Server

Протокол считается не безопасным.

https://help.mikrotik.com/docs/display/ROS/PPTP

PPTP Server
PPTP Server
/interface pptp-server server
set authentication=mschap2 default-profile=vpn_hell enabled=yes max-mru=1400 max-mtu=1400

SSTP Server

https://help.mikrotik.com/docs/display/ROS/SSTP

SSTP Server Выбираем ранее полученный сертификат
Выбираем ранее полученный сертификат
На самоподписанном сертификате можно выпустить сертификаты пользователя аналогично OpenVPN и проверять клиентов
/interface sstp-server server
set authentication=mschap2 certificate=letsencrypt-autogen_2024-05-25T08:02:24Z default-profile=vpn_hell enabled=yes max-mru=1400 max-mtu=1400 tls-version=only-1.2

L2TP Server

https://help.mikrotik.com/docs/display/ROS/L2TP

l2tpv2 Use IPsec required означает обязательное использование IPsec yes - на усмотрение клиента no - не использовать IPsec
l2tpv2
Use IPsec required означает обязательное использование IPsec
yes — на усмотрение клиента
no — не использовать IPsec

Обратите внимание, что L2TP IPsec не работает на клиентах за одним NAT. Это сказывается когда сотрудники сидят за одном роутером или на весь город 1 оператор который всех выпускает через 1IP NAT.

/interface l2tp-server server
set accept-proto-version=l2tpv2 authentication=mschap2 default-profile=vpn_hell enabled=yes max-mru=1400 max-mtu=1400 use-ipsec=required

OVPN Server

https://help.mikrotik.com/docs/display/ROS/OpenVPN

Корпоративный VPN
Выбираем ранее созданный сертификат сервера и выключаем проверку сертификатов пользователей (далее его включим)
/interface ovpn-server server
set certificate=letsencrypt-autogen_2024-05-25T08:02:24Z default-profile=vpn_hell enabled=yes max-mtu=1400 protocol=udp push-routes="10.0.0.0 255.0.0.0 1" tls-version=only-1.2

IKEv2

https://help.mikrotik.com/docs/display/ROS/IPsec

Самый интересный протокол, который сложно дебажить. Но мы его запустим для более полного набора, к тому же он поддерживает Split Route .

IP > IPsec > Mode Configs Пушим маршрут до 10.0.0.0/8 и DNS сервер 10.88.10.12
IP > IPsec > Mode Configs
Пушим маршрут до 10.0.0.0/8 и DNS сервер 10.88.10.12
/ip ipsec mode-config
add address-pool=vpn_hell name=ike2-vpn_hell split-dns=10.88.10.12 split-include=10.0.0.0/8
IP > IPsec > Groups
IP > IPsec > Groups
/ip ipsec policy group
add name=ike2-vpn_hell
IP > IPsec > Profiles
IP > IPsec > Profiles
/ip ipsec profile
add name=profile-ike2-vpn_hell
IP > IPsec > Peers
IP > IPsec > Peers
/ip ipsec peer
add exchange-mode=ike2 name=peerIKEv2-vpn_hell passive=yes profile=profile-ike2-vpn_hell
IP > IPsec > Proposals
IP > IPsec > Proposals
/ip ipsec proposal
add name=proposal-ike2-vpn_hell pfs-group=none
IPsec > Identities Выбираем сертификат
IPsec > Identities
Выбираем сертификат
/ip ipsec identity
add auth-method=eap-radius certificate=letsencrypt-autogen_2024-05-25T08:02:24Z generate-policy=port-strict mode-config=ike2-vpn_hell peer=peerIKEv2-vpn_hell policy-template-group=ike2-vpn_hell
IP > IPsec > Policies
IP > IPsec > Policies
/ip ipsec policy
add comment=ikev2-vpn_hell dst-address=10.88.253.0/24 group=ike2-vpn_hell proposal=proposal-ike2-vpn_hell src-address=0.0.0.0/0 template=yes

WireGuard

Не поддерживает доменную авторизацию, т.к. все IP, маршруты, allow list настраивается вручную на клиенте и на сервере.

Порты Firewall

/ip f f
add action=accept chain=input comment=PPTP dst-port=1723 protocol=tcp
add action=accept chain=input comment=SSTP dst-port=443 protocol=tcp
add action=accept chain=input comment=L2TP IPsec dst-port=1701,500,4500 protocol=udp
add action=accept chain=input comment=OpenVPN dst-port=1194 protocol=udp

Active Directory VPN авторизация

MikroTik

RADIUS

RADIUS Указываем сервер NPS и Secret Нам нужны ppp и ipsec
RADIUS
Указываем сервер NPS и Secret
Нам нужны ppp и ipsec
/radius
add address=10.88.7.75 disabled=yes secret=12345678 service=ppp,login,wireless,ipsec src-address=10.88.7.1

Use Radius

 PPP > Secrets > PPP Authentication&Accounting Use Radius
PPP > Secrets >
PPP Authentication&Accounting
Use Radius
/ppp aaa
set use-radius=yes

Radius Accouting

IP > IPsec > Identities > Settings Radius Accounting
IP > IPsec > Identities > Settings
Radius Accounting

NPS

RADIUS-клиенты

Создаем RADIUS клиента, ждем подключения со всей сети 10.0.0.0/8 (на практике следует указывать только сети управления lo сеть с которых будут обращения за авторизацией)
Создаем RADIUS клиента, ждем подключения со всей сети 10.0.0.0/8
(на практике следует указывать только сети управления lo сеть с которых будут обращения за авторизацией)

Сетевые политики

Создаем политику
Создаем политику
vpn_hell
vpn_hell
Выбираем ранее созданную группу и тип порта VPN и Асинхронная (модем)
Выбираем ранее созданную группу и тип порта VPN и Асинхронная (модем)
Проверка подлинности MS-CHAP-v2 и EAP-MSCHAP v2 А так же PAP, SPAP для работы OpenVPN
Проверка подлинности MS-CHAP-v2 и EAP-MSCHAP v2
А так же PAP, SPAP для работы OpenVPN
Frame-Protocol PPP Framed-Pool пул IP адресов из профиля (здесь назначается имя пуля IP адресов)
Frame-Protocol PPP
Framed-Pool пул IP адресов из профиля
(здесь назначается имя пуля IP адресов)
Если вам нужно назначать имя профиля, то указываем его в параметрах зависящих от поставщика.
Если вам нужно назначать имя профиля, то указываем его в параметрах зависящих от поставщика.
Находим Vendor-Specific
Находим Vendor-Specific
Указываем код 14988
Указываем код 14988
Строковый атрибут с номером 3 указываем название профиля
Строковый атрибут с номером 3 указываем название профиля
Делаем аналогично для остальных групп
Делаем аналогично для остальных групп

Проверка

Remote Address наследуется от профиля по умолчанию в VPN Server.

Пользователь в группе vpn_hell
Пользователь в группе vpn_hell
Пользователь в группе vpn_paradise
Пользователь в группе vpn_paradise
Пользователь в группе vpn_purgatory
Пользователь в группе vpn_purgatory
Аналогичная проверка для IKEv2 (IKEv2 не работает на встроенном Android клиенте!)
Аналогичная проверка для IKEv2
(IKEv2 не работает на встроенном Android клиенте!)

OpenVPN конфигурация

Если для всех способов подключения есть встроенный в Windows VPN Client, то для OpenVPN ставится отдельный с сайта OpenVPN.net

Создаем файл OpenVPN.opvn и закидываем конфигурацию с указанием сертификата CA и remote адреса подключения с номером udp/tcp порта.

client
dev tun
remote vpn.доменноеимя 1194 udp
tun-mtu 1400
tls-client
nobind
user nobody
group nogroup
ping 15
ping-restart 45
persist-tun
persist-key
mute-replay-warnings
verb 3
cipher AES-256-CBC
auth SHA512
pull
auth-user-pass
connect-retry 1
reneg-sec 3600
explicit-exit-notify 1
remote-cert-tls server
<ca>
-----BEGIN CERTIFICATE-----

-----END CERTIFICATE-----
</ca>
Выгрузим из RouterOS сертификат CA
Выгрузим из RouterOS сертификат CA
Перетащим на рабочий стол и добавим в конфигурацию
Перетащим на рабочий стол и добавим в конфигурацию
-----BEGIN CERTIFICATE-----
MIIDojCCAoqgAwIBAgIIeKdlZ+/ZdMAwDQYJKoZIhvcNAQELBQAwVTELMAkGA1UE
BhMCUlUxCzAJBgNVBAgMAjc3MQ8wDQYDVQQHDAZNb3Njb3cxDjAMBgNVBAoMBTFT
aWRlMQswCQYDVQQLDAJJVDELMAkGA1UEAwwCQ0EwHhcNMjQwNTI2MTYwNzU4WhcN
MzgwMTE4MDMxNDA3WjBVMQswCQYDVQQGEwJSVTELMAkGA1UECAwCNzcxDzANBgNV
BAcMBk1vc2NvdzEOMAwGA1UECgwFMVNpZGUxCzAJBgNVBAsMAklUMQswCQYDVQQD
DAJDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALnagB9kI0lnzu8Y
VExOwGbaHSf3qgkXCzKqH6u5y+04TFU/HQOgAHMI+r+NtlkH5ZfXFkw0lKknd1ca
/RgjE6ASEG4fEIOPzrfvydVQSWyFYtsO2Wv/Dsgj/HRvA6hZvqfz7BKGEAG300/T
7gY//RL/kS/Nw5eTZz4wEGLRIAc8Oxb99d/82m8E9/DwImKOUke2CYtfjECMBUeg
j7EyBqsPbsb2Z0BcYQHR7oTBBYxVecDFbwVgQRR7q5aef8z93LZtShW6AOT7g4vE
WFOLxSNR9jEVs3Knhd4fX1UmErM12YP3HNkGpmUZ1FAyt+nUPvQpwTDYWtAVO54X
cAEI6L8CAwEAAaN2MHQwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYw
HQYDVR0OBBYEFFSA+e08sLfAoinV0xG3/spxCMzNMDIGA1UdHwQrMCkwJ6AloCOG
IWh0dHA6Ly9jcmwuY2EuMVNpZGUucnUvY3JsLzExLmNybDANBgkqhkiG9w0BAQsF
AAOCAQEAipHjy9TWYT8vE3wK/iWQ3vDumNvc6gTEBH4+LVfvVD3BV0XF1vAnC+75
rKcf1cX5oTWsc2J5JpCSg/pB6UT4OG/fq4a2TngF3G1fVrJqJnCVgyRluh7pu/Ez
hSjDEFwplt3nEtaFgZCGECKKdx6y1pZGq6Udp3Adx1G0lhfHP8eu2RS0Q1yEWZeH
uMhk6NHNilmp7GhZzIVVlv0bRebqZoB6J6VcqO7QZfO5i+4/xH+v+EU4ha+RuQra
LCsputKW3x3oLnPZnw1ViX4MQLAZgb8abqt5jROtbJNYf+nKngMlU77dvBjXqCE4
O63tSwCm88akWdkLRid/WUjDa/xh/A==
-----END CERTIFICATE-----
Открываем и импортируем файл конфигурации
Открываем и импортируем файл конфигурации
Указываем логин
Указываем логин
И пароль
И пароль
Игнорируем использование клиентского сертификата
Игнорируем использование клиентского сертификата

Без сертификата пользователя

Напомню, что на OpenVPN Server выключена опция проверки сертификата пользователя
Напомню, что на OpenVPN Server выключена опция проверки сертификата пользователя
Успешно подключились
Успешно подключились

Сертификат пользователя

Включаем проверку сертификата пользователя
Включаем проверку сертификата пользователя
Экспортируем сертификат и ключ пользователя в формате PKCS12 (OpenVPN должен принимать этот формат, но не принимает :)
Экспортируем сертификат и ключ пользователя в формате PKCS12 (OpenVPN должен принимать этот формат, но не принимает 🙂
Экспортируем раздельно сертификат и ключ
Экспортируем раздельно сертификат и ключ
crt и key
crt и key

Добавляем в конфигурацию OpenVPN сертификат и ключ пользователя

<cert>
</cert>
<key>
</key>
Либо генерируем на самом MikroTik через Export .ovpn
Либо генерируем на самом MikroTik через Export .ovpn
Импортируем в OpenVPN клиент
Импортируем в OpenVPN клиент
Указываем имя пользователя
Указываем имя пользователя
Пароль пользователя и пароль приватного ключа
Пароль пользователя и пароль приватного ключа
Раздумаемся секурности подключения :)
Раздумаемся секурности подключения 🙂

Встроенные Windows клиенты

Конфигурацию можно создать автоматически с помощью PowerShell

Add-VpnConnection -Name "SSTP" -ServerAddress "gw01.net.1Side.ru" -TunnelType "SSTP" -EncryptionLevel "Required" -AuthenticationMethod MSChapv2 -RememberCredential -SplitTunneling -PassThru

А так же создать маршруты:

Add-VpnConnectionRoute -ConnectionName "SSTP" -DestinationPrefix 192.168.0.0/24 –PassThru
Add-VpnConnectionRoute -ConnectionName "SSTP" -DestinationPrefix 172.16.12.0/12 –PassThru
Add-VpnConnectionRoute -ConnectionName "SSTP" -DestinationPrefix 10.0.0.0/8 –PassThru

Общая конфигурация

Корпоративный VPN Автоматический тип VPN Window s
Автоматический тип VPN Windows

PPTP

PPTP тип VPN Windows
PPTP тип VPN Windows

L2TP

L2TP IPsec тип VPN Windows
L2TP IPsec тип VPN Windows

IKEv2

IKEv2 тип VPN Windows
IKEv2 тип VPN Windows

Отказоустойчивость

  1. Используйте минимум 2 RADIUS (NPS) сервера в разных локациях
  2. Организуйте минимум 2 точки входа в разных локациях (ЦОД/ЦО)
  3. Используйте 2WAN/MultiWAN
  4. Проработайте схему с VRRP
  5. Виртуальный CHR (Cloud Hosted Routed) лучше, чем аппаратный RouterBOARD в плане скорости восстановления. А так же запускается практически на любом ПК с виртуализацией.

Маршрутизация

OpenVPN и IKEv2 умеет отправлять маршрут клиентам, но к этому нужно относиться более серьезно и не плодить 100 маршрутов, т.к. некоторые клиенты не могут принять более 1 маршрута. Идеально будет отправить например только 10.0.0.0/8, но ваша сеть должна быть распланирована и не прыгать из 10. в 192. и 172.

Безопасность

OpenVPN

Сертификаты

Поверка сертификата пользователя может выступать вторым фактором при подключении только при выдаче уникальных паролей на эти сертификаты, а так же выдаче токенов с этим ключом.

Отзыв сертификата

Так как мы указали CRL адрес, значит можем отозвать сертификат пользователя (например кто-то поделился своей конфигурацией, а значит и паролем от него). Но на MikroTik с этим есть проблемы.

PPTP

Считается потенциально не безопасным, но бывает единственным вариантом подключения.

L2TP

Обязательна проверка IPsec, но раздача IPsec секрета всем сотрудникам снижает его безопасность. К тому же не работает более 1 подключения за 1 IP NAT адресом.

SSTP

Единственный протокол, который будет работать в 99% случаях и является действительно безопасным благодаря TLS версии 1.2

IKEv2

Так же является безопасным и самым быстрым из представленных защищённых.

Firewall

Внимательно относитесь к уровням доступа, фильтруя на межсетевом экране кому куда можно подключаться. Для примера:

vpn_hell

Жесткий доступ, можно только до терминальной фермы и SIP телефонии.

vpn_purgatory

Средний доступ, можно до внутренних сервисов.

vpn_paradise

Полный доступ до всей сети компании.

Top