Skip to content

About

Podkop patch: Subscription URLTest mode and subscription management tab

Resources

Stars

1 star

Watchers

1 watching

Forks

Latest commit

 

History

157 Commits

Folders and files

Repository files navigation

Podkop Subscription URLTest Patch

Этот репозиторий не является форком Podkop и не содержит исходный код Podkop целиком.

Оригинальный проект: itdoginfo/podkop.

Здесь хранится только патч, который добавляет режим Микс для подписок и ручных proxy-ссылок, вкладку управления конфигами из подписок и безопасный автоподбор DNS.

Управление подписками

Отбор по Gemini и ChatGPT

В раскрытой секции вкладки «Подписки» выберите нужные сервисы и нажмите «Проверить сервисы». Проверяются узлы этой секции, прошедшие выбор источников, ручной отбор и теги, отдельным процессом, без переключения рабочего прокси. Узел допускается при положительном результате всех выбранных сервисов. Непроверенные, просроченные и неоднозначные результаты не дают нового допуска. Истечение срока само по себе не переключает рабочие узлы: при загрузке может сохраняться прежний допущенный набор, но новые узлы требуют свежей проверки. Пустой набор сервисов отключает дополнительный фильтр. Отдельные ручные proxy-ссылки пока не проверяются: для таких секций включение фильтра отклоняется.

Быстрая проверка использует кеш и проверяет только новые или устаревшие результаты. Полная перепроверка запускается отдельным действием. Постоянных фоновых прогонов нет.

Для Gemini используйте готовый список «Google AI» в списках маршрутизации секции: он содержит связанные домены, но сам по себе не проверяет узел. Подсказка рядом с фильтром показывает, выбран ли этот список. Маршруты автоматически не меняются; весь список доменов при каждой проверке узла не прогоняется.

«Предварительно проходит» — специфичный положительный ответ веб-сервиса, не гарантия работы чата или аккаунта. HTTP 200, страница входа и капча сами по себе не считаются успехом. Gemini проверяется по известному признаку доступности веб-приложения: читается регион Google из HTML, а не страна в имени узла. Российский регион отклоняется; неизвестный ответ показывается отдельно. ChatGPT — по ответу каталога анонимных моделей. Неофициальные признаки могут измениться: неизвестный ответ не превращается в ложное «работает». Подробные пояснения свёрнуты под «Подробнее». Проверки сохраняют реальные DNS-резолверы, но не загружают списки маршрутизации LAN для каждого узла.

Если вы получили ответ в настоящем чате именно через этот узел, можно подтвердить его вручную после сетевой проверки. Тогда отображается «Подтверждён вами». Cookies, пароли и сообщения не передаются роутеру. Подтверждение не продлевает проверку; изменение конфигурации узла или DNS требует новой проверки. После отбора нажмите «Применить» один раз; остальные черновики сохраняются.

Методика сравнивалась с URL-проверкой сохранённого ZeroBlock 0.8.5-r44, censorcheck и RegionRestrictionCheck. Общая HTTP-проверка не доказывает работу чата. Региональные условия: Gemini Web и ChatGPT.

Во вкладке «Подписки» у каждого источника есть отдельная галочка включения. Рядом расположены кнопки обновления, пинга и бенчмарка только этой подписки; общие кнопки вверху выполняют действие для всех подписок. Выбор источника сохраняет кеш и результаты тестов остальных подписок. Наведите указатель на галочку или значок, чтобы увидеть подсказку. После «Применить» отключённая подписка не попадает в рабочие группы Podkop. Её конфиги остаются видимыми, сохраняют индивидуальные галочки и доступны для обновления, пинга и бенча. Диагностические запросы выполняются отдельным временным процессом sing-box на loopback, без переключения рабочего прокси.

Состояние подписки привязано к её URL, поэтому перестановка списка его не меняет. Одинаковый конфиг из нескольких подписок остаётся рабочим, если включён хотя бы один его источник. В каждой секции должен оставаться хотя бы один включённый поддерживаемый конфиг. При недоступности сервера подписки сохраняется предыдущий кеш этой подписки; доступные подписки обновляются независимо, а интерфейс показывает ошибку у соответствующего источника.

Компактный индикатор показывает состояние операций: «Готово», «Podkop занят», «Обновляется», «Нужно применить» или «Ошибка». Занятость проверяется на роутере; при недоступном статусе конфликтующие действия заблокированы. Это не проверка доступности интернета или всех прокси. Повторное нажатие не запускает дубликат. При ошибке применения и переходе между вкладками несохранённые галочки остаются в открытой странице (перезагрузка страницы их сбросит). Выбор переносится при однозначном совпадении конфигов; для действительно новых узлов галочки нужно проверить.

