Сайт не открывается из РФ: диагностика за пять минут
Блокировка, кривой DNS или просто лёг сервер? Разбираемся по симптомам, а не по ощущениям.
«У меня не открывается» — это не диагноз. За этой фразой прячется с десяток разных поломок, и лечатся они по-разному. Ниже порядок, в котором стоит проверять, чтобы не чинить DNS, когда виноват ТСПУ, и не писать хостеру, когда виноват ты.
Шаг 1. Работает ли вообще хоть где-то
Открой проверку из разных стран:
curl host.pink/check/example.comИли в браузере:
host.pink/check/example.com. По умолчанию это HTTPS-запрос GET / с проб
Globalping. Смотри на три группы проб: российские домашние провайдеры (помечены «дом.»), российские дата-центры и заграница.
| Что видишь | Что это значит |
|---|---|
| Всё лежит везде | Упал сервер, сертификат или DNS. Блокировки тут ни при чём |
| Заграница ок, РФ целиком лежит | Похоже на блокировку по IP или проблему маршрута до хостера |
| Дата-центры РФ ок, домашние провайдеры нет | Похоже на ТСПУ: он стоит у операторов связи, а у хостеров настроен по-разному |
| У одних провайдеров ок, у других нет | Блокировка раскатывается неравномерно или у провайдера свой DPI |
Лайфхак
Домашние пробы важнее дата-центровых. По опыту сообщества, ТСПУ стоит на магистралях операторов, а у хостеров «есть у всех, но настроено по-разному». Поэтому «из Selectel открывается» не значит «у пользователей открывается». Отдельный случай — белые списки на мобильных сетях: они режут на уровне IP всё, кроме разрешённых подсетей, и типичный симптом «с Wi-Fi открывается, с мобильного нет». Подробности в базе: ТСПУ: серверная часть.
Шаг 2. Как именно не открывается
Текст ошибки на пробе подсказывает механизм. Для упавшей HTTP-проверки проба Globalping возвращает сообщение ошибки своего HTTP-клиента (Node.js), и мы показываем его первую строку.
read ECONNRESETилиClient network socket disconnected before secure TLS connection was established— соединение оборвали до конца TLS-рукопожатия. Часто это фильтрация по SNI: DPI увидел имя сайта в ClientHello и оборвал соединение. IP при этом может быть вполне доступен.- Таймаут без ответа — пакеты молча выбрасывают. Так выглядит блокировка по IP или подсети, а ещё сломанный маршрут.
- Ответ пришёл, но не тот (редирект на заглушку, чужой сертификат) — провайдерская заглушка на HTTP или подмена.
- Соединение открывается, первые ~16 КБ проходят, потом всё встаёт — так сообщество описывает «блок 16–20»: ТСПУ пропускает первые 16 КБ данных и рвёт соединение к IP. Страница начинает грузиться и зависает, а сервер при этом пингуется.
Чтобы отделить блокировку по имени от блокировки по адресу, проверь голый TCP до IP:
curl "host.pink/check/203.0.113.10:443?t=tcp"Это пинг TCP-рукопожатием (по умолчанию на порт 443), без данных. TCP до IP проходит, а HTTPS по имени рвётся на рукопожатии — похоже, режут по SNI. Не проходит даже TCP — значит, по адресу или маршруту. Но успешный TCP ещё не значит, что адрес чист: при «блоке 16–20» рукопожатие проходит, а данные дальше не идут. Сообщество формулирует так: «пинг не показателен, curl показателен», поэтому сверяйся с HTTP-проверкой.
Шаг 3. DNS
Сравни, что отвечают резолверы в России и за рубежом:
curl "host.pink/check/example.com?t=dns"Проверка запрашивает A-запись через системный резолвер каждой пробы. Если российские пробы получают другие адреса или NXDOMAIN, а заграничные — нормальные, то провайдерский DNS подменяет ответы. Для твоего сервера это лечится DoH/DoT на клиенте. Для чужого сайта это признак, что провайдер блокирует имя на своём DNS.
Заодно проверь сам домен: досье домена покажет NS, DNSSEC и срок регистрации. Истёкший домен выглядит как «блокировка» примерно у всех.
Шаг 4. Где рвётся маршрут
MTR (по ICMP) из российской домашней пробы, а для сравнения из Германии и США, показывает, на каком хопе теряются пакеты:
curl "host.pink/check/203.0.113.10?t=mtr"- Потери начинаются внутри российского оператора и дальше 100% — фильтр или авария у оператора.
- Потери только на последнем хопе — это сервер или его файрвол не отвечает на ICMP. Нормально, если TCP при этом работает.
- Потери на промежуточном хопе, которые дальше пропадают, — роутер просто не любит отвечать на ICMP. Игнорируй.
Шаг 5. Что делать дальше
- Упал сервер — чини сервер, блокировки ни при чём.
- Блокировка по IP — смотри в досье IP, чья это подсеть и не засвечена ли она. Хостеры, у которых целые подсети в немилости, собраны в разделе Хостинги.
- Фильтрация по SNI или протоколу — это уже тема раздела Обход ТСПУ. Там же хронология: что и когда начали резать.
Грабли
Проверить, внесён ли ресурс в реестр, можно на официальном сайте РКН, blocklist.rkn.gov.ru. Сторонние «чекеры реестра» часто врут или давно не обновлялись.
Источники
- Как устроены проверки host.pink: пробы
Globalping, типы
http,ping,tcp,dns,mtr; спецификация API Globalping: TCP-режим ping, DNS через системный резолвер пробы, MTR по ICMP по умолчанию - globalping-probe: HTTP-обработчик: при ошибке в
rawOutputпопадаетerror.message; Node.js lib/internal/tls/wrap.js: текстClient network socket disconnected before secure TLS connection was established - База: ТСПУ: серверная часть (16 КБ, «блок 16–20», белые списки на L3, «пинг не показателен»), Хронология блокировок, БС (белые списки)
- Универсальный сервис проверки ограничения доступа РКН ( страница сервиса на rkn.gov.ru)