Subscription feature
Типы подписок
Нужно уметь добавлять в конфиг два типа подписки:
- Sing-box outbound. Его умеют отдавать Marzban и Remna, не умеет 3x-ui. Запрос с user-agent:
curl -A "SFA/1.11.9" URL | jq
Плюс этого подхода "берём как есть", нам не нужно конвертировать. Минусы: теги из подписки, новые\деприкатед фичи.
- Список ссылок, который заботливо обёрнут в base64.
curl -A "podkop" URL | base64 -d
Логика у всех приложений такая: не знаю юзерагент - отдаю base64.
Это самое простое.
Что делать с подпиской
- Есть люди, которые хотят чтоб им высветились все варианты которые есть в подписке, и они выбрали один из них. Усложнённая задача: выбор нескольких и все закидываются в urltest.
Тут вопрос в том, как это будет выглядеть в конфиге /etc/conig/podkop и как обрабатываться в LuCI. Хороших идей у меня пока нет. Но, конечно, всем хотелось бы, чтоб подтягивалось по кнопке в LuCI. И вероятно теги записывать в отдельную переменную в конфиге.
Минусы подхода: меняется тег, аутбаунда больше нет.
- Более прагматичный и отказоустойчивый подход, который я придумал: выбор по фильтрам. Получаем подписку, прописываем рядом фильтр RU. И все outbound, в которых есть "RU", закидываются в urlrtest. При смене тега, например с "RU Moscow" на "RU Novosibirsk", мы ничего не теряем. В моей подписке и comsub используются флаги стран, надо фильтр проверять на них.
Также тут нужно уметь задавать несколько условий фильтра. Например SE|RU. В этом случае мы заносим в подписку все outbound с тегами, содержащие SE и RU.
Автообновление
Подписку нужно обновлять, чтоб роутер всегда был на свежих outbound. Период обновления:
- Каждые 10 минут
- Каждый час
- Раз в 6 часов
- Раз в сутки
- Не обновлять
Добавление функцией должно быть подписки отдельной. И как раз вызов этой функции надо пихать в crontab.
Что я точно не хочу делать
Логика Failover на стороне Podkop. Используем возможности sing-box по максимуму.
Всё обсуждаемо. Пишите ваши идеи и предложения.
Минусы подхода: меняется тег, аутбаунда больше нет
Можем сделать selector/urltest, тэг которого мы знаем. Все аутбаунды засунуть туда, не меняя их тэга. Следовательно, в правилах мы можем использовать тэг нашего selector/urltest, не привязываясь к тэгам аутбаундов
Более прагматичный и отказоустойчивый подход, который я придумал: выбор по фильтрам. Получаем подписку, прописываем рядом фильтр RU. И все outbound, в которых есть "RU", закидываются в urlrtest. При смене тега, например с "RU Moscow" на "RU Novosibirsk", мы ничего не теряем. В моей подписке и comsub используются флаги стран, надо фильтр проверять на них.
Мне кажется, ты усложняешь
Каждые 10 минут Каждый час Раз в 6 часов Раз в сутки Не обновлять
"Раз в сутки" и "Не обновлять" достаточно. На обновление аутбаундов нам надо рестартить коробку, делать это каждые 10 минут/час как-то перебор
Мне кажется, ты усложняешь
Ну смотри, есть подписка. Её обновляют, меняя URL и тег. Оставляя только например флаг. В этом случае оно переключается.
"Раз в сутки" и "Не обновлять" достаточно. На обновление аутбаундов нам надо рестартить коробку, делать это каждые 10 минут/час как-то перебор
В случае обновления URL в подписке, человек сидит сутки с неработающей прокси. Но да, надо подумать насчёт рестарта. Если нет изменений, то не рестартить.
В случае обновления URL в подписке, человек сидит сутки с неработающей прокси.
Если мы делаем аутбаунды:
- selector внутри которого urltest + все outbound
- urltest внутри которого все outbound Если пользователь не менял стандартный выбор selector->urltest то коробка сама переключит на рабочий аутбаунд, доступный из подписки. Да, это не будет работать, если всем серверам поменяют url. Если пользователь выбрал в селекторе конкретный сервер - ну, зайдёт в yacd и прогонит тест, например, чтобы убедиться, что сервер не работает и переключит на другой, рабочий. Либо пойдёт в люсю и жмакнет полное обновление подписки
Если нет изменений, то не рестартить.
Можно, но я честно не знаю, насколько это нужно.
Предложение по резервированию прокси. Кажется с видением реализации подписок сложность в том, что в подписке обычно достаточно много серверов, разные страны, и сложно продумать достаточный функционал, чтобы реализовать точную логику переключения на нужный сервер (в sing-box его толком нет, минимальная задержка и все).
Кажется более распространённая ситуация, когда есть основной прокси и резервный, выбранный самостоятельно.
Как вам идея добавить в подкоп тип конфигурации "Список url-прокси" (или "Urltest"), а уже на уровне sing-box оформлять это в несколько outbounds и простой url-тест
выбор по фильтрам
мне очень нравится вариант, независимо возникла точно такая же идея: url подписки + возможность задать фильтр (по умолчанию пустой, все сервера из подписки).
несколько условий фильтра
до этого не додумался, кажется чаще всего нужно фильтровать по стране но конечно несколько условий - более тонкая настройка, супер
Очень хотелось бы получить 🙏
@itdoginfo Подскажите, пожалуйста, можно ли вместо ручного прописывания ссылок (я прописываю их из купленной подписки) реализовать функционал загрузки всех ссылок из URL подписки автоматически с интервалом времени с настройкой: Интервал обновления подписки - N часов или выбор из списка предустановленных настроек (например, 1 час, 3 часа, 6 часов, 12 часов, 24 часа)? Соответственно после каждого обновления подписки сразу проверять пинг и подключаться к самому быстрому аутбанду. В промежутке между обновлениями подписки использовать текущий алгоритм с настройками "Интервал проверки URLTest" и "Порог переключения URLTest"
P S. При обновлении подписки все существующие аутбанды затираются.