Windows-утилита для обхода DPI — самый простой вход в тему: один exe, запустил и работает. Обрабатывает два типа DPI: Passive DPI (оптический сплиттер/зеркало порта) — блокирует HTTP Redirect и TCP RST-пакеты от провайдера; Active DPI — фрагментирует первый пакет TCP-соединения, добавляет пробел в HTTP-заголовки, изменяет Host на смешанный регистр, фрагментирует TLS ClientHello. Работает на уровне WinDivert (перехват пакетов в userspace без драйвера). Режимы 1–9 с нарастающей агрессивностью; -9 — самый совместимый с большинством РФ-провайдеров. Применяется автоматически ко всему трафику без настройки прокси.
# Windows — скачать релиз # https://github.com/ValdikSS/GoodbyeDPI/releases # Запуск с режимом -9 (рекомендован для РФ) goodbyedpi.exe -9 # Обход блокировок YouTube/Discord (пример) goodbyedpi.exe -9 --dns-addr 77.88.8.8 --dns-port 1253 --dnsv6-addr 2a02:6b8::feed:0ff # Linux-порт (отдельный проект) git clone https://github.com/basil00/divert-tpws
Это программное обеспечение предназначено для обхода систем глубокого анализа пакетов (DPI), которые используются во многих интернет-провайдерах и блокируют доступ к определенным веб-сайтам.
Оно работает с DPI, подключенным через оптический делитель или зеркалирование портов (Пассивный DPI), который не блокирует данные, а просто отвечает быстрее, чем запрошенное назначение, а также с Активным DPI, подключенным последовательно.
Требуется Windows 7, 8, 8.1, 10 или 11 с правами администратора.
Эти скрипты запускают GoodbyeDPI в рекомендуемом режиме с перенаправлением DNS-резолвера на DNS Яндекса на нестандартном порту (для предотвращения отравления DNS).
Если это работает — поздравляем! Вы можете использовать его как есть или настроить дальше.
Скачайте последнюю версию со страницы Releases и запустите.
Чтобы получить информацию о вашей версии программы, используйте аргумент -h (--help) при запуске.
Использование: goodbyedpi.exe [ПАРАМЕТР...]
-p блокировать пассивный DPI
-q блокировать QUIC/HTTP3
-r заменять Host на hoSt
-m убирать пробел между заголовком host и его значением
-s смешивать регистр заголовков Host (test.com -> tEsT.cOm)
-f <значение> установить фрагментацию HTTP на значение
-k <значение> включить фрагментацию с поддержанием соединения (keep-alive) для HTTP и установить ее значение
-n не ждать подтверждения (ACK) для первого сегмента при включенном -k
-e <значение> установить фрагментацию HTTPS на значение
-a дополнительный пробел между Method и Request-URI (включает -s, может ломать сайты)
-w пытаться искать и разбирать HTTP-трафик на всех обрабатываемых портах (не только на порту 80)
--port <значение> дополнительный TCP-порт для выполнения фрагментации (и HTTP-трюков с -w)
--ip-id <значение> обрабатывать дополнительный IP ID (десятичный, отбрасывать перенаправления и TCP RSTs с этим ID).
Этот параметр можно указать несколько раз.
--dns-addr <значение> перенаправлять UDP DNS-запросы на указанный IP-адрес (экспериментальный)
--dns-port <значение> перенаправлять UDP DNS-запросы на указанный порт (по умолчанию 53)
--dnsv6-addr <значение> перенаправлять UDPv6 DNS-запросы на указанный IPv6-адрес (экспериментальный)
--dnsv6-port <значение> перенаправлять UDPv6 DNS-запросы на указанный порт (по умолчанию 53)
--dns-verb выводить подробные сообщения о перенаправлении DNS
--blacklist <txtfile> выполнять трюки обхода только для имен хостов и поддоменов из
предоставленного текстового файла (HTTP Host/TLS SNI).
Этот параметр можно указать несколько раз.
--allow-no-sni выполнять обход, если TLS SNI не может быть обнаружен при включенном --blacklist.
--frag-by-sni если SNI обнаружен в пакете TLS, фрагментировать пакет непосредственно перед значением SNI.
--set-ttl <значение> активировать режим фальшивого запроса и отправлять его с указанным значением TTL.
ОПАСНО! Может сломать веб-сайты непредсказуемым образом. Используйте с осторожностью (или с --blacklist).
--auto-ttl [a1-a2-m] активировать режим фальшивого запроса, автоматически определять TTL и уменьшать
его на основе расстояния. Если расстояние короче a2, TTL уменьшается на a2.
Если оно длиннее, используется шкала (a1; a2) с расстоянием в качестве веса.
Если итоговый TTL больше m(ax), устанавливается m.
По умолчанию (если задано): --auto-ttl 1-4-10. Также устанавливает --min-ttl 3.
ОПАСНО! Может сломать веб-сайты непредсказуемым образом. Используйте с осторожностью (или с --blacklist).
--min-ttl <значение> минимальная дистанция TTL (128/64 - TTL), для которой отправляется фальшивый запрос
в режимах --set-ttl и --auto-ttl.
--wrong-chksum активировать режим фальшивого запроса и отправлять его с неверной контрольной суммой TCP.
Может не работать в виртуальной машине или с некоторыми маршрутизаторами, но безопаснее, чем set-ttl.
--wrong-seq активировать режим фальшивого запроса и отправлять его с TCP SEQ/ACK из прошлого.
--native-frag фрагментировать (разбивать) пакеты, отправляя их в меньших пакетах, без
сжатия размера окна. Работает быстрее (не замедляет соединение)
и лучше.
--reverse-frag фрагментировать (разбивать) пакеты так же, как --native-frag, но отправлять их в
обратном порядке. Работает с веб-сайтами, которые не могут обработать сегментированный
HTTPS TLS ClientHello (поскольку они получают TCP-поток «объединенным»).
--fake-from-hex <значение> Загружать фальшивые пакеты для режима фальшивого запроса из HEX-значений (например, 1234abcDEF).
Этот параметр можно указать несколько раз, в этом случае каждый фальшивый пакет
будет отправлен на каждый запрос в порядке указания аргументов командной строки.
--fake-with-sni <значение> Генерировать фальшивые пакеты для режима фальшивого запроса с указанным доменным именем SNI.
Пакеты имитируют TLS ClientHello пакет Mozilla Firefox 130
(с генерированными случайным образом фальшивыми SessionID, ключевыми обменами и ECH grease).
Может быть указан несколько раз для нескольких фальшивых пакетов.
--fake-gen <значение> Генерировать случайно заполненные фальшивые пакеты для режима фальшивого запроса, количество их
(до 30).
--fake-resend <значение> Отправлять каждый фальшивый пакет указанное количество раз.
По умолчанию: 1 (отправлять каждый пакет один раз).
--max-payload [значение] пакеты с данными TCP-полезной нагрузки более [значение] не будут обрабатываться.
Используйте этот параметр для уменьшения использования ЦП, пропуская огромные объемы данных
(например, передачу файлов) в уже установленных сессиях.
Может пропустить обработку некоторых больших HTTP-запросов.
По умолчанию (если задано): --max-payload 1200.
Устаревшие наборы режимов:
-1 -p -r -s -f 2 -k 2 -n -e 2 (наиболее совместимый режим)
-2 -p -r -s -f 2 -k 2 -n -e 40 (лучшая скорость для HTTPS, но все еще совместимый)
-3 -p -r -s -e 40 (лучшая скорость для HTTP и HTTPS)
-4 -p -r -s (лучшая скорость)
Современные наборы режимов (более стабильные, более совместимые, быстрые):
-5 -f 2 -e 2 --auto-ttl --reverse-frag --max-payload
-6 -f 2 -e 2 --wrong-seq --reverse-frag --max-payload
-7 -f 2 -e 2 --wrong-chksum --reverse-frag --max-payload
-8 -f 2 -e 2 --wrong-seq --wrong-chksum --reverse-frag --max-payload
-9 -f 2 -e 2 --wrong-seq --wrong-chksum --reverse-frag --max-payload -q (это режим по умолчанию)
Примечание: комбинация --wrong-seq и --wrong-chksum генерирует два различных фальшивых пакета.
Чтобы проверить, можно ли обойти DPI вашего провайдера, сначала убедитесь, что ваш провайдер не отравляет ответы DNS, включив опцию «Безопасный DNS (DNS через HTTPS)» в вашем браузере.
Затем запустите исполняемый файл goodbyedpi.exe без каких-либо опций. Если это работает — поздравляем! Вы можете использовать его как есть или настроить дальше, например, используя опцию --blacklist, если список заблокированных веб-сайтов известен и доступен для вашей страны.
Если ваш провайдер перехватывает DNS-запросы, вы можете использовать опцию --dns-addr для публичного DNS-резолвера, работающего на нестандартном порту (например, DNS Яндекса 77.88.8.8:1253) или настроить DNS через HTTPS/TLS с помощью сторонних приложений.
Посмотрите скрипты .cmd и измените их в соответствии с вашими предпочтениями и условиями сети.
Большинство Пассивных DPI отправляют HTTP 302 Redirect, если вы пытаетесь получить доступ к заблокированному веб-сайту через HTTP, и TCP Reset в случае с HTTPS, быстрее, чем целевой веб-сайт. Пакеты, отправляемые DPI, обычно имеют поле идентификации IP, равное 0x0000 или 0x0001, как видно у российских провайдеров. Эти пакеты, если они перенаправляют вас на другой веб-сайт (страница цензуры), блокируются GoodbyeDPI.
Активный DPI обмануть сложнее. В настоящее время программное обеспечение использует 7 методов для обхода активного DPI:
Host на hoStHostЭти методы не должны ломать работу какого-либо веб-сайта, поскольку они полностью совместимы со стандартами TCP и HTTP, однако их достаточно для предотвращения классификации данных DPI и обхода цензуры. Дополнительный пробел может сломать работу некоторых веб-сайтов, хотя это допустимо спецификацией HTTP/1.1 (см. 19.3 Tolerant Applications).
Программа загружает драйвер WinDivert, который использует платформу фильтрации Windows для установки фильтров и перенаправления пакетов в пользовательское пространство. Он работает, пока видно окно консоли, и завершается при закрытии окна.
Этот проект можно собрать с помощью GNU Make и mingw. Единственная зависимость — WinDivert.
Для сборки исполняемого файла x86 выполните:
make CPREFIX=i686-w64-mingw32- WINDIVERTHEADERS=/path/to/windivert/include WINDIVERTLIBS=/path/to/windivert/x86
А для x86_64:
make CPREFIX=x86_64-w64-mingw32- BIT64=1 WINDIVERTHEADERS=/path/to/windivert/include WINDIVERTLIBS=/path/to/windivert/amd64
Смотрите примеры в скриптах service_install_russia_blacklist.cmd, service_install_russia_blacklist_dnsredir.cmd и service_remove.cmd.
Измените их в соответствии с вашими потребностями.
Advanced Stream Detect в Killer Control Center несовместима с GoodbyeDPI, отключите её.Спасибо @basil00 за WinDivert. Это основная часть этой программы.
Спасибо каждому участнику проекта BlockCheck. Было бы невозможно понять поведение DPI без этой утилиты.