mistgate Документация
RU

В админке: Доступность

Доступность

Открываются ли ноды изнутри страны, по умолчанию России; раздел «Доступность», три его источника (Globalping, списки блокировок, ТСПУ-зонд), вердикт каждой ноды с её неделей и алерт.

На этой странице

Проверки глазами клиента идут с сервера панели, а он не в той стране, где сидят ваши пользователи, и блокировку там не видит. Поэтому изнутри одной страны (по умолчанию России) смотрят три источника: Globalping, списки блокировок и ТСПУ-зонд. Каждый из них отдельная интеграция, по умолчанию выключенная. Панель складывает то, что они видят, в один вердикт на ноду, хранит его неделю и открывает алерт, когда нода перестаёт открываться.

В админке#

Доступность это отдельный раздел меню, сразу после Здоровья (на телефоне он в Ещё). Его видят все, кому видно Здоровье; источники и страна принадлежат владельцу, и изменение источника просит свежее подтверждение.

  • Шапка: страна, из которой смотрят источники; владелец выбирает её здесь. Страна (по умолчанию RU) одна общая настройка, из неё смотрят все источники. Списки блокировок и ТСПУ-зонд есть только для России.
  • Сводка: сколько нод доступны, с резаным TCP, недоступны, в реестре (в списке блокировок, живьём не проверены) и без данных, в цветах и значках Здоровья. Если все источники выключены, вместо сводки так и написано, и есть ссылка на источники.
  • Ноды: у каждой ноды вердикт сейчас, с той же подсказкой, что в Здоровье, а под ним строка на каждый источник (Globalping, Списки, Зонд): что он говорит сейчас и полоса его вердиктов за 7 дней. Полоса состоит из отрезков цвета вердикта; наведите на отрезок или сфокусируйтесь на нём, чтобы увидеть вердикт, начало и конец, а по полосе можно ходить стрелками. Выключенный источник приглушён, его полосы пустые. На экране уже 1280 пикселей каждая нода становится карточкой, полосы идут под вердиктом.
  • Последние события: алерты country_blocked за последние 7 дней, открытые и закрытые; каждый ведёт к алерту в Здоровье → Алерты.
  • Источники: карточки Globalping, списков блокировок и ТСПУ-зонда.

Здоровье → Проверки по-прежнему показывает вердикт последней колонкой Из России (на телефоне строкой у каждой ноды), а страница ноды строкой среди проверок глазами клиента. Пока выключены все источники, их нет, а их заголовки ведут в этот раздел. В API неделя есть как CountryReachabilityService.GetReachabilityHistory: не больше 7 дней, читается как GetChecks, любой ролью и API-токенами.

Globalping#

Первый источник просит пробы внутри страны (сначала домашние и мобильные сети) пропинговать каждую ноду онлайн и открыть TCP-соединения к её портам, и сравнивает ответы. Для этого используется Globalping, бесплатная сеть проб. Включение отправляет в Globalping IPv4-адрес каждой ноды онлайн, и больше никому.

  • Где: карточка Globalping в Доступность → Источники.
  • Настройки (только владелец): вкл/выкл, интервал в минутах (по умолчанию 15, не меньше 10) и необязательный токен, который только записывается и поднимает бесплатный лимит с 250 до 500 тестов в час. Проверить читает эндпоинт лимитов Globalping и не отправляет адресов. Отключить выключает интеграцию и забывает токен.
  • Выключено значит выключено. Пока интеграция выключена, раунды не стартуют и ничего не отправляется. Идущий раунд отменяется, когда вы выключаете её. Сохранённые результаты живут 7 дней, но API их больше не отдаёт.
  • Что спрашиваем. В каждом раунде участвуют три пробы (две, если так требует бюджет). Каждой ноде: ICMP-пинг адреса и TCP-пинг каждого TCP-порта её активных профилей (VLESS и HTTPS-сайт Hysteria2). Нода, у которой только UDP-профили, получает один ICMP-пинг: в Globalping нет UDP-теста.
  • Контроль. В каждом раунде те же пробы открывают TCP 443 к большому сайту, который в этой стране не блокируют (ya.ru для RU). Проба, не достучавшаяся до него, в этом раунде отбрасывается. Если годных проб меньше двух, вердикт unknown.
  • Вердикт по ноде. ok: TCP соединяется минимум у половины годных проб (для ноды без TCP-портов отвечает ICMP). tcp_blocked: ICMP отвечает минимум у половины, а TCP не проходит ни у одной: запросы на соединение режут, адрес нет. blocked: не проходит ничего. unknown: мало проб, лимит, ошибка, таймаут или смешанная картина, из которой ничего не следует.
  • Бюджет. Раунд стоит (1 контроль + на каждую ноду 1 + число её TCP-портов) x число проб тестов. Если раунды за час съедят больше 80 % лимита, проб становится две, а если и этого много, интервал растягивается (панель пишет об этом в журнал один раз). При лимите раунд получает unknown, а следующий ждёт сброса лимита.
  • Обе редакции. VPS-панель раз в 30 секунд смотрит, не пора ли запускать раунд; редакция Cloudflare делает это из своего cron раз в минуту.

