Настраиваем VPN на Mikrotik CHR

Ранее мы писали про установку и базовую настройку Mikrotik CHR на виртуальные серверы. В этой статье мы выполним настройку VPN-сервера на базе Cloud Hosted Router и подключим клиентские устройства к настроенному VPN. При написании данной статьи использовался облачный сервер со следующими характеристиками: 1 vCPU; 512 МБ RAM; 5 ГБ быстрый диск. Операционной системой выбрана актуальная […]

Ранее мы писали про установку и базовую настройку Mikrotik CHR на виртуальные серверы. В этой статье мы выполним настройку VPN-сервера на базе Cloud Hosted Router и подключим клиентские устройства к настроенному VPN.
При написании данной статьи использовался облачный сервер со следующими характеристиками:
- 1 vCPU;
- 512 МБ RAM;
- 5 ГБ быстрый диск.
Операционной системой выбрана актуальная на момент написания статьи Stable-версия RouterOS: 6.47.6. Мы предполагаем, что читатель уже установил MikroTik CHR и провел первичную настройку.
Несмотря на то, что в статье описана настройка на Cloud Hosted Router, эта инструкция может использоваться и для физических маршрутизаторов с RouterOS.
Общие настройки
Создание пула IP-адресов
При подключении к VPN клиент «входит» в локальную сеть с VPN-сервером. Это требует серой подсети и списка доступных для клиента адресов, называемых пул. Создать пул можно следующей командой:
/ip pool add name=<название> ranges=<IP-адреса>
Мы выделили 253 адресов в подсети 172.24.0.0/24 и назвали ее vpn-pool.
/ip pool add name=vpn-pool ranges=172.24.0.1-172.24.0.253
Обратите внимание, что адрес 172.24.0.254 не входит в пул адресов, так как этот адрес будет принадлежать VPN-серверу и не должен быть выделен клиенту.
Создание PPP-профиля
«Связать» пул адресов для клиентов и адрес VPN-сервера можно с помощью PPP-профиля. Используем следующую команду:
/ppp profile add name=vpn-profile local-address=172.24.0.254 remote-address=vpn-pool use-mpls=no use-compression=yes use-encryption=yes only-one=no
Рассмотрим параметры команды:
- name=vpn-profile — задаем имя профиля;
- local-address=172.24.0.254 — задаем адрес VPN-сервера;
- remote-address=vpn-pool — указываем использовать пул vpn-pool для выдачи адресов клиентам;
- use-mpls=no — не используем MultiProtocol Label Switching;
- use-compression=yes — включаем сжатие трафика;
- use-encryption=yes — включаем шифрование;
- only-one=no — разрешаем более одного одновременного подключения для пользователя.
Настройка NAT
Создать локальную сеть между VPN-сервером и VPN-клиентом — это половина проблемы. Далее необходимо разрешить клиенту выходить в интернет через VPN-подключение. Для этого необходимо настроить NAT. Сделать это можно следующей командой:
/ip firewall nat add chain=srcnat out-interface=ether1 action=masquerade
Создание пользователя
Далее создаем пользователя. Сделать это можно следующей командой:
/ppp secret add name=<логин> password=<пароль> service=<тип сервера>
Параметр service определяет, какие сервисы доступны пользователю. Мы планируем использовать пользователя для демонстрации четырех протоколов VPN, поэтому установим значение any. Создаем пользователя vpn-user с паролем vpn-password с доступом к любому сервису:
/ppp secret add name=vpn-user password=vpn-password service=any
Пользователь создан. Однако, некоторые VPN-протоколы требуют сертификатов.
Генерация сертификатов сервера
Если вы планируете использовать OpenVPN или SSTP, то со стороны сервера требуются два сертификата: CA (Certification authority, Центр Сертификации) и серверный (server). Первый сертификат является «неоспоримым» и им можно подтверждать самоподписанные сертификаты, созданные для сервера и для клиентов.
Сперва выберем Common Name (CN) для центра сертификации. Здесь нет специфических требований, поэтому допустимо использовать любое имя. Мы используем имя хоста в качестве CN. В параметре ca-crl-host необходимо указать IP-адрес или домен VPN-сервера.
/certificate add name=ca-template common-name="MikroTik" days-valid=3650 key-usage=crl-sign,key-cert-sign
/certificate sign ca-template ca-crl-host=185.X.X.83 name="MikroTik"
Далее создаем сертификат для VPN-сервера и подписываем его только созданным CA-сертификатом. Обратите внимание, что CN для сертификата сервера должен быть строго доменом или IP-адресом.
/certificate add name=server-template common-name=185.X.X.83 days-valid=3650 key-usage=digital-signature,key-encipherment,tls-server
/certificate sign server-template ca="MikroTik" name="server@MikroTik"
Для протокола SSTP значение поля CN является критичным. Если CN является IP-адресом, то VPN-клиенту нужно подключаться именно по IP-адресу. При подключении по домену произойдет ошибка.
Сертификат CA необходимо экспортировать, чтобы клиент доверял сертификату сервера. Файл:
/certificate export-certificate "MikroTik" export-passphrase=""
После экспорта на вкладке Files в веб-интерфейсе можно будет скачать файл cert_export_MikroTik.crt. Сохраните его, он потребуется далее.
Настройка VPN-сервера
Мы рассмотрим четыре протокола для организации VPN:
- PPTP;
- L2TP/IPsec;
- OpenVPN;
- SSTP.
Каждый из протоколов обладает своими плюсами и минусами. Рассмотрим протоколы поближе.
PPTP
Начнем с самого легкого в настройке протокола Point-to-Point Tunneling Protocol (PPTP). Данный протокол не требует большого количества вычислительных ресурсов и поддерживается «из коробки» множеством операционных систем. Среди минусов — наличие серьезных уязвимостей в протоколах аутентификации.
Запустить VPN-сервер можно в одну команду:
/interface pptp-server server set enabled=yes default-profile=vpn-profile authentication=mschap2
В качестве клиента возьмем смартфон под управлением ОС Android 8.0.0.

