Корпоративный 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.
Если у вас его нет, пройдемся по шагам установки и настройки.

Добавить роли и компоненты


Далее

Далее

Добавить компоненты
Далее



Установить




Обязательно создаем реальный купленный домен, чтобы можно было приобрести коммерческий TLS сертификат!






И ждем перезагрузки
На моем стенде динамический IP, по этому есть предупреждение
Теперь у вас есть свой Active Directory.
Сервер политики сети
Для авторизации сотрудников по VPN используется RADIUS сервер от Microsoft в виде Network Policy Server (NPS), который сейчас установим и активируем.











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

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

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

(на самом деле будет 4984 дня)

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

И указываем сертифкат CA (сам себя)
CA CRL Host сервер отозванных сертификатов

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


digital signature
key enciphement
tls server

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

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


Группы VPN пользователей
Всегда делите права сотрудников VPN минимум на 3 группы доступа. В частных случаях есть смысл выделять группы для внешних подрядчиков.
- vpn_hell — доступ только до терминальной фермы
- vpn_purgatory — права как hell +расширенные доступы
- vpn_paradise — полный доступ в сеть
MikroTik

Создаем пул 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

Так как политика будет назначаться по имени пула 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 Server
Подробнее о VPN можно прочитать в официальной справке
https://help.mikrotik.com/docs/display/ROS/Virtual+Private+Networks

MTU VPN

Default Profile

PPTP Server
Протокол считается не безопасным.
https://help.mikrotik.com/docs/display/ROS/PPTP

/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

На самоподписанном сертификате можно выпустить сертификаты пользователя аналогично 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

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

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

Пушим маршрут до 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 policy group
add name=ike2-vpn_hell

/ip ipsec profile
add name=profile-ike2-vpn_hell

/ip ipsec peer
add exchange-mode=ike2 name=peerIKEv2-vpn_hell passive=yes profile=profile-ike2-vpn_hell

/ip ipsec proposal
add name=proposal-ike2-vpn_hell pfs-group=none

Выбираем сертификат
/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 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

Указываем сервер 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 Authentication&Accounting
Use Radius
/ppp aaa
set use-radius=yes
Radius Accouting

Radius Accounting
NPS
RADIUS-клиенты

(на практике следует указывать только сети управления lo сеть с которых будут обращения за авторизацией)
Сетевые политики




А так же PAP, SPAP для работы OpenVPN

Framed-Pool пул IP адресов из профиля
(здесь назначается имя пуля IP адресов)





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




(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>


-----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 сертификат и ключ пользователя
<cert>
</cert>
<key>
</key>





Встроенные 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
Общая конфигурация

PPTP

L2TP

IKEv2

Отказоустойчивость
- Используйте минимум 2 RADIUS (NPS) сервера в разных локациях
- Организуйте минимум 2 точки входа в разных локациях (ЦОД/ЦО)
- Используйте 2WAN/MultiWAN
- Проработайте схему с VRRP
- Виртуальный 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
Полный доступ до всей сети компании.