Проверка показывает timeout, а VPN работает — и наоборот

Встроенная проверка соединения в VPN-клиентах измеряет не ту величину, по которой ломается сеть. Отсюда два симптома: «красное, но работает» и опаснее — «зелёное, но не работает».

2026-08-31 GIGATAP Team #vpn
#vpn#anticensorship#diagnostics#network#troubleshooting

Проверка показывает timeout, а VPN работает — и наоборот

Знакомая картина: в списке серверов половина помечена как недоступная, вы подключаетесь к «недоступному» — и всё открывается. Или наоборот: все индикаторы зелёные, а страницы не грузятся. Оба случая означают одно: проверка и реальная работа измеряют разные вещи. Разберём, почему индикатор ошибается в обе стороны и на что стоит смотреть вместо него.

Это не глюк конкретного приложения. Это следствие того, как устроена встроенная проверка — и того, как устроены современные механизмы ограничения трафика. Они меряют разные вещи.

Что делает встроенная проверка?#

Почти все клиенты используют один и тот же приём: отправить лёгкий HTTP-запрос через соединение и замерить время до ответа. Обычно это запрос к служебной странице вроде generate_204, которая по устройству возвращает пустой ответ без тела.

Через соединение при этом проходит порядка одного-двух килобайт. Проверка отвечает на вопрос «удалось ли установить соединение и получить заголовки быстро».

Это разумная проверка для мира, где соединение либо работает, либо нет.

Почему этого перестало хватать#

Современные механизмы ограничения работают не по принципу «пропустить или отбросить». Они считают.

Cloudflare публично описал наблюдаемое в России с 9 июня 2025 года поведение: соединение позволяет загрузить только первые ~16 КБ любого ресурса, после чего данные перестают идти. Соединение при этом остаётся открытым — нет ни разрыва, ни сообщения об ошибке. Затрагивает и HTTP/1.1, и HTTP/2, и HTTP/3 поверх QUIC.

Сопоставьте два числа:

Объём встроенной проверки ~1–2 КБ
Порог, на котором поток встаёт ~16 КБ

Расхождение на порядок. Соединение, которое замёрзнет на шестнадцатом килобайте, проходит встроенную проверку с отличной латентностью и получает зелёную отметку.

Первый симптом: «красное, но работает»#

Обратная ситуация встречается чаще и пугает меньше.

Проверка помечает сервер как недоступный, потому что она делает много запросов подряд ко многим серверам сразу — обновляет весь список. Часть механизмов ограничения реагирует именно на такую картину: несколько одновременных TLS-соединений к одному адресу за короткое окно выглядят иначе, чем поведение браузера.

Результат: проверка своим массовым опросом провоцирует ровно то ограничение, которое пытается обнаружить. Она измеряет не сеть, а саму себя.

После паузы вы подключаетесь к одному серверу, одним соединением — и всё работает.

Второй симптом: «зелёное, но не работает»#

Этот опаснее, потому что не вызывает подозрений.

Все индикаторы зелёные — проверка прошла на своих полутора килобайтах. Вы открываете страницу, и она грузится наполовину. Или видео стартует и замирает через несколько секунд. Или файл качается до определённого размера и останавливается.

Признак, по которому это опознаётся: отказ происходит не сразу, а после некоторого объёма. Первые байты приходят нормально.

Как проверить самому#

Встроенной проверке в такой ситуации доверять нельзя — нужна проба, которая тянет достаточно данных.

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

Если загрузка стабильно останавливается около одного и того же объёма — вы наблюдаете объёмное ограничение, а не проблему сервера.

Разбор: как выглядят два случая на одном экране#

Нагляднее всего разница видна, если поставить рядом две загрузки одного и того же файла в одну секунду времени.

Нормальная загрузка
байт  0 ─────────────────────────────────────────► 2 МБ
        ▲              ▲              ▲         ▲
        0.1с          1.2с           2.4с      3.8с   завершено

Объёмное ограничение
байт  0 ────────►│                                    (тишина)
        ▲        ▲                                     ▲
        0.1с    0.4с                                  15с+ таймаут
                 └── 16 384 байта, поток встал
                     соединение НЕ разорвано

