Goodbyedpi не работает windows 10

Содержание
  1. Автономный способ обхода DPI и эффективный способ обхода блокировок сайтов по IP-адресу
  2. Пассивный DPI
  3. Выявляем и блокируем пакеты пассивного DPI
  4. Активный DPI
  5. Изучаем стандарт HTTP
  6. Спускаемся на уровень TCP
  7. Используем особенности HTTP и TCP для обхода активного DPI
  8. Программа для обхода DPI
  9. Эффективное проксирование для обхода блокировок по IP
  10. Заключение и TL;DR
  11. Windows 10 x64 1809 — does not work at all #105
  12. Comments
  13. gjf commented Oct 11, 2018
  14. Atavic commented Oct 11, 2018
  15. gjf commented Oct 11, 2018
  16. ValdikSS commented Oct 14, 2018
  17. Trojaner commented Nov 5, 2018
  18. ValdikSS commented Nov 6, 2018
  19. gjf commented Nov 7, 2018
  20. ValdikSS commented Nov 7, 2018
  21. gjf commented Nov 7, 2018
  22. Trojaner commented Nov 7, 2018 •
  23. Kekkonshiki commented Dec 23, 2018
  24. ValdikSS commented Dec 23, 2018
  25. Kekkonshiki commented Dec 23, 2018
  26. ValdikSS commented Dec 23, 2018
  27. Kekkonshiki commented Dec 23, 2018
  28. ValdikSS commented Dec 23, 2018
  29. Kekkonshiki commented Dec 24, 2018 •
  30. Kekkonshiki commented Dec 25, 2018
  31. ValdikSS commented Dec 25, 2018
  32. Kekkonshiki commented Jan 3, 2019 •
  33. ValdikSS commented Jan 3, 2019
  34. Kekkonshiki commented Jan 4, 2019
  35. ValdikSS commented Jan 4, 2019
  36. Kekkonshiki commented Jan 4, 2019
  37. YoulianBoshi commented Jan 8, 2019
  38. FlynnRider3000 commented Jan 23, 2019
  39. ValdikSS commented Jan 23, 2019
  40. FlynnRider3000 commented Jan 25, 2019
  41. r4sas commented Jan 25, 2019 •
  42. FlynnRider3000 commented Jan 27, 2019
  43. ValdikSS commented Jan 27, 2019
  44. ValdikSS commented Jan 28, 2019 •
  45. ValdikSS commented Jan 28, 2019
  46. FlynnRider3000 commented Jan 28, 2019
  47. r4sas commented Feb 5, 2019
  48. Nebula-Mechanica commented Jun 10, 2020 •
Читайте также:  Как починить при проводку

Автономный способ обхода DPI и эффективный способ обхода блокировок сайтов по IP-адресу

Провайдеры Российской Федерации, в большинстве своем, применяют системы глубокого анализа трафика (DPI, Deep Packet Inspection) для блокировки сайтов, внесенных в реестр запрещенных. Не существует единого стандарта на DPI, есть большое количество реализации от разных поставщиков DPI-решений, отличающихся по типу подключения и типу работы.

Существует два распространенных типа подключения DPI: пассивный и активный.

Пассивный DPI

Пассивный DPI — DPI, подключенный в провайдерскую сеть параллельно (не в разрез) либо через пассивный оптический сплиттер, либо с использованием зеркалирования исходящего от пользователей трафика. Такое подключение не замедляет скорость работы сети провайдера в случае недостаточной производительности DPI, из-за чего применяется у крупных провайдеров. DPI с таким типом подключения технически может только выявлять попытку запроса запрещенного контента, но не пресекать ее. Чтобы обойти это ограничение и заблокировать доступ на запрещенный сайт, DPI отправляет пользователю, запрашивающему заблокированный URL, специально сформированный HTTP-пакет с перенаправлением на страницу-заглушку провайдера, словно такой ответ прислал сам запрашиваемый ресурс (подделывается IP-адрес отправителя и TCP sequence). Из-за того, что DPI физически расположен ближе к пользователю, чем запрашиваемый сайт, подделанный ответ доходит до устройства пользователя быстрее, чем настоящий ответ от сайта.

