Зачем нужна связка 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). Убедитесь, что эти порты открыты в файрволе сервера и не блокируются провайдером.