С середины августа 2026 года у части абонентов «Ростелекома», «Дом.ру», «Таттелекома», SkyNet и «Билайна» одновременно перестал работать зашифрованный DNS от Google и Cloudflare. Не зависал, не подтормаживал, а именно перестал отвечать. Причём ложился он по‑разному в зависимости от протокола, и это различие — самое интересное в истории.

Давайте разберём, что именно происходит на проводе, почему DoT и DoH ломаются не одинаково, как это потрогать руками, и что со всем этим делать.


К сожалению, мою первоначальную новость по этой теме удалили за якобы сгенерированный контент и рекламу, а меня перевели в ReadOnly. Я был вынужден с запозданием написать эту статью в Песочницу, чтобы, по словам техподдержки «продемонстрировать желание и умение писать статьи, соответствующие тематике и правилам ресурса»

Немного теории

Обычный DNS — это UDP‑пакет на порт 53, открытым текстом. Провайдер видит каждый ваш запрос к example.com и может подменить ответ, что и используется много лет для блокировок по DNS‑спуфингу.

Есть два способа это обойти:

  • DoT (DNS over TLS) — DNS заворачивается в TLS‑туннель на выделенном TCP порту 853.

  • DoH (DNS over HTTPS) — DNS‑запрос идет как HTTPS‑запрос (обычно POST или GET с base64) на порт 443, тот же самый, на котором работает большинство web сайтов.

Здесь видно ключевое отличие: у DoT есть отдельный, легко узнаваемый порт. У DoH — нет, он прячется в общем потоке HTTPS‑трафика вместе с другими сайтами.

Что сломалось

Первые замеры выложил Telegram‑канал bypassblock, 21 августа, в сети «Билайна». Дальше подтянулись жалобы с других провайдеров.

Итак, DoT к Cloudflare через dnstls:

c:\>dnstls google.com @1.1.1.1 -p853 +tls-host=cloudflare-dns.com
...
Error: read ECONNRESET

TCP SYN/SYN‑ACK/ACK отрабатывает штатно — то есть IP не заблокирован пакетным фильтром на уровне маршрутизации. А вот дальше прилетает RST. Это подача форс‑мажорного сброса TCP‑сессии от посредника в канале (в данном случае ТСПУ)

DoH к Google через curl, с явным указанием IP через --connect-to, чтобы обойти собственный резолвинг curl:

# curl -4 -v --connect-to ::8.8.8.8 https://dns.google --max-time 5
* Connecting to hostname: 8.8.8.8
*   Trying 8.8.8.8:443...
* Connected to (nil) (8.8.8.8) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
*  CAfile: /etc/ssl/certs/ca-certificates.crt
*  CApath: /etc/ssl/certs
* TLSv1.0 (OUT), TLS header, Certificate Status (22):
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* Operation timed out after 5000 milliseconds with 0 bytes received
* Closing connection 0
curl: (28) Operation timed out after 5000 milliseconds with 0 bytes received
# curl -4 -v --connect-to ::8.8.4.4 https://dns.google --max-time 5
* Connecting to hostname: 8.8.4.4
*   Trying 8.8.4.4:443...
* Connected to (nil) (8.8.4.4) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
*  CAfile: /etc/ssl/certs/ca-certificates.crt
*  CApath: /etc/ssl/certs
* TLSv1.0 (OUT), TLS header, Certificate Status (22):
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* Operation timed out after 5001 milliseconds with 0 bytes received
* Closing connection 0
curl: (28) Operation timed out after 5001 milliseconds with 0 bytes received

Здесь другая картина: TCP тоже поднимается, ClientHello уходит, но после этого — тишина. Ни RST, ни ответа. Клиент просто ждёт и потом падает по таймауту. Это уже не активный сброс, а «чёрная дыра» — классический признак DPI.

Обычный незашифрованный запрос на 8.8.8.8:53 при этом у многих продолжал работать. То есть блокируют не IP целиком — что‑то в канале (ТСПУ) смотрит содержимое трафика и выборочно его режет.

Почему DoT “спалить” проще, чем DoH

Это буквально написано в архитектуре протоколов, и разница объясняет асимметрию в поведении блокировок.

DoT живёт на выделенном порту 853. Оборудованию DPI даже не нужно смотреть содержимое пакета — достаточно правила dst_port == 853 -> сброс/дроп. Это тривиальная и дешёвая по ресурсам операция, которую можно повесить на пограничный маршрутизатор ещё на уровне ACL, без глубокого разбора трафика. Именно поэтому DoT ловится и глушится системно и стабильно — 853-й порт мало кто использует для чего‑то ещё, и ущерба почти нет.