Выявляем и блокируем пакеты пассивного DPI

Поддельные пакеты, формируемые DPI, легко обнаружить анализатором трафика, например, Wireshark.
Пробуем зайти на заблокированный сайт:

Мы видим, что сначала приходит пакет от DPI, с HTTP-перенаправлением кодом 302, а затем настоящий ответ от сайта. Ответ от сайта расценивается как ретрансмиссия и отбрасывается операционной системой. Браузер переходит по ссылке, указанной в ответе DPI, и мы видим страницу блокировки.

Читайте также:  Как настроить панель закладок опера

Рассмотрим пакет от 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, подключенный в сеть провайдера привычным образом, как и любое другое сетевое устройство. Провайдер настраивает маршрутизацию так, чтобы DPI получал трафик от пользователей к заблокированным IP-адресам или доменам, а DPI уже принимает решение о пропуске или блокировке трафика. Активный DPI может проверять как исходящий, так и входящий трафик, однако, если провайдер применяет DPI только для блокирования сайтов из реестра, чаще всего его настраивают на проверку только исходящего трафика.

Системы DPI разработаны таким образом, чтобы обрабатывать трафик с максимально возможной скоростью, исследуя только самые популярные и игнорируя нетипичные запросы, даже если они полностью соответствуют стандарту.

Изучаем стандарт HTTP

Типичные HTTP-запросы в упрощенном виде выглядят следующим образом:

Запрос начинается с HTTP-метода, затем следует один пробел, после него указывается путь, затем еще один пробел, и заканчивается строка протоколом и переносом строки CRLF.
Заголовки начинаются с большой буквы, после двоеточия ставится символ пробела.

Давайте заглянем в последнюю версию стандарта HTTP/1.1 от 2014 года. Согласно RFC 7230, HTTP-заголовки не зависят от регистра символов, а после двоеточия может стоять произвольное количество пробелов (или не быть их вовсе).

OWS — опциональный один или несколько символов пробела или табуляции, SP — одинарный символ пробела, HTAB — табуляция, CRLF — перенос строки и возврат каретки (\r\n).

Это значит, что запрос ниже полностью соответствует стандарту, его должны принять многие веб-серверы, придерживающиеся стандарта:

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

Старый стандарт, 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-запрос двумя пакетами:

Пакет 1:
Пакет 2:

Используем особенности 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

Эффективное проксирование для обхода блокировок по 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.

Используйте кроссплатформенную программу ReQrypt, если ваш провайдер блокирует сайты по IP-адресу.

Определить тип блокировки сайтов можно программой Blockcheck. Если в тестах DPI вы видите, что сайты открываются, или видите строку «обнаружен пассивный DPI», то GoodbyeDPI вам поможет. Если нет, используйте ReQrypt.

Дополнительная полезная информация есть здесь и здесь.

Источник

Windows 10 x64 1809 — does not work at all #105

Comments

gjf commented Oct 11, 2018

I’ve tried to start 3_all_dnsredir_hardcore.cmd — and nothing happened.
As far as I understand at least dns server should be changed, but it looks like it remains the same. So all blocked websites cannot be even resolved.

The text was updated successfully, but these errors were encountered:

Atavic commented Oct 11, 2018

While [this] isn’t implemented yet. have you run the file as Admin?

gjf commented Oct 11, 2018

While [this] isn’t implemented yet. have you run the file as Admin?

Sure I run it as Admin.

ValdikSS commented Oct 14, 2018

DNS queries are redirected to another DNS server transparently, you won’t see any changes in interface DNS configuration.
Please describe in details what exactly doesn’t work. How did you try to resolve DNS? nslookup does not use OS dns lookups and will be broken with GoodbyeDPI. All other software should work.

Trojaner commented Nov 5, 2018

ValdikSS commented Nov 6, 2018

@gif can you provide details for this issue?

gjf commented Nov 7, 2018