Ключевое отличие не в скорости, а в том, что во втором случае соединение остаётся открытым. Разрыва нет, ошибки нет — данные просто перестают приходить.

Именно поэтому браузер показывает вечно крутящийся индикатор вместо сообщения об ошибке: с его точки зрения загрузка продолжается.

Числовой пример: почему проверка не видит проблему#

Возьмём конкретные величины и посчитаем.

Что происходит Сколько байт
Рукопожатие защищённого соединения ~4 000
Запрос к служебной странице ~200
Ответ 204 No Content — тело пустое ~150
Итого через соединение ~4 350
Порог, на котором поток встаёт ~16 000

Проверка закончилась на четверти пути до порога. Она физически не могла его достичь — и вернула успех.

Теперь та же арифметика для правильной пробы:

Что происходит Сколько байт
Рукопожатие ~4 000
Загрузка 256 КБ ~262 000
Итого ~266 000

Порог пройден шестнадцатикратно. Если ограничение есть, проба его увидит и запишет, на каком байте поток встал.

Отсюда правило запаса: проба должна быть не «чуть больше порога», а на порядок больше, потому что сам порог наблюдался разными людьми как диапазон, а не как точное число.

Что различать при жалобе на «не работает»#

Полезно разделять симптомы — они указывают на разные причины и лечатся по-разному:

Симптом На что похоже
Соединение не устанавливается вообще ограничение по адресу
Соединение рвётся сразу после установки вмешательство на этапе рукопожатия
Первые килобайты идут, потом тишина объёмное ограничение
Скорость резко занижена, но всё работает ограничение полосы
Не открывается только часть сайтов ограничение по имени, а не по каналу

Последняя строка важна: если через VPN не открывается один конкретный сайт, а остальные работают — проблема, скорее всего, вообще не в VPN.

Что это значит на практике#

Не доверяйте цвету индикатора в обе стороны. Красный сервер стоит попробовать. Зелёный — проверить реальной загрузкой, если поведение странное.

Не обновляйте весь список серверов подряд, если что-то не работает. Массовый опрос ухудшает ситуацию на несколько минут. Попробуйте один сервер, дайте ему время.

Обращайте внимание на объём, а не на скорость. «Медленно» и «останавливается на определённом месте» — разные диагнозы.

Сводка: индикатор, значение, действие#

Что показывает индикатор Что это может значить Что делать
Красный на одном сервере тестовый запрос не прошёл, сервер при этом может работать подключиться и проверить объёмом
Зелёный прошёл малый объём, ограничение просто не проявилось передать сотни килобайт
Красный на всех серверах проблема в сети, у оператора или в разрешении имён проверить контрольный маршрут
Зелёный, но страницы не грузятся ограничение включается после первых килобайт менять маршрут, а не настройки клиента

Столбец «что делать» здесь важнее первых двух: он превращает индикатор из вердикта в подсказку, с чего начать проверку.

Вывод#

Встроенная проверка соединения появилась, когда фильтрация была бинарной: адрес доступен или нет. Сегодня она измеряет величину, которая перестала быть решающей.

Это не значит, что проверка бесполезна — она по-прежнему ловит недоступные адреса и разрывы. Но её зелёная отметка больше не является доказательством работоспособности, а красная — доказательством отказа.

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

Термины#

  • Встроенная проверка - короткий тестовый запрос, которым клиент оценивает доступность сервера перед подключением.
  • Объёмная заморозка - ограничение, при котором соединение устанавливается и передаёт первые килобайты, а затем останавливается.
  • Ложноотрицательный результат - проверка сообщает о недоступности сервера, который в действительности работает.

FAQ: частые вопросы#

Можно ли доверять красному индикатору?#

Нет. Красный статус означает, что не прошёл конкретный тестовый запрос, а не что сервер недоступен. Проверять стоит подключением.

Почему зелёный индикатор не гарантирует работу?#

Потому что тестовый запрос передаёт слишком малый объём. Ограничения, срабатывающие после первых килобайт, в него не попадают.

Как проверить сервер правильно?#

Передать заведомо большой объём — сотни килобайт — и повторить измерение несколько раз, сравнив с заведомо доступным маршрутом.

Что читать дальше#