attention logo

YouTube и Discord

Ютуб и дискорд не работает через запрет

Обход блокировок дискорда и ютуба доступен ниже
ВПН для YouTube и Discord

DPI

Представь, что на пути твоего интернет-трафика стоит пограничный контроль — система DPI (Deep Packet Inspection)

Эта система проверяет каждый пакет данных, который ты отправляешь и получаешь

Принципально существуют 2 типа DPI
1 Пассивный DPI
Показывает сообщение об ошибкеЭто как получить письмо, что посылка не дошла
2 Активный DPI
Просто блокирует доступЭто как если бы твою посылку просто не пропустили через границу
About DPI

Очень условно (мы не знаем алгоритмов наверняка) это работает так - сервер получает данные с пакетом от вашего роутера и видит определённые закономерности, которые по определённым фильтрам отбрасываются коробочкой ТСПУ

Задача Zapret — обмануть DPI, чтобы он не понял, куда ты идешь

Основные методы обмана Zapret

Разбиение запроса на части (split TCP-сегментация)

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

Zapret делает то же самое с запросами к заблокированным сайтам. Он разбивает запрос на мелкие кусочки (TCP-сегменты) так, чтобы DPI не смог распознать, что это запрос к запрещенному сайту.

Например, вместо GET / HTTP/1.1\r\nHost: blocked.com он отправит сначала GET, а потом / HTTP/1.1\r\nHost: blocked.com.
nfqwsумеет разбивать запрос на уровне отдельных пакетов
tpwsумеет разбивать запрос на уровне TCP-соединения
TCP example
Добавление "мусорных" данных (Fake packets)

Zapret может добавлять к запросу лишние данные, которые не нужны для работы сайта, но сбивают DPI с толку. Это как положить в сумку с запрещенным предметом много ненужных вещей, чтобы запутать досмотр. Эти "мусорные" данные могут быть оформлены как отдельный пакет (режим fake в nfqws), который DPI примет за настоящий запрос. В режиме fakedsplit (nfqws) "мусор" добавляется к оригинальным сегментам запроса, чтобы запутать DPI еще сильнее.

Чтобы "мусорный" пакет не дошел до сервера (иначе он может сломать соединение), используются разные уловки

Неправильная контрольная сумма(badsum): Пакет с ошибкой отбрасывается
Неправильный порядковый номер(badseq): Пакет с неправильным номером отбрасывается
Истекшее время жизни(TTL/autottl): Пакет не доходит до сервера
Снятый флаг ACK(datanoack): Сервер не принимает без подтверждения
Опция MD5 signatureНе все серверы такое понимают, поэтому пакет может быть отброшен
example of fake
Изменение порядка следования сегментов (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.

example of multidisorder

В режиме fakedsplit, он отправляет запрос в порядке: фейк 2-й части, 2 часть, фейк 2-й части, фейк 1-й части, 1 часть, фейк 1-й части.

В режиме fakeddisorder, он отправляет запрос в порядке: фейк 2-й части, 2 часть, фейк 2-й части, фейк 1-й части, 1 часть, фейк 1-й части.

Таким образом, DPI видит только набор фрагментов, возможно, вперемешку с поддельными (fake), и не может понять, что происходит.

Манипуляции с заголовками HTTP

Zapret может менять регистр букв в заголовке Host:, добавлять пробелы или точку в конце имени хоста. Это как изменить надпись на посылке, чтобы ее не узнали.

Например, Host: blocked.com превращается в host: blocked.com.

Разделение 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, потому что там эта информация шифруется.

Автоматическое определение блокировок (autohostlist)

Zapret может анализировать ответы от сервера и определять, был ли запрос заблокирован. Если сайт ведет себя подозрительно (например, не отвечает или возвращает ошибку), Zapret может добавить его в список для обхода. Это как вести черный список сайтов, которые не пускают, и автоматически применять к ним обходные маневры.

Итог

nfqws (Network Filter Queue) работает на уровне отдельных пакетов. Он перехватывает пакеты, идущие к заблокированным сайтам, изменяет их и отправляет дальше. Для его работы нужно настроить правила iptables или nftables, чтобы перенаправлять трафик в nfqws.

tpws (Transparent Proxy) работает на уровне TCP-соединений. Он выступает в роли посредника между роутером и сайтом. Для его работы нужно настроить редирект трафика на tpws с помощью iptables или nftables.

Когда это работать не будет

Важно понимать, что Zapret — это не волшебная палочка, и у него есть свои ограничения. Вот случаи, когда Zapret может не сработать:

Блокировка по IP-адресу

Если провайдер блокирует доступ к сайту не по доменному имени, а по IP-адресу, то Zapret не поможет. Он заточен на обман DPI, который анализирует именно доменные имена.

Пример: Если сайт youtube.com имеет IP-адрес 1.2.3.4, и провайдер заблокировал доступ ко всем сайтам на этом IP, то Zapret не сможет помочь, потому что он не изменяет IP-адрес назначения.

Подмена 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).

Продвинутые системы фильтрации

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

Пример: Провайдер использует DPI, который умеет собирать TCP-соединение целиком и анализировать его, несмотря на разбиение на сегменты или добавление "мусорных" данных.

Такие системы встречаются нечасто, но они существуют и постоянно совершенствуются.

Блокировка на уровне протокола

Если провайдер блокирует не конкретные сайты, а целые протоколы (например, весь трафик, похожий на VPN), то Zapret не поможет. В Китае блокируют многие VPN-протоколы, и обойти такую блокировку очень сложно.

Проблемы на стороне сайта

Иногда сайты могут быть недоступны не из-за блокировок, а из-за проблем на своей стороне, или они изначально блокируют подключение из РФ. В этом случае Zapret, естественно, не поможет.

Если DPI анализирует ответы от сервера

Некоторые DPI хитрые. Они могут пропускать запрос, если он их обманул, но анализировать ответ от сервера. Если в ответе находится информация о заблокированном ресурсе (например, домен в сертификате), то соединение может быть сброшено.

Решение: Использовать сайты, поддерживающие TLS 1.3. В этой версии протокола сертификат сервера передается в зашифрованном виде.