Zapret (Запрет: обход блокировки Дискорда и Ютуба) | Принцип работы
Ютуб и дискорд не работает через запрет. Обход блокировок дискорда и ютуба доступен здесь. ВПН для YouTube и Discord
Система DPI
Представь, что на пути твоего интернет-трафика стоит пограничный контроль — система DPI (Deep Packet Inspection). Эта система проверяет каждый пакет данных, который ты отправляешь и получаешь.
Принципиально существует 2 типа DPI:
- Показать тебе сообщение об ошибке (пассивный DPI): Это как получить письмо, что посылка не дошла.
- Просто заблокировать доступ (активный DPI): Это как если бы твою посылку просто не пропустили через границу.
Очень условно (мы не знаем алгоритмов наверняка) это работает так - сервер получает данные с пакетом от вашего роутера и видит определённые закономерности, которые по определённым фильтрам отбрасываются коробочкой ТСПУ:
Задача Zapret — обмануть DPI, чтобы он не понял, куда ты идешь.
Подробнее про обходы DPI и другие методы мы рассказывали здесь.
Основные методы обмана Zapret
1. Разбиение запроса на части (split TCP-сегментация)
Представь, что ты хочешь пронести через границу запрещенный предмет. Если ты попытаешься пронести его целиком, тебя поймают. Но что, если разобрать его на части и пронести по отдельности?
Zapret делает то же самое с запросами к заблокированным сайтам. Он разбивает запрос на мелкие кусочки (TCP-сегменты) так, чтобы DPI не смог распознать, что это запрос к запрещенному сайту.
Например, вместо GET / HTTP/1.1\r\nHost: blocked.com
он отправит сначала GET
, а потом / HTTP/1.1\r\nHost: blocked.com
.
- nfqws умеет разбивать запрос на уровне отдельных пакетов.
- tpws умеет разбивать запрос на уровне TCP-соединения.
2. Добавление "мусорных" данных (Fake packets)
Zapret может добавлять к запросу лишние данные, которые не нужны для работы сайта, но сбивают DPI с толку.
Это как положить в сумку с запрещенным предметом много ненужных вещей, чтобы запутать досмотр.
Эти "мусорные" данные могут быть оформлены как отдельный пакет (режим fake в nfqws), который DPI примет за настоящий запрос.
В режиме fakedsplit (nfqws) "мусор" добавляется к оригинальным сегментам запроса, чтобы запутать DPI еще сильнее.
Чтобы "мусорный" пакет не дошел до сервера (иначе он может сломать соединение), используются разные уловки:
- Неправильная контрольная сумма (badsum): Пакет с ошибкой отбрасывается.
- Неправильный порядковый номер (badseq): Пакет с неправильным номером отбрасывается.
- Истекшее время жизни (TTL/autottl): Пакет не доходит до сервера, потому что "умирает" по дороге.
- Опция MD5 signature: Не все серверы такое понимают, поэтому пакет может быть отброшен.
- Снятый флаг ACK (datanoack): Сервер не примет пакет без подтверждения (прочитайте про рукопожатие в TCP если хотите узнать подробнее).
3. Изменение порядка следования сегментов (TCP disorder)
Обычно все части пакета отправляются по порядку: 1, 2, 3, 4. Но что, если отправить их в другом порядке, например, 2, 4, 1, 3? Этот пакет всё равно можно прочитать, но тот, кто попытается подсмотреть содержимое по пути, запутается.
TCP disorder — это как раз отправка частей "письма" (TCP-сегментов) в измененном порядке.
Как это делает tpws
tpws — это как почтовое отделение, которое умеет хитрые трюки. Когда запрос отправляется на заблокированный сайт, tpws разбивает его на части (сегменты).
Обычно эти части отправляются по порядку. Но tpws делает вот что: он отправляет каждый второй сегмент с пометкой "Срочно, но не доставлять!" (на самом деле, он выставляет TTL=1, из-за чего пакет "умрет" по пути).
Сервер, получив четные сегменты, не понимает, где остальные, и просит прислать их еще раз.
В итоге, к серверу сегменты приходят в измененном порядке, например: 2, 4, 6, 1, 3, 5. Сервер собирает их воедино и отдает нужную страницу. А DPI, который видит только отдельные куски, не может понять, что это был запрос на заблокированный сайт.
Как это делает nfqws
nfqws — это как специально обученный почтальон, который перехватывает твои письма, разрезает их на части и может отправить их в любом порядке, указанным тобой.
В режиме multidisorder nfqws отправляет сегменты в обратном порядке, например: 4, 3, 2, 1.
В режиме fakedsplit, он отправляет запрос в порядке: фейк 2-й части, 2 часть, фейк 2-й части, фейк 1-й части, 1 часть, фейк 1-й части.
В режиме fakeddisorder, он отправляет запрос в порядке: фейк 2-й части, 2 часть, фейк 2-й части, фейк 1-й части, 1 часть, фейк 1-й части.
Таким образом, DPI видит только набор фрагментов, возможно, вперемешку с поддельными (fake), и не может понять, что происходит.
4. Манипуляции с заголовками HTTP
Zapret может менять регистр букв в заголовке Host:, добавлять пробелы или точку в конце имени хоста.
Это как изменить надпись на посылке, чтобы ее не узнали.
Например, Host: blocked.com
превращается в host: blocked.com
.
5. Разделение TLS ClientHello на два TLS records (tlsrec)
Когда ты заходишь на сайт, защищенный HTTPS, твой браузер и сервер сайта должны договориться о том, как они будут шифровать данные. Этот процесс называется "TLS handshake" (рукопожатие TLS).
Первый шаг в этом процессе — ClientHello. Это сообщение, которое твой браузер отправляет серверу. В нем он говорит: "Привет, я хочу установить защищенное соединение. Я поддерживаю такие-то версии TLS и такие-то алгоритмы шифрования". Также в этом сообщении есть информация о домене, к которому ты подключаешься - SNI (Server Name Indication).
Системы DPI (которые блокируют сайты) тоже "слушают" этот разговор. Они видят ClientHello и, если сайт в списке заблокированных, могут разорвать соединение.
Метод tlsrec в tpws пытается обмануть DPI, разделив ClientHello на две части, которые называются "TLS records" (записи TLS).
Он делит его на две записи TLS. Важно, что в каждой записи есть заголовок, по которому можно понять, что это часть одного сообщения. DPI видит только первую запись, которая сама по себе не похожа на полноценное ClientHello. Он не понимает, что это запрос к заблокированному сайту, и пропускает его.
В России tlsrec обычно не работает с TLS 1.2, потому что DPI анализирует сертификат сервера, который передается в ServerHello (следующее сообщение после ClientHello). Но работает с TLS 1.3, потому что там эта информация шифруется.
6. Автоматическое определение блокировок (autohostlist)
Zapret может анализировать ответы от сервера и определять, был ли запрос заблокирован.
Если сайт ведет себя подозрительно (например, не отвечает или возвращает ошибку), Zapret может добавить его в список для обхода.
Это как вести черный список сайтов, которые не пускают, и автоматически применять к ним обходные маневры.
В итоге
nfqws (Network Filter Queue) работает на уровне отдельных пакетов. Он перехватывает пакеты, идущие к заблокированным сайтам, изменяет их и отправляет дальше. Для его работы нужно настроить правила iptables или nftables, чтобы перенаправлять трафик в nfqws.
tpws (Transparent Proxy) работает на уровне TCP-соединений. Он выступает в роли посредника между роутером и сайтом. Для его работы нужно настроить редирект трафика на tpws с помощью iptables или nftables.
Когда это работать не будет
Важно понимать, что Zapret — это не волшебная палочка, и у него есть свои ограничения. Вот случаи, когда Zapret может не сработать:
1. Блокировка по IP-адресу
- Если провайдер блокирует доступ к сайту не по доменному имени, а по IP-адресу, то Zapret не поможет. Он заточен на обман DPI, который анализирует именно доменные имена.
- Пример: Если сайт youtube.com имеет IP-адрес 1.2.3.4, и провайдер заблокировал доступ ко всем сайтам на этом IP, то Zapret не сможет помочь, потому что он не изменяет IP-адрес назначения.
2. Подмена DNS
- Если провайдер подменяет DNS-запросы, то возможно даже не дойти до стадии, когда сработает Zapret.
- Пример: Ты вводишь youtube.com в браузере, но провайдер подменяет DNS-ответ и вместо реального IP-адреса сайта выдает тебе IP-адрес своей заглушки или вообще неверный адрес. В этом случае твой запрос даже не дойдет до настоящего сайта, и Zapret не сможет вмешаться.
- Решение: Использовать DNS over HTTPS (DoH) или DNS over TLS (DoT), чтобы защитить свои DNS-запросы от подмены. Также можно попробовать использовать DNS-сервер, который не контролируется провайдером, например, публичные DNS от Google (8.8.8.8, 8.8.4.4) или Cloudflare (1.1.1.1, 1.0.0.1).
3. Продвинутые системы фильтрации
Если провайдер использует очень продвинутую систему фильтрации, которая умеет анализировать не только заголовки, но и содержимое трафика, то Zapret может не справиться.
- Пример: Провайдер использует DPI, который умеет собирать TCP-соединение целиком и анализировать его, несмотря на разбиение на сегменты или добавление "мусорных" данных.
- Такие системы встречаются нечасто, но они существуют и постоянно совершенствуются.
4. Блокировка на уровне протокола
Если провайдер блокирует не конкретные сайты, а целые протоколы (например, весь трафик, похожий на VPN), то Zapret не поможет.
В Китае блокируют многие VPN-протоколы, и обойти такую блокировку очень сложно.
5. Проблемы на стороне сайта
Иногда сайты могут быть недоступны не из-за блокировок, а из-за проблем на своей стороне, или они изначально блокируют подключение из РФ. В этом случае Zapret, естественно, не поможет.
6. Если DPI анализирует ответы от сервера
Некоторые DPI хитрые. Они могут пропускать запрос, если он их обманул, но анализировать ответ от сервера. Если в ответе находится информация о заблокированном ресурсе (например, домен в сертификате), то соединение может быть сброшено.
Решение: Использовать сайты, поддерживающие TLS 1.3. В этой версии протокола сертификат сервера передается в зашифрованном виде.
Статья подготовлена группой https://t.me/bypassblock