DoH же делит порт 443 с половиной интернета. Заблокировать 443 целиком — значит уронить банк‑клиенты, госуслуги и всё остальное. Значит, нужно отличать именно DoH‑сессию от обычного HTTPS‑сайта, находясь при этом всё ещё «снаружи» шифрованного канала (внутри TLS 1.3 всё зашифровано, включая сертификат сервера).

Единственное, что доступно DPI на этом этапе — незашифрованные поля TLS ClientHello:

  • SNI (Server Name Indication) — поле, в котором клиент открытым текстом говорит серверу, к какому домену он подключается. Именно по SNI dns.google или cloudflare-dns.com фильтр и опознаёт DoH‑сессию.

  • набор cipher suite, ALPN, JA3-фингерпринт клиента — по совокупности этих параметров можно с высокой точностью отличить трафик конкретной DoHбиблиотеки от трафика браузера, идущего на обычный сайт.

Наблюдаемая картина прямо соответствует этой модели: DPI разобрал SNI из ClientHello, распознал известный домен резолвера и либо тихо дропнул все последующие пакеты сессии (вариант с Google), либо среагировал чуть раньше и сбросил TCP.

Немного предыстории

В начале июля 2026-го уже была похожая история — TCP‑подключения к Google Public DNS ломались у нескольких крупных операторов, но UDP‑запросы на 53-й порт продолжали работать, и через некоторое время ограничение сняли. Это было похоже на более грубую, тестовую фильтрацию.

Нынешняя волна отличается сразу по нескольким признакам:

  1. Бьёт одновременно и по Google, и по Cloudflare — два независимых поставщика DNS, два разных набора IP‑адресов, два разных протокола.

  2. Затрагивает разных операторов независимо друг от друга — то есть похоже на централизованно распространённую сигнатуру/правило для оборудования ТСПУ, а не на локальную настройку одного оператора.

  3. Точка разрыва — не IP‑уровень, а TLS‑хендшейк, что требует специфичного функционала DPI (разбор ClientHello в реальном времени), а не банального firewall‑правила.

DNS‑спуфинг

Пока часть пользователей воевала с DoH/DoT, у другой части ломался вообще не зашифрованный, а самый обычный DNS — и это принципиально другая история. Симптом на первый взгляд обычный: открываете YouTube — DNS_PROBE_FINISHED_NXDOMAIN. Домен якобы не существует. Но домен, разумеется, существует — просто запрос к 8.8.8.8 или 1.1.1.1 до Google/Cloudflare физически не долетает.

На ТСПУ пакет перехватывается и переадресуется на резолвер НСДИ. Отвечает уже она: на заблокированные домены — «домена не существует», на все остальные ‑честные адреса. Именно поэтому со стороны кажется, что интернет в целом жив, просто конкретный сайт «исчез».

Это отдельный механизм: если там рвётся TLS‑сессия (проблема на уровне транспорта), здесь — подменяется сам ответ по обычному открытому UDP DNS (проблема на уровне контента ответа), причём соединение при этом даже не разрывается.

Как поймать подмену

Флаг aa (Authoritative Answer) в ответе. Легитимный Google Public DNS не является полномочным сервером для чужих доменов — он рекурсивный резолвер, aa‑флага там быть не должно. Если в дампе ответа от «8.8.8.8» вдруг стоит aa — значит отвечал не Google, а кто‑то, кто держит собственную (поддельную) зону:

dig @8.8.8.8 youtube.com ;; flags: qr aa rd ra;   
# aa не должно быть в ответе настоящего Google DNS

TTL‑трюк. В некоторых случаях поведение перехвата можно изменить, отправив один и тот же DNS‑запрос сначала с небольшим TTL, а затем повторно с обычным TTL. Например:

dig @8.8.8.8 youtube.com +bufsize=512 -4 
# в связке с traceroute/tracert на 8.8.8.8 по UDP/53 можно увидеть, 
# что пакет на самом деле разворачивается на 195.208.5.1 (b.res-nsdi.ru), # а не доходит до реального Google

После первого запроса с TTL 2 второй запрос с TTL 64 возвращает настоящий ответ от Google DNS вместо подменённого NXDOMAIN. При TTL 2 пакет с DNS‑запросом вызывает ICMP Time Exceeded, в котором вместо адреса 8.8.8.8 появляется адрес 195.208.5.1 — узла НСДИ. Подробности эксперимента приведены в первоисточнике.