Списки блокировок#

Второй источник проверки из страны: панель сверяет IPv4-адрес каждой активной ноды с публичными списками заблокированных адресов. Списки скачиваются на панель и сверяются там же, поэтому адреса нод панель не покидают. Это отдельная интеграция, по умолчанию выключенная, и работает она только для России: если выбрана другая страна, карточка так и пишет, и ничего не скачивается.

  • Где: карточка Списки блокировок в Доступность → Источники. Её вердикты входят в вердикт ноды там же, в колонку Из России и в строку на странице ноды.
  • Списки. ipsum.lst с antifilter.download, реестр РКН, свёрнутый до подсетей /24; если основной адрес не отвечает, его берут с зеркала antifilter.network. community.lst, адреса, которые нашло заблокированными сообщество. cdn-ip-ranges, диапазоны CDN и хостеров: по нему только называется подсеть ноды («подсеть Hetzner, DE»), вердикт он не ставит. IPv6-адреса не проверяются.
  • Расписание. Раз в 6 часов панель обновляет списки условным запросом (неизменившийся список стоит ответа 304) и заново сверяет все ноды; новая нода сверяется сразу. Списки хранятся только в памяти. Если не скачался ни один список, следующая попытка через 15 минут. Проверить делает это сейчас и показывает дату списков, число префиксов и диапазонов CDN, сколько нод в реестре и ответило ли зеркало. Отключить выключает источник и заодно удаляет скачанные списки и все сохранённые результаты.
  • listed никогда не открывает алерт. Нода, чей адрес есть в списке и которую не проверял ни один живой источник, показывается как listed, жёлтым: в реестре, живьём не проверено. Реестр говорит, что адрес записан, а не что его трафик режут, и один список завалил бы алертами все ноды в людной подсети. Живой вердикт Globalping всегда главнее; списки тогда только добавляют подробности в его подсказку.
  • Выключено значит выключено. Пока источник выключен, ничего не скачивается ни по расписанию, ни по Проверить, и «Здоровье» ничего от него не показывает. Сохранённые результаты скрыты и удаляются через 7 дней.

ТСПУ-зонд#