Новая версия: 20261010-game-filter-v2 для Podkop 0.7.19–0.7.22. Обновление доступно через универсальную команду ниже. Podkop 0.7.23 использует отдельный канал PE.

Галочка «Выбран» показывает выбор до фильтров. Допуск узла указан в колонке «Статус»; сводки «К применению» учитывают источники, ручной выбор и фильтры без двойного подсчёта. Рядом с проверками сервисов видны число подходящих узлов, свежие результаты, необходимые проверки, отказы и неопределённые ответы. Подсказка объясняет следующий шаг. Свежий неопределённый ответ больше не описывается как отсутствие свежего подтверждения. Фильтры сервисов и срок годности проверок не изменены.

В каждой секции вкладки «Подписки» есть переключатель «Тип узлов»: «Все», «Игровые», «Неигровые». Игровыми считаются узлы со словом Игровой в названии; остальные относятся к неигровым. Этот выбор сужает набор вместе с фильтрами стран, источниками, ручным отбором и обязательными сервисами. «Все» снимает только игровой фильтр. Протокол Hysteria2 и значок 🎮 сами по себе ничего не определяют. Изменение действует после нажатия «Применить».

Дашборд

Перенесены фильтры PE «Скрыть недоступные» и «Скрыть медленные» с порогом задержки в мс (1–60000, по умолчанию 1000). Это только фильтры отображения: они не выключают конфиги, не меняют маршруты и не сокращают набор тестирования. Выбранный узел, текущий узел Fastest, сама группа и ещё не проверенные узлы остаются видимыми. Отсутствие результата не считается отказом; «Нет ответа» и «Не проверен» показываются отдельно. Настройки отображения сохраняются в браузере, а после теста список обновляется с учётом текущих фильтров.

Это перенос дашборда, а не всего DNS-контура PE: новый бенчмарк пар DNS, расширенные DNS-транспорты и их backend в старый канал пока не перенесены.

Секции и редактор

Вкладка «Секции» показывает компактную таблицу: название, тип подключения, количество источников и элементов списков. Адреса подписок и proxy-ссылки в таблице не раскрываются. Кнопка «Редактировать» открывает настройки секции на вкладках «Подключение», «Проверка узлов», «Списки» и «Дополнительно».

«Сохранить» в редакторе сохраняет изменения в LuCI без перезапуска Podkop. Можно отредактировать несколько секций и затем один раз нажать общее «Применить». При ошибке сохранения окно остаётся открытым с введёнными значениями и пояснением. Ширина страницы остаётся штатной для темы LuCI.

Эта компоновка перенесена из PE без перехода на Podkop 0.7.23 или podkop-engine. Опции резервных узлов и проверки загрузки, требующие нового движка, здесь не показываются. Фильтры и ручной отбор подписок из предыдущего выпуска сохраняются.

В каждой секции ручной отбор включается отдельным переключателем. При выключенном ручном отборе участвуют все поддерживаемые конфиги включённых подписок, прошедшие фильтр тегов. При включённом доступны «Только выбранные» и «Все, кроме выключенных». Ранее сохранённый ручной режим сохраняется после обновления. Выбор независим для каждой секции; пустой рабочий набор отклоняется, изменения применяются одной транзакцией с восстановлением при ошибке.

Фильтры тегов и свёрнутые подписки

В каждой секции есть селекторы разрешённых и исключённых тегов из фактических названий узлов подписок. Префиксы EU, RU, US, SE, FI показываются с расшифровкой; флаг и буквенный код одной страны соответствуют одному тегу. Ранее сохранённые пользовательские шаблоны сохраняются. Пустой список включения не ограничивает узлы. Если узел совпал с исключением, он не используется, даже если совпал со списком включения.

Правила сохраняются для секции и проверяются снова после изменения подписки. Так новые нежелательные узлы не попадут в рабочий набор после применения обновлённого кеша. В режиме «Только выбранные» новый узел остаётся выключенным, даже если подходит под фильтр. Фильтр не меняет сохранённые галочки отдельных конфигов и не включает выключенную подписку.

