По многочисленным просьбам, настало время статьи про настройку 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)
nonoxynol9
31.08.2023 08:49+1Очень круто. Спасибо.
Какой рутер посоветуете для этого дела? Redmi AX6S (RB03)?
hohonk
31.08.2023 08:49+1Большое спасибо за статьи! Раскрыли тему очень доходчиво и интересно!
Вопрос про Reality и маскировку
Если проверять маскировку через curl, то должен вернуться код http 200 ok, верно? Пробовал с разными сайтами, но удачно только с Майками
И вот тоже вопрос, если на сайте что-то поменяется, маскировка спадет - как об этом узнать? Да и вообще нужно ли за этим следить? (Если маскировки нет, в чем отличие от SS2022?)
hurtavy
А сервер тоже свой надо иметь?
entze
Да, как его настроить есть ссылки в начале.
Интересно как "перевернуть" установку, чтобы OpenWRT выступал как сервер, чтобы выставить его в интернет для подключений извне.
hurtavy
Ясно. Вот именно поэтому до сих пор использую Tor
MiraclePtr Автор
Чистый Tor РКН уже давно умеет банить, бриджи пока держутся. Но если Tor устраивает (недостатки у него довольно серьезные), то пока пользоваться можно, почему бы и нет.
MiraclePtr Автор
Вариант раз - установить голый xray-core из реп, настроить ему init-скрипт, чтобы запускался автоматически, а дальше настраивать сервер конфигом точно так же, как и на VPS. Ну, еще может порт на фаерволе открыть придется.
Вариант два - Passwal, описанный в другой статье, имеет режим server-side, судя по всему именно для этого. Я не тестировал.