Провайдеры Российской Федерации, в большинстве своем, применяют системы глубокого анализа трафика (DPI, Deep Packet Inspection) для блокировки сайтов, внесенных в реестр запрещенных.
Не существует единого стандарта на DPI, есть большое количество реализации от разных поставщиков DPI-решений, отличающихся по типу подключения и типу работы.
Существует два распространенных типа подключения DPI: пассивный и активный.
Пассивный DPI — DPI, подключенный в провайдерскую сеть параллельно (не в разрез) либо через пассивный оптический сплиттер, либо с использованием зеркалирования исходящего от пользователей трафика. Такое подключение не замедляет скорость работы сети провайдера в случае недостаточной производительности DPI, из-за чего применяется у крупных провайдеров. DPI с таким типом подключения технически может только выявлять попытку запроса запрещенного контента, но не пресекать ее. Чтобы обойти это ограничение и заблокировать доступ на запрещенный сайт, DPI отправляет пользователю, запрашивающему заблокированный URL, специально сформированный HTTP-пакет с перенаправлением на страницу-заглушку провайдера, словно такой ответ прислал сам запрашиваемый ресурс (подделывается IP-адрес отправителя и TCP sequence). Из-за того, что DPI физически расположен ближе к пользователю, чем запрашиваемый сайт, подделанный ответ доходит до устройства пользователя быстрее, чем настоящий ответ от сайта.
Выявляем и блокируем пакеты пассивного DPI Поддельные пакеты, формируемые DPI, легко обнаружить анализатором трафика, например, Wireshark. Пробуем зайти на заблокированный сайт:
Мы видим, что сначала приходит пакет от DPI, с HTTP-перенаправлением кодом 302, а затем настоящий ответ от сайта. Ответ от сайта расценивается как ретрансмиссия и отбрасывается операционной системой. Браузер переходит по ссылке, указанной в ответе DPI, и мы видим страницу блокировки.
В ответе DPI не устанавливается флаг «Don't Fragment», и в поле Identification указано 1. Серверы в интернете обычно устанавливают бит «Don't Fragment», и пакеты без этого бита встречаются нечасто. Мы можем использовать это в качестве отличительной особенности пакетов от DPI, вместе с тем фактом, что такие пакеты всегда содержат HTTP-перенаправление кодом 302, и написать правило iptables, блокирующее их:
Что это такое? Модуль u32 iptables позволяет выполнять битовые операции и операции сравнения над 4-байтовыми данными в пакете. По смещению 0x4 хранится 2-байтное поле Indentification, сразу за ним идут 1-байтные поля Flags и Fragment Offset. Начиная со смещения 0x60 расположен домен перенаправления (HTTP-заголовок Location). Если Identification = 1, Flags = 0, Fragment Offset = 0, 0x60 = «warn», 0x64 = «ing.», 0x68 = «rt.ru», то отбрасываем пакет, и получаем настоящий ответ от сайта.
В случае с HTTPS-сайтами, DPI присылает TCP Reset-пакет, тоже с Identification = 1 и Flags = 0.
Активный DPI — DPI, подключенный в сеть провайдера привычным образом, как и любое другое сетевое устройство. Провайдер настраивает маршрутизацию так, чтобы DPI получал трафик от пользователей к заблокированным IP-адресам или доменам, а DPI уже принимает решение о пропуске или блокировке трафика. Активный DPI может проверять как исходящий, так и входящий трафик, однако, если провайдер применяет DPI только для блокирования сайтов из реестра, чаще всего его настраивают на проверку только исходящего трафика.
Системы DPI разработаны таким образом, чтобы обрабатывать трафик с максимально возможной скоростью, исследуя только самые популярные и игнорируя нетипичные запросы, даже если они полностью соответствуют стандарту.
Изучаем стандарт HTTP Типичные HTTP-запросы в упрощенном виде выглядят следующим образом:
GET / HTTP/1.1 Host: habrahabr.ru User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:49.0) Gecko/20100101 Firefox/50.0 Accept-Encoding: gzip, deflate, br Connection: keep-alive
Запрос начинается с HTTP-метода, затем следует один пробел, после него указывается путь, затем еще один пробел, и заканчивается строка протоколом и переносом строки CRLF. Заголовки начинаются с большой буквы, после двоеточия ставится символ пробела.
Давайте заглянем в последнюю версию стандарта HTTP/1.1 от 2014 года. Согласно RFC 7230, HTTP-заголовки не зависят от регистра символов, а после двоеточия может стоять произвольное количество пробелов (или не быть их вовсе).
Each header field consists of a case-insensitive field name followed by a colon (":"), optional leading whitespace, the field value, and optional trailing whitespace.
OWS — опциональный один или несколько символов пробела или табуляции, SP — одинарный символ пробела, HTAB — табуляция, CRLF — перенос строки и возврат каретки (\r\n).
Это значит, что запрос ниже полностью соответствует стандарту, его должны принять многие веб-серверы, придерживающиеся стандарта:
GET / HTTP/1.1 hoSt:habrahabr.ru user-agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:49.0) Gecko/20100101 Firefox/50.0 Accept-Encoding: gzip, deflate, br coNNecTion: keep-alive ‡здесь символ табуляции между двоеточием и значением
На деле же, многие веб-серверы не любят символ табуляции в качестве разделителя, хотя подавляющее большинство серверов нормально обрабатывает и отсутствие пробелов между двоеточием в заголовках, и множество пробелов.
Старый стандарт, RFC 2616, рекомендует снисходительно парсить запросы и ответы сломанных веб-северов и клиентов, и корректно обрабатывать произвольное количество пробелов в самой первой строке HTTP-запросов и ответов в тех местах, где требуется только один: Clients SHOULD be tolerant in parsing the Status-Line and servers tolerant when parsing the Request-Line. In particular, they SHOULD accept any amount of SP or HT characters between fields, even though only a single SP is required. Этой рекомендации придерживаются далеко не все веб-серверы. Из-за двух пробелов между методом и путем ломаются некоторые сайты.
Спускаемся на уровень TCP Соединение TCP начинается с SYN-запроса и SYN/ACK-ответа. В запросе клиент, среди прочей информации, указывает размер TCP-окна (TCP Window Size) — количество байт, которые он готов принимать без подтверждения передачи. Сервер тоже указывает это значение. В интернете используется значение MTU 1500, что позволяет отправить до 1460 байтов данных в одном TCP-пакете. Если сервер указывает размер TCP-окна менее 1460, клиент отправит в первом пакете данных столько, сколько указано в этом параметре.
Если сервер пришлет TCP Window Size = 2 в SYN/ACK-пакете (или мы его изменим на это значение на стороне клиента), то браузер отправит HTTP-запрос двумя пакетами:
T / HTTP/1.1 Host: habrahabr.ru User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:49.0) Gecko/20100101 Firefox/50.0 Accept-Encoding: gzip, deflate, br Connection: keep-alive
Используем особенности HTTP и TCP для обхода активного DPI Многие решения DPI ожидают заголовки только в стандартном виде. Для блокировки сайтов по домену или URI, они ищут строку "Host: " в теле запроса. Стоит заменить заголовок «Host» на «hoSt» или убрать пробел после двоеточия, и перед вами открывается запрошенный сайт. Не все DPI можно обмануть таким простым трюком. DPI некоторых провайдеров корректно анализируют HTTP-заголовки в соответствии со стандартом, но не умеют собирать TCP-поток из нескольких пакетов. Для таких DPI подойдет «фрагментирование» пакета, путем искусственного уменьшения TCP Window Size.
В настоящий момент, в РФ DPI устанавливают и у конечных провайдеров, и на каналах транзитного трафика. Бывают случаи, когда одним способом можно обойти DPI вашего провайдера, но вы видите заглушку транзитного провайдера. В таких случаях нужно комбинировать все доступные способы.
Программа для обхода DPI Я написал программу для обхода DPI под Windows: GoodbyeDPI (скачать), см. описание, параметры запуска. Она умеет блокировать пакеты с перенаправлением от пассивного DPI, заменять Host на hoSt, удалять пробел между двоеточием и значением хоста в заголовке Host, «фрагментировать» HTTP и HTTPS-пакеты (устанавливать TCP Window Size), и добавлять дополнительный пробел между HTTP-методом и путем. Преимущество этого метода обхода в том, что он полностью автономный: нет внешних серверов, которые могут заблокировать.
По умолчанию активированы опции, нацеленные на максимальную совместимость с провайдерами, но не на скорость работы. Запустите программу следующим образом:
Если заблокированные сайты стали открываться, DPI вашего провайдера можно обойти. Попробуйте запустить программу с параметром -2 и зайти на заблокированный HTTPS-сайт. Если все продолжает работать, попробуйте режим -3 и -4 (наиболее быстрый). Некоторые провайдеры, например, Мегафон и Yota, не пропускают фрагментированные пакеты по HTTP, и сайты перестают открываться вообще. С такими провайдерами используйте опцию -3 -a
!
Актуальную версию GoodbyeDPI можно скачать также и здесь:
текст из окна Blockcheck почему-то не копируется. Как его скопировать чтобы Вам прислать?
Нажмите Ctrl+C.
ValdikSS писал(а):
Цитата:
Не хочет функционировать. Ругается на отсутствие цифровой подписи у драйвера WinDivert64.sys Пробовал отключить проверку подписи. Но у меня это не срабатывает. Как быть?
Новая возможность: изменение регистра для значения заголовка Host (test.com -> tEsT.cOm); Новая возможность: находить и обрабатывать HTTP-трафик на порту, отличном от 80; Новая возможность: добавление собственных портов TCP для обработки программой; Новая экспериментальная возможность: перенаправление DNS-запросов на заданный IP-адрес и порт.
Добавление собственных портов TCP должно помочь в разблокировке торрент-анонсеров на нестандартом порту, а перенаправление DNS пригодится пользователям с провайдерами, которые подменяют DNS-ответы и перенаправляют сторонние DNS-серверы на свой, при использовании DNS-серверов на нестандартом порту (77.88.8.8:1253)
В общем, у кого блокируются анонсеры некоторых торрент-трекеров, попробуйте запустить программу следующей командой:
* Добавлена функция модификации заголовков HTTP только для доменов из списка (blacklist) Теперь программа не будет добавлять проблем незаблокированным сайтам. Blacklist-файл работает как файл зоны, т.е. модификация HTTP-заголовков применяется ко всем поддоменам внесенного в список домена.
* Скрипты для удобного запуска программы Добавлены скрипты для обновления blacklist и запуска программы с самыми популярными параметрами. 1_russia_blacklist_dnsredir.cmd — запускает программу с опцией "-1" и включенными перенаправлением трафика DNS на нестандартный порт Яндекс.DNS, а также обрабатывает только домены из списка blacklist.txt. Удобный способ для провайдеров, модифицирующих ответы DNS и/или перенаправляющих DNS на свой. 1_russia_blacklist.cmd — то же самое, только без перенаправления трафика DNS. Для провайдеров, не вмешивающихся в DNS-ответы.
ValdikSS 20 Дек 2017 писал(а):
GoodbyeDPI v0.1.3. * Новый способ фрагментации длительных (persistent, keep-alive) HTTP-соединений. Опции -1 и -2 теперь используют его по умолчанию.
ValdikSS 20 Дек 2017 писал(а):
В GoodbyeDPI v0.1.4 добавлена возможность запуска службой Windows. Используйте скрипты service_install*.cmd и service_remove.cmd.
Bugfix: skip loopback and impostor packets injected by other WFP software. Fixes Malwarebytes Web Protection and GoodbyeDPI DNS redirection incompatibility (#53).
ValdikSS 31 Окт 2019 писал(а):
GoodbyeDPI v0.1.6 Новая функция: отправка фейковых HTTP/HTTPS-запросов (опции --set-ttl и --wrong-chksum). На удивление эффективный метод, работает с теми DPI, на которых GoodbyeDPI раньше не работал: ТТК, мобильный Теле2, новый суверенный DPI Ростелекома-Урал, Turk Telekom. https://github.com/ValdikSS/GoodbyeDPI/releases
ValdikSS 25 Дек 2021 писал(а):
GoodbyeDPI v0.1.7 New feature: --native-frag non-Window-Size TCP segmentation and it's companion --reverse-frag, which sends segments in the reverse order to workaround TLS terminators issues with fragmented packets. This is faster and more compatible than using Window Size shrinking.
Bugfix: Fix fake packet handling without other modifying parameters
Fake Packet with wrong SEQ/ACK numbers (--wrong-seq)
New features:
--blacklist option now also applies to TLS (HTTPS websites)
Automatic TTL value picker for set-ttl Fake Packet mode (--auto-ttl) ← very convenient
New modern mode sets (more stable, more compatible, faster): -5 (now default) with native reversed fragmentation and fake packet auto-ttl, and -6 with wrong-seq instead of auto-ttl.
Other changes:
Fake Packet mode (--set-ttl, --wrong-chksum, --wrong-seq) now applies each method to each packet separately, and doesn't combine all methods for a single packet.
У кого перестали открываться HTTPS-сайты за последнюю неделю, пожалуйста, предоставьте мне доступ к вашему интернет-каналу. Можно сделать это через VPN, можно через SSH на виртуальную машину — не принципиально.
ValdikSS 26 декабря 2018 писал(а):
Если ваш провайдер использует DPI, но GoodbyeDPI не разблокирует сайты или разблокирует только частично, либо если сайты перестают открываться вовсе, предлагаю предоставить мне свой интернет-канал, для тестирования разных новых способов обхода DPI и улучшения программы.
Необходимо будет запустить и держать запущенной легковесную (256 MB диска и 256 MB оперативной памяти) виртуальную машину, желательно на отдельном компьютере или сервере, который доступен хотя бы 20 часов в сутки. Потребление трафика ожидается небольшое — до 1 ГБ в месяц. Нагрузка на процессор незначительная. Оставляйте заявки на вступление в группу по ссылке: https://bit.ly/2AfVxlY - необходима учетная запись Google.
В комментарии к заявке укажите ваш регион, название провайдера (и предыдущее название, если провайдера купил более крупный), есть ли возможность запуска виртуальной машины на выделенном компьютере круглосуточно.
Даже если у вас GoodbyeDPI работает нормально, или вы пользуетесь Linux/macOS и готовы предоставить канал — подавайте заявку. Чем больше провайдеров удастся протестировать, тем лучше. В конце января ожидается версия программы для Linux/macOS.
ValdikSS 22 Сен 2019 писал(а):
Сделал специальную версию Blockcheck, для проведения эксперимента с обходом DPI для HTTPS-запросов. Просьба скачать и запустить эту версию, прежде всего тем, у кого GoodbyeDPI не работает с HTTPS-сайтами (особенно на проводном МТС и подобных провайдерах, где включение GoodbyeDPI приводит к недоступности ВСЕХ HTTPS-сайтов).
Эффективное проксирование для обхода блокировок по IP В случае блокировок по IP-адресу, провайдеры фильтруют только исходящие запросы на IP-адреса из реестра, но не входящие пакеты с этих адресов. Программа ReQrypt работает как эффективный прокси-сервер: исходящие от клиента пакеты отправляются на сервер ReQrypt в зашифрованном виде, сервер ReQrypt пересылает их серверу назначения с подменой исходящего IP-адреса на клиентский, сервер назначения отвечает клиенту напрямую, минуя ReQrypt.
Если наш компьютер находится за NAT, мы не можем просто отправить запрос на сервер ReQrypt и ожидать ответа от сайта. Ответ не дойдет, т.к. в таблице NAT не создана запись для этого IP-адреса. Для «пробива» NAT, ReQrypt отправляет первый пакет в TCP-соединении напрямую сайту, но с TTL = 3. Он добавляет запись в NAT-таблицу роутера, но не доходит до сайта назначения.
Долгое время разработка была заморожена из-за того, что автор не мог найти сервер с возможностью спуфинга. Спуфинг IP-адресов часто используется для амплификации атак через DNS, NNTP и другие протоколы, из-за чего он запрещен у подавляющего большинства провайдеров. Но сервер все-таки был найден, хоть и не самый удачный. Разработка продолжается.
Заключение и TL;DR GoodbyeDPI — программа под Windows, позволяющая обходить пассивные и активные DPI. Просто скачайте и запустите ее, и заблокированные сайты станут снова доступны.
Для Linux и роутеровесть аналогичное — zapret от bol-van, а также DPITunnel-cli
Цитата:
Грубо говоря, использует vpnservice или рут и перенаправляет трафик на свой локальный прокси. А там уже так же, как и goodbyedpi. Только тут была одна маленькая проблема: без рут прав была доступна только опция фрагментации пакетов. Это ограничение андроида и линукса. К сожалению, такой метод мало что поможет обойти. Поэтому я решил переписать это все дело, только теперь с использованием рут прав. Получилось это https://github.com/zhenyolka/DPITunnel-clihttps://github.com/nomoresat/DPITunnel-cli Это консольная прога, которая копирует работу goodbyedpi, но предназначена для линукса. Она ещё в стадии развития, но уже хорошо работает на ПК на линуксе, на рутованых андроидах, приставках с андрюшей, некоторый роутерах на arm и т.д. Эта штука также запускает прокси сервер и потом может фрагментировать запросы, отправлять фейковые и т.д. через raw сокеты. Короче, много всего. Но главное, что теперь, в отличие от dpitunnel она может обойти очень многие DPI, очень мало подключений, где она не работает. Может обойти ТСПУ.
Там же в блоке Similar projects смотрите все альтернативы для всех операционных систем, включаяmacOS.
Определить тип блокировки сайтов можно программой Blockcheck. Если в тестах DPI вы видите, что сайты открываются, или видите строку «обнаружен пассивный DPI», то GoodbyeDPI вам поможет. Если нет, используйте кроссплатформенную программу ReQrypt, если ваш провайдер блокирует сайты по IP-адресу.
Пожалуйста, не пишите в этом топике о надстройках к браузерам и прочих методах обхода блокировок, не связанных с вопросами по GoodbyeDPI и ReQrypt. Пожалуйста, не пишите в этом топике багрепорты и просьбы по изменению функционала ReQrypt, обращайтесь к его разработчику basil00 на GitHub'е. Пожалуйста, не захлямляйте топик, не добавляйте работы модераторам, и тем самым не мешайте людям найти полезную информацию по теме.
Не знаю, насколько я отстал от обсуждений по обходам блокировок, но возможно стоит расписать и закрепить в доступных темах, то как сейчас попадаю сюда я (и вероятно кто-нибудь ещё также):
Никаких прокси или vpn и тд - всё нативно, пассивно и очень быстро. Latency ~29мс. Ну и в целом загрузка всего браузере +2х по скорости и ощущениям. Если кто-нибудь даст знак, что актуально накатаю инструкцию с пояснениями.
nn12
Стаж: 14 лет 6 мес.
Сообщений: 46
Ratio: 15.149
4.15%
Doombreed нем понятно где скачать?
Megatron1973
Uploader 100+
Стаж: 14 лет 8 мес.
Сообщений: 919
Ratio: 205.997
Поблагодарили: 259
100%
Doombreed писал(а):
Не знаю, насколько я отстал от обсуждений по обходам блокировок, но возможно стоит расписать и закрепить в доступных темах, то как сейчас попадаю сюда я (и вероятно кто-нибудь ещё также):
Никаких прокси или vpn и тд - всё нативно, пассивно и очень быстро. Latency ~29мс. Ну и в целом загрузка всего браузере +2х по скорости и ощущениям. Если кто-нибудь даст знак, что актуально накатаю инструкцию с пояснениями.
ну поведайте нам
_________________ Float like a butterfly, sting like a bee.
keagenan
Стаж: 3 года 1 мес.
Сообщений: 1
Ratio: 0.568
0%
Здравствуйте. У меня почему всегда разные ip для nnm-club. Поэтому решил использовать обход не по ip а по доменам. Добавил домены nnmclub.to и nnmstatic.win . Какие еще надо добавить,ч тобы сайт нормально открывался, а то иногда очень тормозит и не видно часть картинок?
Пролистал несколько страниц темы, упоминаний не нашел, если были - извиняюсь Обход DPI на Linux без конфигурирования за 2 минуты SpoofDPI - ссылка есть в абзаце Similar projects по ссылке на GoodbyeDPI из первого поста Установка и запуск
У меня FF почему то не хотел работать с ручной прописью прокси в настройках браузера (запросы до spoofDPI не доходили). Если у вас тоже - адрес можно прописать в настройки прокси ОСи, в Firefox выставляете "использовать системные настройки прокси", готово По вкусу - добавить в PATH и запускать демоном, чтобы "не пропадал интернет" при выключенной прокси
обошел dpi через bol-van zapret на keenetic через пакеты opkg по хост листу антизапрета, просто без хост листа некоторые не заблокированные сайты ломались и вылетала страница w3.org видимо иза ttl а если ttl понижал переставали работать заблокированные ресурсы, в итоге так лучше и все сайты не гонятся через zapret, и не заблокированные сайты все работают если что мои параметры дурения dpi --dpi-desync=fake,disorder2 --dpi-desync-ttl=6 --dpi-desync-fooling=badsum
у меня еще и с tll 2 открывались некоторые сайты просто у нашего провайдера два магистрала пришлось вот так что все работало главное через хост лист чтобы не заблокированные сайты через zapret не гонять
Главное иза хост листа потребление памяти роутером выросло примерно на 20 мегабайт
Если модератор разрешит ссылку на инструкцию выложу в эту тему для keenetic
_________________
Topersoft
Стаж: 13 лет 1 мес.
Сообщений: 455
Ratio: 5.57
Поблагодарили: 4
61.06%
djvadim100 Кидай, сейчас такие времена пошли, что любая инструкция на вес золота! Чем больше их, тем больше шанс пробиться.
Kalex
Администратор
Стаж: 17 лет 4 мес.
Сообщений: 45909
Ratio: 128.322
Поблагодарили: 15212
100%
djvadim100 писал(а):
Если модератор разрешит ссылку на инструкцию выложу в эту тему для keenetic
Разрешит, наиболее вероятно, бросайте, а там будет видно. Но если возможно, если объем не гигантский, то лучше всё здесь опубликовать.
я не знаю, что произошло, но сайт стал без свистоперделок открываться. Провайдер ростелеком
mr.xaker0
Стаж: 14 лет 8 мес.
Сообщений: 7
Ratio: 2.33
11.36%
area51-000 писал(а):
я не знаю, что произошло, но сайт стал без свистоперделок открываться. Провайдер ростелеком
Админ ростелекома задолбался рабочий впн искать и снял нафиг этот пупкинский блоклист xD
Likvidator_666
Стаж: 1 год 1 мес.
Сообщений: 175
Ratio: 78.864
Раздал: 7.555 TB
Поблагодарили: 94
100%
Откуда: оттуда, где вас не ждут..
area51-000 Значит у него ТСПУ сломалось, я думаю это времменная неисправность, починят и все будет как и раньше заблочено, а если нет, то можете сказать - goodbye, ростелеком , потому что в случае неисполнения законодальства по блокировкам неугодных партии сайтов, его самого ждет "блокировка" на государственном/юридическом уровне со всеми вытекающими... Даже мой небольшой местечковый провайдер уже наглухо заблочил Тор и некоторые известные VPN сервисы.
ebe1961
Стаж: 12 лет 10 мес.
Сообщений: 73
Ratio: 580.981
Поблагодарили: 403
100%
Люди! Подскажите пожалуйста, на Ростелекоме перестал открываться известный трекер Работает только через VPN. А, вот например, Кинозал, и NNM открываются нормально.
ozr1
Uploader 100+
Стаж: 3 года 7 мес.
Сообщений: 138
Ratio: 6405.082
Раздал: 123.6 TB
100%
ebe1961 писал(а):
на Ростелекоме перестал открываться известный трекер
Если Вы -- про блокировку "р_у_т_р_е_к_е_р_._ц_ц", то этот домен уже добавлен в текущие настройки Антизапрета. При использовании блек-листа от Антизапрета совместно с GoodbyeDPI актуализируйте этот файл блек-листа: он снова стал обновляться (примерно раз в 6 часов).
static. r u t r a c k e r .cc пробелы убрать естессно
в блеклист ручками, на этом домене лежат картинки и прочие штуки, нужные для работы основного сайта. В скачанном файле с антизапрета этого домена нету. Либо юзать обход блокировок вообще без блеклиста, то есть гудбай будет обрабатывать все запросы, даже на не забаненные сайты.