@ValdikSS the issue is very simple: nothing happens and the blocking is still active.
According to your information DNS should remain the same — so it is not indication that the program does not work.
Also I cannot use nslookup to check it.

Please provide instruction what I have to test — because what I see is that all blocked resources are still blocked and I cannot check what is wrong in normal way.

ValdikSS commented Nov 7, 2018

@gjf Are the domains you’re trying to resolve do successfully resolve without GoodbyeDPI running? Have you checked if your ISP block external DNS servers by manually trying to resolve via different public servers? Or maybe it blocks DNS queries on non-standard port (GoodbyeDPI cmd file uses 77.88.8.8:1253)?
Do you even see GoodbyeDPI console window upon running cmd file? Is the issue is only with DNS? Have you tried to start GoodbyeDPI using other cmd files which do not set dnsredir?

gjf commented Nov 7, 2018

I will try as soon as I will be able to connect to VPN with provider blocking and let you know.

Trojaner commented Nov 7, 2018 •

Try running GoodbyeDPI with no DNS redirection and then install Simple DNSCrypt (don’t forget to start its service and to set it up correctly), this should prevent hijacking of DNS servers.

Kekkonshiki commented Dec 23, 2018

Подтверждаю, на Win10 LTSC (v1809) ничего не происходит. Такое чувство, будто windivert перестал работать

ValdikSS commented Dec 23, 2018

@SiegHeil, как именно «ничего не происходит»? Сделайте скриншот, или запишите видео.

Kekkonshiki commented Dec 23, 2018

@ValdikSS как если бы всё перестало работать, т.е. всё также запускается как и ранее, но при этом никакие механизмы не отрабатывают. Точно такая же ситуация с другими продуктами, использующими windivert. Может какой лог можно сформировать или ещё что-то, т.к. по скриншоту или видео ничего понятно не будет (ошибок или сообщений никаких не выдаёт)

ValdikSS commented Dec 23, 2018

@SiegHeil У вас установлен какой-либо антивирус или что-то подобное, что могло бы влиять на трафик?

Kekkonshiki commented Dec 23, 2018

@ValdikSS ничего, кроме стандартного защитника Windows

ValdikSS commented Dec 23, 2018

Какие еще программы, использующие WinDivert, так же себя ведут?

Kekkonshiki commented Dec 24, 2018 •

@ValdikSS nodevfee на базе windivert’а также перестала работать.
Чувство, будто что-то из защитных механизмов новой Windows ему мешает

Kekkonshiki commented Dec 25, 2018

Может какое логгирование запустить можно, чтобы хоть немного помочь разобраться что происходит?

ValdikSS commented Dec 25, 2018

Я обновил виртуалку до 1809, GoodbyeDPI продолжает работать. Даже не знаю.

Kekkonshiki commented Jan 3, 2019 •

@ValdikSS Может какой режим есть возможность добавить, который бы максимально логировал происходящее? Есть большое желание понять чего не так с моей Win10 LTSC
Вот эта «пиратская» софтина с WinDivert внутри работает без проблем, но только она

ValdikSS commented Jan 3, 2019

Вот эта версия будет писать о каждом полученном пакете.
goodbyedpi-x86_64-debug.zip

Kekkonshiki commented Jan 4, 2019

@ValdikSS Прогнал на нескольких вариантах. В каких-то случаях выкидывает заглушку от ТТК (мой провайдер), а в других просто ничего не происходит
log.zip

ValdikSS commented Jan 4, 2019

Kekkonshiki commented Jan 4, 2019

@ValdikSS Отправил на указанное в статье е-мыло, но у меня закрались подозрения, что это ТТК во всём виноват в данном случае, а другой софт не работает по иным причинам

YoulianBoshi commented Jan 8, 2019

FlynnRider3000 commented Jan 23, 2019

Добрый день!
Также не работает на win10 LTSC. Только rutracker открывает. На других сайтах зависает. Может проблема в том, что на win10 нет необходимых dll?
win10 64 LTSC

win7 64

ValdikSS commented Jan 23, 2019

