- install.sh: REPO, RELEASES_LATEST_REDIRECT, RELEASES_DOWNLOAD_BASE → uralgit.ru - install.sh: raw.githubusercontent.com → uralgit.ru raw endpoint - constants.sh: NETSHIFT_RELEASE_API_URL, REPO URLs → uralgit.ru - constants.sh: GITHUB_RAW_URL, SRS_MAIN_URL → uralgit.ru/allow-domains - updater.sh: UPDATES_SING_BOX_EXTENDED_REPO → ural/sing-box-extended - updater.sh: api.github.com → uralgit.ru API - README.md: all github.com links → uralgit.ru - Mirror repos: itdoginfo/allow-domains, shtorm-7/sing-box-extended
NetShift - маршрутизатор трафика для OpenWrt. Направляйте нужные ресурсы в туннель, а остальное - напрямую. Открытое ПО на базе sing-box.
Это форк itdoginfo/podkop, значительно расширяющий функциональность.
Warning
Проект находится в стадии бета-версии. Возможны ошибки, нестабильная работа и существенные изменения функциональности.
Функции
- Маршрутизация по доменам и подсетям - нужное в туннель, остальное напрямую
VLESS · Shadowsocks · Trojan · Hysteria2 · VMess · SOCKS · готовые community-списки - Subscription URL - ссылки подписки от провайдера с автообновлением и автовыбором лучшего сервера
любая подписка remnawave · 3x-ui · marzban · github · форматы base64 / URI / Clash / Xray JSON - Несколько подписок и фильтры - несколько фидов в одной секции, фильтр серверов по ключевым словам (include / exclude)
объединение без дублей · регистронезависимо · работает и по эмодзи - Группировка серверов - по флагу страны или по префиксу имени, с авто-выбором «⚡ Самый быстрый» среди всех групп
URLTest внутри группы · URLTest над группами · ручной выбор сохранён - Переключаемое ядро sing-box - стабильное ↔ sing-box-extended прямо из веб-интерфейса
клиентский транспорт xhttp · самовосстановление и автооткат · установка в один клик - Самообновление из веб-интерфейса - проверка и установка обновлений NetShift прямо из LuCI
асинхронно · бэкап конфига · без риска «окирпичивания» - Веб-интерфейс LuCI - дашборд, менеджер компонентов, диагностика и настройки без ручной правки конфигов
статус серверов · проверка соединения · логи · вкладки-карточки - IPv6, блокировка DoH, глобальный прокси - полная маршрутизация v6 через туннель, защита DNS роутера, режим «весь трафик в туннель»
v6 tproxy / DNS / FakeIP · DNS через прокси · фоновый watchdog sing-box - Автоматическая миграция - обновление со старого podkop переносит конфиг без перенастройки
Вещи, которые необходимо знать перед установкой
Системные требования
- OpenWrt 24.10 или выше (поддерживаются и сборки на
opkg/.ipk, и новые наapk/.apk- OpenWrt 25.12+). - Минимум 25 МБ свободного места. Устройства с флеш-памятью 16 МБ не поддерживаются.
- На устройстве:
sing-box >= 1.12.0,jq >= 1.7.1,coreutils-base64 >= 9.7(ставятся как зависимости пакета).
Обновления и конфигурация
- При обновлении обязательно очищайте кэш LuCI.
- После обновления проверяйте конфигурацию - она может меняться между версиями.
- При старте NetShift модифицирует конфигурацию Dnsmasq.
- NetShift изменяет конфигурацию sing-box. Если используете собственную - заранее сохраните её.
Ограничения и особенности
- Если установлен Getdomains, его необходимо удалить.
- Dashboard работает только по HTTP (особенность Clash API). По HTTPS или через домен может быть недоступен.
Поддержка и диагностика
- Руководство по диагностике
- Актуальные изменения - в Telegram-чате (читайте закреплённые сообщения).
- При проблемах оставляйте технически грамотный фидбэк в GitHub Issues и Telegram-чате.
Миграция с podkop (0.8.0) и смена формата конфига (0.7.0)
0.8.0 - переименование в NetShift. Пакет теперь netshift (бинарь /usr/bin/netshift), конфиг - /etc/config/netshift, LuCI-приложение - luci-app-netshift. При обновлении старый конфиг /etc/config/podkop автоматически мигрируется в /etc/config/netshift, резервная копия сохраняется в /etc/config/podkop.bak.pre-netshift. туннель продолжит работать без перенастройки.
0.7.0 - несовместимый формат конфига. Старые значения несовместимы - нужно настроить заново. Скрипт установки обнаружит старую версию и предложит сделать это автоматически. Вручную:
mv /etc/config/netshift /etc/config/netshift-070
wget -O /etc/config/netshift https://uralgit.ru/ural/netshift/raw/branch/main/netshift/files/etc/config/netshift
# затем настроить заново через LuCI или UCI
Установка NetShift
Полная инструкция - в документации.
Для установки и обновления достаточно одного скрипта:
sh <(wget -O - https://uralgit.ru/ural/netshift/raw/branch/main/install.sh)
Интерфейс появится в LuCI: Services → NetShift.
Готовые community-списки
Готовые наборы доменов/подсетей, которые можно добавить в секцию через community_lists (в UI - чекбоксами). Списки обновляются автоматически:
russia_inside · russia_outside · ukraine_inside · geoblock · block · porn · news · anime · youtube · hdrezka · tiktok · google_ai · google_play · hodca · discord · meta · twitter · cloudflare · cloudfront · digitalocean · hetzner · ovh · telegram · roblox
uci add_list netshift.my_sub.community_lists='youtube'
uci add_list netshift.my_sub.community_lists='telegram'
uci commit netshift
Настройка подписки (Subscription URL) через UCI
Поддерживаются любые подписки (remnawave · 3x-ui · marzban · github) в форматах base64 · список URI · Clash · Xray JSON, в т.ч. gzip-сжатые ответы. При скачивании подписки отправляются заголовки:
| Заголовок | Значение |
|---|---|
User-Agent |
подбирается автоматически (singbox/<версия> или клиентский, см. формат) |
X-HWID |
уникальный идентификатор роутера |
X-Device-OS |
OpenWrt Linux |
X-Device-Model |
модель роутера |
X-Ver-OS |
версия ядра |
uci set netshift.my_sub=section
uci set netshift.my_sub.connection_type='proxy'
uci set netshift.my_sub.proxy_config_type='subscription'
uci set netshift.my_sub.subscription_url='https://your-provider.com/api/sub'
uci set netshift.my_sub.subscription_update_interval='1h'
uci add_list netshift.my_sub.community_lists='russia_inside'
uci commit netshift
Несколько подписок в одной секции - добавьте subscription_url списком (в UI - поле с «+»); все фиды скачиваются и объединяются в один набор узлов без дублей:
uci add_list netshift.my_sub.subscription_url='https://provider-a.com/sub'
uci add_list netshift.my_sub.subscription_url='https://provider-b.com/sub'
Фильтр серверов по ключевым словам - белый/чёрный список (регистр не важен, работает и по эмодзи):
uci add_list netshift.my_sub.subscription_filter_include='🇩🇪'
uci add_list netshift.my_sub.subscription_filter_exclude='trial'
Группировка серверов - собирает узлы в URLTest-группы и добавляет авто-выбор «⚡ Самый быстрый» среди всех групп (при ≥2 группах он же выбор по умолчанию; ручной выбор группы сохраняется):
# off | country (по флагу страны) | prefix (по первым N символам имени)
uci set netshift.my_sub.subscription_group_mode='country'
# для prefix: сколько первых символов имени брать (по умолчанию 2)
uci set netshift.my_sub.subscription_group_prefix_len='2'
Предпочтительный формат - для панелей, которые отдают нужные узлы (например xhttp / Hysteria2) только под определённым клиентом:
# auto | xray (Xray JSON, UA как у Happ) | singbox
uci set netshift.my_sub.subscription_format_preference='auto'
Подписки по IP-хосту и «кривой» HTTPS - можно указать подписку с IP вместо домена (например https://22.23.43.52:2096/sub/xxxx); для панелей с самоподписанным / несовпадающим сертификатом включите небезопасный TLS:
uci set netshift.my_sub.subscription_allow_insecure='1'
Ручное обновление подписки и очистка кеша:
/usr/bin/netshift subscription_update # перечитать и применить
# Очистка кеша всех подписок и повторное скачивание - кнопка во вкладке «Диагностика»
Менеджер компонентов: ядро sing-box-extended (xhttp) и самообновление
Вкладка Менеджер компонентов в LuCI управляет NetShift и ядром sing-box в одном месте - три карточки: NetShift / sing-box (stock) / sing-box (extended). Установленная версия видна сразу, статус (актуально / устарело / не установлено) и кнопка «Проверить обновление» - по нажатию.
Переключение ядра между стабильным sing-box и сборкой sing-box-extended:
- Install extended - расширенное ядро (даёт клиентский транспорт xhttp, только клиентский режим). Также поддерживается VMess.
- Install stable - вернуться на стабильное ядро.
Смена ядра безопасна: перед переключением проверяется и при необходимости чинится связь, делается бэкап; при сбое - автооткат, роутер никогда не остаётся без рабочего ядра. По умолчанию стоит стабильное - extended включается по желанию.
Самообновление NetShift - кнопка обновления прямо из веб-интерфейса: асинхронно, с бэкапом конфига, проверкой фактической версии после установки и без риска «окирпичивания». Русская локализация обновляется только если уже установлена.
Дополнительные настройки (IPv6, блокировка DoH, глобальный прокси, DNS через прокси)
Все опции - в секции settings (0 - выкл, 1 - вкл):
# Полная маршрутизация IPv6 через туннель (v6 tproxy / DNS / FakeIP). По умолчанию выкл.
uci set netshift.settings.enable_ipv6='1'
# Блокировка DoH: клиенты в сети не обойдут DNS роутера через DNS-over-HTTPS
# (режет известные DoH-эндпоинты IPv4 + IPv6 на уровне маршрутов sing-box).
uci set netshift.settings.block_doh='1'
# Глобальный прокси: ВЕСЬ трафик через выбранный outbound (а не только избранное).
# Только при явном включении - иначе действует выборочная маршрутизация.
uci set netshift.settings.global_proxy='1'
# DNS через прокси (detour): DNS-запросы идут через туннель.
uci set netshift.settings.dns_via_outbound='1'
# Блокировать QUIC (заставляет приложения откатываться на TCP/TLS).
uci set netshift.settings.disable_quic='1'
uci commit netshift
По умолчанию NetShift гонит в sing-box только проксируемые подсети/домены, остальное - напрямую (выборочная маркировка). Режим «весь трафик в туннель» включается только опцией
global_proxy.
История изменений
Полный список изменений по версиям - на странице Releases. Анонсы обновлений публикуются в Telegram-канале.
Коротко о крупных вехах:
| Версия | Главное |
|---|---|
| 0.9.1 | Авто-выбор «⚡ Самый быстрый» среди групп (URLTest над URLTest'ами) |
| 0.9.0 | Меньше ошибок «лимит GitHub API» (обход через redirect-путь github.com); фикс старого option subscription_url |
| 0.8.9 | Универсальная группировка подписки (страна / префикс имени); поддержка gzip-подписок; фикс ложного «версия устарела» |
| 0.8.7-0.8.8 | Критфикс маршрутизации 2-й секции; выборочная маркировка (меньше нагрузки CPU); Hysteria2 + xhttp везде; несколько подписок; надёжное самообновление |
| 0.8.6 | IPv6 · блокировка DoH · вкладка «Менеджер компонентов» · самообновление · подписки по IP / небезопасный TLS · глобальный прокси · DNS через прокси · watchdog |
| 0.8.5 | VMess (extended) · надёжная смена ядра с автооткатом · фильтр серверов по ключевым словам · Xray JSON + автоподбор User-Agent |
| 0.8.0 | Переименование podkop → NetShift с авто-миграцией конфигов; sing-box-extended (xhttp) из веб-интерфейса |
Project Structure
.
├── netshift/ # Бэкенд-пакет (POSIX ash + jq)
│ ├── Makefile # Описание OpenWrt-пакета
│ └── files/
│ ├── etc/config/netshift # UCI-конфиг по умолчанию
│ ├── etc/init.d/netshift # procd init-скрипт
│ └── usr/
│ ├── bin/netshift # Точка входа CLI (диспетчер команд)
│ └── lib/ # constants, helpers, nft, rulesets,
│ # sing_box_config_*, updater, logging
│
├── luci-app-netshift/ # LuCI веб-интерфейс
│ ├── Makefile
│ ├── htdocs/.../view/netshift/ # main.js (автоген) + hand-written views
│ ├── po/ # Переводы (генерируются из fe-app)
│ └── root/ # menu.d · acl.d · uci-defaults
│
├── fe-app-netshift/ # TypeScript-исходник для main.js (tsup)
│ ├── src/netshift/ # fetchers · methods · services · tabs
│ ├── src/{validators,helpers,icons,partials}
│ └── locales/ # Исходные переводы (netshift.pot / .po)
│
├── sdk/ # Базовые образы OpenWrt SDK
├── Dockerfile-ipk · Dockerfile-apk # Сборка пакетов
└── install.sh # Установщик + миграция с podkop
Build Artifacts
Пакеты собираются в Docker-образах OpenWrt SDK (.ipk - 24.10, .apk - 25.12) и публикуются как релиз при push git-тега (.github/workflows/build.yml).
| Пакет | Формат | Назначение |
|---|---|---|
netshift |
.ipk / .apk |
Бэкенд: CLI, init-скрипт, библиотеки, UCI-конфиг |
luci-app-netshift |
.ipk / .apk |
Веб-интерфейс LuCI |
luci-i18n-netshift-ru |
.ipk / .apk |
Русская локализация интерфейса |
Локальная сборка:
# ipk (OpenWrt 24.10, opkg)
docker build -f Dockerfile-ipk --build-arg NETSHIFT_VERSION=0.9.1 -t netshift:ipk .
# apk (новые сборки OpenWrt 25.12+, apk)
docker build -f Dockerfile-apk --build-arg NETSHIFT_VERSION=0.9.1 -t netshift:apk .
Требуется sing-box >= 1.12.0, jq >= 1.7.1 и coreutils-base64 >= 9.7 на целевом устройстве.
Star History
Credits
- itdoginfo/podkop - исходный проект, форком которого является NetShift.
- sing-box - движок маршрутизации.
Лицензия: GPL-2.0-or-later - см. LICENSE.
Important
Pull Request принимаются только после согласования с авторами в Telegram-чате.