Все конфиги остаются видимыми после раскрытия подписки; их можно пинговать и проверять бенчмарком. Перед применением интерфейс показывает размер будущего рабочего набора. Если в секции не останется ни одного включённого поддерживаемого узла, применение отклоняется с сохранением прежних настроек. Фильтры, режим выбора и галочки применяются одной транзакцией. При таймауте интерфейс проверяет результат операции и подтверждает применение только после совпадения сохранённых значений. Ошибка чтения сохраняет последний список и несохранённый выбор для последующего восстановления.

Секции и подписки по умолчанию свёрнуты. Заголовки показывают количество конфигов и узлов, допущенных к работе, а также ошибки подписок. Раскрытое пользователем состояние сохраняется при обновлении данных в открытой странице; после перезагрузки страницы всё снова свёрнуто.

Обновление подписок без прерывания работающего прокси

Плановое обновление и кнопки обновления подписок теперь только получают кеш. Активный конфиг, sing-box, DNS и сетевые правила при этом не меняются. Новые серверы ожидают явного применения; повторное плановое обновление не применяет их автоматически. Ошибка скачивания сохраняет прежний кеш. Это осознанное изменение поведения: новый или изменённый сервер не начинает использоваться сразу после скачивания подписки.

Для явного применения в согласованное окно обслуживания (возможен разрыв текущих прокси-соединений):

PODKOP_SUBSCRIPTION_APPLY_NOW=1 /usr/bin/podkop subscription_update

Команда получает подписки и применяет накопленные изменения всех секций. При неизменном итоговом конфиге сигнал перезагрузки не отправляется. Само применение через SIGHUP не гарантирует сохранения TCP/UDP-сессий. Предыдущий конфиг сохраняется на время применения для восстановления при обнаруженной ошибке; проверка наличия процесса не является доказательством работы трафика. Обычный перезапуск Podkop или роутера также использует обновлённый кеш. Маркер ожидания находится в /tmp/podkop-subscription-reload.pending и не является постоянным журналом. Кнопка «Применить» во вкладке «Подписки» активна также при наличии скачанных, но ещё не применённых конфигов. Установка самого патча может перезапустить сервисы: обновляйте сначала один роутер в согласованное окно, а не всю сеть одновременно.

Установка и обновление на OpenWrt

Выполнять уже внутри SSH-сессии на роутере:

u=https://raw.githubusercontent.com/moz9/podkop-patch-subscriptions/main/i;f=/tmp/podkop-i;wget --no-check-certificate -O $f $u&&sh $f

Это одна универсальная команда для первой установки и последующих обновлений.

Что делает установщик:

  • если Podkop не установлен, ставит официальный Podkop, затем применяет патч подписок;
  • первая установка проходит без дополнительных вопросов: обязательный конфликтующий https-dns-proxy удаляется через официальный установщик, а русскую локализацию затем ставит сам патч;
  • если установленная версия Podkop входит в список совместимости патча, сохраняет её и не запускает рискованное автоматическое обновление пакетов;
  • официальный Podkop обновляется отдельно: центр обновлений включает принудительное обновление только в совместном режиме Podkop + патч, а из терминала его можно явно запросить с PODKOP_PATCH_FORCE_PODKOP_UPDATE=1;
  • перед обновлением сверяет последнюю версию Podkop со списком совместимости патча и не устанавливает неподдерживаемый релиз;
  • если Podkop старее 0.7.0, останавливается с понятной ошибкой: такие версии требуют ручной миграции официального Podkop;
  • если патч Микс уже актуален, завершает работу с PODKOP_PATCH_NOOP=1;
  • сохраняет настройки Podkop, подписки, кеш подписок и исключённые конфиги.

Если raw.githubusercontent.com недоступен, запасной вариант через CDN. После свежей публикации CDN может некоторое время отдавать предыдущую версию установщика:

u=https://fastly.jsdelivr.net/gh/moz9/podkop-patch-subscriptions@main/i;f=/tmp/podkop-i;wget --no-check-certificate -O $f $u&&sh $f

Если на роутере сломан DNS, но прямой HTTPS до GitHub доступен:

f=/tmp/podkop-i;wget --no-check-certificate --header='Host: raw.githubusercontent.com' -O $f https://185.199.108.133/moz9/podkop-patch-subscriptions/main/i&&sh $f

Этот вариант помогает скачать наш установщик без DNS. Для первой установки официального Podkop всё равно нужен рабочий доступ к GitHub/OpenWrt downloads.

