Провайдеры Российской Федерации, в большинстве своем, применяют системы глубокого анализа трафика (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 для заблокированных сайтов. СУММАТЕЛЕКОМ Липецк.
slawod
Стаж: 13 лет 10 мес.
Сообщений: 140
Ratio: 12.032
100%
Автору большое спасибо! Установил GoodbyeDPI как сервис, выставил значение 3. После zenmate и opera vpn всё просто летает. Вот бы ещё полноценную раздачу на торрент клиенте наладить. Ростелеком юг. Ростов на Дону.
dyuss
Стаж: 12 лет 10 мес.
Сообщений: 23
Ratio: 67.313
51.68%
Запустил без ключей - работает. Провайдер - onlime.
Admin Сделайте пометку в теме, что для программы (и запуска её как службы тоже) нужно, чтобы была включена и запущена "Служба базовой фильтрации (BFE)" (Base Filtering Engine) в services.msc Без неё не работает.
Имя службы: BFE Отображаемое имя: Служба базовой фильтрации Описание: Служба базовой фильтрации (BFE) представляет собой службу, которая управляет политиками брандмауэра и политиками IP-безопасности (IPsec), применяя фильтрацию пользовательских режимов. Остановка или отключение службы BFE значительно снижает уровень безопасности системы. Это также приводит к непредсказуемым действиям при управлении IPsec и работе приложений брандмауэра. Тип запуска: Автоматически - это значение по умолчанию!
Если кто-то ценитель т.н. "авторских *сборок Windows" и принципиально игнорирует оригинальные дистрибутивы ОС, или самостоятельно натвикал что-то и "наоптимизировал", не учитывая возможные последствия и потенциальные проблемы в будущем, то кто кому виноват? Все вопросы к себе и к авторам "особенных" *сборок. Вы используете их на свой страх и риск. И мало ли что ещё у кого-то в системе может быть отключено или изменено кем-либо или повреждено... Всего не предусмотришь и всё не опишешь.
Есть достоверная информация, что клиентам многих украинских провайдеров сегодня достаточно использовать ReQrypt для обода местных блокировок избранных российских ресурсов, попавших под местные санкции.
Rabbit_PGN
Стаж: 14 лет 9 мес.
Сообщений: 141
Ratio: 5.556
1.29%
Откуда: НиНо
dimanoid333 писал(а):
Что только ни делал, никакое шаманство не помогает. Только VPN для заблокированных сайтов. СУММАТЕЛЕКОМ Липецк.
тоже самое только нижний новгород. Ни с одним из параметров не доступны заблокированные сайты((
MaxROKR
Стаж: 14 лет 4 мес.
Сообщений: 980
Ratio: 19.93
Раздал: 28.86 TB
100%
Soldszar Admin а может в шапке указать ключи и что они значат? з.ы. из шапки только про -а узнал
Эрект_Стоянов
Стаж: 10 лет 1 мес.
Сообщений: 158
Ratio: 335.583
Раздал: 92.84 TB
85.06%
Откуда: Нью-Васюки
Rabbit_PGN писал(а):
тоже самое только нижний новгород. Ни с одним из параметров не доступны заблокированные сайты((
То же самое. Нижний Новгород, "Дом.ру"
lomatublas
Стаж: 14 лет
Сообщений: 12
Ratio: 3.966
76.24%
Люди знающие, помогите запустить GoodbyeDPI или ReQrypt. И тот и тот процесс завершается секунд через 5. Возможно это связанно с отключенными службами, скажите какие зависимые службы необходимы этим программ? Скриншот: http://funkyimg.com/i/2ymVp.jpg
Ubop0202
Стаж: 8 лет 4 мес.
Сообщений: 17
Ratio: 1.1
1.98%
Парни такой вопрос, провайдер с помощью DPI обрезал скорость скачивания торрент файлов. Это программа поможет вернуть скорость? Или она только для доступа к сайтам?
tramsym
Стаж: 13 лет 2 мес.
Сообщений: 409
Ratio: 207.819
Раздал: 79.81 TB
Поблагодарили: 414
44.26%
Откуда: Из Центра
dyuss писал(а):
Запустил без ключей - работает. Провайдер - onlime.
запустил с ключами и без - не работает, Провайдер - onlime.
[!] Результат: [⚠] Ваш провайдер полностью блокирует доступ к HTTPS-сайтам из реестра. [⚠] У вашего провайдера "обычный" DPI для IPv4. Вам поможет HTTPS/Socks прокси, VPN или Tor.
Добавлено спустя 43 минуты 24 секунды:
tramsym писал(а):
dyuss писал(а):
Запустил без ключей - работает. Провайдер - onlime.
запустил с ключами и без - не работает, Провайдер - onlime.
вообще без всяких ключей заработало! Провайдер - onlime.
StHidde
Стаж: 14 лет 4 мес.
Сообщений: 14
Ratio: 11.085
0.81%
Заметил что при запущенной службе goodbyedpi (да и приложении) не открывается сайт turbobit. При этом в OC W7.ent.X64 установлен антивирус и фаервол от Dr.Web. Решение нашел в настройках фаервола, а именно нужно поставить галку на "GATEWAY : ICS gateway" (Enable this to allow transit IP-protocol traffic.)
Soldszar Admin а может в шапке указать ключи и что они значат? з.ы. из шапки только про -а узнал
Usage: goodbyedpi.exe [OPTION...] -p block passive DPI -r replace Host with hoSt -s remove space between host header and its value -f [value] set HTTP fragmentation to value -e [value] set HTTPS fragmentation to value -a additional space between Method and Request-URI (enables -s, may break sites)
Люди знающие, помогите запустить GoodbyeDPI или ReQrypt. И тот и тот процесс завершается секунд через 5. Возможно это связанно с отключенными службами, скажите какие зависимые службы необходимы этим программ? Скриншот: http://funkyimg.com/i/2ymVp.jpg
для программы (и запуска её как службы тоже) нужно, чтобы была включена и запущена "Служба базовой фильтрации (BFE)" (Base Filtering Engine) в services.msc Без неё не работает. ---- admin не хочет делать пометку
Добавлено спустя 2 минуты 28 секунд:
StHidde Попробуй запускать с дополнительным ключом -e 2
Добавлено спустя 2 минуты 31 секунду:
Ubop0202 шифрование протокола попробуй включить в торрент клиенте
MaxROKR
Стаж: 14 лет 4 мес.
Сообщений: 980
Ratio: 19.93
Раздал: 28.86 TB
100%
Soldszar, пасибки... прям няша... а теперь моджопоп