@FlynnRider3000 если rutracker открывается, значит программа работает. В чём конкретно проблема? Если программа не разблокирует сайты у вашего провайдера, это не означает, что она не работает — DPI вашего провайдера просто не совместим с GoodbyeDPI.

FlynnRider3000 commented Jan 25, 2019

Провайдер ростелеком
На win 7 64 все работает отлично, все заблокированные сайты открываются
На win 10 64 LTSC rutracker открывается, но многие заблокированные сайты не открываются, например telegram.org, fonbet.com, просто зависают. Рядом на win7 эти же сайты нормально открываются. В чем может быть проблема?

r4sas commented Jan 25, 2019 •

А LTSC это какой билд?

upd:
Проверка на голой 1809 (Windows 10 Enterprise LTSC, build 17763.107) не дала отрицательных результатов.

FlynnRider3000 commented Jan 27, 2019

Win10 корпоративная Версия 1809 (Сборка ОС 17763.253)
Антивируса нет, защитник и брандмауэр отключил. ДНС гугла.
Установлен только офис

ValdikSS commented Jan 27, 2019

ValdikSS commented Jan 28, 2019 •

This is interesting.

@FlynnRider3000’s ISP sends TCP RST for a certain IP address as the reply for SYN if SYN contains usual TCP handshake with standard Windows 7/10 TCP options, and no real host reply is received (not even SYN/ACK). TCP options are as follows:
TCP MSS, NOP, Window Scale, NOP, NOP, SACK permitted.

After some time, Windows 7 with GoodbyeDPI enabled (which blocks RST packets from OS) thinks that something may be wrong with host IP stack or firewall/middleware and tries to send SYN with another set of TCP options:
TCP MSS, NOP, NOP, SACK permitted.

With this set of TCP options, DPI accepts first SYN, SYN/ACK could be received from remote host, and connection successfully establishes. DPI understands the situation right after ClientHello and starts sending RSTs, but the connection keeps working if RSTs are blocked.

Windows 10, on the contrary, does not switch to alternative TCP options set, that’s why GoodbyeDPI «does not work».
Why does Windows 7 change TCP Options? It seems, in the past there used to be routers and hosts which interpret TCP Window Scaling incorrectly: 1, 2, 3.

ValdikSS commented Jan 28, 2019

@FlynnRider3000 Что у вас за регион Ростелекома? Ваш провайдер раньше назывался по-другому, и был перекуплен Ростелекомом?

FlynnRider3000 commented Jan 28, 2019

Республика Бурятия. В нашей деревне это ед.провайдер) Интернет через ADSL модем.

r4sas commented Feb 5, 2019

@ValdikSS На мыло отправлен аналогичный экземпляр с Win10. Подробности в мыле.

Nebula-Mechanica commented Jun 10, 2020 •

@FlynnRider3000’s ISP sends TCP RST for a certain IP address as the reply for SYN if SYN contains usual TCP handshake with standard Windows 7/10 TCP options, and no real host reply is received (not even SYN/ACK). TCP options are as follows:
TCP MSS, NOP, Window Scale, NOP, NOP, SACK permitted.
After some time, Windows 7 with GoodbyeDPI enabled (which blocks RST packets from OS) thinks that something may be wrong with host IP stack or firewall/middleware and tries to send SYN with another set of TCP options:
TCP MSS, NOP, NOP, SACK permitted.
With this set of TCP options, DPI accepts first SYN, SYN/ACK could be received from remote host, and connection successfully establishes. DPI understands the situation right after ClientHello and starts sending RSTs, but the connection keeps working if RSTs are blocked.
Windows 10, on the contrary, does not switch to alternative TCP options set, that’s why GoodbyeDPI «does not work».
Why does Windows 7 change TCP Options? It seems, in the past there used to be routers and hosts which interpret TCP Window Scaling incorrectly: 1, 2, 3.

@ValdikSS Нет случайно способа вернуть такое поведение? Ну или что-то ещё сделать. Всю голову себе сломал сегодня, почему на Win7 работает, а на десятке — только с некоторыми сайтами.

Или хотя бы как эта фича называется, если она вообще документирована?

Источник

Оцените статью