NetShift - маршрутизатор трафика для OpenWrt. Направляйте нужные ресурсы в туннель, а остальное - напрямую. Открытое ПО на базе sing-box.
Это форк itdoginfo/podkop, значительно расширяющий функциональность.
Warning
Проект находится в стадии бета-версии. Возможны ошибки, нестабильная работа и существенные изменения функциональности.
- Маршрутизация по доменам и подсетям - нужное в туннель, остальное напрямую
VLESS · Shadowsocks · Trojan · Hysteria2 · готовые community-списки - Subscription URL - ссылки подписки от провайдера с автообновлением и автовыбором лучшего сервера
любая подписка remnawave · 3x-ui · marzban · github - Переключаемое ядро sing-box - стабильное ↔ sing-box-extended прямо из веб-интерфейса
клиентский транспорт xhttp · установка и откат в один клик - Веб-интерфейс LuCI - дашборд, диагностика и настройки без ручной правки конфигов
статус серверов · проверка соединения · логи - Автоматическая миграция - обновление со старого podkop переносит конфиг без перенастройки
Системные требования
- OpenWrt 24.10 или выше.
- Минимум 25 МБ свободного места. Устройства с флеш-памятью 16 МБ не поддерживаются.
Обновления и конфигурация
- При обновлении обязательно очищайте кэш 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://raw.githubusercontent.com/yandexru45/netshift/refs/heads/main/netshift/files/etc/config/netshift
# затем настроить заново через LuCI или UCIПолная инструкция - в документации.
Для установки и обновления достаточно одного скрипта:
sh <(wget -O - https://raw.githubusercontent.com/yandexru45/netshift/refs/heads/main/install.sh)Интерфейс появится в LuCI: Services → NetShift.
Настройка подписки (Subscription URL) через UCI
При скачивании подписки отправляются заголовки:
| Заголовок | Значение |
|---|---|
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Ручное обновление подписки:
/usr/bin/netshift subscription_updateЯдро sing-box-extended (xhttp)
Переключение ядра между стабильным sing-box и сборкой sing-box-extended прямо из вкладки Diagnostics в LuCI:
- Install extended - установить расширенное ядро sing-box-extended.
- Install stable - вернуться на стабильное ядро.
После установки расширенного ядра становится доступен клиентский транспорт xhttp (только клиентский режим, не серверный). По умолчанию ставится стабильное ядро - extended включается по желанию.
.
├── 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
Пакеты собираются в Docker-образе OpenWrt SDK (24.10) и публикуются как релиз при 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)
docker build -f Dockerfile-ipk --build-arg NETSHIFT_VERSION=0.8.0 -t netshift:ipk .
# apk (новые сборки OpenWrt на apk)
docker build -f Dockerfile-apk --build-arg NETSHIFT_VERSION=0.8.0 -t netshift:apk .Требуется sing-box >= 1.12.0 и jq >= 1.7.1 на целевом устройстве.
- itdoginfo/podkop - исходный проект, форком которого является NetShift.
- sing-box - движок маршрутизации.
Лицензия: GPL-2.0-or-later - см. LICENSE.
Important
Pull Request принимаются только после согласования с авторами в Telegram-чате.
