MikroTik и 3X-UI: настройка VPN через VLESS, контейнеры и двойное туннелирование

Подробное руководство по подключению MikroTik к VPN-серверу 3X-UI: протоколы VLESS и WireGuard, контейнеры Xray и Tun2Socks, маршрутизация трафика, обход блокировок и решение типичных проблем.

Зачем нужна связка MikroTik и 3X-UI

MikroTik — это популярные маршрутизаторы и программные решения RouterOS, которые широко используются в домашних и корпоративных сетях. Однако встроенные возможности RouterOS для организации VPN-подключений ограничены: поддерживаются WireGuard, OpenVPN, SSTP и другие протоколы, но не современные прокси-протоколы вроде VLESS, VMess или Trojan. Эти протоколы часто применяются для обхода блокировок и обеспечения конфиденциальности, так как они маскируют трафик под обычный HTTPS и устойчивы к глубокой инспекции пакетов (DPI).

3X-UI — это веб-панель с открытым исходным кодом для управления Xray-core, которая позволяет разворачивать и администрировать VPN-серверы с поддержкой множества протоколов, включая VLESS, VMess, Shadowsocks, Trojan и WireGuard. Панель предоставляет удобный графический интерфейс для создания подключений, управления пользователями, квотами и статистикой, а также поддерживает автоматическую выдачу SSL-сертификатов.

Связка MikroTik и 3X-UI позволяет использовать мощный роутер для маршрутизации всего трафика локальной сети через защищённый туннель, при этом управление сервером остаётся простым и наглядным. Это особенно актуально для пользователей в России, где доступ к некоторым ресурсам ограничен, и для тех, кто хочет обеспечить безопасность в публичных сетях.

Обзор протоколов: VLESS, Reality, WireGuard и их особенности

VLESS — это лёгкий прокси-протокол, разработанный как альтернатива VMess. Он не имеет встроенного шифрования, полагаясь на внешний транспорт (например, TLS), что снижает накладные расходы и улучшает производительность. VLESS часто используется в паре с Reality — технологией, которая маскирует трафик под соединение с реальным веб-сайтом, используя его TLS-сертификат. Это делает VLESS+Reality одним из самых эффективных способов обхода DPI.

WireGuard — это современный VPN-протокол с открытым исходным кодом, известный своей простотой, высокой скоростью и криптографической стойкостью. Он встроен в ядро Linux и поддерживается RouterOS начиная с версии 7. WireGuard использует шифрование ChaCha20 и Poly1305, работает поверх UDP и требует минимальной настройки.

В контексте MikroTik и 3X-UI часто используется комбинация: MikroTik подключается к промежуточному серверу по WireGuard, а тот, в свою очередь, через VLESS к конечному серверу. Это называется двойным туннелированием (Double VPN) и обеспечивает дополнительный уровень анонимности и устойчивости к блокировкам. Однако RouterOS не поддерживает VLESS напрямую, поэтому для его использования приходится прибегать к контейнерам или внешним устройствам.

Подготовка серверов: установка 3X-UI и базовые настройки

Для работы с 3X-UI потребуется как минимум один VPS-сервер (виртуальный выделенный сервер) с операционной системой Linux (обычно Ubuntu или Debian). В случае двойного туннелирования понадобятся два сервера: промежуточный и конечный. На обоих серверах необходимо установить Docker и 3X-UI.

Установка Docker выполняется стандартной командой:

