Вместо предисловия

В этой статье я хочу рассказать об open-source плагине XRAYUI, который предназначен для управления xray-core на популярных роутерах ASUS.

Этот инструмент позволяет настраивать и управлять xray-core как в режиме клиента (подключая роутер и всю домашнюю сеть к внешнему xray-серверу), так и в режиме сервера. Причем это реализуется без сложностей с ручным редактированием конфигурационных файлов — все операции доступны через веб-интерфейс.

Что это такое и для чего это мне

По сути, XRAYUI — это аддон для роутеров, работающих на прошивках MerlinWRT, который значительно упрощает настройку, конфигурацию и управление xray-core. Вдаваться в подробности о том, что такое xray-core, я не стану — на эту тему уже написано множество статей на Хабре. Вместо этого, давайте сразу перейдем к рассмотрению возможностей аддона.

MerlinWRT — это не стоковая прошивка, а кастомная версия, основанная на оригинальной прошивке ASUS. Она добавляет множество полезных функций и расширяет возможности роутеров.

общий интерфейс плагина
общий интерфейс плагина

Как можно заметить, плагин предоставляет возможность визуально работать с конфигурацией xray-core. Можно добавлять inbounds, outbounds, настраивать правила маршрутизации, управлять встроенным DNS-сервером и многое другое.

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

Например, можно сразу сгенерировать ключи для REALITY или WireGuard, а также одним нажатием настроить SSL-сертификаты.

пример формы с генерацией ключей
пример формы с генерацией ключей

Правила маршрутизации визуально понятны. Возможно сортировать элементы:

список правил
список правил

Например, в режиме сервера аддон может сгенерировать для клиента QR-код для быстрого подключения в приложении клиента. Или же мониторить активные подключения.

Что нам понадобиться

Перед установкой, нам нужно убедиться в следующем:

  • наличие роутера, поддерживающего не официальную прошивку MerlinWRT (минимум версии 384.15 или 3006.102.1). Работоспособность аддона уже подтверждена на следующих моделях: RT-BE88U, RT-AX88U, RT-AX58U, RT-AX86U, GT-AX11000 Pro.

  • Установленный на борту менеджер пакетов Entware (легко ставится через amtm)

Устновка

В командной строке роутера выполняем следующую команду:

wget -O /tmp/asuswrt-merlin-xrayui.tar.gz https://github.com/DanielLavrushin/asuswrt-merlin-xrayui/releases/latest/download/asuswrt-merlin-xrayui.tar.gz && rm -rf /jffs/addons/xrayui && tar -xzf /tmp/asuswrt-merlin-xrayui.tar.gz -C /jffs/addons && mv /jffs/addons/xrayui/xrayui /jffs/scripts/xrayui && chmod 0777 /jffs/scripts/xrayui && sh /jffs/scripts/xrayui install

Дожидаемся завершения установки. После этого перезаходим в веб-интерфейс роутера (выполнив logout и снова login) и убеждаемся, что в разделе VPN появилась новая вкладка X-RAY.

закладка x-ray
закладка x-ray

Удалить аддон можно с помощью соотвествующей команды

/jffs/scripts/xrayui uninstall

Начнем работу

Кстати, если у вас уже имеется конфигурационный файл xray, то его можно смело положить в директорию /opt/etc/xray/config.json.Тогда, xrayui автоматически подгрузит его в свою форму.

Конечно, дальнейшая настройка зависит от того, как вы собираетесь использовать xray:

  • Серверный режим: в этом случае сторонние клиенты смогут подключаться к вашей сети.

  • Клиентский режим: здесь роутер подключается к внешнему xray-серверу. Вы можете настроить клиентский режим как DIRECT или через TPROXY (прозрачное проксирование) — xrayui автоматически добавит все необходимые правила маршрутизации роутера.

Мне кажется настроить xray в качестве сервера - очень простая задача. С клиентом же сложнее. Ниже я приведу небольшой пример настройки xray-core в режиме клиента с использованием VLESS + REALITY через xrayui.

Сразу же не забываем переключить xrayui в режим Client.

Client как есть
Client как есть

Настройки DNS сервера

Для начала настроим внутренний DNS-сервер.

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