Служебный домен‑маркер whoami.akamai.net. Это специальный домен Akamai, который в ответе честно возвращает IP того резолвера, который его фактически обработал — приём, которым пользуются для диагностики CDN‑маршрутизации.

dig @8.8.8.8 whoami.akamai.net 
# нормальный ответ должен указывать на инфраструктуру Google; 
# если в ответе всплывает адрес из сети MSK-IX — запрос 
# обслуживал не Google, а перехватчик на ТСПУ

А как же DNSSEC — разве он не должен был это ловить?

Формально DNSSEC как раз создан для защиты от подмены DNS‑ответов криптографической подписью. Но на практике он ловит подделку только там, где зона подписана — а youtube.com, rutracker.org и facebook.com подписи не имеют, поэтому валидатор попросту не видит криминала: подмена происходит там, где ему нечего проверять. Продемонстрировать работу DNSSEC‑защиты можно на подписанной зоне — например, torproject.org, где при попытке подмены валидатор сразу выдаст ошибку SERVFAIL с пометкой bogus.

Как проверить у себя, что именно сломано

Проверяем обычный UDP DNS:

dig @8.8.8.8 example.com 
# если отвечает нормально — базовая связность с 8.8.8.8 есть

Проверяем DoT

kdig -d @1.1.1.1 +tls example.com 
# или 
openssl s_client -connect 1.1.1.1:853 -tls1_3 2>&1 | head -20

Смотрим, на каком шаге обрыв: если TCP не поднимается вообще — блокировка по IP/порту грубым способом (ACL/дроп). Если TCP есть, а TLS обрывается сразу после ClientHello — это DPI.

Проверяем DoH

curl -v --resolve dns.google:443:8.8.8.8 https://dns.google/resolve \ 
-H 'accept: application/dns-json' \ 
-G --data-urlencode 'name=example.com' --data-urlencode 'type=A'

Флаг --resolve тут принципиален: он заставляет curl подключаться напрямую по IP, минуя обычный системный DNS, — так вы гарантированно тестируете именно TLS‑сессию к резолверу, а не что‑то ещё в цепочке.

Разделяем SNI‑фильтрацию от блокировки по IP

Если поменять только SNI, оставив IP тот же, и трафик пойдёт — вы нашли SNI‑фильтрацию, а не блокировку по адресу:

curl -v https://1.1.1.1/dns-query \
-H 'host: dns.google' \
-H 'accept: application/dns-json' \
-G --data-urlencode 'name=example.com'

Что с этим делать

  • DNS по TCP (обычный незашифрованный DNS, но через TCP вместо UDP) — часто проходит мимо подмены НСДИ, поскольку перехватывается преимущественно UDP/53.

  • DoT/DoH напрямую по IP‑адресу, минуя резолвинг по доменному имени (--connect-to /--resolve) — иногда проходит, поскольку часть фильтров цепляется именно за SNI/, а не за голый IP. Но это хрупко: как только по IP тоже начнут блокировать, приём перестанет работать.

  • DoH через GoodbyeDPI, zapret (то есть заворачивая сам DoH‑трафик в прокси, сконфигурированный по хостлисту) — лечит именно обрыв TLS‑хендшейка, поскольку DPI перестаёт видеть исходный SNI.

  • Резолвинг внутри полноценного туннеля (весь трафик, включая DNS‑запросы, идёт через VPN) — единственный по‑настоящему надёжный вариант на сегодня: ТСПУ в этом случае не видит ни адреса резолвера, ни самого DNSвопроса, потому что всё это уже завёрнуто в шифрованный туннель на транспортном уровне, а не является отдельной легко узнаваемой TLS/DoH сессией.

И отдельное напоминание про приватность, которое легко упустить за технической стороной: если перехват DNS через НСДИ у вас включён, на государственный резолвер уходят все ваши DNS‑запросы, а не только к заблокированным ресурсам — то есть провайдер (точнее, стоящая на его сети инфраструктура) в этот момент видит полную историю того, куда вы обращаетесь, вне зависимости от того, легален сайт или нет.

Что это значит в целом

Это не единичный случай. С начала года прослеживается вектор: сначала точечные тесты в июле, потом системная одновременная блокировка крупнейших DoH/DoT‑провайдеров в августе и подмена через НСДИ на уровне открытого DNS. Дальше, скорее всего, доберутся и до остальных публичных резолверов.

Итак, практический вывод для тех, кто использовал зашифрованный DNS как дополнительное средство приватности: рассчитывать на этот канал как на постоянный больше не стоит.

Дополнительные источники

