Подключение на MikroTik
В данной инструкции рассматривается работа с MikroTik RouterOS версии v7.18.2 и выше, а также настройка протокола XRay VLESS Reality для подключения к VPN.
Материал рассчитан на пользователей со средним уровнем подготовки. Перед применением приведённых настроек настоятельно рекомендуется иметь практический опыт конфигурирования устройств MikroTik.
Для опытных пользователей доступны готовые контейнеры на Docker Hub, которые можно использовать непосредственно в среде RouterOS. Контейнеры предоставлены для трёх архитектур: ARM, ARM64 и x86.
Преднастройка RouterOS
Создадим отдельную таблицу маршрутизации:
/routing table
add disabled=no fib name=r_to_vpnДобавим address-list "to_vpn" что бы находившиеся в нём IP адреса и подсети заворачивать в пока ещё не созданный туннель:
/ip firewall address-list
add address=8.8.8.8 list=to_vpnДобавим address-list "RFC1918" что бы не потерять доступ до RouterOS при дальнейшей настройке:
/ip firewall address-list
add address=10.0.0.0/8 list=RFC1918
add address=172.16.0.0/12 list=RFC1918
add address=192.168.0.0/16 list=RFC1918Добавим правила в mangle для address-list "RFC1918" и переместим его в самый верх правил:
Добавим правило транзитного трафика в mangle для address-list "to_vpn":
Добавим правило для транзитного трафика, указывающее использовать таблицу маршрутизации r_to_vpn для поиска маршрута к узлу назначения:
Маршрут по умолчанию в созданную таблицу маршрутизации "r_to_vpn" добавим чуть позже.
Два выше обозначенных правила будут работать только для трафика, проходящего через маршрутизатор. Если вы хотите заворачивать трафик, генерируемый самим роутером (например команда ping 8.8.8.8 c роутера для проверки туннеля в контейнере), тогда добавляем ещё два правила (не обязательно). Они должны находиться по порядку, следуя за вышеобозначенными правилами.
Сборка контейнера на Windows
Данный пункт настройки подходит только для устройств с архитектурой ARM, ARM64 или x86. Перед запуском контейнера в RouteOS убедитесь, что у вас включены контейнеры. С полным списком устройств можно ознакомится тут. Включаем поддержку контейнеров в RouterOS. Также предполагается, что на устройстве (либо на подключённой по USB флешке) доступно около 50 МБ свободного места для развертывания контейнера в RouterOS, а также не менее 150 МБ оперативной памяти. Если на накопителе недостаточно свободного места, его можно временно расширить за счёт оперативной памяти. После перезагрузки RouterOS, всё что находится в RAM, стирается.
Где взять контейнер? Его можно собрать самому из текущего репозитория каталога Containers или скачать готовый образ под выбранную архитектуру из Docker Hub. Скачав готовый образ, переходим сразу к настройке.
Для самостоятельной сборки следует установить подсистему Docker buildx, "make" и "go".
В текущем примере будем собирать на Windows:
Скачиваем Docker Desktop и устанавливаем.
Скачиваем каталог Containers.
Открываем CMD и переходим в каталог "Containers" (cd <путь до каталога>).
Запускаем Docker с ярлыка на рабочем столе (окно приложения должно просто висеть в фоне при сборке) и через cmd собираем контейнер под выбранную архитектуру RouterOS.
ARMv8 (arm64/v8) — спецификация 8-го поколения оборудования ARM, которое поддерживает архитектуры AArch32 и AArch64.
ARMv7 (arm/v7) — спецификация 7-го поколения оборудования ARM, которое поддерживает только архитектуру AArch32.
AMD64 (amd64) — это 64-битный процессор, который добавляет возможности 64-битных вычислений к архитектуре x86.
Для ARMv8 (Containers\Dockerfile_arm64):
Для ARMv7 (Containers\Dockerfile_arm):
Для amd64 (Containers\Dockerfile_amd64):
Иногда процесс создания образа может подвиснуть из-за плохого соединения с интернетом. Следует повторно запустить сборку. После сборки образа вы можете загрузить контейнер в приватный репозиторий Docker HUB и продолжить настройку по следующему пункту.
Вариант с локальным сохранением контейнера в .tar через docker save тоже может сработать, однако на последней версии Docker в RouterOS могут возникать ошибки при попытке импорта таким способом.
Настройка контейнера в RouterOS
В данном примере на устройстве MikroTik USB-накопитель отсутствует, поэтому всё будет храниться с использованием расширенного хранилища на базе оперативной памяти. Если у вас есть USB-порт и флешка, рекомендуется размещать контейнер именно на ней. Также возможно комбинированное размещение: образ контейнера можно загрузить во временное хранилище в оперативной памяти, а развернуть сам контейнер — в постоянной файловой системе.
Рекомендуется создать пространство из ОЗУ хотя бы для tmp директории. Размер регулируйте самостоятельно:
Если контейнер не запускается на флешке
Например, вы хотите разместить контейнер в каталоге /usb1/docker/xray. Не создавайте заранее каталог xray на USB-флеш-накопителе. При создании контейнера добавьте в команду распаковки параметр "root-dir=usb1/docker/xray", в этом случае контейнер распакуется самостоятельно создав каталог /usb1/docker/xray и запустится без проблем.
В RouterOS выполняем:
Подключем Docker HUB в наш RouterOS.
Создадим интерфейс для контейнера.
Добавим правило в mangle для изменения mss для трафика, уходящего в контейнер. Поместите его после правила с RFC1918 (его мы создали ранее).
Назначим на созданный интерфейс IP адрес. IP 172.18.20.6 возьмёт себе контейнер, а 172.18.20.5 будет адрес RouterOS.
В таблице маршрутизации "r_to_vpn" создадим маршрут по умолчанию ведущий на контейнер.
Включаем masquerade для всего трафика, уходящего в контейнер.
Создадим переменные окружения envs под названием "xvr", которые позже при запуске будем передавать в контейнер.
Чтобы получить ключи формата vless://, в нашем Telegram-боте перейдите в «🔑 Управление ключами», выберите ваш ключ, откройте «📘 Инструкции», перейдите в раздел «📡 Роутер» и нажмите «📇 Получить VLESS ключи».
Далее предстоит работа с ключом.
Размещаем данные параметры для передачи в контейнер:
Теперь создадим сам контейнер. Здесь вам нужно выбрать репозиторий из Docker Hub с архитектурой под ваше устройство.
Варианты:
catesin/xray-mikrotik-amd64
catesin/xray-mikrotik-arm
catesin/xray-mikrotik-arm64
Пример импорта контейнера в ramstorage (по факту в оперативную память) для arm64. Подставьте в remote-image нужный репозиторий и отредактируйте местоположение контейнера в root-dir при необходимости.
Подождите, пока контейнер полностью распакуется. В результате вы должны увидеть структуру с распакованным контейнером и окружением envs.
Если в процессе импорта возникают ошибки — внимательно изучите журнал логов в RouterOS.


Контейнер будет использовать только локальный DNS сервер на IP адресе 172.18.20.5. Необходимо разрешить DNS запросы TCP/UDP порт 53 на данный IP в правилах RouterOS в разделе /ip firewall filter
Запускаем контейнер через WinBox в разделе меню WinBox "container". В логах MikroTik вы увидите характерные сообщения о запуске контейнера.
Настройка завершена. Можно проверить доступность IP 8.8.8.8 из списка "to_vpn" (этот адрес добавлен ранее).
Last updated