bash <(curl -sSL https://get.docker.com)

Затем клонируется репозиторий 3X-UI и запускается контейнер:

git clone https://github.com/MHSanaei/3x-ui.git
cd 3x-ui
docker compose up -d

После запуска панель будет доступна по IP-адресу сервера на порту 2053 (по умолчанию). При первом входе используются логин admin и пароль admin. Настоятельно рекомендуется сразу сменить учётные данные в разделе «Настройки безопасности», а также изменить стандартный адрес панели и страницы подписок, чтобы затруднить несанкционированный доступ.

Для защиты панели по HTTPS можно использовать домен, управляемый Cloudflare, и обратный прокси-сервер Caddy. Это позволит получить бесплатный SSL-сертификат и скрыть реальный IP-адрес панели. Альтернативный способ — использовать Certbot с плагином Cloudflare DNS для выпуска сертификатов.

Настройка промежуточного сервера: WireGuard и маршрутизация

Промежуточный сервер в схеме двойного туннелирования принимает подключение от MikroTik по протоколу WireGuard и перенаправляет трафик на конечный сервер через VLESS. Для этого на промежуточном сервере в панели 3X-UI создаётся входящее подключение (Inbound) типа WireGuard.

При создании подключения важно включить опцию Sniffing — она позволяет анализировать трафик и корректно маршрутизировать его на основе доменных имён. После создания подключения в разделе «Информация» будет доступен готовый файл конфигурации WireGuard, который можно скачать и использовать на MikroTik.

Далее на промежуточном сервере необходимо настроить исходящее подключение (Outbound) к конечному серверу. Для этого в разделе «Настройки Xray» → «Исходящие» добавляется новый Outbound, в поле Link вставляется ссылка на подключение VLESS с конечного сервера (её можно получить, отсканировав QR-код в панели конечного сервера). Панель автоматически конвертирует ссылку в JSON-конфигурацию.

После создания Outbound нужно добавить правило маршрутизации: в разделе «Правила Маршрутизации» выбирается Inbound (WireGuard) и Outbound (VLESS), чтобы весь трафик, поступающий через WireGuard, направлялся на конечный сервер. Затем сохраняются настройки и перезапускается Xray.

Настройка конечного сервера: VLESS+Reality и выбор сайта для маскировки

Конечный сервер — это точка выхода в интернет. На нём создаётся входящее подключение по протоколу VLESS с транспортом Reality. Для этого в панели 3X-UI выбирается протокол VLESS, указывается порт (например, 8443) и нажимается кнопка «Get New Cert» для автоматической генерации ключей Reality.

Ключевой момент — выбор сайта для маскировки (target). Это должен быть зарубежный ресурс, который:

  • поддерживает TLSv1.3 и HTTP/2;
  • использует алгоритм подписи X25519;
  • не использует CDN (чтобы трафик не уходил на узлы CDN);
  • имеет главную страницу без редиректов на другие домены.

Для поиска подходящего сайта можно использовать инструмент RealiTLScanner, который сканирует IP-адреса и определяет поддерживаемые протоколы. Рекомендуется выбирать сайт, IP-адрес которого находится в том же диапазоне, что и ваш сервер, и который поддерживает OCSP. По умолчанию в панели предлагается yahoo.com, но это не лучший вариант из-за его популярности и возможных проблем с DPI.

После создания подключения на конечном сервере нужно скопировать ссылку на подключение (через QR-код) и использовать её при настройке Outbound на промежуточном сервере, как описано выше.

Подключение MikroTik к WireGuard: пошаговая инструкция

MikroTik подключается к промежуточному серверу по WireGuard. Для этого в RouterOS необходимо создать интерфейс WireGuard, указать MTU (обычно 1420), порт и приватный ключ. Публичный ключ генерируется автоматически.

Затем создаётся пир (peer) с параметрами:

  • адрес и порт промежуточного сервера;
  • разрешённые адреса (allowed addresses) — обычно 0.0.0.0/0, если планируется маршрутизировать весь трафик;
  • публичный ключ пира (сервера);
  • общий ключ (preshared key), если он используется.

Пример команд для RouterOS:

/interface wireguard add name=wg1 mtu=1420 private-key="..."
/interface wireguard peers add interface=wg1 public-key="..." allowed-address=0.0.0.0/0 endpoint-address=1.2.3.4 endpoint-port=51820
/ip address add address=10.0.0.2/24 interface=wg1
/ip route add dst-address=0.0.0.0/0 gateway=wg1

После настройки WireGuard можно проверить подключение, пингуя адрес промежуточного сервера. Если всё работает, трафик с MikroTik будет уходить через туннель. Однако для использования VLESS потребуется дополнительная настройка контейнеров, так как RouterOS не поддерживает этот протокол нативно.

Контейнеры на MikroTik: Xray-core и Tun2Socks для VLESS

Начиная с RouterOS 7.4, MikroTik поддерживает запуск контейнеров Docker на некоторых моделях (например, hAP ax3, hAP ax2, CCR2004 и другие). Это позволяет запускать внутри роутера дополнительные сервисы, такие как Xray-core (клиент VLESS) и Tun2Socks (преобразование SOCKS-прокси в TUN-интерфейс).

Для работы контейнеров необходимо:

  • подключить USB-накопитель или использовать встроенную память;
  • включить поддержку контейнеров в RouterOS;
  • создать виртуальные интерфейсы veth и мост (bridge) для изоляции контейнеров.

Пример настройки моста и veth:

/interface bridge add name=Dockers
/interface veth add address=10.6.0.2/24 gateway=10.6.0.1 name=VETH1-adguard
/interface veth add address=10.6.0.3/24 gateway=10.6.0.1 name=VETH2-xray
/interface veth add address=10.6.0.4/24 gateway=10.6.0.1 name=VETH3-tun
/interface bridge port add bridge=Dockers interface=VETH1-adguard
/interface bridge port add bridge=Dockers interface=VETH2-xray
/interface bridge port add bridge=Dockers interface=VETH3-tun

Затем добавляются сами контейнеры. Для Xray-core нужно указать root-dir (каталог на USB-накопителе), интерфейс VETH2-xray и DNS-сервер (например, 10.6.0.2, если используется AdGuard Home). После первого запуска контейнер останавливается, и в файл config.json вносятся настройки подключения к VLESS-серверу (адрес, порт, UUID, ключи Reality).

Tun2Socks — это утилита, которая создаёт виртуальный TUN-интерфейс и перенаправляет в него трафик, преобразуя его в SOCKS5-запросы к прокси. В контейнере Tun2Socks необходимо отредактировать entrypoint.sh, чтобы настроить IP-адреса и маршруты. Пример рабочего скрипта:

#!/bin/sh
ip tuntap add mode tun dev tun0
ip addr add 198.18.0.1/15 dev tun0
ip link set dev tun0 up
ip route del default
ip route add default via 198.18.0.1 dev tun0 metric 1
ip route add default via 10.6.0.1 dev eth0 metric 10
tun2socks -device tun0 -proxy socks5://10.6.0.3:30804 -interface eth0

Здесь 10.6.0.3 — адрес контейнера Xray-core, а порт 30804 — порт SOCKS5-прокси, который слушает Xray.

Маршрутизация трафика через контейнеры: mangle, policy routing и NAT

Чтобы направить трафик с локальных устройств через VLESS-туннель, необходимо настроить маршрутизацию на MikroTik. Основная идея — пометить пакеты, которые должны идти через прокси, и создать отдельную таблицу маршрутизации.

Сначала создаётся таблица маршрутизации:

/routing table add name=proxy_mark fib

Затем добавляется маршрут по умолчанию в эту таблицу, указывающий на TUN-интерфейс контейнера Tun2Socks (например, 10.6.0.4):

/ip route add dst-address=0.0.0.0/0 gateway=10.6.0.4 routing-table=proxy_mark

Далее в firewall mangle добавляется правило, которое помечает пакеты, предназначенные для прокси. Например, можно использовать список адресов (address-list) route_proxy, в который добавляются нужные IP или домены:

/ip firewall mangle add chain=prerouting dst-address-list=route_proxy action=mark-routing new-routing-mark=proxy_mark passthrough=yes

Также необходимо настроить NAT для контейнеров и для локальной сети:

/ip firewall nat add chain=srcnat out-interface=Dockers src-address=10.6.0.0/24 action=masquerade
/ip firewall nat add chain=srcnat out-interface=WAN src-address=10.10.12.0/24 action=masquerade

Важно добавить правило для изменения MSS (clamp-to-pmtu), чтобы избежать проблем с фрагментацией пакетов:

/ip firewall mangle add chain=forward protocol=tcp tcp-flags=syn action=change-mss new-mss=clamp-to-pmtu out-interface=Dockers

После настройки маршрутизации трафик с устройств, чьи адреса попадают в список route_proxy, будет направляться через контейнер Tun2Socks, который передаёт его в Xray, а тот — на VLESS-сервер.

Типичные проблемы и их решение

При настройке связки MikroTik и 3X-UI пользователи часто сталкиваются с рядом проблем. Одна из самых распространённых — контейнер Tun2Socks не работает после перезагрузки или обновления. Это может быть связано с изменением сетевых интерфейсов внутри контейнера. Решение — добавить в entrypoint.sh команды для перезапуска интерфейсов:

sleep 2
ifconfig eth0 down
sleep 2
ifconfig eth0 up

Другая проблема — трафик не проходит через туннель, хотя контейнеры работают. Причиной может быть неправильная маршрутизация: пакеты не попадают в таблицу proxy_mark или маршрут по умолчанию в контейнере Tun2Socks настроен неверно. Проверьте, что в контейнере есть маршрут через TUN-интерфейс и что правило mangle действительно срабатывает (можно временно добавить логирование).

Также часто возникает проблема с DNS: если DNS-запросы не перенаправляются на AdGuard Home или другой локальный DNS, то разрешение имён может идти через туннель, что замедляет работу. Настройте перенаправление DNS-запросов с помощью dst-nat на порт 53.

Если контейнер Xray-core останавливается после запуска, проверьте правильность config.json: убедитесь, что указаны корректные адрес сервера, порт, UUID и ключи Reality. Также проверьте, что контейнер имеет доступ к DNS (укажите DNS-сервер при создании контейнера).

Дополнительные возможности: маршрутизация по geosite и geoip, WARP

3X-UI позволяет гибко настраивать маршрутизацию трафика на основе геоданных. Например, можно направить трафик на российские ресурсы напрямую (минуя VPN), а зарубежный — через туннель. Для этого в настройках Xray добавляются правила:

{
  "type": "field",
  "outboundTag": "direct",
  "ip": ["geoip:ru"]
},
{
  "type": "field",
  "outboundTag": "direct",
  "domain": ["geosite:category-gov-ru", "regexp:.*\\.ru$"]
}

Эти правила помещают в outboundTag direct (прямое подключение) все IP-адреса из geoip:ru и домены, заканчивающиеся на .ru, а также государственные сайты. Остальной трафик будет идти через выбранный Outbound (например, VLESS).

Также 3X-UI поддерживает интеграцию с Cloudflare WARP — это позволяет дополнительно шифровать трафик и обходить блокировки. В панели можно настроить маршрутизацию определённых сервисов (Google, Netflix, Spotify, OpenAI) через WARP, оставляя остальной трафик на основном канале.

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

Вопросы и ответы

Можно ли использовать MikroTik без контейнеров для подключения к 3X-UI?

Да, если использовать протокол WireGuard, который поддерживается RouterOS нативно. Для этого на промежуточном сервере создаётся Inbound WireGuard, а на MikroTik настраивается интерфейс WireGuard и пир. Однако для VLESS, VMess или Trojan потребуются контейнеры, так как RouterOS не поддерживает эти протоколы напрямую.

Какие модели MikroTik поддерживают контейнеры?

Поддержка контейнеров появилась в RouterOS 7.4 и доступна на устройствах с архитектурой ARM64 и x86, например, hAP ax2, hAP ax3, CCR2004, RB4011 и некоторых других. Точный список моделей можно найти в официальной документации MikroTik. Для хранения образов и данных рекомендуется использовать USB-накопитель.

Что делать, если контейнер Tun2Socks перестал работать после обновления?

Часто проблема связана с изменением сетевых интерфейсов внутри контейнера. Попробуйте добавить в entrypoint.sh команды для перезапуска интерфейсов: ifconfig eth0 down, затем ifconfig eth0 up, а также для TUN-интерфейса. Также проверьте, что маршруты по умолчанию настроены правильно, и что tun2socks запускается с корректными параметрами.

Как выбрать сайт для маскировки Reality?

Сайт должен поддерживать TLSv1.3, HTTP/2 и алгоритм X25519, не использовать CDN и не иметь редиректов на другие домены. Желательно, чтобы IP-адрес сайта находился в том же диапазоне, что и ваш сервер. Для поиска можно использовать инструмент RealiTLScanner, который сканирует IP-адреса и проверяет их характеристики.

Можно ли настроить разделение трафика: российские сайты напрямую, зарубежные через VPN?

Да, в 3X-UI можно настроить маршрутизацию по geosite и geoip. Добавьте правила, которые направляют трафик на российские IP и домены (geoip:ru, geosite:category-gov-ru, regexp:.*\\.ru$) в outboundTag direct, а остальной трафик — через VPN. Это позволит сохранить высокую скорость доступа к локальным ресурсам.

Какие порты нужно открыть на сервере для работы 3X-UI?

Для панели 3X-UI по умолчанию используется порт 2053 (веб-интерфейс). Для VPN-подключений порты зависят от настроек Inbound: например, для VLESS+Reality обычно используется порт 8443, для WireGuard — 51820 (UDP). Убедитесь, что эти порты открыты в файрволе сервера и не блокируются провайдером.