раздел внутреннего сервера DNS
раздел внутреннего сервера DNS

Добавим сервер DNS (нажмем кнопку manage напротив Servers). Нам достаточно одной простой записи https+local://dns.google/dns-query.

добавляем DoH Google
добавляем DoH Google

Inbounds - входящий прокси

Поскольку мы настраиваем xray в режиме клиента, необходимо настроить механизм, который будет прослушивать входящий трафик. Xray-core поддерживает широкий спектр прокси-серверов, которые могут одновременно работать как для приема, так и для отправки трафика.

Для роутеров наиболее подходящим вариантом является прокси типа DOKODEMO-DOOR (он же Anywhere Door). Он позволяет эффективно перенаправлять весь трафик с указанного порта.

Добавим DOKODEMO-DOOR в качестве Inbound. Вы можете выбрать любой свободный порт, в данном примере используется порт 5599.

DOKODEMO-DOOR
DOKODEMO-DOOR

Также важно отметить галочку Follow Redirect. Сохраняем прокси.

Sniffing

Чтобы наши исходящие прокси могли точнее определять информацию о передаваемых пакетах, рекомендуется включить функцию Sniffing для нашего DOKODEMO-DOOR. Это позволит прокси анализировать заголовки пакетов и принимать решения на основе содержимого.

Для этого нажмите кнопку Sniffing, расположенную напротив вашего входящего прокси в интерфейсе xrayui.

Sniffing в Xray – это функция, которая позволяет анализировать содержимое сетевого трафика для определения доменов, которые использует клиент.
Sniffing в Xray – это функция, которая позволяет анализировать содержимое сетевого трафика для определения доменов, которые использует клиент.

Outbounds - исходящие прокси

Этот шаг критически важен для корректной маршрутизации трафика. Настройка исходящего трафика должна соответствовать параметрам входящего соединения на сервере Xray. В данном примере мы решили использовать надежную конфигурацию VLESS + REALITY.

FREEDOM Outbound - прокси прямого выхода

Первым делом добавим исходящий прокси с протоколом FREEDOM. Этот протокол используется для выхода в интернет напрямую, минуя дополнительные обработки. Дадим нашей прокси тэг direct.

настройки прокси FREEDOM
настройки прокси FREEDOM

VLESS + REALITY Outbound

Начиная с версии 0.27.0 появилась возможность импорта конфигурации с сервера X-ray. На данный момент это доступно только для протокола VLESS. Напротив опции создания новой прокси расположена кнопка для импорта конфигурации. Можно добавить как ссылку, так и QR-код. После добавления конфигурация отобразится в списке Outbounds. Таким образом, шаг с VLESS можно пропустить и перейти сразу к BLACKHOLE шагу.

Теперь добавим основной исходящий прокси с использованием VLESS + REALITY.

настройки прокси VLESS
настройки прокси VLESS

Не забываем указать сервер нашего xray и порт соотвественно.

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

Если у вас уже есть заранее созданный UUID на сервере, просто замените предложенный XRAYUI идентификатор своим.
Сохраняем VLESS.

Настройка транспорта и безопасности

Следующим шагом нажимаем на кнопку Transport, чтобы настроить параметры транспорта и безопасности для исходящего VLESS прокси.

Транспорт в Xray определяет способ передачи данных между клиентом и сервером. Он отвечает за базовую обработку сетевых соединений.

  • В разделе Network выбираем TCP как транспортный протокол.

  • В разделе Security выбираем REALITY.

окно Transport
окно Transport

Далее, из выпадающего списка выбираем REALITY и нажимаем кнопку Settings, чтобы задать дополнительные параметры.
Эти настройки необходимы для обеспечения безопасного и стабильного соединения. В интерфейсе XRAYUI заполним следующие поля:

  1. Server Name: Укажите имя сервера, например, dl.google.com. Это имя должно точно соответствовать значению, указанному в свойстве dest серверной конфигурации.

  2. Short ID: Укажите Short ID, который должен совпадать с параметром на стороне сервера. Этот идентификатор используется для согласования соединения.

  3. Public Key: Вставьте публичный ключ, предоставленный сервером. Этот ключ необходим для шифрования соединения.

  4. Fingerprint: Определите отпечаток (fingerprint) сообщения TLS Client Hello, который задает способ представления трафика для большей безопасности.