Подключение по PPTP не требует дополнительного программного обеспечения и не доставляет проблем. Однако, если хочется чуть больше безопасности, то следует посмотреть в сторону протоколов L2TP/IPsec.
L2TP/IPSec
Как и PPTP, протоколы L2TP/IPsec поддерживаются большим количеством операционных систем. Более того, используемый в IPsec алгоритм шифрования AES на данный момент не имеет серьезных уязвимостей, что гарантирует относительную безопасность и конфиденциальность при использовании L2TP/IPsec.
Настройка L2TP/IPsec VPN-сервера похожа на настройку PPTP-сервера:
/interface l2tp-server server set enabled=yes default-profile=vpn-profile authentication=mschap2 use-ipsec=required ipsec-secret=super-secret
Обратите внимание на параметр ipsec-secret. Этот параметр — общий ключ IPsec. Так как мы используем аутентификацию по паре логин/пароль без сертификата, то в настройках клиента необходимо выбирать L2TP/IPsec PSK или L2TP/IPsec с общим ключом.

Хотя L2TP/IPsec является хорошим компромиссом, стоит оценить и OpenVPN.
OpenVPN
OpenVPN — современная технология с открытым исходным кодом. Данное решение предоставляет безопасность, высокую скорость работы и умение маскироваться под HTTPS-трафик. К сожалению, для использования OpenVPN необходимо устанавливать дополнительное программное обеспечение, например, официальный OpenVPN Connect, а также работать с сертификатами и конфигурационными файлами ovpn.
Включаем OpenVPN-сервер с указанием серверного сертификата, который сгенерировали ранее:
/interface ovpn-server server set auth=sha1 certificate="server@MikroTik" cipher=aes128,aes192,aes256 default-profile=vpn-profile enabled=yes require-client-certificate=yes
Создаем шаблон клиентского сертификата:
/certificate add name=client-template common-name="client" days-valid=3650 key-usage=tls-client
Генерируем сертификат для пользователя vpn-user на основе шаблона:
/certificate add name=client-vpn-user copy-from=client-template common-name="vpn-user@MikroTik"
/certificate sign client-vpn-user ca="MikroTik" name="vpn-user@MikroTik"
Экспортируем сертификат и ключ. Обратите внимание, что пароль во время экспортирования указан пароль super-secret-password, который необходимо будет ввести при импорте в VPN-клиенте.
/certificate export-certificate "vpn-user@MikroTik" export-passphrase="super-secret-password"
В веб-интерфейсе на вкладке Files можно найти следующие файлы:
- cert_export_vpn-user@MikroTik.crt;
- cert_export_vpn-user@MikroTik.key.
Скачиваем указанные файлы и составляем конфигурационный файл ovpn:
client
dev tun
proto tcp-client
remote <ip-адрес> 1194
nobind
persist-key
persist-tun
cipher AES-128-CBC
auth SHA1
pull
verb 2
mute 3
auth-user-pass
# Добавляем эту строчку, чтобы отправлять все запросы через VPN
redirect-gateway def1
<ca>
# Вставляем содержимое cert_export_MikroTik.crt
</ca>
<cert>
# Вставляем содержимое cert_export_vpn-user@MikroTik.crt
</cert>
<key>
# Вставляем содержимое cert_export_vpn-user@MikroTik.key
</key>
Передаем ovpn-файл на смартфон и импортируем его через OpenVPN Connector.

В качестве Private Key Password используем пароль, указанный при экспортировании. Данные пользователя для подключения остались неизменными.
SSTP
SSTP — это проприетарный протокол от Microsoft, обладающий достоинствами OpenVPN. Данный протокол поддерживается ОС Microsoft Windows, начиная с Vista SP1, а на других ОС требует установки дополнительного ПО.
Для запуска сервера достаточно выполнить одну команду:
/interface sstp-server server set enabled=yes certificate=server@MikroTik default-profile=vpn-profile
Так как данный протокол поддерживается Windows, то проверим работу сервера на Windows 10. В первую очередь необходимо установить центр сертификации. Скачиваем cert_export_MikroTik.crt и открываем двойным кликом.

Откроется окно, которое предупреждает, что нет доверия к этому центру сертификации. Это исправляется установкой сертификата. При установке выбираем хранилище «локальный компьютер» и на следующем шаге помещаем сертификат в «доверенные корневые центры сертификации». Теперь можно приступить к настройке VPN-подключения.

Открываем Параметры Windows — Сеть и Интернет — VPN и добавляем VPN-подключение, вводим имя или адрес сервера как было указано в сертификате сервера и вводим свои логин-пароль. VPN-подключение установлено.
Заключение
Мы рассмотрели настройку VPN-серверов на четырех разных протоколах. Надеемся, что эта инструкция поможет вам создать собственный виртуальный маршрутизатор на базе Mikrotik CHR.