На ТСПУ начали перехватывать открытые DNS запросы к 1.1.1.1, 8.8.8.8

Комментарии (59)


  1. Shaman_RSHU
    02.09.2026 13:19

    Проверил, DoT заблокировали, DoH еще в процессе


    1. 0ka
      02.09.2026 13:19

      сделайте

      curl -v https://8.8.8.8:853

      непонятно про какой mitm идёт речь


      1. Shaman_RSHU
        02.09.2026 13:19

        Как-то так
        • Trying 8.8.8.8:853…

        • ALPN: curl offers h2,http/1.1

        • TLSv1.3 (OUT), TLS handshake, Client hello (1):

        • SSL Trust Anchors:

        • CAfile: /etc/ssl/certs/ca‑certificates.crt

        • TLSv1.3 (IN), TLS handshake, Server hello (2):

        • TLSv1.3 (IN), TLS change cipher, Change cipher spec (1):

        • TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):

        • TLSv1.3 (IN), TLS handshake, Certificate (11):

        • TLSv1.3 (IN), TLS handshake, CERT verify (15):

        • TLSv1.3 (IN), TLS handshake, Finished (20):

        • TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):

        • TLSv1.3 (OUT), TLS handshake, Finished (20):

        • SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384 / X25519MLKEM768 / RSASSA‑PSS

        • ALPN: server did not agree on a protocol. Uses default.

        • Server certificate:

        • subject: CN=dns.google

        • start date: Aug 10 08:39:52 2026 GMT

        • expire date: Nov 2 08:39:51 2026 GMT

        • issuer: C=US; O=Google Trust Services; CN=WR2

        • Certificate level 0: Public key type RSA (2048/112 Bits/secBits), signed using sha256WithRSAEncryption

        • Certificate level 1: Public key type RSA (2048/112 Bits/secBits), signed using sha256WithRSAEncryption

        • Certificate level 2: Public key type RSA (4096/152 Bits/secBits), signed using sha384WithRSAEncryption

        • subjectAltName: “8.8.8.8” matches cert’s IP address!

        • OpenSSL verify result: 0

        • SSL certificate verified via OpenSSL.

        • Established connection to 8.8.8.8 (8.8.8.8 port 853) from ***.***.***.*** port 31 474

        • using HTTP/1.x

        GET / HTTP/1.1 Host: 8.8.8.8:853 User‑Agent: curl/8.21.0 Accept: /

        • Request completely sent off

        • TLSv1.3 (OUT), TLS alert, decode error (562):

        • OpenSSL SSL_read: OpenSSL/3.6.4: error:0A000126:SSL routines::unexpected eof while reading, errno 0

        • closing connection #0 curl: (56) OpenSSL SSL_read: OpenSSL/3.6.4: error:0A000126:SSL routines::unexpected eof while reading, errno 0


        1. 0ka
          02.09.2026 13:19

          митма не видно. можете сделать так?

          q -v A youtube.com @tls://8.8.8.8

          клиент https://github.com/natesales/q


          1. Shaman_RSHU
            02.09.2026 13:19

            DEBU Name: youtube.com
            DEBU RR types: [A]
            DEBU Server(s): [tls://8.8.8.8]
            DEBU Using server 8.8.8.8:853 with transport tls
            DEBU Using TLS transport: 8.8.8.8:853
            youtube.com. 5m A 172.253.130.136
            youtube.com. 5m A 172.253.130.190
            youtube.com. 5m A 172.253.130.91
            youtube.com. 5m A 172.253.130.93


            1. 0ka
              02.09.2026 13:19

              Всё работает. Очень странно что чекер пишет про какой-то mitm


              1. Shaman_RSHU
                02.09.2026 13:19

                Запускал на Linux, всякие "специальные средства" были отключены, как на хосте, так и на роутере.


              1. Nemoumbra
                02.09.2026 13:19

                Да просто кривая утилита.


    1. nojecom
      02.09.2026 13:19

      Там походу баг в программе. Такая же картинка, как у вас, однако:


      1. Shaman_RSHU
        02.09.2026 13:19

        Да, бага в утилите. Пересобрал на маке - такая же картина.


  1. 0ka
    02.09.2026 13:19

    уберите, пожалуйста, бред из названия, а именно про "начали блокировать протокол DoH".

    дикий кликбейт, минус за это.

    сами обьяснили в статье почему это невозможно, но оставили название...

    но и c DoT вы нормальной проверки не сделали, блокировка хотя бы по порту или "по протоколу" неочевидна

    про ттл трюк вообще непонятно: вы его странно описали, в команде не сделали, и первоисточник откуда про это узнали не указали - https://habr.com/ru/articles/1075272/, хотя я уже просил вас


    1. Lord_of_Rings Автор
      02.09.2026 13:19

      обьяснили в статье почему это невозможно

      Я этого не говорил. Это сложнее сделать, но не невозможно. ТСПУ с этим справляется. Иначе бы никто не жаловался в том числе на doh.

      Ссылку добавлю.


      1. 0ka
        02.09.2026 13:19

        Тспу справляется с блокировкой популярных резолверов, а не с блокировкой протокола


  1. galaxy
    02.09.2026 13:19

    Нейросеть статью писала?

    TTL-трюк. В некоторых случаях поведение перехвата можно изменить, отправив один и тот же DNS-запрос сначала с небольшим TTL, а затем повторно с обычным TTL. Например:

    dig @8.8.8.8 youtube.com +bufsize=512 -4 

    Где тут TTL?

    curl -v --resolve dns.google:443:8.8.8.8 https://dns.google/dns-query 
    -H 'accept: application/dns-json' 
    -G --data-urlencode 'name=example.com' --data-urlencode 'type=A'

    Бекслешы пропущены. Да и все равно не работает, ибо правильный урл: https://dns.google/resolve

    Если поменять только SNI, оставив IP тот же (например, через curl --connect-to ), и трафик пойдёт — вы нашли SNI-фильтрацию, а не блокировку по адресу:

    Приведенная ниже команда 1) не меняет SNI, 2) не работает


    1. Fobian
      02.09.2026 13:19

      Но ведь...

      Google Public DNS предоставляет два разных API DoH на этих конечных точках:

      Правилен и тот, и тот.


      1. k4ir05
        02.09.2026 13:19

        Но заголовок и параметры неверные. Вы пробовали этот запрос выполнить?


      1. galaxy
        02.09.2026 13:19

        Первый урл (RFC 8484) ожидает параметра dns (DNS запрос в base64).


  1. Hellert
    02.09.2026 13:19

    Не знал, что такую неприкрытую нейронку пропускают в статьи.

    А еще https://habr.com/ru/articles/1075272/


  1. maksd_gt
    02.09.2026 13:19

    Не понял. А есть какя то техническая база под тезисом, что блокируется udp трафик на 853 порту? Довольно радикально сбрасывать весь трафик на 853 порт.


    1. Chris1337
      02.09.2026 13:19

      DoT на 9.9.9.9 вроде как у всех работает, значит никакого сброса по порту не существует.


      1. Yumado
        02.09.2026 13:19

        Похоже на ростелекоме не работает


      1. maksd_gt
        02.09.2026 13:19

        Так dot на 443. У меня в целом сомнения по поводу этой истории есть. Я сетевик и не могу поверить в такие вещи пока не проведу диагностику самостоятельно. С начала блокировок слишком уж много некомпетентной диагностики и выводов "все блокируют и замедляют на тспу" на основе этой диагностики. Ну и статей под громкими заголовками.


        1. ii343hbka
          02.09.2026 13:19

          dot - 853, doh - 443


    1. nidalee
      02.09.2026 13:19

      Почему радикально? Значит до популярных CDN-ов троттлить 443 в нулину нормально, а 853 трогать - фу?


      1. id_Alex
        02.09.2026 13:19

        я если честно удивлён что ркн не прогнул всех операторов в обящательном порядке заворачивать все запросы днс на их Национальную систему доменных имён (НСДИ)!


        1. nidalee
          02.09.2026 13:19

          Так они только начали.


        1. VadimBr
          02.09.2026 13:19

          в процессе


  1. Doaxan
    02.09.2026 13:19

    Было бы здорово, если бы кто-то расписал наихудшие сценарии, чтобы не заниматься постоянной перенастройкой


    1. kenoma
      02.09.2026 13:19

      У вас не будет интернета.


      1. kukovik
        02.09.2026 13:19

        почему только у него? или это и есть как раз для него наихудший, когда у всех есть, а у него нет?


        1. kenoma
          02.09.2026 13:19

          Конечно же он будет у кого надо, что вы как маленький. Но не по причине того, что есть хитрый алгоритм перенастройки.


      1. ki11j0y
        02.09.2026 13:19

        Вернее сказать у вас не будет публичного интернета. Так или иначе отключите doh dot doq


      1. Zhabrozavr
        02.09.2026 13:19

        У вас не будет интернета.

        Наихудший сценарий: у вас не будет интернета и вы будете счастливы.