По многочисленным просьбам, настало время статьи про настройку XRay на OpenWRT.
Про XRay я рассказывал в статьях Современные технологии обхода блокировок: V2Ray, XRay, XTLS, Hysteria, Cloak и все-все-все, Bleeding-edge обход блокировок с полной маскировкой: настраиваем сервер и клиент XRay с XTLS-Reality быстро и просто и других из той же серии.

Про настройку этого дела под OpenWRT уже недавно рассказывал @Andrevich в своей отличной статье Обход блокировок на OpenWRT с помощью Passwall (v2ray, xray, trojan) и tun2socks. Там описывалась настройка на базе Passwall, приведены подробные инструкции по сборке прошивки (если не хватит памяти в ФС роутера) и настройки до мельчайших деталей. Я рекомендую ознакомиться сначала с той статьей, и вообще попробовать настраивать именно по ней, потому что там описывается стандартное и надежное решение.

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

Мы будем устанавливать на роутер классический XRay и набор скриптов с вебмордой для них под названием Luci-app-xray.

Поехали.

Дано: у вас есть роутер, и на нем есть свободное место в файловой системе. У меня установка (без учета geoip.dat и geosites.dat) заняла 23 мегабайта.

Если у вас места меньше - можете воспользоваться советами по пересборке прошивки из уже упомянутой статьи.

Проверить свободное место можно в интерфейсе OpenWRT на вкладке Software:

Там же можно нажать "Update lists" чтобы обновить списки пакетов для пакетного менеджера - операция должна завершиться без ошибок. Либо, если вам больше по душе консоль (а дальнейшие операции мы будем делать именно в консоли), подключиться к роутеру по ssh с именем пользователя root и выполнив команду

opkg update

Все готово, начинаем.

Идем на https://github.com/yichya/luci-app-xray/releases и скачиваем последний релиз Luci-app-xray, а именно два файла:

wget https://github.com/yichya/luci-app-xray/releases/download/v2.1.2/luci-app-xray-fw4_2.1.2-1_all.ipk -O luci-app-xray-fw4_2.1.2-1_all.ipk
wget https://github.com/yichya/luci-app-xray/releases/download/v2.1.2/luci-app-xray-shared_2.1.2-1_all.ipk -O luci-app-xray-shared_2.1.2-1_all.ipk

Если качать wget'ом с Github'а, то нередко файлы сохраняются с каким-то неприличным именем, поэтому я использовал опцию -O чтобы явно указать, под каким именем нужно их сохранять.

Один файл содержит непосредственно скрипты и интерфейс Luci-app-xray, а второй не содержит почти ничего, кроме указанной зависимости от пакета xray-core.

Устанавливаем сначала shared-файл, потом устанавливаем второй файл.

opkg install ./luci-app-xray-shared_2.1.2-1_all.ipk
opkg install ./luci-app-xray-fw4_2.1.2-1_all.ipk

Иногда opkg может ругнуться на нехватку каких-либо еще зависимостей (то ли авторы забыли добавить их в список, то ли это зависит от дефолтной сборки прошивки конкретного роутера), доустанавливаем их вручную. В моем случае это был kmod-nft-tproxy:

opkg install kmod-nft-tproxy

Удаляем скачанные файлы, чтобы они не занимали драгоценное место на флешке, оно нам еще пригодится:

rm ./luci-app-xray-shared_2.1.2-1_all.ipk
rm ./luci-app-xray-fw4_2.1.2-1_all.ipk

Перезапускаем роутер, и в веб-интерфейсе видим, что у нас появилась новая вкладка с настройками и состоянием XRay:

Xray is running - уже хорошо, но сразу же рядом мы видем предупреждение, что отсутствуют файлы geoip.dat и geosite.dat (список IP-адресов по странам и список адресов сайтов по группам для настроек правил маршрутизации), и без них XRay может работать некорректно.

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

Итак, где же взять эти недостающие файлы?

Вариант раз, "всё как у людей".

Идем на https://github.com/XTLS/Xray-core/releases, скачиваем свежий XRay для десктопа (например версию linux-64, на самом деле не важно), достаем из архива geoip.dat и geosite.dat, и закидываем на роутер по SCP в нужное место:

scp ./geoip.dat root@192.168.1.1:/usr/share/
scp ./geosite.dat root@192.168.1.1:/usr/share/

Такая связка займет 10+1.5 мегабайт.

Альтернатива, примерно с тем же содержимым:

GeoIP устанавливаем из репозитория OpenWRT, получая сразу самую новую версию, а Geosite - из репозитория https://github.com/v2fly/domain-list-community. Скачанный dlc.dat-файл нужно переименовать в geosite.dat и положить в роутер в /usr/share/geosite.dat:

opkg install xray-geodata
wget https://github.com/v2fly/domain-list-community/releases/download/20230825070717/dlc.dat -O /usr/share/geosite.dat

Вариант два, экономный.

Для тех, кто не может себе позволить занять десяток мегабайт флеша, тоже не все потеряно. Идем на https://github.com/v2fly/geoip и качаем оттуда private.dat, который занимает всего 248 байт, и по факту не содержит никаких GeoIP-записей кроме "локальные адреса" (естественно, GeoIP-маршрутизации у вас тогда уже не будет). Кладем в /usr/share/ под именем geoip.dat

С Geosite сложнее, но в уже упомянутой репе https://github.com/v2fly/domain-list-community есть инструкция по сборке geosite.dat самостоятельно - можно удалить из папки "data" все содержимое кроме чего-то одного, например, "category-gov-ru" или "category-gov-ru" c "category-ads", и собрать себе крохотный geosite.dat-файл. Если кому-то не лень, сделайте плиз и загрузите куда-нибудь, люди вам спасибо скажут.

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