Установщик:

  • перед обновлением сохраняет /etc/config/podkop и /etc/podkop, чтобы не потерять настройки Podkop, кеш подписок и исключённые конфиги;
  • безопасно пропускает автоматическое обновление официального Podkop для любой поддерживаемой установленной версии;
  • скачивает runtime-патч, LuCI-файлы и русскую локализацию;
  • делает резервную копию изменяемых файлов в /root/podkop-patch-subscriptions-backup-*;
  • по умолчанию хранит только 2 последние резервные копии;
  • применяет патч поверх актуального Podkop;
  • проверяет shell-синтаксис;
  • при первом временном сбое запуска один раз повторяет запуск Podkop перед откатом;
  • перезагружает Podkop и LuCI;
  • при ошибке возвращает файлы из резервной копии.

Установка полного набора одной командой

Для установки Podkop с нашим патчем, ByeDPI, Cloudflare WARP и ZeroTier выполните через SSH от root:

wget -O /tmp/owrt-a https://raw.githubusercontent.com/moz9/podkop-patch-subscriptions/main/a && sh /tmp/owrt-a

Скрипт a рассчитан на OpenWrt с opkg или apk и архитектурой aarch64_cortex-a53: это ограничение текущего установщика WARP. На другой архитектуре он остановится до установки пакетов. Нужны рабочий интернет, верное время и доверенные сертификаты HTTPS. Сначала примените или отмените несохранённые изменения LuCI.

Если Podkop отсутствует, скрипт устанавливает официальный Podkop и затем наш патч. После этого устанавливает ByeDPI, WARP и ZeroTier. Недостающие jq, curl и сертификаты устанавливаются через пакетный менеджер. Общего обновления всех пакетов и перезагрузки роутера нет. Перед запуском установщиков скрипт скачивает их, проверяет SHA-256 и shell-синтаксис. Повторный запуск сохраняет существующие настройки.

При первой установке WARP регистрируется и подключается, но весь трафик роутера в туннель автоматически не переводится. ByeDPI запускается с настройками своего установщика. Подписки и списки маршрутизации Podkop нужно задать самостоятельно; для ZeroTier нужны Network ID и разрешение роутера в вашей сети. Частные идентификаторы в скрипт не встроены.

Установщики могут перезапустить Podkop, LuCI и ZeroTier. Запускайте команду в подходящее окно обслуживания, особенно при подключении через ZeroTier. При ошибке скрипт останавливается, сообщает проблемный этап и перечисляет завершённые. Уже установленные компоненты остаются; единого отката всего набора нет. После устранения причины можно повторить ту же команду.