настройка REALITY
настройка REALITY

Убедитесь, что имя сервера (Server name) строго совпадает с указанным в свойстве dest конфигурации на стороне сервера. Неправильное значение может привести к проблемам с подключением.

BLACKHOLE Protocol

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

Прокси BLACKHOLE
Прокси BLACKHOLE

Routing - правила маршрутизации трафика

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

Очередность правил: порядок применения правил имеет решающее значение. Убедитесь, что более специфичные правила идут выше, а общие — ниже. Неправильный порядок может нарушить маршрутизацию.

секция управления правилами маршрутизации
секция управления правилами маршрутизации

Общие списки доменов и IP-адресов

Xray поддерживает использование готовых списков общих доменов и IP-адресов. Эти списки могут быть использованы через механизм geosite:token для маршрутизации или DNS-фильтрации. Они включают популярные домены и IP, позволяя быстро настроить маршрутизацию.

XRAYUI может сам закачать и установить списки сообщества. Рекомендую обращаться к данному списку , чтобы проверить, какие токены доступны на данное время. В секции Routing нажмите кнопку Update Metadata, чтобы скачать и обновить списки. После обновления вы сможете использовать эти списки в правилах маршрутизации.

раздел обновления списков сообщества
раздел обновления списков сообщества

Настройка правил

Конфигурация правил маршрутизации зависит от вашего сценария и того, как вы планируете управлять сетевым трафиком через роутер. Ниже я приведу два примера.

Сценарий 1: Перенаправление всего трафика на прокси

Мы просто перенаправим весь входящий трафик на сервер xray.

В секции Rules нажмем кнопку manage и далее add, чтобы добавить новое правило в список. Отметим все наши входящие прокси и зададим Friendly name, описав правило (например "весь трафик в прокси").

самое простое правило в мире
самое простое правило в мире

Сценарий 2: Прокси для YouTube-трафика

В этом сценарии трафик, связанный с YouTube, направляется через прокси, в то время как весь остальной трафик отправляется напрямую.

1: Создание правила для YouTube-трафика

  • Выбираем в качестве Outbound наш VLESS прокси (тэг proxy на картинке) .

  • В поле Domains прописываем geosite:youtube.

правило для доменов Youtube
правило для доменов Youtube

2: Создание правила для остального трафика

Хотя это правило не является обязательным, если ваш первый Outbound настроен как прямое соединение ( FREEDOM), его добавление повысит читаемость конфигурации и снизит вероятность ошибок. По сути повторяем правило из первого примера:

Остальной трафик маршрутизируется напрямую
Остальной трафик маршрутизируется напрямую
правила
правила

Вот и все! Нажимаем большую кнопку Apply, чтобы xrayui сохранил всю нашу форму в конфигурацию xray. После чего Нажимаем Reconnect в самом верху аддона, чтобы перезапустить xray сервис.

оно работает!
оно работает!

Если все правильно сделано, мы увидим соотвествующий статус, а наш роутер начнет перенаправлять трафик через xray. Проверяем наши устройства в сети на подключения.

Послесловие

Автором данного мануала и аддона XRAYUI являюсь я сам. Надеюсь, что это руководство оказалось для кого-то нужным и поможет лучше разобраться с настройкой и использованием xray на роутерах ASUS.

Если у вас есть вопросы или предложения по улучшению, буду рад выслушать и ответить. Хотя я старался сделать аддон максимально стабильным и удобным в использовании, допускаю, что в нем могут быть недоработки или баги. Надеюсь на ваше терпение и понимание, а также буду благодарен за обратную связь.

