Поднимаем на Mikrotik OpenVPN сервер

OpenVPN — это одна из самых современных технологий VPN на сегодняшний день. Основное достоинство OpenVPN — это бесперебойная работа вне зависимости от качества канала интернет и заблокированных портов провайдерских маршрутизаторов. OpenVPN это своего рода «танк», который работает несмотря ни на что.

Поднимем сервер OpenVPN на маршрутизаторе Mikrotik любой модели. Самое главное, чтобы была RouterOS.


Что нужно знать до установки OpenVPN на Mikrotik

Чтобы полноценно использовать OpenVPN-сервер на Mikrotik, вам нужно обновить версию прошивки до версии 7.1 и выше.

В Mikrotik OpenVPN немного урезан. Главные особенности:

  1. нет поддержки UDP. Только TCP Добавили в стабильной версии RouterOS 7.1. Есть проблемы в работе.;
  2. нет LZO-компрессии;

Установка сервера OpenVPN на Mikrotik

Подготовка Mikrotik

Любой OpenVPN сервер требует точного времени всех узлов сети. Нужно настроить синхронизацию времени как клиента, так и сервера. Если синхронизация времени на всех десктопных операционных системах работает из коробки, то Mikrotik, на котором будет установлен OpenVPN сервер, нуждается в дополнительной настройке.

Часовой пояс

Первым делом устанавливаем правильный часовой пояс. Для этого нужно перейти в System - Clock и указать часовой пояс.

Настраиваем часовой пояс на маршрутизаторе Mikrotik

Через консоль:

system clock set time-zone-autodetect=no time-zone-name=Asia/Omsk

Синхронизация времени

Указываем NTP-сервера для синхронизации времени:

Включаем синхронизацию времени на Mikrotik

Сами адреса можно взять отсюда – www.ntp-servers.net

В примере используются эти:

88.147.254.232
88.147.254.230

Через консоль это будет выглядеть так:

system ntp client set enabled=yes primary-ntp=88.147.254.232 secondary-ntp=88.147.254.230

Создание сертификатов

Нам нужно создать минимум 3 сертификата:

  • самоподписанный корневой сертификат для центра сертификации;
  • сертификат для нашего роутера Mikrotik, который выступает OpenVPN-сервером;
  • сертификат для клиента.

Для клиентов можно выпустить требуемое количество сертификатов.

Позднее, если потребуется вынести OpenVPN-сервер на другое устройство, их с легкостью можно перенести.

Корневой сертификат CA

Создаем корневой сертификат для нашего центра сертификации. Переходим в System - Certificate

Создаем корневой сертификат в роутере Микротик

Где:

  • Name и Common Name — название, которое обычно именуется ca;
  • Country, State, Locality, Organization — это произвольные поля, которые заполняются для удобства опознавания сертификатов в будущем;
  • Days Valid — это время действия сертификата. Ставим 3650 дней = 10 лет.

На вкладке Key Usage отмечаем только:

  • crl sign;
  • key cert. sign.

Нажимаем кнопку Apply и затем Sign. В поле CA CRL Host указываем сами на себя – 127.0.0.1. Для запуска генерации сертификата, кликаем на Start. После окончания закрываем все окна.

Через консоль:

certificate add name=ca common-name="ca" key-size=2048 days-valid=3650 key-usage=crl-sign,key-cert-sign sign ca ca-crl-host=127.0.0.1

Сертификат для OpenVPN сервера Mikrotik

Создание всех сертификатов очень похожи между собой. На вкладке System - Certificate для сертификата сервера OpenVPN Mikrotik, в полях Name и Common Name указываем ovpn-serv (можно указать любое значение), а на вкладке Key Usage выбираем:

  • digital signature;
  • key encipherment;
  • tls server.

Нажимаем кнопку Apply и затем Sign. В поле CA выбираем – ca. Для запуска генерации сертификата, кликаем на Start. После окончания закрываем все окна.

Создаем сертификат для сервера OpenVPN, который размещен на роутере

Через консоль:

certificate add name=ovpn-serv common-name="ovpn-serv" key-size=2048 days-valid=3650 key-usage=digital-signature,key-encipherment,tls-server sign ovpn-ser ca="ca"

Сертификат для клиента

Настало время выпускать клиентские сертификаты. Процедура та же самая. На вкладке Key Usage выбираем:

  • tls client.

