Меню
Контакты
109147, Москва, ул.Воронцовская, 35Б, корп.2 офис.11, 4 этаж
Пн-Пт: с 9-00 до 17-00   Сб-вс: выходной
Интернет-магазин
сетевого оборудования
Москва +7 (495) 103-41-03 +7 (915) 420-28-94
109147, Москва, ул.Воронцовская, 35Б, корп.2 офис.11, 4 этаж
Пн-Пт: с 9-00 до 17-00   Сб-вс: выходной
Заказать звонок

Создание домашней сети на базе устройств MikroTik: Часть 4 — Создание OpenVPN туннеля

 23 Июнь 2018    MikroTik, О настройках и установке оборудования производителя Mikrotik, Практика и программирование MikroTik

В данной статье мы создадим защищенный туннельный интерфейс на базе OpenVPN.
Почему OpenVPN спросите Вы, ведь есть же PPTP, L2TP.
Отвечаю, я тестировал соединения на базе этих двух протоколов. К сожалению они не показали достаточно стабильного соединения между собой. Происходили частые падения туннельных интерфейсов.
Возможно это было связано с какой-то прошивкой. Но это не столь важно. Важно то, что настроив один раз туннель на OpenVPN, я забыл про разрывы связи совсем и до сих пор все работает отлично.

Прежде чем настраивать OpenVPN сервер и создавать туннель, разберемся с тем, как он работает на Mikrotik. Т.к. на RouterOS v6 есть ограничения.
Обратимся к официальному источнику — Wiki Mikrotik(Eng) и Manual Interface(Eng).
В OpenVPN используются два типа интерфейса:
tun — в RoS он определяется, как ip, это туннельный уровень.
tap — в RoS он определяется, как ethernet, это канальный уровень.
Только начиная с прошивки 6.39.x была добавлена топология subnet для tun режима.
Выдержка из Changelog:
*) ovpn — added support for «push-continuation»;
*) ovpn — added support for topology subnet for IP mode;
*) ovpn — fixed duplicate default gateway presence when receiving extra routes;
*) ovpn — improved performance when receiving too many options;

Не поддерживается в 6 версии операционной системы:
UDP протокол, т.е. необходимо использовать исключительно TCP!
LZO сжатие
TLS аутентификация
Аутентификация без имени пользователя и пароля
Если Вы будете читать эту статью, и уже будет доступна 7 версия RouterOS, то в ней, все это, уже должно работать (но это не точно)!

К сожалению сложно сказать, почему Mikrotik пришли именно к такому решению и именно таким ограничениям, но мы имеем то, что имеем.
По ТСР, сервер в типичном случае будет получать ТСР-сегменты OpenVPN, которые содержат другие ТСР-сегменты от клиента. В результате в цепи получается двойная проверка на целостность информации, что совершенно не имеет смысла, т.к. надежность не повышается, а скорости соединения и пинга снижаются.
UDP конечно предпочтительней, но его нет…

OpenVPN предлагает пользователю несколько видов аутентификации.
Предустановленный ключ — самый простой метод.
Сертификатная аутентификация — наиболее гибкий в настройках метод.
С помощью логина и пароля — может использоваться без создания клиентского сертификата (серверный сертификат всё равно нужен).

Мы будем использовать Сертификатную аутентификацию для обеспечения хорошей защищенности нашего соединения.

Для создания туннеля, нам понадобятся сертификаты и ключи к ним. Данные сертификаты можно создать, как на Windows, Linux, так и на самом роутере.
Я сторонник создания сертификатов на своем ПК, чтобы они были у меня в файлах и я мог их достать в случаях «А вдруг что».

1. Создание сертификатов для OpenVPN соединения
Я буду создавать сертификаты на операционной системе Windows, для всех остальных ОС принцип похож. Можно загуглить.
Для начала необходимо скачать и установить дистрибутив OpenVPN: Страница Загрузок OpenVPN
Запускаем установщик openvpn-install
Если Вы не собираетесь использовать все возможности туннелирования на своей Windows машине и Вам нужно исключительно создать сертификаты, то можно снять галки с пунктов TAP Virtual Ethernet Adapter и OpenVPN GUI.

Создание домашней сети на базе устройств MikroTik: Часть 4 — Создание OpenVPN туннеля

