podkop icon indicating copy to clipboard operation
podkop copied to clipboard

Subscription feature

Open itdoginfo opened this issue 6 months ago • 7 comments

Типы подписок

Нужно уметь добавлять в конфиг два типа подписки:

  1. Sing-box outbound. Его умеют отдавать Marzban и Remna, не умеет 3x-ui. Запрос с user-agent:
curl -A "SFA/1.11.9" URL | jq

Плюс этого подхода "берём как есть", нам не нужно конвертировать. Минусы: теги из подписки, новые\деприкатед фичи.

  1. Список ссылок, который заботливо обёрнут в base64.
curl -A "podkop"  URL | base64 -d

Логика у всех приложений такая: не знаю юзерагент - отдаю base64.

Это самое простое.

Что делать с подпиской

  1. Есть люди, которые хотят чтоб им высветились все варианты которые есть в подписке, и они выбрали один из них. Усложнённая задача: выбор нескольких и все закидываются в urltest.

Тут вопрос в том, как это будет выглядеть в конфиге /etc/conig/podkop и как обрабатываться в LuCI. Хороших идей у меня пока нет. Но, конечно, всем хотелось бы, чтоб подтягивалось по кнопке в LuCI. И вероятно теги записывать в отдельную переменную в конфиге.

Минусы подхода: меняется тег, аутбаунда больше нет.

  1. Более прагматичный и отказоустойчивый подход, который я придумал: выбор по фильтрам. Получаем подписку, прописываем рядом фильтр RU. И все outbound, в которых есть "RU", закидываются в urlrtest. При смене тега, например с "RU Moscow" на "RU Novosibirsk", мы ничего не теряем. В моей подписке и comsub используются флаги стран, надо фильтр проверять на них.

Также тут нужно уметь задавать несколько условий фильтра. Например SE|RU. В этом случае мы заносим в подписку все outbound с тегами, содержащие SE и RU.

Автообновление

Подписку нужно обновлять, чтоб роутер всегда был на свежих outbound. Период обновления:

  • Каждые 10 минут
  • Каждый час
  • Раз в 6 часов
  • Раз в сутки
  • Не обновлять

Добавление функцией должно быть подписки отдельной. И как раз вызов этой функции надо пихать в crontab.

Что я точно не хочу делать

Логика Failover на стороне Podkop. Используем возможности sing-box по максимуму.


Всё обсуждаемо. Пишите ваши идеи и предложения.

itdoginfo avatar Jun 03 '25 09:06 itdoginfo

Минусы подхода: меняется тег, аутбаунда больше нет

Можем сделать selector/urltest, тэг которого мы знаем. Все аутбаунды засунуть туда, не меняя их тэга. Следовательно, в правилах мы можем использовать тэг нашего selector/urltest, не привязываясь к тэгам аутбаундов

Более прагматичный и отказоустойчивый подход, который я придумал: выбор по фильтрам. Получаем подписку, прописываем рядом фильтр RU. И все outbound, в которых есть "RU", закидываются в urlrtest. При смене тега, например с "RU Moscow" на "RU Novosibirsk", мы ничего не теряем. В моей подписке и comsub используются флаги стран, надо фильтр проверять на них.

Мне кажется, ты усложняешь

Каждые 10 минут Каждый час Раз в 6 часов Раз в сутки Не обновлять

"Раз в сутки" и "Не обновлять" достаточно. На обновление аутбаундов нам надо рестартить коробку, делать это каждые 10 минут/час как-то перебор

ampetelin avatar Jun 03 '25 10:06 ampetelin

Мне кажется, ты усложняешь

Ну смотри, есть подписка. Её обновляют, меняя URL и тег. Оставляя только например флаг. В этом случае оно переключается.

"Раз в сутки" и "Не обновлять" достаточно. На обновление аутбаундов нам надо рестартить коробку, делать это каждые 10 минут/час как-то перебор

В случае обновления URL в подписке, человек сидит сутки с неработающей прокси. Но да, надо подумать насчёт рестарта. Если нет изменений, то не рестартить.

itdoginfo avatar Jun 03 '25 11:06 itdoginfo

В случае обновления URL в подписке, человек сидит сутки с неработающей прокси.

Если мы делаем аутбаунды:

  • selector внутри которого urltest + все outbound
  • urltest внутри которого все outbound Если пользователь не менял стандартный выбор selector->urltest то коробка сама переключит на рабочий аутбаунд, доступный из подписки. Да, это не будет работать, если всем серверам поменяют url. Если пользователь выбрал в селекторе конкретный сервер - ну, зайдёт в yacd и прогонит тест, например, чтобы убедиться, что сервер не работает и переключит на другой, рабочий. Либо пойдёт в люсю и жмакнет полное обновление подписки

Если нет изменений, то не рестартить.

Можно, но я честно не знаю, насколько это нужно.

ampetelin avatar Jun 03 '25 12:06 ampetelin

Предложение по резервированию прокси. Кажется с видением реализации подписок сложность в том, что в подписке обычно достаточно много серверов, разные страны, и сложно продумать достаточный функционал, чтобы реализовать точную логику переключения на нужный сервер (в sing-box его толком нет, минимальная задержка и все).

Кажется более распространённая ситуация, когда есть основной прокси и резервный, выбранный самостоятельно.

Как вам идея добавить в подкоп тип конфигурации "Список url-прокси" (или "Urltest"), а уже на уровне sing-box оформлять это в несколько outbounds и простой url-тест

m-nikitin avatar Jul 08 '25 07:07 m-nikitin

выбор по фильтрам

мне очень нравится вариант, независимо возникла точно такая же идея: url подписки + возможность задать фильтр (по умолчанию пустой, все сервера из подписки).

несколько условий фильтра

до этого не додумался, кажется чаще всего нужно фильтровать по стране но конечно несколько условий - более тонкая настройка, супер

m-nikitin avatar Jul 08 '25 09:07 m-nikitin

Очень хотелось бы получить 🙏

VladimirFedulov avatar Sep 16 '25 21:09 VladimirFedulov

@itdoginfo Подскажите, пожалуйста, можно ли вместо ручного прописывания ссылок (я прописываю их из купленной подписки) реализовать функционал загрузки всех ссылок из URL подписки автоматически с интервалом времени с настройкой: Интервал обновления подписки - N часов или выбор из списка предустановленных настроек (например, 1 час, 3 часа, 6 часов, 12 часов, 24 часа)? Соответственно после каждого обновления подписки сразу проверять пинг и подключаться к самому быстрому аутбанду. В промежутке между обновлениями подписки использовать текущий алгоритм с настройками "Интервал проверки URLTest" и "Порог переключения URLTest"

P S. При обновлении подписки все существующие аутбанды затираются.

GeorgeEdward avatar Nov 05 '25 13:11 GeorgeEdward