Нажимаем кнопку Apply и затем Sign. В поле CA выбираем – ca. Для запуска генерации сертификата, кликаем на Start. После окончания закрываем все окна.

Создаем сертификат OpenVPN для клиентов

Через консоль:

certificate add name=user1 common-name="user1" key-size=2048 days-valid=365 key-usage=tls-client sign user1 ca="ca"

В результате у нас должно получиться минимум 3 сертификата:

Так должны выглядеть 3 созданных сертификата

Если у Вас будет больше клиентов, то сертификатов будет больше.

Можно выпустить 1 клиентский сертификат и раздать всем пользователям OpenVPN сервера на Mikrotik. Это будет работать, но так делать не нужно. В случае, если Вам нужно будет отозвать один из клиентских сертификатов для уволенного сотрудника, то сделать это будет невозможно. У вас останется возможность только заблокировать учетную запись.

Экспортируем сертификат пользователя

Для экспорта клиентских сертификатов лучше всего использовать формат PKCS12, так как в результате вы получите 1 файл, который проще передать пользователю. Если нужно настроить подключение на телефонах с Android или IOS, то лучше экспортировать в формате PEM, так как далее нужно будет объединять сертификаты в конфигурационный файл.

Если использовать «устаревший» формат PEM, то будет 2 файла:

  • user1.crt – открытая часть ключа пользователя;
  • user1.key – закрытая часть ключа пользователя.

К ним нужно будет экспортировать корневой сертификат ca.crt. Без него работать не будет.

При формате PKCS12 файл всего один. Разница между PKCS12 и PEM только в удобстве.

Выгружаем созданные сертификаты для клиентов на свой компьютер

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

Через консоль с паролем 12345678:

certificate export-certificate user1 type=pkcs12 export-passphrase=12345678

Настройка OpenVPN сервера

Назначаем IP-адреса для OpenVPN

Всем подключаемым пользователям необходимо назначить IP-адрес. Сделать это можно либо вручную, либо автоматически используя DHCP. В большинстве случаев используйте второй вариант.

Диапазон адресов

Для автоматической выдачи адресов vpn-клиентам достаточно создать pool-адресов. Для этого переходим в раздел IP - Pool.

Создаем pool-адресов для клиентов

Через консоль:

ip pool add name=ovpn-pool ranges=192.168.132.201-192.168.132.220

Статические адреса

В исключительных случаях нужно выдать статический IP-адрес. Сделать это можно в разделе PPP - Secret. при создании пользователей:

Присваиваем статически IP-адрес

Где:

  • Local Address — адрес Mikrotik;
  • Remote Address — статический адрес клиента.

Более подробнее о создании пользователей пойдет ниже.

Создаем профиль пользователей

Профили в Mikrotik позволяют облегчить дальнейшее добавление пользователей. В профиле можно указать общие параметры для всех пользователей. Это избавит от необходимости указывать одни и те же данные для каждого пользователя отдельно.

В разделе PPP - Secret переходим на вкладку Profiles и создаем новый профиль.

На вкладке General:

Создаем профиль пользователей. Вкладка General

Редактируем поля:

  • Name — название профиля;
  • Local Address — адрес Mikrotik;
  • Remote Address — созданный ранее pool для OpenVPN. Если подразумевается использовать статические IP, то поле оставляем незаполненным;
  • Bridge — выбираем мост сети;
  • Change TCP MSS = yes — автоматическая подстройка размера MSS;
  • Use UPnP = no — автоматическая настройка сетевых устройств;

На вкладке Protocols:

Создаем профиль пользователей. Вкладка Protocol

Редактируем поля:

  • Use IPv6 = yes — использование IPv6;
  • Use MPLS = yes — передача пакетов с помощью меток. В теории ускоряет прохождение пакетов между маршрутизаторами;
  • Use Compression = yes — компрессия Mikrotik;
  • Use Encryption = yes — базовое щифрование.

На вкладке Limits:

Создаем профиль пользователей. Вкладка Limits

Редактируем поля:

  • Only One = yes — указываем для монопольного входа пользователей.

Создаем пользователей

В разделе PPP - Secret нужно включить возможность аутентификации по пользователю. Для этого кликаем на кнопку PPP Authentication&Accounting и проверяем, чтобы была установлена галочка напротив Accounting.