Третий источник проверки из страны, и единственный, который проверяет TCP-порты ваших нод изнутри страны вашим же железом. Одна из ваших нод в стране, нода-зонд, находит на своём пути коробку национального DPI (ТСПУ), а потом шлёт остальным нодам TCP SYN-пакеты с ограниченным TTL: если пакеты молча гибнут на этой коробке и ни один роутер за ней не отвечает, порт заблокирован. Метод взят у tspu-check и cheburcheck; агент ноды реализует его заново и их код не использует. Это отдельная интеграция, по умолчанию выключенная, и работает она только для России: если выбрана другая страна, карточка так и пишет, и ничего не отправляется.

  • Где: карточка ТСПУ-зонд в Доступность → Источники. Её вердикты входят в вердикт ноды там же, в колонку Из России и в строку на странице ноды; в подсказке указаны нода-зонд и хоп, где стоит коробка (dpi_hop).
  • Настройки (только владелец; изменение требует свежего подтверждения): вкл/выкл, нода-зонд и интервал (по умолчанию 120 минут, не меньше 30). В списке выбора сначала идут ноды выбранной страны. Нодой-зондом можно сделать ноду, которая онлайн и чей агент объявляет country-probe/1; старый агент сначала нужно обновить. Пока нода-зонд не выбрана, ничего не запускается.
  • Взгляд из дата-центра. Нода-зонд стоит в дата-центре, поэтому видит фильтрацию на своём аплинке, а не то, что видит человек в домашней или мобильной сети. Её вердикты идут с уверенностью dc_only, а домашние и мобильные пробы Globalping (eyeball) главнее.
  • Как она входит в вердикт. Для каждой ноды самый свежий запуск считается живым вердиктом: все проверенные порты заблокированы или часть заблокирована, а открытых нет, это tcp_blocked; любой открытый порт даёт ok. Когда Globalping и нода-зонд согласны, вердикт получает лучшую уверенность. Когда расходятся, показывается худший вердикт с уверенностью conflict (лучше ложная тревога, чем пропуск), а подсказка говорит, что увидел каждый. Запуск старше трёх интервалов уже не учитывается. Списки блокировок остаются только подробностями.
  • Что отправляется. Команды ноде-зонду по каналу агента. Дальше нода-зонд шлёт SYN-пакеты на адреса ваших остальных нод онлайн (TCP-порты их включённых профилей, сначала 443; на саму себя никогда) и на два фиксированных адреса страны: контрольный, который не блокируют (Яндекс), и опорный, который ТСПУ режет всегда, по нему и находят коробку. Опорные адреса вшиты в панель; если первый не помог найти коробку, панель пробует следующий. Адреса нод третьим лицам не уходят.
  • Без лишних привилегий. Зонд это обычная попытка TCP-соединения с ограниченным TTL, поэтому агент ноды сохраняет свою закалённую службу: ни сырых сокетов, ни CAP_NET_RAW. Он рассчитывает, что ядро отдаст ответы роутеров подключающемуся сокету. Проверено на одном ядре (Linux 6.6); первый запуск на ноде со старым ядром стоит понаблюдать: если ядро не помогает, он закончится no_dpi_hop или failed.
  • Только TCP. UDP не проверяется. Ноду с Hysteria2 или AWG оценивают по TCP-портам её остальных профилей (VLESS, HTTPS-сайт Hysteria2); нода, у которой только UDP-профили и нет сайта, не получает от этого источника вердикта.
  • Расписание. Раз в интервал панель шлёт ноде-зонду несколько команд подряд (по 6-8 пар «хост и порт»; заблокированная пара перепроверяется отдельно, поэтому одна команда может идти две минуты) и сохраняет каждый ответ сразу, как он пришёл. Следующий запуск наступает, когда самая свежая сохранённая строка старше интервала, поэтому перезапуск панели его не запускает. Занятую ноду-зонд панель спрашивает снова через 5 минут; нода-зонд офлайн или агент без country-probe/1 пропускают раунд. Проверить запускает сейчас (не чаще раза в минуту; это может занять несколько минут) и показывает статус и вердикт по каждой ноде.
  • Статус последнего запуска. ok. control_failed: контрольный адрес за коробкой блокируется в сети ноды-зонда, метод там не работает и вердиктов нет. no_dpi_hop: коробку найти не удалось, ни один опорный адрес не подошёл. busy. failed: нет ответа, слишком старый агент или потеряна связь.
  • Выключено значит выключено. Пока источник выключен, команды не отправляются ни по расписанию, ни по Проверить, и «Здоровье» ничего от него не показывает. Сохранённые строки скрыты на 7 дней. Отключить выключает источник и удаляет сохранённые строки и настройки (ноду-зонд, интервал, последний запуск).
  • В редакции Cloudflare пока нет. Запуск идёт минуты, а у плановых задач той редакции секунды, поэтому карточка пишет, что источник там недоступен, и ничего не запускается (см. Что пока недоступно в этой редакции).

Алерт#

Алерт country_blocked открывается после двух раундов подряд с blocked или tcp_blocked и закрывается после двух раундов с ok; раунды unknown ничего не меняют. Когда включён ТСПУ-зонд, раундом считается раунд Globalping или запуск ноды-зонда, каждый вместе с самым свежим результатом другого источника; ноде, которую видит только нода-зонд, раунд даёт каждый запуск. Список блокировок никогда не считается. Алерт и его сообщение в Telegram называют источники, увидевшие блокировку (globalping, tspu), и уверенность вердикта (eyeball, dc_only или conflict, когда источники расходятся).

Править страницу на GitHub