Выбираем нужные пункты

После скачивания и установки в указанную Вами папку в ней будет список файлов. у меня это папка C:\Program Files\OpenVPN\
Нам необходимо перейти в папку easy-rsa
Нужно открыть консоль Windows (для Windows Vista/7/8/8.1/10 нужно запускать от Администратора)
Переходим в папку easy-rsa по пути установки командой cd
Например:

cd C:\Program Files\OpenVPN\easy-rsa

Запускаем файл init-config.bat

C:\Program Files\OpenVPN\easy-rsa>init-config.bat
C:\Program Files\OpenVPN\easy-rsa>copy vars.bat.sample vars.bat
Скопировано файлов: 1.

В папке появится файл vars.bat, открываем его текстовым редактором, нас интересуют строчки в самом конце, их нужно заполнить
Я подставил свои параметры, у Вас данные параметры будут другие:

set KEY_COUNTRY=RU
set KEY_PROVINCE=Moscow
set KEY_CITY=Moscow
set KEY_ORG=HOME
set KEY_EMAIL=my@email.ru
set KEY_CN=server
set KEY_NAME=server
set KEY_OU=HOME
set PKCS11_MODULE_PATH=server
set PKCS11_PIN=12345

Там где написано server, не трогаем. Сохраняем файл.

Далее открываем редактором файл openssl-1.0.0.cnf
Находим строчку default_days 365 и заменяем число 365 на 3650 или свое. Тем самым мы увеличим время жизни наших сертификатов на 10 лет.
Сохраняем и закрываем.

Дополнительно:
Если Вы тот еще параноик, то Вы можете отредактировать еще один параметр:

set KEY_SIZE=1024

Для пущей сложности данный параметр можно изменить на 2048 и на 4096(для современных версий OpenVPN)
Но будьте готовы к долгому ожиданию(на слабых ПК очень долгому), пока сгенерируется ключ.

Пишем в консоль команды

vars
clean-all

В ответ должно прийти

Скопировано файлов: 1.
Скопировано файлов: 1.

Создаем ключ Диффи-Хеллмана

build-dh

Вывод из консоли:

C:\Program Files\OpenVPN\easy-rsa>build-dh
WARNING: can't open config file: /etc/ssl/openssl.cnf
Generating DH parameters, 1024 bit long safe prime, generator 2
This is going to take a long time
..........+.........

Известные проблемы:
При подаче команды clean-all или build-dh в самом начале генерации сертификатов, может проявится одна ошибка, выглядит она так:

C:\Users\TEST>build-dh
"openssl" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.

Вывод из консоли: Бороться с этим необходимо следующим образом. Нужно указать путь до файла openssl.exe в файле vars.bat в ручную.
А точнее стираем слово rem в строке (rem — это комментирование строки):

rem set "PATH=%PATH%;C:\Program Files\OpenVPN\bin"

Получаем:

set "PATH=%PATH%;C:\Program Files\OpenVPN\bin"

Сохраняем файл и производим весь процесс сначала
vars
clean-all
build….. и т.д

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

build-ca

При генерации основного сертификата в консоли будут отображаться вопросы. Просто нажимаем Enter, т.к. все эти параметры мы ввели в файле vars.bat
Нажимаем Enter до тех пор, пока не отобразиться строка приглашения

C:\Program Files\OpenVPN\easy-rsa

Далее создаем сертификат сервера и его ключ:

build-key-server server

На вопросы так же нажимаем Enter, но не торопимся, в самом конце будет задано два вопроса

Sign the certificate?
1 out of 1 certificate requests certified, commit?

На оба эти вопроса отвечаем Y
Вывод из консоли:

Certificate is to be certified until Oct 16 07:03:55 2027 GMT (3650 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated

Теперь создаем сертификат и ключ клиента:

build-key client

Также не торопимся с ответами, как только увидим строку «Common Name (eg, your name or your server’s hostname)» нужно ответить client
В самом конце также будут два вопроса, отвечаем также Y
Причем: для каждого клиента, нужно будет создать отдельные ключи и называть их по разному, например client1, client2 или как-то иначе, все зависит от Вашего воображения. Также не забывайте вводить эти имена при запросе Common Name
Вывод из консоли:

C:\Program Files\OpenVPN\easy-rsa>build-key client
WARNING: can't open config file: /etc/ssl/openssl.cnf
Generating a 1024 bit RSA private key
............++++++
.............................................................................++++++
writing new private key to 'keys\client.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [RU]:
State or Province Name (full name) [Moscow]:
Locality Name (eg, city) [Moscow]:
Organization Name (eg, company) [Home]:
Organizational Unit Name (eg, section) [Home]:
Common Name (eg, your name or your server's hostname) [server]:client
Name [server]:client
Email Address [my@email.ru]:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
WARNING: can't open config file: /etc/ssl/openssl.cnf
Using configuration from openssl-1.0.0.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName :PRINTABLE:'RU'
stateOrProvinceName :PRINTABLE:'Moscow'
localityName :PRINTABLE:'Moscow'
organizationName :PRINTABLE:'Home'
organizationalUnitName:PRINTABLE:'Home'
commonName :PRINTABLE:'client'
name :PRINTABLE:'client'
emailAddress :IA5STRING:'my@email.ru'
Certificate is to be certified until Oct 16 07:16:56 2027 GMT (3650 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated

Пример создания клиентских сертификатов:

build-key client1
build-key office1

На этом создание файлов сертификатов и ключей завершено.
Все файлы будут лежать в папке C:\Program Files\OpenVPN\easy-rsa\keys\

Создание домашней сети на базе устройств MikroTik: Часть 4 — Создание OpenVPN туннеля

Примерной такой список файлов должен получиться у Вас

2. Настройка OpenVPN сервера и интерфейса туннеля на hAP ac
Переходим к созданию туннеля на роутере hAP ac
Необходимо загрузить сертификат сервера, ключ сервера и основной сертификат в роутер. Файлы:
ca.crt
server.crt
server.key

Открываем раздел Files и переносим туда наши файлы. (Или используем FTP)

Создание домашней сети на базе устройств MikroTik: Часть 4 — Создание OpenVPN туннеля

Загруженные файлы сертификатов и ключа

Теперь нам необходимо импортировать данные сертификаты в RouterOS, чтобы она могла ими оперировать.

Создание домашней сети на базе устройств MikroTik: Часть 4 — Создание OpenVPN туннеля

Меню сертификатов

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

Создание домашней сети на базе устройств MikroTik: Часть 4 — Создание OpenVPN туннеля

Выбираем нужные сертификаты и ключ и импортируем их

Консольно:

/certificate import file-name=ca.crt passphrase=""
/certificate import file-name=server.crt passphrase=""
/certificate import file-name=server.key passphrase=""

Займемся настройкой OpenVPN. переходим в меню PPP

Создание домашней сети на базе устройств MikroTik: Часть 4 — Создание OpenVPN туннеля

Меню PPP

Создание домашней сети на базе устройств MikroTik: Часть 4 — Создание OpenVPN туннеля

Добавляем новый профиль для нашего туннеля

Нам необходимо выделить IP адреса, которые мы будем использовать для туннельных интерфейсов.
Я выбрал подсеть 172.16.10.0/24 соответственно сервер будет иметь адрес 172.16.10.1, а клиенты далее по маске. 2,3,4 и т.д.

Создание домашней сети на базе устройств MikroTik: Часть 4 — Создание OpenVPN туннеля

Заполняем необходимые параметры профиля

Создание домашней сети на базе устройств MikroTik: Часть 4 — Создание OpenVPN туннеля

Заполняем оставшиеся параметры профиля

Консольно:

/ppp profile add name=ovpn-server local-address=172.16.10.1 change-tcp-mss=yes use-upnp=no use-mpls=yes use-compression=no use-encryption=yes only-one=default

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

Создание домашней сети на базе устройств MikroTik: Часть 4 — Создание OpenVPN туннеля

Открываем вкладку с записями данных авторизации

Т.к. у сервера IP 172.16.10.1 выдаем клиенту IP 172.16.10.2

Создание домашней сети на базе устройств MikroTik: Часть 4 — Создание OpenVPN туннеля

Добавляем нашего клиента

Консольно:

/ppp secret add name=client password=123456789 service=ovpn profile=ovpn-server remote-address=172.16.10.2

Теперь нужно включить саму службу OpenVPN

Создание домашней сети на базе устройств MikroTik: Часть 4 — Создание OpenVPN туннеля

Нажимаем кнопку для отображения параметров сервера

Создание домашней сети на базе устройств MikroTik: Часть 4 — Создание OpenVPN туннеля

Выполняем настройки сервера

Консольно:

/interface ovpn-server server set enabled=yes port=1194 mode=ip netmask=24 default-profile=ovpn-server certificate=server.crt_0 require-client-certificate=yes auth=sha1,md5 cipher=blowfish128,aes128,aes192,aes256

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

Создание домашней сети на базе устройств MikroTik: Часть 4 — Создание OpenVPN туннеля

Биндим интерфейс

Создание домашней сети на базе устройств MikroTik: Часть 4 — Создание OpenVPN туннеля

Достаточно ввести имя клиента из PPP Secret и имя самого интерфейса

Консольно:

/interface ovpn-server add name=ovpn-inclient user=client

Может показаться, что мы все уже настроили, но это не совсем так. Остался последний штрих. Необходимо разрешить прохождение запросов на OpenVPN сервер через Firewall
Для этого переходим в меню межсетевого экрана

Создание домашней сети на базе устройств MikroTik: Часть 4 — Создание OpenVPN туннеля

Переходим в меню Firewall

Создание домашней сети на базе устройств MikroTik: Часть 4 — Создание OpenVPN туннеля

Добавляем новую запись

Создание домашней сети на базе устройств MikroTik: Часть 4 — Создание OpenVPN туннеля

Разрешаем входящий трафик на порту 1194 с интерфейса WAN

Создание домашней сети на базе устройств MikroTik: Часть 4 — Создание OpenVPN туннеля

Само разрешение

Консольно:

/ip firewall filter add chain=input protocol=tcp dst-port=1194 in-interface=WAN action=accept comment="Accept OpenVPN Requests"

На этом настройка OpenVPN на роутере hAP ac завершена, переходим к роутеру hEX

3. Настройка OpenVPN клиента и интерфейса туннеля на hEX
На данном роутере нам необходимо проделать гораздо меньше операций для запуска клиента.
Помним, что создали сертификат клиента! Загружаем его в роутер и импортируем по аналогии с hAP ac.

Создание домашней сети на базе устройств MikroTik: Часть 4 — Создание OpenVPN туннеля

Загружаем и импортируем сертификат и ключ клиента

Консольно:

/certificate import file-name=client.crt passphrase=""
/certificate import file-name=client.key passphrase=""

Создаем профиль для OpenVPN в меню PPP

Создание домашней сети на базе устройств MikroTik: Часть 4 — Создание OpenVPN туннеля

Добавляем новый профиль

Консольно:

/ppp profile add name=ovpn-client change-tcp-mss=yes use-upnp=no use-mpls=yes use-compression=no use-encryption=yes

Добавляем интерфейс OpenVPN для подключения к OpenVPN серверу.
Как мы помним из первой части цикла статей, внешний IP адрес у нас 98.76.54.32

Создание домашней сети на базе устройств MikroTik: Часть 4 — Создание OpenVPN туннеля

Добавляем интерфейс клиента OpenVPN

Создание домашней сети на базе устройств MikroTik: Часть 4 — Создание OpenVPN туннеля

Задаем имя интерфейса

Создание домашней сети на базе устройств MikroTik: Часть 4 — Создание OpenVPN туннеля

Заполняем параметры для подключения к серверу OpenVPN

Консольно:

/interface ovpn-client add name=ovpn-outclient connect-to=98.76.54.32 port=1194 mode=ip user=client password=123456789 profile=ovpn-client certificate=client.crt_0 auth=md5 cipher=blowfish128

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

Создание домашней сети на базе устройств MikroTik: Часть 4 — Создание OpenVPN туннеля

Признаки активного соединения

Вот мы и закончили создание OpenVPN туннеля между двумя роутерами hAP ac и hEX
Буду рад любым замечаниям или комментариям. Возможно Вы знаете, как сделать лучше!

P.S.
Аналогом данного решения может послужить вариант PPTP туннеля. А шифрование можно организовать в самом EoIP посредством IPsec

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