mirror of
https://github.com/ValdikSS/GoodbyeDPI.git
synced 2024-11-24 02:49:37 +01:00
readme: minor changes + russian version
This commit is contained in:
parent
fb552640b6
commit
e4b5bd2a15
@ -9,8 +9,8 @@ It handles DPI connected using optical splitter or port mirroring (**Passive DPI
|
||||
|
||||
# Quick start
|
||||
|
||||
* **For Russia**: Download [latest version from Releases page](https://github.com/ValdikSS/GoodbyeDPI/releases), unpack the file and run **1_russia_blacklist_dnsredir.cmd** script.
|
||||
* For other countries: Download [latest version from Releases page](https://github.com/ValdikSS/GoodbyeDPI/releases), unpack the file and run **2_any_country_dnsredir.cmd**.
|
||||
* **For Russia**: Download [latest version from Releases page](https://github.com/ValdikSS/GoodbyeDPI/releases), unpack the file and run the **1_russia_blacklist_dnsredir.cmd** script.
|
||||
* For other countries: Download [latest version from Releases page](https://github.com/ValdikSS/GoodbyeDPI/releases), unpack the file and run the **2_any_country_dnsredir.cmd** script.
|
||||
|
||||
These scripts launch GoodbyeDPI in recommended mode with DNS resolver redirection to Yandex DNS on non-standard port (to prevent DNS poisoning).
|
||||
If it works — congratulations! You can use it as-is or configure further.
|
||||
@ -89,8 +89,8 @@ Modern modesets (more stable, more compatible, faster):
|
||||
|
||||
To check if your ISP's DPI could be circumvented, first make sure that your provider does not poison DNS answers by enabling "Secure DNS (DNS over HTTPS)" option in your browser.
|
||||
|
||||
* **Chrome**: Settings → [Privacy and security](chrome://settings/security) → Use secure DNS → With: NextDNS
|
||||
* **Firefox**: [Settings](about:preferences) → Network Settings → Enable DNS over HTTPS → Use provider: NextDNS
|
||||
* **Chrome**: Settings → [Privacy and security](chrome://settings/privacy) → [Security](chrome://settings/security) → Use secure DNS → Choose NextDNS option or other
|
||||
* **Firefox**: [Settings](about:preferences) → [Privacy & Security](about:preferences#privacy) → DNS over HTTPS → Choose "Max Protection" option
|
||||
|
||||
Then run the `goodbyedpi.exe` executable without any options. If it works — congratulations! You can use it as-is or configure further, for example by using `--blacklist` option if the list of blocked websites is known and available for your country.
|
||||
|
||||
|
163
README.ru.md
Normal file
163
README.ru.md
Normal file
@ -0,0 +1,163 @@
|
||||
GoodbyeDPI — утилита для обхода систем Глубокой Проверки Пакетов (DPI)
|
||||
=========================
|
||||
|
||||
Это программное обеспечение предназначено для обхода систем глубокой проверки пакетов (DPI), которые используются многими интернет-провайдерами для блокировки доступа к определённым сайтам.
|
||||
|
||||
Оно работает с Пассивным DPI, подключённым с помощью оптического сплиттера или зеркалирования порта, который не блокирует данные, а просто отвечает быстрее, чем запрашиваемый адрес назначения, а также с Активным DPI, подключённым последовательно.
|
||||
|
||||
Требуется **Windows 7, 8, 8.1, 10 или 11** с правами администратора.
|
||||
|
||||
# Быстрый старт
|
||||
|
||||
* **Для России**: Скачайте [последнюю версию со страницы релизов](https://github.com/ValdikSS/GoodbyeDPI/releases), распакуйте файл и запустите скрипт **1_russia_blacklist_dnsredir.cmd**.
|
||||
* Для других стран: Скачайте [последнюю версию со страницы релизов](https://github.com/ValdikSS/GoodbyeDPI/releases), распакуйте файл и запустите скрипт **2_any_country_dnsredir.cmd**.
|
||||
|
||||
Эти скрипты запускают GoodbyeDPI в рекомендованном режиме с перенаправлением DNS-запросов на Yandex DNS через нестандартный порт (чтобы предотвратить подмену DNS).
|
||||
Если это работает — поздравляем! Вы можете использовать его как есть или настроить дальше.
|
||||
|
||||
# Как использовать
|
||||
|
||||
Скачайте [последнюю версию со страницы релизов](https://github.com/ValdikSS/GoodbyeDPI/releases) и запустите.
|
||||
|
||||
```
|
||||
Usage: goodbyedpi.exe [OPTION...]
|
||||
-p block passive DPI
|
||||
-q block QUIC/HTTP3
|
||||
-r replace Host with hoSt
|
||||
-s remove space between host header and its value
|
||||
-m mix Host header case (test.com -> tEsT.cOm)
|
||||
-f <value> set HTTP fragmentation to value
|
||||
-k <value> enable HTTP persistent (keep-alive) fragmentation and set it to value
|
||||
-n do not wait for first segment ACK when -k is enabled
|
||||
-e <value> set HTTPS fragmentation to value
|
||||
-a additional space between Method and Request-URI (enables -s, may break sites)
|
||||
-w try to find and parse HTTP traffic on all processed ports (not only on port 80)
|
||||
--port <value> additional TCP port to perform fragmentation on (and HTTP tricks with -w)
|
||||
--ip-id <value> handle additional IP ID (decimal, drop redirects and TCP RSTs with this ID).
|
||||
This option can be supplied multiple times.
|
||||
--dns-addr <value> redirect UDP DNS requests to the supplied IP address (experimental)
|
||||
--dns-port <value> redirect UDP DNS requests to the supplied port (53 by default)
|
||||
--dnsv6-addr <value> redirect UDPv6 DNS requests to the supplied IPv6 address (experimental)
|
||||
--dnsv6-port <value> redirect UDPv6 DNS requests to the supplied port (53 by default)
|
||||
--dns-verb print verbose DNS redirection messages
|
||||
--blacklist <txtfile> perform circumvention tricks only to host names and subdomains from
|
||||
supplied text file (HTTP Host/TLS SNI).
|
||||
This option can be supplied multiple times.
|
||||
--allow-no-sni perform circumvention if TLS SNI can't be detected with --blacklist enabled.
|
||||
--frag-by-sni if SNI is detected in TLS packet, fragment the packet right before SNI value.
|
||||
--set-ttl <value> activate Fake Request Mode and send it with supplied TTL value.
|
||||
DANGEROUS! May break websites in unexpected ways. Use with care (or --blacklist).
|
||||
--auto-ttl [a1-a2-m] activate Fake Request Mode, automatically detect TTL and decrease
|
||||
it based on a distance. If the distance is shorter than a2, TTL is decreased
|
||||
by a2. If it's longer, (a1; a2) scale is used with the distance as a weight.
|
||||
If the resulting TTL is more than m(ax), set it to m.
|
||||
Default (if set): --auto-ttl 1-4-10. Also sets --min-ttl 3.
|
||||
DANGEROUS! May break websites in unexpected ways. Use with care (or --blacklist).
|
||||
--min-ttl <value> minimum TTL distance (128/64 - TTL) for which to send Fake Request
|
||||
in --set-ttl and --auto-ttl modes.
|
||||
--wrong-chksum activate Fake Request Mode and send it with incorrect TCP checksum.
|
||||
May not work in a VM or with some routers, but is safer than set-ttl.
|
||||
--wrong-seq activate Fake Request Mode and send it with TCP SEQ/ACK in the past.
|
||||
--native-frag fragment (split) the packets by sending them in smaller packets, without
|
||||
shrinking the Window Size. Works faster (does not slow down the connection)
|
||||
and better.
|
||||
--reverse-frag fragment (split) the packets just as --native-frag, but send them in the
|
||||
reversed order. Works with the websites which could not handle segmented
|
||||
HTTPS TLS ClientHello (because they receive the TCP flow "combined").
|
||||
--max-payload [value] packets with TCP payload data more than [value] won't be processed.
|
||||
Use this option to reduce CPU usage by skipping huge amount of data
|
||||
(like file transfers) in already established sessions.
|
||||
May skip some huge HTTP requests from being processed.
|
||||
Default (if set): --max-payload 1200.
|
||||
|
||||
|
||||
LEGACY modesets:
|
||||
-1 -p -r -s -f 2 -k 2 -n -e 2 (most compatible mode)
|
||||
-2 -p -r -s -f 2 -k 2 -n -e 40 (better speed for HTTPS yet still compatible)
|
||||
-3 -p -r -s -e 40 (better speed for HTTP and HTTPS)
|
||||
-4 -p -r -s (best speed)
|
||||
|
||||
Modern modesets (more stable, more compatible, faster):
|
||||
-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 (this is the default)
|
||||
|
||||
Note: combination of --wrong-seq and --wrong-chksum generates two different fake packets.
|
||||
```
|
||||
|
||||
Чтобы проверить, можно ли обойти DPI вашего интернет-провайдера, сначала убедитесь, что ваш провайдер не подделывает ответы DNS, включив опцию "Безопасные DNS (DNS через HTTPS)" в вашем браузере.
|
||||
|
||||
* **Chrome**: Настройки → [Конфиденциальность и безопасность](chrome://settings/privacy) → [Безопасность](chrome://settings/security) → Использовать безопасный DNS-сервер → Выбрать пункт NextDNS или другой
|
||||
* **Firefox**: [Настройки](about:preferences) → [Приватность и Защита](about:preferences#privacy) → DNS через HTTPS → Выбрать пункт "Максимальную защиту"
|
||||
|
||||
Затем запустите исполняемый файл `goodbyedpi.exe` без каких-либо опций. Если это работает — поздравляю! Вы можете использовать его как есть или настроить дальше, например, используя опцию `--blacklist`, если список заблокированных сайтов известен и доступен для вашей страны.
|
||||
|
||||
Если ваш провайдер перехватывает DNS запросы, возможно, вам стоит использовать опцию `--dns-addr` для публичного DNS-резольвера на нестандартном порте (например, Яндекс DNS `77.88.8.8:1253`) или настроить DNS через HTTPS/TLS с помощью сторонних приложений.
|
||||
|
||||
Проверьте скрипты .cmd и измените их в соответствии с вашими предпочтениями и условиями сети.
|
||||
|
||||
# Как это работает
|
||||
|
||||
### Пассивный DPI
|
||||
|
||||
Большинство пассивных DPI отправляют HTTP 302 Redirect, если вы пытаетесь получить доступ к заблокированному сайту через HTTP, и TCP Reset в случае HTTPS быстрее, чем целевой веб-сайт. Пакеты, отправляемые DPI, обычно имеют поле IP Identification, равное `0x0000` или `0x0001`, как это видно у российских провайдеров. Эти пакеты, если они перенаправляют вас на другой сайт (страницу цензуры), блокируются GoodbyeDPI.
|
||||
|
||||
### Активный DPI
|
||||
|
||||
Активный DPI более сложно обмануть. В настоящее время программное обеспечение использует 7 методов для обхода активного DPI:
|
||||
|
||||
* Фрагментация на уровне TCP для первого пакета данных
|
||||
* Фрагментация на уровне TCP для постоянных (keep-alive) HTTP-сессий
|
||||
* Замена заголовка `Host` на `hoSt`
|
||||
* Удаление пробела между именем заголовка и значением в заголовке `Host`
|
||||
* Добавление дополнительного пробела между методом HTTP (GET, POST и т.д.) и URI
|
||||
* Изменение регистра значения заголовка Host
|
||||
* Отправка поддельных HTTP/HTTPS пакетов с низким значением Time-To-Live, некорректной контрольной суммой или неверными номерами последовательности/подтверждения TCP, чтобы обмануть DPI и предотвратить доставку их к назначению
|
||||
|
||||
Эти методы не должны ломать сайты, так как они полностью совместимы со стандартами TCP и HTTP, однако их достаточно, чтобы предотвратить классификацию данных DPI и обойти цензуру. Дополнительный пробел может сломать некоторые сайты, хотя это допустимо согласно спецификации HTTP/1.1 (см. 19.3 Tolerant Applications).
|
||||
|
||||
Программа загружает драйвер WinDivert, который использует Windows Filtering Platform для установки фильтров и перенаправления пакетов в пользовательское пространство. Она работает до тех пор, пока консольное окно остаётся открытым, и завершает работу при закрытии окна.
|
||||
|
||||
# Как собрать из исходников
|
||||
|
||||
Этот проект можно собрать с помощью **GNU Make** и [**mingw**](https://mingw-w64.org). Единственная зависимость — [WinDivert](https://github.com/basil00/Divert).
|
||||
|
||||
Для сборки x86 exe выполните:
|
||||
|
||||
`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`
|
||||
|
||||
# Как установить в качестве Службы Windows
|
||||
|
||||
Ознакомьтесь с примерами в скриптах `service_install_russia_blacklist.cmd`, `service_install_russia_blacklist_dnsredir.cmd` и `service_remove.cmd`.
|
||||
|
||||
Измените их в соответствии с вашими потребностями.
|
||||
|
||||
# Известные проблемы
|
||||
|
||||
* Ужасно устаревшие установки Windows 7 не могут загрузить драйвер WinDivert из-за отсутствия поддержки цифровых подписей SHA256. Установите KB3033929 [x86](https://www.microsoft.com/en-us/download/details.aspx?id=46078)/[x64](https://www.microsoft.com/en-us/download/details.aspx?id=46148), или лучше, обновите всю систему с помощью Windows Update.
|
||||
* ~~Некоторые SSL/TLS стеки не могут обрабатывать фрагментированные пакеты ClientHello, и HTTPS сайты не открываются. Ошибка: [#4](https://github.com/ValdikSS/GoodbyeDPI/issues/4), [#64](https://github.com/ValdikSS/GoodbyeDPI/issues/64).~~ Проблемы с фрагментацией исправлены в версии v0.1.7.
|
||||
* ~~Антивирус ESET несовместим с драйвером WinDivert [#91](https://github.com/ValdikSS/GoodbyeDPI/issues/91). Это, вероятно, ошибка антивируса, а не WinDivert.~~
|
||||
|
||||
# Похожие проекты
|
||||
|
||||
- **[zapret](https://github.com/bol-van/zapret)** от @bol-van (для MacOS, Linux и Windows)
|
||||
- **[Green Tunnel](https://github.com/SadeghHayeri/GreenTunnel)** от @SadeghHayeri (для MacOS, Linux и Windows)
|
||||
- **[DPI Tunnel CLI](https://github.com/nomoresat/DPITunnel-cli)** от @zhenyolka (для Linux и маршрутизаторов)
|
||||
- **[DPI Tunnel for Android](https://github.com/nomoresat/DPITunnel-android)** от @zhenyolka (для Android)
|
||||
- **[PowerTunnel](https://github.com/krlvm/PowerTunnel)** от @krlvm (для Windows, MacOS и Linux)
|
||||
- **[PowerTunnel for Android](https://github.com/krlvm/PowerTunnel-Android)** от @krlvm (для Android)
|
||||
- **[SpoofDPI](https://github.com/xvzc/SpoofDPI)** от @xvzc (для macOS и Linux)
|
||||
- **[GhosTCP](https://github.com/macronut/ghostcp)** от @macronut (для Windows)
|
||||
- **[ByeDPI](https://github.com/hufrea/byedpi)** для Linux/Windows + **[ByeDPIAndroid](https://github.com/dovecoteescapee/ByeDPIAndroid/)** для Android (без root)
|
||||
|
||||
# Благодарности
|
||||
|
||||
Спасибо @basil00 за [WinDivert](https://github.com/basil00/Divert). Это основная часть этой программы.
|
||||
|
||||
Спасибо каждому участнику [BlockCheck](https://github.com/ValdikSS/blockcheck). Было бы невозможно понять поведение DPI без этой утилиты.
|
Loading…
Reference in New Issue
Block a user