Включаем аутентификации по пользователю

Делаем через консоль:

ppp aaa set accounting=yes

После этого можно приступать к созданию пользователей:

Создаем пользователя в разделе PPP-Secret

Где

  • Name — имя клиента (только латинские буквы и цифры, спец. символы не всегда работают корректно);
  • Password — пароль. Пароль, после создания пользователя, будет скрыт звездочками, но есть способ узнать пароль MikroTik;
  • Service = ovpn — сервис, указав который ограничиваем возможность подключения только к OpenVPN;
  • Profile = ovpn — созданный ранее профиль;
  • Remote Address — статический адрес. Если это не требуется, оставляем поле пустым.

Тоже самое можно сделать через консоль:

ppp secret add name=user1 password=1234567 service=ovpn profile=ovpn

Запуск OpenVPN-сервера

В разделе PPP - Interface кликаем на кнопке OVPN Server и настраиваем как на скриншоте:

Включаем OpenVPN сервер на Mikrotik

Где:

  • Protocol = udp — эта возможность появилась в версии RouterOS 7.1;
  • Default Profile = ovpn — созданный профиль;
  • Certificate = ovpn-serv — выбираем сертификат, который создавали для сервера;
  • Require Client Certificate — обязательное наличие сертификата при авторизации;
  • Auth = sha1 — хеширование пароля при его первой передаче по незащищенному каналу при аутентификации;
  • Cipher = aes 256 — шифрование передачи данных.

И не забываем поставить галочку напротив Enabled, чтобы включить сервер.

Через консоль:

interface ovpn-server server set enabled=yes certificate=ovpn-serv default-profile=ovpn  require-client-certificate=yes auth=sha1 cipher=aes256

Открываем порт для OpenVPN

В разделе IP - Firewall на первой вкладке Filter Rules добавляем новое правило:

Настраиваем Firewall в mikrotik для работы OpenVPN

Где:

  • Chain = input — так как мы хотим дать доступ извне к самому маршрутизатору, то выбираем цепочку input;
  • Protocol = 6 (udp) — протокол UDP, этот протокол начал поддерживаться с версией RouterOS 7.1;
  • Dst.Port = 1194 — удаленный порт, который будет открыт на маршрутизаторе.

Через консоль:

ip firewall filter add action=accept chain=input protocol=tcp dst-port=1194

Настройка клиентов

Более подробнее о настройке клиентов на разных ОС можно прочитать здесь:

  1. клиент OpenVPN на MacOS

Проблемы

duplicate packet, dropping
: using encoding - AES-256-CBC/SHA1
TCP connection established from 109.125.24.30
duplicate packet, dropping

Сама фраза в log`ах duplicate packet, dropping не является ошибкой, если при этом происходит подключение.

Если подключение не происходит, причина чаще всего в несоответствии логина или пароля. Подробнее нужно смотреть логи клиента.

Теги: и

Комментарии

Граватар пользователя «dimass»
dimass, 16 августа 2022 г. 00:55 #

Шикарная инструкция огромное спасибо, все завелось и закрутилось, очень детально описан процесс. Лучьший how too на моменте на данную версию прошивки!

Огромное спасибо!

Граватар пользователя «Иван»
Иван, 5 октября 2022 г. 13:12 #

Спасибо за Ваш отзыв.

Граватар пользователя «Алексей»
Алексей, 5 декабря 2022 г. 00:12 #

Просто великолепная инструкция, спасибо большое. Небольшой геммор с сертификатами (на том же pfsense все проще в разы), ключи от них требует.
Ну и создание конфигов тоже немного утомительное, не с первого раза получилось подобрать нужные параметры для routerOS 7.6.

Граватар пользователя «Максим»
Максим, 15 февраля 2023 г. 19:36 #

Спасибо за очень удобную инструкцию.
но к сожалению никак не могу заставить работать систему
всё время получаю ошибку
2023-02-15 16:24:11 SIGUSR1[soft,connection-reset] received, process restarting
2023-02-15 16:24:13 SIGTERM[hard,init_instance] received, process exiting
конфиг делеаю по подобию мака, подключаюсь из под windows 11, client версии 2.5.7
погуглил, ничего однозначного не нашёл :(

буду признателен за совет




В качестве аватарки используется сервис - gravatar.com



IT-событие
День запуска Ethereum
День запуска Ethereum