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

Ранее мы писали про установку и базовую настройку 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.

Добавление VPN и подключение средствами ОС Android

Подключение по 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 PSK и ввод ipsec-secret

Хотя 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.

Импортирование профиля ovpn

В качестве 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-подключения.

Настройка SSTP VPN на Windows 10

Открываем Параметры Windows — Сеть и Интернет — VPN и добавляем VPN-подключение, вводим имя или адрес сервера как было указано в сертификате сервера и вводим свои логин-пароль. VPN-подключение установлено.

Заключение

Мы рассмотрели настройку VPN-серверов на четырех разных протоколах. Надеемся, что эта инструкция поможет вам создать собственный виртуальный маршрутизатор на базе Mikrotik CHR.

Что еще почитать по теме

T-Rex 28 сентября 2022

Книги по SQL: что почитать новичкам и специалистам

Собрали 6 книг, которые помогут на старте изучения SQL и при углублении в тему.
T-Rex 28 сентября 2022
T-Rex 21 сентября 2022

Гипервизор VMware ESXi: функции и отличия от ESX

В статье рассказываем о работе с гипервизором ESXi, его отличиях от ESX и vSphere.
T-Rex 21 сентября 2022
Андрей Салита 14 сентября 2022

Отличия TCP- и UDP-протоколов — определяем разницу на примерах

Рассматриваем два самых популярных протокола транспортного уровня — протоколы TCP и UDP — и сравниваем их.
Андрей Салита 14 сентября 2022

Новое в блоге

Михаил Фомин 24 июня 2022

Docker Swarm VS Kubernetes — как бизнес выбирает оркестраторы

Рассказываем, для каких задач бизнесу больше подойдет Docker Swarm, а когда следует выбрать Kubernetes.
Михаил Фомин 24 июня 2022
Владимир Туров 5 октября 2022

DBaaS: что такое облачные базы данных

Рассказываем о сервисе управляемых баз данных в облаке и объясняем, как разделяется ответственность за работу кластеров БД между провайдером и клиентом.
Владимир Туров 5 октября 2022
Ульяна Малышева 30 сентября 2022

«Нулевой» локальный диск. Как мы запустили облако только с сетевыми дисками и приручили Ceph

Чем хороши сетевые диски и почему именно Ceph, рассказал директор по развитию ядра облачной платформы Иван Романько.
Ульяна Малышева 30 сентября 2022
Валентин Тимофеев 30 сентября 2022

Как проходит онбординг сотрудников ИТО? Что нужно, чтобы выйти на смену в дата-центр

Рассказываем, как обучаем новых сотрудников, какие задачи и испытания проходят инженеры прежде, чем выйти на свою первую смену.
Валентин Тимофеев 30 сентября 2022