Что добавляет патч

  • режим Микс для чтения proxy-конфигов из HTTP/HTTPS-подписок и ручного добавления отдельных proxy-ссылок;
  • поддержку нескольких подписок в одной секции;
  • кеш последней рабочей версии подписки;
  • бесшовную активацию обновлённого кеша подписок через быструю перезагрузку только sing-box: nftables и dnsmasq не удаляются, а при неизменившемся активном конфиге перезагрузка вообще не выполняется;
  • поддержку подписок Remnawave с ограничением по устройствам: приватный идентификатор роутера отправляется только после явного запроса HWID от провайдера, а подставные конфиги «приложение не поддерживается» безопасно исключаются;
  • фильтрацию неподдерживаемых Podkop конфигов до генерации sing-box;
  • отдельный список неподдерживаемых конфигов в дашборде;
  • вкладку Подписки для включения и исключения отдельных конфигов;
  • транзакционное применение изменений сразу во всех секциях с одной фиксацией и одним перезапуском Podkop; при ошибке после записи настройки и кеши возвращаются из снимка;
  • синхронизацию вкладки с фактическим состоянием после ошибки, чтобы интерфейс не сообщал об отказе при уже применённых изменениях;
  • адаптивные карточки подписок, DNS-результатов, диагностики и дашборда для стандартной темы LuCI и Proton2025, включая мобильные экраны;
  • компактные действия во вкладке Подписки: обновить подписки, ping, быстрый тест скорости, применить и сбросить выбор; обновление самого патча находится в Диагностике;
  • кеш community subnet списков, чтобы быстрый reload не оставлял podkop_subnets пустым;
  • однокнопочный подбор полной связки протокол + основной DNS + bootstrap DNS по реальным запросам с роутера;
  • единый глобальный рейтинг UDP, DoH и DoT: по умолчанию один тест последовательно проверяет все три режима и выбирает лучшую связку независимо от текущего режима Podkop;
  • возможность оставить для теста один или два протокола, чтобы сократить время проверки;
  • статистически устойчивый DNS-тест с прогревом, 8 bootstrap- и 20 основных измерений, медианой, P90 и межквартильным разбросом;
  • проверка совместимости с Google Play, Google CDN, Steam, Microsoft, GitHub и CDN-сервисами; DNS с фильтрацией не выбирается как универсальный, пока доступен стабильный нефильтрующий вариант;
  • после установки выбранной пары выполняются небольшие Google Play download и ChatGPT/OpenAI HTTPS canary, включая официальный OIDC discovery входа ChatGPT; если обязательный загрузочный тракт недоступен, прежние DNS автоматически восстанавливаются;
  • отдельные проверки выбранных community-списков Podkop, включая YouTube, Telegram, Meta, Discord, Twitter и Google AI; недоступный выбранный сервис исключает DNS из надёжных рекомендаций;
  • community-проверки используют отвечающие DNS-имена из актуальных списков allow-domains, чтобы не отклонять все DNS из-за неактивного домена или корня CDN без A-записи;
  • выбор основных и bootstrap DNS для проверки, чтобы не запускать полный каталог при каждом тесте;
  • компактный безопасный набор по умолчанию: Cloudflare, Google и Control D; AdGuard Unfiltered и Mullvad остаются доступны для явного ручного включения;
  • сохраняемые пользовательские DNS-кандидаты отдельно для UDP, DoH и DoT;
  • автоматическая рекомендация только из известных публичных нефильтрующих пар; текущие, пользовательские и WAN DNS остаются в таблице только для сравнения и явной ручной установки;
  • Yandex доступен только как bootstrap DNS и исключён из основного и резервного upstream, обычного каталога, результатов и автоматических рекомендаций;
  • один понятный итог подбора: отдельные карточки основной и независимой резервной связок плюс одна кнопка безопасной установки обеих;
  • подробная таблица по умолчанию свёрнута и остаётся экспертным режимом; сравниваемые, но неподходящие для рекомендации строки установить нельзя;
  • сохранение последнего завершённого теста под раскрываемым блоком даже после установки, отката и повторного открытия страницы;
  • автоматический выбор двух независимых полных DNS-пар: предпочтительной и резервной, по возможности с разными основными и bootstrap-провайдерами;
  • лёгкий watchdog без дополнительного DNS-сервиса: после двух последовательных отказов активной пары он проверяет вторую, переключает весь DNS-тракт Podkop, проверяет sing-box и FakeIP и автоматически откатывает неудачное переключение;
  • отдельные ручные поля протокола, основного и bootstrap DNS для резервной пары; при ручном изменении предпочтительной пары штатная кнопка LuCI снова активирует её;
  • сохранение текущей DNS-пары, когда несколько вариантов статистически равны, чтобы повторные проверки не вызывали случайные переключения;
  • применение рекомендованных DNS с повторной проверкой прикладных доменов через sing-box и dnsmasq, проверкой FakeIP, автоматическим откатом при ошибке и отдельной кнопкой ручного отката;
  • локальная проверка FakeIP через DNS самого роутера без зависимости от внешнего тестового сайта; недоступные браузерные проверки при удалённом доступе или Secure DNS показываются как предупреждение, а не как поломка Podkop;
  • обновление DNS-полей после применения без перезагрузки страницы и без повторного запуска завершённой операции;
  • синхронизация внутреннего UCI-состояния LuCI после фонового применения, чтобы последующий ручной выбор DNS снова штатно сохранялся кнопкой применения;
  • компактный центр обновлений в диагностике: проверка Podkop и патча, безопасное совместное обновление, блокировка неподдерживаемых релизов, просмотр и копирование терминального лога;
  • русские строки интерфейса для добавленных элементов.

Совместимость публикуется в openwrt/update-manifest.json. Новая официальная версия Podkop становится доступна через кнопку обновления только после добавления её в supportedPodkopVersions и проверки патча на этой версии.

Текущая рекомендуемая версия — Podkop 0.7.22; также поддерживаются 0.7.19–0.7.21. Для 0.7.22 поставляется отдельный runtime, собранный после применения всего набора патчей к официальному тегу 0.7.22, поэтому исправленная upstream-проверка sing-box не заменяется старым runtime.

Патч для исходников

Если нужно применить изменения к локальному checkout Podkop:

git clone https://github.com/itdoginfo/podkop.git
git clone https://github.com/moz9/podkop-patch-subscriptions.git
cd podkop
git am ../podkop-patch-subscriptions/patches/*.patch

Runtime-установка для OpenWrt использует отдельные файлы из openwrt/.

About

Podkop patch: Subscription URLTest mode and subscription management tab

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages