fix(admin): считать достижимым только тот адрес Traffic Stats API, который админка действительно опрашивает
Проверка принимала любой ip.IsLoopback(), то есть считала рабочим и 127.0.0.5. Это неверно: слушатель на конкретном адресе принимает соединения только на него, а слой proxy обращается строго к http://127.0.0.1:<port>. bind 127.0.0.5:38712 -> dial 127.0.0.1:38712 -> connection refused bind 0.0.0.0:38713 -> dial 127.0.0.1:38713 -> connected Такой адрес выглядел локальным, ломал контур доступа целиком (лимит устройств fail-closed => не подключается никто) и не вызывал у админки ни одного возражения. Принимаются ровно 127.0.0.1, 0.0.0.0 и пустой хост. IPv6-wildcard не принимается сознательно: соединение он принял бы, но HY2XS объявлен IPv4-only, а зависеть в ответе «достучусь» от net.ipv6.bindv6only нельзя. На странице конфигурации мягкое состояние nonCanonicalLoopback убрано: прочий loopback — это ошибка, а не предупреждение. Осталось три состояния: канон профиля, wildcard, недостижим. Свойство закреплено тестом с настоящими сокетами, а гейт приёмки запрещает возврат IsLoopback() и требует негативного случая 127.0.0.5 в тестах.
This commit is contained in:
@@ -346,14 +346,14 @@ export default {
|
||||
trafficStatsMissing: "Traffic Stats API не настроен",
|
||||
trafficStatsMissingHint:
|
||||
"Без секции trafficStats не работают лимит устройств, учёт трафика и принудительное отключение: панель обращается к Hysteria только через этот API.",
|
||||
// Три разные новости об одном поле, и объединять их нельзя: первая
|
||||
// означает, что доступ пиров уже не работает, вторая — что внутренний API
|
||||
// опубликован шире необходимого, третья — просто дрейф от профиля.
|
||||
// Две разные новости об одном поле, и объединять их нельзя: первая
|
||||
// означает, что доступ пиров уже не работает, вторая — что API работает, но
|
||||
// опубликован шире необходимого. Прочие адреса loopback (127.0.0.5 и
|
||||
// подобные) относятся к ПЕРВОЙ: слушатель на конкретном адресе соединения
|
||||
// на 127.0.0.1 не принимает.
|
||||
trafficStatsUnreachable:
|
||||
"панель не может обратиться по этому адресу: Traffic Stats API запрашивается только по loopback. Пока адреса расходятся, лимит устройств, учёт трафика и принудительное отключение не работают",
|
||||
"панель не может обратиться по этому адресу: Traffic Stats API запрашивается строго через 127.0.0.1. Пока адреса расходятся, лимит устройств, учёт трафика и принудительное отключение не работают",
|
||||
trafficStatsWildcard:
|
||||
"API доступен, но слушает все интерфейсы. Production-профиль HY2XS использует 127.0.0.1: выполните hy2xs-orchestrator reconfigure",
|
||||
trafficStatsNonCanonical:
|
||||
"API доступен, но адрес отличается от 127.0.0.1 — оркестратор такой конфигурации не создаёт",
|
||||
},
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user