Скроллим вниз, и нажимаем Add в разделе "Xray Servers":

По сравнению с десктопными клиентами, настройка производится немножко "наоборот": сначала вы задаете имя сервера, адрес сервера, порт и данные пользователя, например ключ для Shadowsocks, UUID для VMess/VLESS, и т.д.:

А уже потом на второй вкладке выбираете используемый протокол, тип шифрования, и т.д. Например, для Shadowsocks поля конфигурации выглядят так:

Для VLESS с включенным XTLS-Reality так:

Если вы не используете Reality, то лишние поля скроются.

На третьей вкладке можно выбрать дополнительные настройки транспорта, например, если вы проксируетесь через websockets.

Заполняем все поля (пример настроек "в общем и целом" я уже описывал в предыдущих статьях), нажимаем Save.

После этого, на главной странице настроек XRay, выбираем в поле TCP Server ваш новый сервер, в поле UDP Server его же - и сохраняем настройки. Готово.

В теории, на этом всё. Как только вы указали TCP Server и UDP Server и сохранили настройки, весь трафик от устройств вашей сети должен будет пойти в интернет через выбранный прокси-сервер.

Возможно с этого момента всё заработает сразу, ну или нужно будет немножко еще покопаться по параметрам.

На третьей вкладке настраиваются DNS-сервера и настройки маршрутов:

По умолчанию там в первом поле, отвечающем за DNS для запросов, которые не будут идти на прокси, а будут пропускаться сразу в интернет напрямую, прописан китайский сервер 114.114.114.114 - советую заменить его на какой-нибудь российский близкий к вам DNS (например, провайдерский), или хотя бы на обычные 8.8.8.8 или 1.1.1.1. Secure DNS и Default DNS - это уже сервера, используемые для походов через прокси, с ними по умолчанию все нормально.

Обратите внимание на поля "Bypassed domain rules" и "Forwarded domain rules". По умолчанию там прописаны условия для Китая (домен ".cn") - удалите их. Дальше, может быть я криворукий и что-то не учел или куда-то не туда ткнул, но у меня сложилось впечатление, что если оставть первое поле пустым или указать там что-то отсутствующее в ваших geoip/geosite базах, то XRay может заглючить и начать пускать весь трафик напрямую вместо прокси. Попробуйте, и если у вас это действительно так, заполните его как-нибудь правдоподобно - например, geoip:private или domain:gosuslugi.ru.

Возможно для forwarded актуально то же самое, у меня в пустым полем работало нормально.

Еще одна ремарка: убедитесь, что у вас на клиентских устройствах в качестве адреса DNS-сервера используется адрес самого роутера - если они получают адрес автоматически по DHCP, то скорее всего так оно и есть. Если на клиентских устройсвах в качестве DNS-сервера указано что-то другое (например, явно прописаны провайдерские или гугловские DNS), то XRay может работать странно.

И наконец, если что-то не работает как надо и не понятно почему, на вкладке XRay можно увеличить уровень логгирования, и включить дополнительные логи. Смотреть логи можно в интерфейсе OpenWrt в "System Log", либо же командой logread. Когда все работает, лучше поставить уровень warning и отключить доп.логи чтобы экономить ресурсы.

На этом всё.

Удачи, и да прибудет с вами сила.

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


  1. hurtavy
    31.08.2023 08:49

    А сервер тоже свой надо иметь?


    1. entze
      31.08.2023 08:49
      +1

      Да, как его настроить есть ссылки в начале.

      Интересно как "перевернуть" установку, чтобы OpenWRT выступал как сервер, чтобы выставить его в интернет для подключений извне.


      1. hurtavy
        31.08.2023 08:49

        Ясно. Вот именно поэтому до сих пор использую Tor


        1. MiraclePtr Автор
          31.08.2023 08:49
          +2

          до сих пор использую Tor

          Чистый Tor РКН уже давно умеет банить, бриджи пока держутся. Но если Tor устраивает (недостатки у него довольно серьезные), то пока пользоваться можно, почему бы и нет.


      1. MiraclePtr Автор
        31.08.2023 08:49
        +2

        Интересно как "перевернуть" установку, чтобы OpenWRT выступал как сервер, чтобы выставить его в интернет для подключений извне.

        Вариант раз - установить голый xray-core из реп, настроить ему init-скрипт, чтобы запускался автоматически, а дальше настраивать сервер конфигом точно так же, как и на VPS. Ну, еще может порт на фаерволе открыть придется.

        Вариант два - Passwal, описанный в другой статье, имеет режим server-side, судя по всему именно для этого. Я не тестировал.


  1. XOR2048
    31.08.2023 08:49
    +2

    Отличная статья, спасибо!


  1. Andrevich
    31.08.2023 08:49
    +3

    Отличное решение, спасибо за статью! (и за упоминание ????)


  1. inflict
    31.08.2023 08:49
    +1

    Для разнообразия пойдет. А так в passwal есть от shadowsocks до reality.


  1. Diman779
    31.08.2023 08:49

    Неужели дождались?


  1. nonoxynol9
    31.08.2023 08:49
    +1

    Очень круто. Спасибо.

    Какой рутер посоветуете для этого дела? Redmi AX6S (RB03)?


  1. hohonk
    31.08.2023 08:49
    +1

    Большое спасибо за статьи! Раскрыли тему очень доходчиво и интересно!

    Вопрос про Reality и маскировку

    Если проверять маскировку через curl, то должен вернуться код http 200 ok, верно? Пробовал с разными сайтами, но удачно только с Майками

    И вот тоже вопрос, если на сайте что-то поменяется, маскировка спадет - как об этом узнать? Да и вообще нужно ли за этим следить? (Если маскировки нет, в чем отличие от SS2022?)