Контейнер MikroTik VLESS: настройка прокси-туннеля через Xray и Tun2Socks

Подробное руководство по запуску VLESS на MikroTik через контейнеры: требования к железу, активация Container, настройка Xray и Tun2Socks, маршрутизация трафика и решение типичных проблем.

Зачем поднимать VLESS на MikroTik через контейнеры

VLESS — современный прокси-протокол, который часто используется для обхода блокировок и защиты трафика. В отличие от классических VPN (OpenVPN, WireGuard), VLESS с маскировкой Reality практически невидим для систем глубокого анализа трафика (DPI), что делает его популярным выбором в странах с жёсткой интернет-цензурой.

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

Однако нативная поддержка VLESS в RouterOS отсутствует — в меню Interfaces нет соответствующего пункта. Поэтому используется контейнеризация: на роутер устанавливаются лёгкие Linux-контейнеры с Xray-core (клиент VLESS) и Tun2Socks (преобразование SOCKS5 в TUN-интерфейс). Такая схема позволяет задействовать мощь экосистемы Linux, сохраняя при этом привычный интерфейс управления MikroTik.

Требования к оборудованию и RouterOS

Прежде чем приступать к настройке, важно убедиться, что ваше устройство соответствует минимальным требованиям. Контейнеры в RouterOS доступны только на моделях с архитектурой ARM, ARM64 или x86. Бюджетные модели, такие как hAP lite (MIPSBE), не поддерживают контейнеры — об этом прямо предупреждают пользователи на форумах.

Для комфортной работы с контейнерами рекомендуется использовать MikroTik hAP ax3 или более новые модели линейки L009, RB5001. Устройства вроде hAP ac2 имеют ограниченный объём встроенной флеш-памяти, и активное использование контейнеров может привести к её быстрому износу. Опытные пользователи советуют обязательно использовать внешний USB-накопитель для хранения образов и данных контейнеров — это продлевает срок службы роутера и упрощает резервное копирование.

Также потребуется актуальная версия RouterOS 7.x (желательно 7.15 и выше), где исправлены многие ошибки, связанные с контейнерами и маршрутизацией. Перед началом работы проверьте наличие свободного места на диске и убедитесь, что USB-флешка отформатирована в поддерживаемую файловую систему (обычно ext4 или FAT32).

Активация режима Container и подготовка сети

Первым шагом необходимо включить поддержку контейнеров в RouterOS. Для этого в терминале выполните команду:

/system/device-mode/update container=yes

После этого потребуется физическое подтверждение: выключите роутер, зажмите кнопку Reset (или Mode), включите питание и отпустите кнопку, когда начнёт мигать светодиод. После перезагрузки в меню появится раздел Container.

Далее нужно создать сетевую инфраструктуру для контейнеров. Обычно используется отдельный мост (bridge) и виртуальные интерфейсы veth для каждого контейнера. Пример базовой конфигурации:

/interface bridge add name=Dockers port-cost-mode=short
/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
/ip address add address=10.6.0.1/24 interface=Dockers network=10.6.0.0

В этой схеме мост Dockers получает адрес 10.6.0.1, а контейнеры — адреса 10.6.0.2, 10.6.0.3 и 10.6.0.4. Важно, чтобы адреса не конфликтовали с основной локальной сетью. Также необходимо настроить DHCP-сервер для клиентов, указав в качестве DNS-сервера адрес контейнера с AdGuard Home (если он используется).

Установка и настройка контейнера Xray-core

Xray-core — это основной компонент, который устанавливает соединение с VLESS-сервером. Для его запуска на MikroTik используется готовый Docker-образ, например teddysun/xray. После создания контейнера необходимо отредактировать файл config.json, в котором указываются параметры подключения: адрес сервера, порт, UUID, SNI и ShortID (для Reality).

Типичный процесс выглядит так:

  1. Скачайте образ и создайте контейнер с привязкой к интерфейсу VETH2-xray.
  2. Запустите контейнер, затем остановите его.
  3. Через файловую систему RouterOS (раздел Files) отредактируйте config.json в корневом каталоге контейнера.
  4. Укажите в конфиге параметры вашего VLESS-сервера, включая fingerprint: "chrome" для маскировки под обычный HTTPS-трафик.
  5. Перезапустите контейнер.

