Skip to content

[Bug] Одинаковый proxy-provider path вызывает смешивание серверов между разными подписками #9

Description

@krikunprojects

Описание проблемы

В стандартном Clash/Mihomo-шаблоне 3x-ui-pro используется фиксированный путь для proxy-provider:

path: ./proxy_providers/base64.yml

Из-за этого разные подписки могут использовать один и тот же локальный файл кэша provider.

Проблема проявилась у меня при использовании нескольких независимых подписок 3x-ui-pro в Koala Clash.

Сама подписка переключается нормально, provider URL у каждой свой, но список серверов может остаться от другой подписки.

Пример

Подписка 1:

proxy-providers:
  sub:
    type: http
    url: https://server-a.example/sub/user-a?provider=1
    path: ./proxy_providers/base64.yml
    interval: 3600

Подписка 2:

proxy-providers:
  sub:
    type: http
    url: https://server-b.example/sub/user-b?provider=1
    path: ./proxy_providers/base64.yml
    interval: 3600

URL разные и каждый из них корректно возвращает свой набор серверов.

Но локальный путь provider в обоих конфигах одинаковый:

./proxy_providers/base64.yml

Как воспроизвести

  1. Добавить в Koala Clash две разные подписки 3x-ui-pro.
  2. В обеих подписках оставить стандартный:
path: ./proxy_providers/base64.yml
  1. Открыть первую подписку и проверить список серверов.
  2. Переключиться на вторую.
  3. Во второй подписке могут остаться серверы из первой.

При этом URL provider во второй подписке правильный и действительно отдаёт другой набор нод.

Причина

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

path: ./proxy_providers/base64.yml

Из-за этого разные профили могут обращаться к одному локальному кэшу provider.

Рабочее решение

После удаления строки:

path: ./proxy_providers/base64.yml

проблема полностью исчезла.

Было:

proxy-providers:
  sub:
    type: http
    url: https://${DOMAIN}/${SUB_PATH}/${SUB_ID}?provider=1
    path: ./proxy_providers/base64.yml
    interval: 3600

Стало:

proxy-providers:
  sub:
    type: http
    url: https://${DOMAIN}/${SUB_PATH}/${SUB_ID}?provider=1
    interval: 3600

После этого Mihomo сам создаёт отдельный кэш для каждого provider URL, и подписки больше не пересекаются.

Ещё один вариант — делать путь уникальным:

path: ./proxy_providers/${SUB_ID}.yml

Но, судя по всему, проще вообще не задавать path.

Ожидаемое поведение

Разные подписки должны использовать разные provider-кэши и не показывать ноды друг друга.

Окружение

  • 3x-ui + mozaroc/3x-ui-pro
  • Koala Clash
  • Mihomo
  • Windows

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions