Установка Passwall2 и Xray на роутер с OpenWrt нужна тем, кому мало «одной кнопки»: Passwall2 умеет держать десятки серверов из подписки, переключаться между ними и разводить трафик по правилам — какие домены в туннель, какие напрямую. Плата за это — ручная работа: пакет ставится из стороннего репозитория, а ядро Xray приходится подкладывать самому, потому что версия из штатного обновления отстаёт от протоколов, которыми сейчас обходят белые списки.
Ниже — весь путь целиком: от apk add до зелёного RUNNING и голландского IP в 2ip. Все скриншоты сняты на реальном роутере с OpenWrt 25.12.4 (MediaTek Filogic, aarch64_cortex-a53).
Passwall2, podkop или Netshift — что выбрать
Все три решения делают одно и то же — заворачивают часть трафика в VPN-туннель, — но рассчитаны на разного пользователя.
| podkop | Netshift | Passwall2 | |
|---|---|---|---|
| Ядро | sing-box | sing-box | Xray / sing-box / Hysteria |
| Подписки | нет | да | да |
| Список серверов | 1 | из подписки | десятки, с ping и URL-тестом |
| Маршрутизация | готовые списки | готовые списки | свои правила + GeoIP/Geosite |
| Интерфейс | простой | простой | 10 вкладок, всё на английском |
| Требования | скромные | скромные | 256 МБ RAM, 700 МГц |
Passwall2 стоит ставить, если вам нужно несколько серверов одновременно: например, Нидерланды для YouTube, «белые списки» для банков-исключений и отдельная нода для торрентов. Если задача — просто открыть заблокированные сайты, podkop настраивается за десять минут и не требует ничего из описанного ниже.
Зачем вообще подкладывать ядро Xray вручную
Passwall2 — это оболочка. Сам он трафик не шифрует, а запускает внешний бинарник-ядро: Xray, sing-box или Hysteria. Во вкладке App Update есть кнопки «Check update», которые ядра скачивают автоматически, — и в этом главный подвох.
Xray-core давно живёт в двух ветках. Последний стабильный релиз на момент написания — v26.3.27 (март 2026), а всё, что вышло позже, помечено как Pre-release: v26.6.1, v26.6.22, v26.7.11, v26.7.28. При этом именно в свежих pre-release появляются параметры транспорта XHTTP, которыми сейчас обходят белые списки:
xPaddingBytes— добивка заголовков случайным числом байт (обычно диапазон вида100-1000), чтобы соединение не палилось по характерной длине пакетов;- GET-режимы XHTTP — запросы, неотличимые от обычного обращения к API разрешённого сайта;
- режимы
packet-up/stream-up/stream-one, разбивающие поток так, чтобы он выглядел как чужой легитимный трафик.
Если сервер выдал вам ссылку с этими параметрами, а на роутере стоит стабильное ядро — узел просто не поднимется либо будет отваливаться. Отсюда и весь ручной ритуал: скачать pre-release с GitHub, положить в /usr/bin/xray, дать права.
Что понадобится
- Роутер с OpenWrt 24.10 / 25.12 и новее — с пакетным менеджером
apk, репозиторий Passwall2 собран только под него. - Свободное место:
df -h /overlayдолжно показать хотя бы 60–80 МБ. - Доступ по SSH — если вы там ни разу не были, начните с краткого разбора SSH.
- WinSCP (или любой SCP/SFTP-клиент) для переноса файла ядра.
- Ссылка на подписку VPN или готовая
vless://-ссылка — своя, с сервера на 3X-UI, или от сервиса.
192.168.1.1, Passwall2 не заработает — маршруты и правила nftables будут ссылаться сами на себя. Сначала смените локальный IP роутера, потом возвращайтесь сюда.
Шаг 1. Бэкап и проверка роутера
Прежде чем что-то ставить, снимите копию настроек и посмотрите, что у вас за железо и сколько места осталось.
ssh root@192.168.1.1
ubus call system board # версия OpenWrt и архитектура
df -h /overlay # свободное место
sysupgrade -b /root/backup-$(date +%F).tar.gz
В выводе ubus call system board запомните поле board_name и цель сборки (target) — по ним дальше выбирается правильный архив Xray. В нашем примере это mediatek/filogic, архитектура aarch64_cortex-a53.
Заодно снесите конкурирующие прокси-решения, если они стоят:
apk del luci-app-podkop podkop 2>/dev/null
apk del luci-app-netshift netshift 2>/dev/null
Как забрать бэкап на компьютер и восстановиться из него — в отдельной инструкции.
Шаг 2. Установка Passwall2 через SSH
Passwall2 нет в официальном репозитории OpenWrt — пакеты берутся из стороннего репозитория с собственной подписью. Поэтому сначала кладём публичный ключ, потом добавляем сам репозиторий:
wget -O /etc/apk/keys/passwall2-repo.rsa.pub \
https://rage-ac.github.io/Passwall2/keys/passwall2-repo.rsa.pub
grep -q 'rage-ac.github.io/Passwall2' /etc/apk/repositories || \
echo "https://rage-ac.github.io/Passwall2/packages" >> /etc/apk/repositories
apk update
apk add luci-app-passwall2 kmod-nft-socket kmod-nft-tproxy dnsmasq-full
Разберём, что здесь происходит:
| Команда / пакет | Зачем |
|---|---|
wget -O /etc/apk/keys/... | ключ подписи, без него apk откажется ставить пакеты |
grep -q ... || echo ... | добавляет строку репозитория один раз, а не при каждом запуске |
luci-app-passwall2 | сам плагин + веб-интерфейс в LuCI |
kmod-nft-socket, kmod-nft-tproxy | модули ядра для прозрачного перехвата трафика (TProxy) |
dnsmasq-full | замена обычного dnsmasq, умеет ipset/nftset — без него маршрутизация по доменам не работает |
grep -q … ||, а не голым echo … >>. Иначе при повторном запуске в /etc/apk/repositories появятся дубли, и apk update начнёт сыпать предупреждениями.
Установка идёт минуту-полторы: apk сначала удаляет обычный dnsmasq (в логе это Purging dnsmasq), затем ставит dnsmasq-full и зависимости. Кратковременная потеря интернета в этот момент — норма.
apk update видит пакеты Passwall2 для aarch64_cortex-a53, дальше идёт установкаПосле установки в LuCI появится меню Службы → Passwall2. Пока что ядро не запущено — статус Core: NOT RUNNING, это нормально: сервера ещё не добавлены.
Шаг 3. Скачиваем свежее ядро Xray с GitHub
Идём в раздел Releases проекта XTLS/Xray-core и берём верхний релиз — даже если он помечен Pre-release. Нужен архив под архитектуру вашего роутера:
| Чипсет / платформа | Архив Xray |
|---|---|
| MediaTek MT7981 / MT7986 (filogic) | Xray-linux-arm64-v8a.zip |
| Qualcomm IPQ40xx / IPQ806x | Xray-linux-arm32-v7a.zip |
| MediaTek MT7621 (ramips) | Xray-linux-mips32le.zip |
| Atheros AR71xx / ath79 | Xray-linux-mips32.zip |
| x86_64 (ПК, мини-ПК, виртуалка) | Xray-linux-64.zip |
| Rockchip / Raspberry Pi 4–5 | Xray-linux-arm64-v8a.zip |
Illegal instruction. Файл скопируется и даже станет исполняемым, но при запуске ядро молча упадёт. Если сомневаетесь — сверьтесь с выводом ubus call system board из шага 1.
Скачанный архив распаковываем на компьютере. Внутри лежат geoip.dat, geosite.dat, LICENSE, README.md и сам бинарник xray без расширения — нужен только он.
geoip.dat и geosite.dat копировать не нужно — Passwall2 качает и обновляет свои базы сам, на вкладке Rule Manage.
Шаг 4. Переносим ядро на роутер через WinSCP
Роутеру нужен файл в /usr/bin/. Проще всего перетащить его мышкой через WinSCP.
- Запускаем WinSCP, создаём новое подключение.
- Протокол передачи —
SCP(не SFTP: в OpenWrt по умолчанию стоит dropbear, полноценного SFTP-сервера там нет). - Имя хоста — адрес роутера (
192.168.1.1), порт22, пользовательroot, пароль — от админки. - В правой панели переходим в
/usr/bin/, в левой открываем папку с распакованным Xray. - Перетаскиваем файл
xrayвправо и подтверждаем копирование.
scp xray root@192.168.1.1:/usr/bin/xray. А если роутер сам ходит в интернет, файл можно забрать прямо на нём: cd /tmp && wget <ссылка-на-zip> && unzip -o Xray-*.zip xray -d /usr/bin/.
Шаг 5. Права на файл и перезапуск службы
Скопированный файл лежит без флага исполнения — для системы это просто набор байт. Возвращаемся в SSH и исправляем:
chmod +x /usr/bin/xray
/usr/bin/xray version # проверка: ядро должно ответить своей версией
service passwall2 restart
Вторая команда — самая полезная проверка на этом этапе. Если она вернула номер версии, значит бинарник рабочий и архитектура выбрана верно. Если вместо этого вы видите Illegal instruction, not executable или Exec format error — вернитесь к таблице в шаге 3 и возьмите другой архив.
Шаг 6. Проверяем, что Passwall2 увидел ядро
Открываем Службы → Passwall2 → App Update. Напротив строки Xray Версия должна стоять та самая версия, которую вы скачали, а кнопка обновления — смениться на неактивную надпись It is the latest version.
/usr/bin/xray, обновление не требуетсяНиже на этой же вкладке — поля App Path для каждого ядра. Если вы положили xray не в /usr/bin/, а, скажем, в /opt/, поправьте путь здесь и нажмите «Сохранить».
Шаг 7. Подключаем подписку VPN
Переходим на вкладку Node Subscribe и жмём Добавить — открывается форма новой подписки. Заполнить нужно всего два поля:
- Subscribe Remark — произвольное имя группы, оно же станет названием вкладки в списке серверов (у нас —
8bit); - Subscribe URL — сама ссылка на подписку от вашего VPN-сервиса.
Остальное на первом заходе не трогаем: Auto в полях типа нод означает «использовать ядро по умолчанию», и для VLESS это как раз Xray.
Полезные настройки в той же форме, к которым стоит вернуться позже:
| Опция | Что делает |
|---|---|
Auto Update Mode | автообновление подписки по расписанию (по умолчанию выключено) |
Update Once on Boot | обновлять список серверов при каждой загрузке роутера |
Filter keyword Mode | фильтр нод по ключевым словам — удобно выкинуть лишние локации |
User-Agent | некоторые панели отдают разный формат в зависимости от клиента; v2rayN подходит почти всем |
Send HWID | отправляет идентификатор устройства. Включайте, только если провайдер этого требует |
Шаг 8. Загружаем сервера вручную и читаем лог
Passwall2 не идёт за подпиской сразу после сохранения. Нажмите Manual subscription в строке подписки (или Manual subscription All, если подписок несколько) — плагин скачает список нод прямо сейчас.
Сразу же загляните на вкладку Runtime Logs — там видно, чем закончилась загрузка. Нужная строка выглядит так:
Start subscribing...
- Start subscribing: [8bit] https://… [Auto]
- Successfully resolved the [8bit] node, number: 20
- Update [Node] Matching node: rulenode
Subscription complete...
Ключевое здесь — number: 20: столько серверов реально разобрано. Если стоит number: 0, сервера не загрузились.
number: 0), и успешную — 20 нод. Ссылка на подписку скрытаЧто означает number: 0:
- ссылка отдаёт формат, который Passwall2 не разбирает (строка
https type node subscriptions are not currently supportedв логе — как раз об этом); - у роутера нет доступа к домену подписки — панель VPN-сервиса тоже может быть заблокирована;
- в конце ссылки не хватает суффикса вроде
/jsonили, наоборот, он лишний. Попробуйте оба варианта — в логе на скриншоте видно, что сработал именно вариант без/json.
Проверить, живы ли сами сервера из подписки, можно не заходя на роутер — инструмент проверки серверов скачает список по ссылке и покажет, кто отвечает, а кто нет. Раскрывать UUID или пароль для этого не нужно.
Теперь вкладка Node List — здесь весь загруженный список с кнопками Test (ICMP-ping), TCPing и URL Test. Нажмите TCPing у нескольких нод: цифры до 100 мс — хорошо, Тайм-аут — сервер недоступен из вашей сети, такую локацию выбирать бессмысленно.
Шаг 9. Весь трафик через VPN
Самый простой сценарий: всё, что уходит с роутера, идёт через один сервер.
- Вкладка Basic Settings → Main.
- Включите Main switch.
- В списке Node выберите сервер из подписки — например,
Xray VLESS: [Нидерланды NL]. - Оставьте включёнными Localhost Proxy (трафик самого роутера) и Client Proxy (трафик устройств в LAN).
- Сохранить → Применить.
RUNNING, индикаторы Google и GitHub показывают реальную задержку — туннель поднялсяЧетыре плитки сверху — это встроенная диагностика. Baidu Connection проверяет китайский сегмент (для нас бесполезна), а вот Google Connection и GitHub Connection должны показать время отклика в миллисекундах. Если там висит Touch Check и после нажатия ничего не меняется — туннель не работает, идите в раздел «Если что-то не работает».
Для надёжности перезапустите службу из SSH — так Passwall2 гарантированно перечитает конфигурацию и перестроит правила nftables:
service passwall2 restart
logread -e passwall | tail -30
Шаг 10. Маршрутизация: Xray_shunt и Shunt Rule
Гнать весь трафик через VPN — плохая идея на каждый день: банки и госуслуги начнут просить подтверждения, маркетплейсы покажут чужой регион, а скорость просядет на всём подряд. Правильнее развести трафик по правилам.
В Passwall2 за это отвечает шунт — виртуальный узел, который сам решает, куда отправить соединение.
- Basic Settings → Main → Node → выберите
Xray_shunt: [rulenode]вместо конкретного сервера. - Рядом появится новая вкладка Shunt Rule — вся маршрутизация настраивается там.
Таблица правил читается сверху вниз, первое совпадение выигрывает. Встроенные наборы:
| Правило | Что в него попадает | Разумное значение |
|---|---|---|
China | китайские домены и подсети | Close (Not use) |
Iran | иранский сегмент | Close (Not use) |
Russia_Block | сайты, заблокированные в России | ваш сервер VPN |
Russia | российские домены и IP | Direct Connection |
PrivateIP | локальные адреса 192.168.*, 10.* | Direct Connection — обязательно |
| По умолчанию | весь остальной трафик | сервер VPN или Direct Connection |
Два рабочих пресета:
- «Заблокированное — в туннель, остальное напрямую» (мягкий режим, рекомендуется):
Russia_Block→ нода VPN,RussiaиPrivateIP→Direct Connection, По умолчанию →Direct Connection. - «Всё зарубежное — в туннель»:
RussiaиPrivateIP→Direct Connection, По умолчанию → нода VPN. Так работают YouTube и зарубежные сервисы, а российские сайты и банки видят ваш настоящий IP.
Свои домены добавляются на той же вкладке — можно завести отдельное правило и назначить ему любой сервер из подписки. Отсюда и берётся главное преимущество Passwall2: YouTube через Нидерланды, нейросети через Германию, торренты через отдельную ноду — одновременно.
PrivateIP всегда держите на Direct Connection. Иначе обращения к самому роутеру, NAS, принтеру и камерам уйдут в туннель — и локальная сеть развалится.
Опция Domain Strategy вверху вкладки определяет, как резолвятся домены: IPOnDemand (значение со скриншота) резолвит домен в IP сразу, если есть хоть одно правило по IP. Если маршрутизация ведёт себя странно — попробуйте AsIs, он работает только по именам доменов и даёт меньше сюрпризов.
Шаг 11. Проверяем результат
Порядок проверки — от роутера к клиенту, чтобы сразу понять, на каком уровне проблема:
service passwall2 status # служба жива
logread -e passwall | tail -30 # нет ошибок в логе
nft list ruleset | grep -c passwall # правила на месте (число > 0)
Дальше — плитки Google Connection и GitHub Connection в самом Passwall2: они должны показывать миллисекунды, а не Touch Check.
И финальная проверка с обычного компьютера в сети: откройте 2ip.ru и посмотрите строку «Вы из». Если там страна вашего VPN-сервера — трафик действительно идёт через туннель.
Чек-лист «всё настроено правильно»:
-
Core: RUNNINGна вкладке Basic Settings; - Google и GitHub Connection отвечают за разумное время;
- 2ip показывает страну VPN-сервера;
- заблокированный сайт открывается;
- банки и госуслуги открываются напрямую (если настроен шунт);
- локальные устройства — NAS, принтер, камеры — по-прежнему доступны.
Если что-то не работает
Core: NOT RUNNING. Ядро не стартовало. Смотрите logread -e passwall | tail -30. Частые причины: не выбран узел, битая ссылка в подписке, ядро не подходит по архитектуре.
Ноды загрузились, но интернета нет. Первым делом проверьте DNS: Basic Settings → DNS. Смените Remote DNS на 8.8.8.8 (Google) или 1.1.1.1, а Remote DNS Protocol — на UDP вместо DoH. Это лечит львиную долю случаев «поднялось, но не работает».
Изменения в правилах не применяются. Внизу вкладки DNS есть кнопка Clear NFTSET — она сбрасывает накопленные наборы адресов. Нажмите её и перезапустите службу.
Сайты открываются через раз. Обычно виноват QUIC: браузер ходит по UDP/443 мимо ваших правил. Отключите QUIC в браузере (chrome://flags → Experimental QUIC protocol → Disabled) или заблокируйте UDP/443 на роутере.
Роутер тормозит, скорость просела. Xray шифрует трафик на CPU, аппаратного ускорения тут нет. Уменьшите объём трафика в туннеле (мягкий пресет вместо полного) — либо переходите на более мощный роутер.
Не хватает места. df -h /overlay. Ядро Xray — 35 МБ, базы GeoIP/Geosite — ещё около 30 МБ. Помогает extroot или сборка прошивки через Firmware Selector.
После обновления OpenWrt всё пропало. Так и должно быть: sysupgrade сносит все пакеты. После обновления прошивки Passwall2 и ядро ставятся заново — по этой же инструкции.
Совсем пропал доступ в интернет. Аварийный откат одной командой:
service passwall2 stop
Если и до роутера не достучаться — смотрите разбор что делать, когда нет доступа к интернету на OpenWrt.
Обновление и откат ядра
Ядро обновляется тем же способом, что и ставилось. Только перед заменой сохраните текущий бинарник:
cp /usr/bin/xray /root/xray.old # страховка
service passwall2 stop
# копируем новый xray в /usr/bin/ (WinSCP или scp)
chmod +x /usr/bin/xray
/usr/bin/xray version
service passwall2 start
Откат, если новая версия не подошла:
service passwall2 stop
cp /root/xray.old /usr/bin/xray
chmod +x /usr/bin/xray
service passwall2 start
Полное удаление Passwall2 с возвратом обычного dnsmasq:
service passwall2 stop
/etc/init.d/passwall2 disable
apk del luci-app-passwall2
rm -f /usr/bin/xray
apk del dnsmasq-full && apk add dnsmasq
service dnsmasq restart
reboot
Часто задаваемые вопросы (FAQ)
Обязательно ли ставить ядро Xray вручную?
Нет. Если ваш VPN-сервис отдаёт обычные VLESS Reality-ссылки без экзотических параметров XHTTP, хватит того ядра, которое Passwall2 скачает кнопкой Check update на вкладке App Update. Ручная установка нужна ради параметров вроде xPaddingBytes и GET-режимов XHTTP, которые появляются только в свежих pre-release.
Чем Passwall2 лучше podkop? Passwall2 умеет держать много серверов из подписки одновременно и разводить трафик по правилам: разные домены — через разные страны. Podkop проще, легче и настраивается за десять минут, но работает с одним сервером. Для домашнего обхода блокировок podkop обычно достаточно.
Passwall2 запустится на роутере с 128 МБ RAM? Официально требуется 256 МБ. Для 128 МБ разработчики советуют старую ветку OpenWrt 22.03.3, но полноценной работы на такой конфигурации ждать не стоит — на слабом железе разумнее podkop.
Можно ли поставить Passwall2 рядом с podkop или Netshift? Нет. Они конфликтуют за перехват DNS и за правила nftables. Перед установкой удалите конкурирующее решение — команды есть в шаге 1.
Passwall2 бесплатный? Да, сам плагин и ядро Xray бесплатны и открыты. Платить нужно только за VPN-сервер или подписку, если у вас нет своего VPS.
Слетит ли Passwall2 после обновления прошивки?
Да. sysupgrade удаляет все установленные пакеты, включая ядро в /usr/bin/xray. После обновления OpenWrt всё ставится заново.
Что выбрать в поле Node — конкретный сервер или Xray_shunt?
Конкретный сервер — когда нужен полный туннель для всей сети. Xray_shunt: [rulenode] — когда часть трафика должна идти напрямую (банки, госуслуги, российские сервисы). На каждый день удобнее шунт.
Почему в логе подписки стоит number: 0?
Passwall2 не смог разобрать список. Проверьте формат ссылки (с суффиксом /json и без него), доступность домена подписки с роутера и то, что подписка вообще активна. Отдельно проверить сервера можно в инструменте проверки серверов.
Видит ли провайдер, что я пользуюсь VPN? При VLESS Reality и транспорте XHTTP соединение выглядит как обычный HTTPS-трафик к разрешённому сайту. Провайдер видит факт соединения, но не его содержимое и не то, что это VPN.
Заключение
Passwall2 требует больше внимания, чем podkop, — зато взамен даёт то, чего у простых решений нет: подписки на десятки серверов, замеры задержек прямо в интерфейсе и маршрутизацию, где каждому правилу можно назначить свою страну. Ручная подкладка ядра Xray — единственная по-настоящему неочевидная часть, и она же самая важная: без свежего ядра новые параметры XHTTP просто не заработают.
Если по ходу выяснилось, что роутер не тянет, посмотрите в сторону podkop или Netshift — они делают то же самое проще и на куда более скромном железе. А если Passwall2 не стартует из-за совпадения подсетей с вышестоящим роутером — начните со смены локального IP.
Инструкция рассчитана на тех, кто готов лезть в SSH и разбираться с ядром вручную. Если такой задачи нет, а рабочий результат нужен — мы настраиваем роутер под ключ вместе с подпиской и маршрутизацией.
- Требования к железу, ключ подписи и точные команды установки — на странице репозитория rage-ac.github.io. Релизы ядра — в разделе Releases проекта XTLS/Xray-core. Команды и имена пакетов между версиями меняются — сверяйтесь с первоисточником. ↩
Комментарии
💬 Пока нет комментариев. Будьте первым!
Оставить комментарий