Комментарии (16)


  1. Denis1121
    21.01.2025 13:27

    Хм, забавно. Интересно, насколько сложно такое же организовать на роутерах MSI и/или TP-Link?


    1. Jholinar Автор
      21.01.2025 13:27

      Честно скажу, пока интегрировал это все в свой роутер, успел несколько раз одуреть. При всей моей любви к этим девайсам Asus, интеграция там в веб интерфейс - привет разработчикам из начала нулевых. Что-то мне подсказывает, что у остальных производителей дела с этим далеко не лучше, учитывая популярность Азуса.


  1. Ivan_V_V
    21.01.2025 13:27

    Только наверное следует упомянуть, что MerlinWRT это не стоковая прошивка, а кастомная на основе оригинала.


    1. Jholinar Автор
      21.01.2025 13:27

      Спасибо, обновил. Хотя подумал, это и так понятно :).


  1. XOR2048
    21.01.2025 13:27

    А будет ли в будущем введена возможность настройки при помощи URI (vless://, ss:// и подобных)?


    1. Jholinar Автор
      21.01.2025 13:27

      Она будет прям буквально сегодня :), почти закончил.


      1. XOR2048
        21.01.2025 13:27

        Просто фантастика!


        1. Jholinar Автор
          21.01.2025 13:27

          в 0.27 добавил возможность такую :).
          Кстати, внизу справа, он сам показывает обновления, и можно одним кликом накатить последнее. Я об этом не упоминал в статье.

          пример прочтения из QR кода
          пример прочтения из QR кода

          пока что работает только с VLESS протоколом. Позже накачу остальные.


    1. Jholinar Автор
      21.01.2025 13:27

      Тут еще затык, что эти урлы протоколов - абсолютный нестандарт. То есть буквально нет нигде описания по ним. Черт ногу сломит, найти по ним информацию.


  1. Serjio-IT
    21.01.2025 13:27

    А почему в списке для merlinWRT нет роутера AX4200 ?


    1. Jholinar Автор
      21.01.2025 13:27

      насколько я понимаю, прошивка Мерлина предназначена для моделей на базе Broadcom. AX4200 вроде как на MediaTek.


  1. Foxchasing
    21.01.2025 13:27

    Просто мысли вслух: Интересно, когда рунет окончательно ляжет, с ростом количества туннелей в нём, если туннели могут настроить даже домохозяйки...


    1. Denis1121
      21.01.2025 13:27

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

      Ну а в продолжение темы, не так уж и много людей могут всё это сделать. Просто то что вы читаете в комментарии в местах, где собрались какие-никакие специалисты, создаёт ощущение, что вокруг одни специалисты… но отнюдь, многие не то что не могут приложение на Android поставить, они вообще не совсем понимают что такое приложение. А, ну да, такие люди и не то что на хабре или 4пда не сидят, они на форуме садоводов то вряд-ли есть, у них есть реальные огроды, товарищи для поездок на шашлыки и т.д. Так вот, таких обычно выручает настройкой "шарящий" товарищ… но когда как, ведь не у всех такие товарищи имеются. И это в том числе приводит к тому, что люди вообще чуть ли ни сбербанк через сервера зарубежные гоняют.


      1. Jholinar Автор
        21.01.2025 13:27

        Ну трафик-то итак был бы международным, если только у конторы был свой cdn в РФ, который закрылся (на примере тытрубы). Так-то не думаю, что сильно нагрузка изменилась.


        А насчет сложности - мне кажется такие проекты как тот же xray, v2ray и проч, очень хорошо используются в качестве серверной части в каких-нибудь впн сервисах, которые в свою очередь просто продают впн-клиенты людям. Ну, то есть на их стороне крутится что-то подобное, что я сделал для Азуса, только в больших масштабах на серверной части, а они просто забацали клиент-приложение и продают подписку (аля какая-нибудь бумагаВПН). В таком случае-то и не нужны большие знания в линухе :).
        В случае с xrayui - тот же айтишник с прямыми руками может условно маме в квартире настроить роутер.


        1. Denis1121
          21.01.2025 13:27

          Логично. Возможно, и другие причины. Кстати, у меня оператор уже поднял ценники ещё раз, уже свыше 700₽ (это самый дешёвый тариф), хотя совсем недавно поднимал цены до около 600₽. А раньше долго по 500₽ платил и всё было шикарно, почти не дорожало. Что-то у них там внутри расходы растут, почему - непояно.

          Но тут не стоит исключать и другие факторы, не относящиеся к интернету, да. Поэтому первопричина может быть, действительно, любой.


  1. Cancer
    21.01.2025 13:27

    А работают звонки через Whatsapp или Телеграм?