Проблема
Директива injectHosts в Xray JSON шаблонах не может инжектировать хосты,
исключённые из сквада пользователя через excludedInternalSquads.
Причина на уровне архитектуры: при генерации подписки SQL-запрос фильтрует
исключённые хосты до того, как список передаётся в applyRemnawaveInjector.
Из-за этого ни type: "uuids" с явными UUID, ни selectFrom: "ALL" не помогают —
исключённых хостов просто нет в allHosts.
Сценарий использования
Типичная задача:
- Есть виртуальный хост-балансировщик, видимый в подписке сквада A
- Есть реальные backend-хосты с определённым тегом, которые исключены из
сквада A черезexcludedInternalSquads(чтобы не показывать их пользователям
напрямую) - Хочется, чтобы балансировщик собирал эти хосты через
injectHostsпо тегу
(tagRegex)
Сейчас это невозможно без одного из двух компромиссов:
- Убрать исключение → хосты станут видны в подписке напрямую (нежелательно)
- Создать скрытые дубликаты хостов специально для балансировщика (дублирование,
неудобно в обслуживании)
Предлагаемое решение
Добавить новое значение для selectFrom (например, "ALL_IGNORE_SQUAD_EXCLUSIONS")
или булевое поле (например, ignoreSquadExclusions: true) в элементы injectHosts,
которое позволяет игнорировать фильтрацию по excludedInternalSquads.
Это позволит реализовать паттерн: «backend-хосты скрыты от прямого листинга в
подписке, но виртуальный балансировщик в этом же скваде может их инжектировать».
Пример конфига
"remnawave": {
"injectHosts": [
{
"selector": { "type": "tagRegex", "pattern": "^my-tag$" },
"tagPrefix": "proxy",
"selectFrom": "NOT_HIDDEN",
"ignoreSquadExclusions": true
}
]
}