Важно, чтобы контейнер Xray-core имел доступ к DNS-серверу (например, 10.6.0.2, если используется AdGuard Home). После запуска проверьте, что Xray успешно подключается к серверу — обычно это видно в логах контейнера. Если соединение не устанавливается, проверьте правильность UUID, адреса и порта, а также убедитесь, что на сервере (например, 3X-UI) разрешено подключение с вашего IP.

Настройка Tun2Socks для преобразования SOCKS5 в TUN

Tun2Socks — это утилита, которая создаёт виртуальный TUN-интерфейс и перенаправляет весь трафик через SOCKS5-прокси. В связке с Xray-core она позволяет направить трафик с локальных устройств в VLESS-туннель.

После установки контейнера Tun2Socks (например, из образа xjasonlyu/tun2socks) необходимо отредактировать файл entrypoint.sh. Базовый вариант скрипта выглядит так:

#!/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. Важно, чтобы адрес шлюза в контейнере совпадал с адресом моста Dockers (10.6.0.1).

Некоторые пользователи сталкиваются с проблемой, когда Tun2Socks перестаёт работать после перезагрузки. Решение — добавить в скрипт команды для перезапуска сетевых интерфейсов:

sleep 2
ifconfig eth0 down
sleep 2
ifconfig eth0 up
ip tuntap add mode tun dev tun0
ip addr add 198.18.0.1/15 dev tun0
ip link set dev tun0 up
sleep 2
ifconfig tun0 down
sleep 2
ifconfig 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

Этот вариант помогает стабилизировать работу контейнера после перезагрузок.

Маршрутизация трафика: Mangle, Routing Tables и NAT

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

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

/routing table add disabled=no fib name=proxy_mark

Затем добавьте правило Mangle, которое помечает трафик, предназначенный для прокси. Например, можно использовать список адресов route_proxy:

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

После этого добавьте маршрут по умолчанию в таблицу proxy_mark, указывая на адрес Tun2Socks (10.6.0.4):

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

Также необходимо настроить NAT, чтобы пакеты из контейнеров корректно выходили в интернет:

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

Важно помнить, что трафик, помеченный для прокси, исключается из FastTrack (аппаратного ускорения), что увеличивает нагрузку на CPU. Поэтому рекомендуется направлять через VLESS только необходимые сайты или устройства, а не весь трафик.

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

При настройке контейнеров VLESS на MikroTik пользователи часто сталкиваются с рядом проблем. Одна из самых распространённых — контейнер Xray-core запускается и сразу останавливается. Обычно это связано с ошибками в файле config.json — проверьте синтаксис JSON и правильность всех параметров.

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

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

Ещё одна проблема — низкая скорость соединения. VLESS требует достаточной мощности CPU, поэтому на слабых устройствах (например, старых моделях MIPSBE) скорость может быть значительно ниже. В таких случаях рекомендуется использовать более производительное оборудование или ограничить список сайтов, идущих через прокси.

Оптимизация и безопасность: DNS, Kill Switch и FastTrack

Для повышения безопасности и скорости работы VLESS-туннеля на MikroTik стоит обратить внимание на несколько аспектов.

DNS. Настройте DNS-сервер на роутере с использованием DoH (DNS over HTTPS), чтобы провайдер не видел ваши запросы. Например, можно указать use-doh-server=https://cloudflare-dns.com/dns-query и серверы 1.1.1.1. Это предотвратит утечку DNS-запросов и повысит конфиденциальность.

Kill Switch. Создайте правило в Firewall, которое блокирует выход в интернет для определённых устройств, если контейнер с VLESS остановился. Это исключит утечку реального IP-адреса. Например:

/ip firewall filter add action=drop chain=forward src-address=10.10.12.52 out-interface=WAN

FastTrack. Трафик, идущий через Mangle для VPN, исключается из FastTrack, что увеличивает нагрузку на CPU. Чтобы минимизировать влияние, старайтесь направлять через прокси только необходимый трафик, а не весь. Также можно использовать аппаратное ускорение для остального трафика.

Обновления. Регулярно обновляйте RouterOS и образы контейнеров. Новые версии часто содержат исправления уязвимостей и улучшения производительности.

Альтернативные подходы: OpenWRT и нативные реализации

Хотя контейнеры на MikroTik — рабочий способ, некоторые пользователи считают его избыточным. Альтернативой является использование роутеров на OpenWRT, где VLESS можно запустить непосредственно на железе без контейнеров. OpenWRT — это полноценная Linux-система, и установка Xray или Sing-box там проще и эффективнее.

Например, бюджетные роутеры на чипсете AX3000 (Netis, Routerich, Cudy) поддерживают OpenWRT и стоят около 5 тысяч рублей. Они позволяют запустить VLESS с меньшими накладными расходами, чем MikroTik с контейнерами. Однако MikroTik выигрывает в гибкости настройки сети и стабильности, а также имеет удобный интерфейс WinBox.

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

В любом случае, выбор зависит от ваших задач и бюджета. Если вам нужна максимальная производительность и простота — OpenWRT. Если вы цените надёжность и гибкость MikroTik — контейнеры станут хорошим решением.

Пошаговый чек-лист для запуска VLESS на MikroTik

Чтобы систематизировать процесс, вот краткий чек-лист, основанный на опыте пользователей:

  1. Проверьте совместимость: убедитесь, что ваша модель MikroTik поддерживает контейнеры (ARM/ARM64/x86) и у вас есть USB-накопитель.
  2. Обновите RouterOS до версии 7.15 или выше.
  3. Активируйте Container через /system/device-mode/update container=yes и перезагрузите роутер с зажатой кнопкой Reset.
  4. Создайте мост и veth-интерфейсы для контейнеров.
  5. Установите контейнер AdGuard Home (опционально) для DNS-фильтрации.
  6. Установите контейнер Xray-core, отредактируйте config.json с параметрами VLESS-сервера.
  7. Установите контейнер Tun2Socks, отредактируйте entrypoint.sh.
  8. Настройте маршрутизацию: создайте таблицу proxy_mark, правило Mangle и маршрут.
  9. Настройте NAT для контейнеров и локальной сети.
  10. Проверьте работу: с устройства из локальной сети зайдите на сайт, который должен идти через прокси, и убедитесь, что IP-адрес соответствует серверу.

Если что-то не работает, проверьте логи контейнеров и правила файрвола. Не забывайте, что контейнеры могут требовать перезапуска после изменения конфигурации.

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

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

Контейнеры доступны на устройствах с архитектурой ARM, ARM64 или x86. Бюджетные модели, такие как hAP lite (MIPSBE), не поддерживают контейнеры. Рекомендуются hAP ax3, L009, RB5001 и другие современные модели. Для хранения образов обязательно используйте USB-накопитель, чтобы не изнашивать встроенную флеш-память.

Можно ли запустить VLESS на MikroTik без контейнеров?

Нативной поддержки VLESS в RouterOS нет, поэтому контейнеры — основной способ. Альтернативой является использование роутера на OpenWRT, где VLESS можно запустить напрямую. Также можно использовать WireGuard, который поддерживается нативно, но он менее эффективен против DPI.

Почему контейнер Xray-core останавливается сразу после запуска?

Чаще всего это связано с ошибками в файле config.json: неправильный синтаксис JSON, неверный UUID, адрес сервера или порт. Проверьте все параметры, а также убедитесь, что контейнер имеет доступ к DNS-серверу. Иногда помогает перезапуск контейнера после редактирования конфига.

Как направить трафик только с определённых устройств через VLESS?

Используйте правило Mangle с указанием src-address конкретного устройства. Например: /ip firewall mangle add action=mark-routing chain=prerouting src-address=10.10.12.52 new-routing-mark=proxy_mark passthrough=yes. Затем добавьте маршрут в таблицу proxy_mark. Таким образом, только трафик с этого устройства пойдёт через туннель.

Что делать, если после перезагрузки роутера Tun2Socks перестаёт работать?

Проблема часто решается добавлением в entrypoint.sh команд для перезапуска сетевых интерфейсов: ifconfig eth0 down, sleep 2, ifconfig eth0 up, а также аналогично для tun0. Это помогает стабилизировать работу контейнера после перезагрузки.

Влияет ли VLESS на скорость интернета на MikroTik?

Да, VLESS требует шифрования и инкапсуляции, что нагружает CPU. На слабых устройствах скорость может быть ниже. Рекомендуется использовать производительные модели (hAP ax3, L009) и направлять через прокси только необходимый трафик, чтобы снизить нагрузку.

Как обновить контейнер с Xray-core на MikroTik?

Обновите версию образа в настройках контейнера и перезапустите его. Все настройки сохранятся в примонтированном файле config.json. Обратите внимание, что новые версии Xray-core могут требовать изменения структуры конфига, поэтому проверяйте совместимость.