Блокировка по ТСПУ и DPI в России: как отличить фильтрацию провайдера по SNI от падения сервера

Обновлено 17.10.2026 | база знаний rkn-test.ru

Сайт отвечает 200 на вашем сервере, в реестре Роскомнадзора домена нет, а абоненты МТС, Билайна или домашнего провайдера видят вечную загрузку. Это похоже на аварию nginx только первые пять минут. Дальше цифры расходятся: TCP до адреса живой, DNS честный, а TLS обрывается ровно в тот момент, когда клиент называет имя хоста. Так выглядит фильтрация по SNI на оборудовании ТСПУ, а не падение origin.

ТСПУ (технические средства противодействия угрозам) стоят на сетях операторов связи. Они смотрят в начало HTTPS-сессии. В ClientHello поле SNI содержит домен в открытом виде, пока не включён Encrypted Client Hello. Фильтр сравнивает это имя со списком и рвёт сессию: RST, timeout или «тихий» обрыв после первых пакетов. Сервер при этом может быть полностью здоров. Задача вебмастера - отличить этот обрыв от реального даунтайма, от реестровой записи и от ошибки сертификата.

Четыре исхода, которые нельзя смешивать

Симптом из РФСимптом снаружи РФDNSНаиболее вероятный слой
Обрыв TLS сразу после ClientHelloРукопожатие и HTTP 200Одинаковый A/AAAAФильтр по SNI на ТСПУ
Таймаут уже на TCP/443TCP тоже не коннектитсяЛюбойСервер, фаервол или маршрут, не DPI
TCP есть, страница режется на 16-32 КБПолное тело ответаОдинаковыйDPI по сессии, часто вместе с SNI
Другой IP или NXDOMAIN только у резолвера провайдераНормальный AРасходитсяDNS-фильтрация, это не падение сервера
Не открывается и снаружи, и из РФТо жеNXDOMAIN или SERVFAILДелегирование, NS, истекший домен. См. 569-ФЗ

Шаг 1. Доказать, что origin жив

Снимите адрес и попробуйте TCP без TLS. Если соединение устанавливается, процесс на 443 слушает порт. Падение сервера на этом шаге уже опровергнуто.

dig +short example.com A
dig +short example.com AAAA

curl -v --connect-timeout 8 --max-time 12 \
  telnet://203.0.113.10:443

curl -sI --http1.1 --max-time 15 \
  --resolve example.com:443:203.0.113.10 \
  https://example.com/

Флаг --resolve убирает спор о DNS: вы сами подставляете адрес, который только что получили. Код 200 или 301 с этой команды, выполненной вне фильтруемой сети, фиксирует: виртуальный хост, сертификат и приложение отвечают. Повторять её «с ноутбука в кафе» бессмысленно, если кафе сидит за тем же оператором, на которого жалуются пользователи.

Шаг 2. Показать, что рвётся именно SNI

OpenSSL умеет отправить ClientHello с именем и без него. Сравнение двух рукопожатий на один и тот же IP - самый прямой тест фильтра по имени. Делайте его из сети, где пользователи видят проблему, и контрольный прогон - с VPS вне этой сети.

# С именем хоста (так ходят браузеры)
echo | openssl s_client -connect 203.0.113.10:443 \
  -servername example.com -brief

# Без SNI: часть фильтров пропускает такой ClientHello
echo | openssl s_client -connect 203.0.113.10:443 -noservername -brief

Если первый вызов заканчивается unexpected eof, Connection reset by peer или зависанием, а второй доходит до сертификата, фильтр реагирует на имя в SNI. Сервер при этом не «лежит»: без имени он отвечает. Если оба вызова умирают одинаково и снаружи РФ тоже, ищите фаервол, security group, истёкший сертификат или процесс, который не слушает 443.

Второй признак DPI, даже когда рукопожатие прошло: тело обрезано. Сравните size_download из РФ и снаружи.

curl -s -o /dev/null \
  -w "http=%{http_code} size=%{size_download} err=%{errormsg}\n" \
  --http1.1 --max-time 20 https://example.com/

Размер 16-32 КБ и обрыв при том, что снаружи приходит полный HTML, - это не «медленный канал» и не лимит nginx limit_rate. Так сессию режет анализ пакетов. На главной rkn-test.ru этот слой называется DPI и считается отдельно от строки «в реестре». Имеет смысл смотреть оба: реестр объясняет юридическое основание, DPI объясняет, почему прямо сейчас не коннектится браузер.

Что не является диагностикой

Один скриншот с телефона, проверка только через VPN и вывод «хостер заблокировал РФ» не разделяют слои. VPN меняет и маршрут, и SNI-путь, и иногда DNS. Он полезен как быстрый симптом «из другой сети открылось», но не говорит, режется имя, адрес или резолвер. Разложите симптом командами выше, затем подтвердите его проверкой домена. Для постоянной картины по нескольким именам удобнее не ручной openssl, а API и мониторинг по тарифу: статус DPI и реестра приходит сам, когда слой меняется.

Если фильтр сидит на IP целиком, смена имени на том же адресе не поможет. Если режется только SNI конкретного домена, новый адрес без смены имени тоже не поможет. Это разные работы: перенос A-записи либо смена домена и аккуратный SEO-переезд, который описан в статье про зеркало без потери трафика. Пока диагноз не записан, не трогайте NS.

На сайт-визитку и статусную страницу можно поставить виджет rkn-test.ru, чтобы поддержка видела тот же вердикт, что и пользователь, а не переписку «у меня открывается». Короткий порядок «VPN есть, у зрителя нет» собран отдельно: диагностика за две минуты.

Вопросы и ответы

Рукопожатие без SNI проходит, а с именем обрывается. Это падение nginx?

Нет. Процесс на 443 отвечает. Фильтр реагирует на имя в ClientHello. Сравнивайте оба вызова openssl с одной и той же сети, где жалуются пользователи.

Оба вызова openssl падают и в РФ, и на зарубежном VPS. Куда смотреть?

Это уже не ТСПУ. Проверяйте фаервол, security group, слушает ли порт 443 и не просрочен ли сертификат. Чекер DPI тут будет вторичен.

Реестр чистый, а curl показывает размер около 20 КБ. Что это значит?

Так выглядит обрыв DPI, если снаружи приходит полное тело. Смотрите слой DPI в проверке, а не только строку про реестр.

Проверить свой домен на блокировку РКН и DPI прямо сейчас

Реестр Роскомнадзора, фильтрация по российскому каналу и статус IP в одной проверке. Для постоянного контроля подключите мониторинг, API или виджет.

Дальше в базе знаний