Skip to content

Commit 0757441

Browse files
committed
readme: minor changes + russian version
1 parent 79bda5c commit 0757441

File tree

2 files changed

+167
-4
lines changed

2 files changed

+167
-4
lines changed

README.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ It handles DPI connected using optical splitter or port mirroring (**Passive DPI
99

1010
# Quick start
1111

12-
* **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.
13-
* 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**.
12+
* **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.
13+
* 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.
1414

1515
These scripts launch GoodbyeDPI in recommended mode with DNS resolver redirection to Yandex DNS on non-standard port (to prevent DNS poisoning).
1616
If it works — congratulations! You can use it as-is or configure further.
@@ -89,8 +89,8 @@ Modern modesets (more stable, more compatible, faster):
8989

9090
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.
9191

92-
* **Chrome**: Settings → [Privacy and security](chrome://settings/security) → Use secure DNS → With: NextDNS
93-
* **Firefox**: [Settings](about:preferences)Network Settings → Enable DNS over HTTPS → Use provider: NextDNS
92+
* **Chrome**: Settings → [Privacy and security](chrome://settings/privacy)[Security](chrome://settings/security) → Use secure DNS → Choose NextDNS option or other
93+
* **Firefox**: [Settings](about:preferences)[Privacy & Security](about:preferences#privacy)DNS over HTTPS → Choose "Max Protection" option
9494

9595
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.
9696

README.ru.md

Lines changed: 163 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,163 @@
1+
GoodbyeDPI — утилита для обхода систем Глубокой Проверки Пакетов (DPI)
2+
=========================
3+
4+
Это программное обеспечение предназначено для обхода систем глубокой проверки пакетов, которые встречаются у многих интернет-провайдеров и блокируют доступ к определённым сайтам.
5+
6+
Оно работает с DPI, подключёнными с помощью оптического сплиттера или зеркалирования порта (Пассивное DPI), которые не блокируют данные, а просто отвечают быстрее, чем запрашиваемый пункт назначения, а также с Активным DPI, подключённым последовательно.
7+
8+
Требуется **Windows 7, 8, 8.1, 10 или 11** с правами администратора.
9+
10+
# Быстрый старт
11+
12+
* **Для России**: Скачайте [последнюю версию со страницы релизов](https://github.com/ValdikSS/GoodbyeDPI/releases), распакуйте файл и запустите скрипт **1_russia_blacklist_dnsredir.cmd**.
13+
* Для других стран: Скачайте [последнюю версию со страницы релизов](https://github.com/ValdikSS/GoodbyeDPI/releases), распакуйте файл и запустите скрипт **2_any_country_dnsredir.cmd**.
14+
15+
Эти скрипты запускают GoodbyeDPI в рекомендованном режиме с перенаправлением DNS-запросов на Yandex DNS через нестандартный порт (чтобы предотвратить подмену DNS).
16+
Если это работает — поздравляем! Вы можете использовать его как есть или настроить дальше.
17+
18+
# Как использовать
19+
20+
Скачайте [последнюю версию со страницы релизов](https://github.com/ValdikSS/GoodbyeDPI/releases) и запустите.
21+
22+
```
23+
Usage: goodbyedpi.exe [OPTION...]
24+
-p block passive DPI
25+
-q block QUIC/HTTP3
26+
-r replace Host with hoSt
27+
-s remove space between host header and its value
28+
-m mix Host header case (test.com -> tEsT.cOm)
29+
-f <value> set HTTP fragmentation to value
30+
-k <value> enable HTTP persistent (keep-alive) fragmentation and set it to value
31+
-n do not wait for first segment ACK when -k is enabled
32+
-e <value> set HTTPS fragmentation to value
33+
-a additional space between Method and Request-URI (enables -s, may break sites)
34+
-w try to find and parse HTTP traffic on all processed ports (not only on port 80)
35+
--port <value> additional TCP port to perform fragmentation on (and HTTP tricks with -w)
36+
--ip-id <value> handle additional IP ID (decimal, drop redirects and TCP RSTs with this ID).
37+
This option can be supplied multiple times.
38+
--dns-addr <value> redirect UDP DNS requests to the supplied IP address (experimental)
39+
--dns-port <value> redirect UDP DNS requests to the supplied port (53 by default)
40+
--dnsv6-addr <value> redirect UDPv6 DNS requests to the supplied IPv6 address (experimental)
41+
--dnsv6-port <value> redirect UDPv6 DNS requests to the supplied port (53 by default)
42+
--dns-verb print verbose DNS redirection messages
43+
--blacklist <txtfile> perform circumvention tricks only to host names and subdomains from
44+
supplied text file (HTTP Host/TLS SNI).
45+
This option can be supplied multiple times.
46+
--allow-no-sni perform circumvention if TLS SNI can't be detected with --blacklist enabled.
47+
--frag-by-sni if SNI is detected in TLS packet, fragment the packet right before SNI value.
48+
--set-ttl <value> activate Fake Request Mode and send it with supplied TTL value.
49+
DANGEROUS! May break websites in unexpected ways. Use with care (or --blacklist).
50+
--auto-ttl [a1-a2-m] activate Fake Request Mode, automatically detect TTL and decrease
51+
it based on a distance. If the distance is shorter than a2, TTL is decreased
52+
by a2. If it's longer, (a1; a2) scale is used with the distance as a weight.
53+
If the resulting TTL is more than m(ax), set it to m.
54+
Default (if set): --auto-ttl 1-4-10. Also sets --min-ttl 3.
55+
DANGEROUS! May break websites in unexpected ways. Use with care (or --blacklist).
56+
--min-ttl <value> minimum TTL distance (128/64 - TTL) for which to send Fake Request
57+
in --set-ttl and --auto-ttl modes.
58+
--wrong-chksum activate Fake Request Mode and send it with incorrect TCP checksum.
59+
May not work in a VM or with some routers, but is safer than set-ttl.
60+
--wrong-seq activate Fake Request Mode and send it with TCP SEQ/ACK in the past.
61+
--native-frag fragment (split) the packets by sending them in smaller packets, without
62+
shrinking the Window Size. Works faster (does not slow down the connection)
63+
and better.
64+
--reverse-frag fragment (split) the packets just as --native-frag, but send them in the
65+
reversed order. Works with the websites which could not handle segmented
66+
HTTPS TLS ClientHello (because they receive the TCP flow "combined").
67+
--max-payload [value] packets with TCP payload data more than [value] won't be processed.
68+
Use this option to reduce CPU usage by skipping huge amount of data
69+
(like file transfers) in already established sessions.
70+
May skip some huge HTTP requests from being processed.
71+
Default (if set): --max-payload 1200.
72+
73+
74+
LEGACY modesets:
75+
-1 -p -r -s -f 2 -k 2 -n -e 2 (most compatible mode)
76+
-2 -p -r -s -f 2 -k 2 -n -e 40 (better speed for HTTPS yet still compatible)
77+
-3 -p -r -s -e 40 (better speed for HTTP and HTTPS)
78+
-4 -p -r -s (best speed)
79+
80+
Modern modesets (more stable, more compatible, faster):
81+
-5 -f 2 -e 2 --auto-ttl --reverse-frag --max-payload
82+
-6 -f 2 -e 2 --wrong-seq --reverse-frag --max-payload
83+
-7 -f 2 -e 2 --wrong-chksum --reverse-frag --max-payload
84+
-8 -f 2 -e 2 --wrong-seq --wrong-chksum --reverse-frag --max-payload
85+
-9 -f 2 -e 2 --wrong-seq --wrong-chksum --reverse-frag --max-payload -q (this is the default)
86+
87+
Note: combination of --wrong-seq and --wrong-chksum generates two different fake packets.
88+
```
89+
90+
Чтобы проверить, можно ли обойти DPI вашего интернет-провайдера, сначала убедитесь, что ваш провайдер не подделывает ответы DNS, включив опцию "Безопасные DNS (DNS через HTTPS)" в вашем браузере.
91+
92+
* **Chrome**: Настройки → [Конфиденциальность и безопасность](chrome://settings/privacy)[Безопасность](chrome://settings/security) → Использовать безопасный DNS-сервер → Выбрать пункт NextDNS или другой
93+
* **Firefox**: [Настройки](about:preferences)[Приватность и Защита](about:preferences#privacy) → DNS через HTTPS → Выбрать пункт "Максимальную защиту"
94+
95+
Затем запустите исполняемый файл `goodbyedpi.exe` без каких-либо опций. Если это работает — поздравляю! Вы можете использовать его как есть или настроить дальше, например, используя опцию `--blacklist`, если список заблокированных сайтов известен и доступен для вашей страны.
96+
97+
Если ваш провайдер перехватывает DNS запросы, возможно, вам стоит использовать опцию `--dns-addr` для публичного DNS-резольвера на нестандартном порте (например, Яндекс DNS `77.88.8.8:1253`) или настроить DNS через HTTPS/TLS с помощью сторонних приложений.
98+
99+
Проверьте скрипты .cmd и измените их в соответствии с вашими предпочтениями и условиями сети.
100+
101+
# Как это работает
102+
103+
### Пассивный DPI
104+
105+
Большинство пассивных DPI отправляют HTTP 302 Redirect, если вы пытаетесь получить доступ к заблокированному сайту через HTTP, и TCP Reset в случае HTTPS быстрее, чем целевой веб-сайт. Пакеты, отправляемые DPI, обычно имеют поле IP Identification, равное `0x0000` или `0x0001`, как это видно у российских провайдеров. Эти пакеты, если они перенаправляют вас на другой сайт (страницу цензуры), блокируются GoodbyeDPI.
106+
107+
### Активный DPI
108+
109+
Активное DPI более сложно обмануть. В настоящее время программное обеспечение использует 7 методов для обхода активного DPI:
110+
111+
* Фрагментация на уровне TCP для первого пакета данных
112+
* Фрагментация на уровне TCP для постоянных (keep-alive) HTTP-сессий
113+
* Замена заголовка `Host` на `hoSt`
114+
* Удаление пробела между именем заголовка и значением в заголовке `Host`
115+
* Добавление дополнительного пробела между методом HTTP (GET, POST и т.д.) и URI
116+
* Изменение регистра значения заголовка Host
117+
* Отправка поддельных HTTP/HTTPS пакетов с низким значением Time-To-Live, некорректной контрольной суммой или неверными номерами последовательности/подтверждения TCP, чтобы обмануть DPI и предотвратить доставку их к назначению
118+
119+
Эти методы не должны ломать сайты, так как они полностью совместимы со стандартами TCP и HTTP, однако их достаточно, чтобы предотвратить классификацию данных DPI и обойти цензуру. Дополнительный пробел может сломать некоторые сайты, хотя это допустимо согласно спецификации HTTP/1.1 (см. 19.3 Tolerant Applications).
120+
121+
Программа загружает драйвер WinDivert, который использует Windows Filtering Platform для установки фильтров и перенаправления пакетов в пользовательское пространство. Она работает до тех пор, пока консольное окно остаётся открытым, и завершает работу при закрытии окна.
122+
123+
# Как собрать из исходников
124+
125+
Этот проект можно собрать с помощью **GNU Make** и [**mingw**](https://mingw-w64.org). Единственная зависимость — [WinDivert](https://github.com/basil00/Divert).
126+
127+
Для сборки x86 exe выполните:
128+
129+
`make CPREFIX=i686-w64-mingw32- WINDIVERTHEADERS=/path/to/windivert/include WINDIVERTLIBS=/path/to/windivert/x86`
130+
131+
А для x86_64:
132+
133+
`make CPREFIX=x86_64-w64-mingw32- BIT64=1 WINDIVERTHEADERS=/path/to/windivert/include WINDIVERTLIBS=/path/to/windivert/amd64`
134+
135+
# Как установить в качестве Службы Windows
136+
137+
Ознакомьтесь с примерами в скриптах `service_install_russia_blacklist.cmd`, `service_install_russia_blacklist_dnsredir.cmd` и `service_remove.cmd`.
138+
139+
Измените их в соответствии с вашими потребностями.
140+
141+
# Известные проблемы
142+
143+
* Ужасно устаревшие установки 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.
144+
* ~~Некоторые SSL/TLS стеки не могут обрабатывать фрагментированные пакеты ClientHello, и HTTPS сайты не открываются. Ошибка: [#4](https://github.com/ValdikSS/GoodbyeDPI/issues/4), [#64](https://github.com/ValdikSS/GoodbyeDPI/issues/64).~~ Проблемы с фрагментацией исправлены в версии v0.1.7.
145+
* ~~Антивирус ESET несовместим с драйвером WinDivert [#91](https://github.com/ValdikSS/GoodbyeDPI/issues/91). Это, вероятно, ошибка антивируса, а не WinDivert.~~
146+
147+
# Похожие проекты
148+
149+
- **[zapret](https://github.com/bol-van/zapret)** от @bol-van (для MacOS, Linux и Windows)
150+
- **[Green Tunnel](https://github.com/SadeghHayeri/GreenTunnel)** от @SadeghHayeri (для MacOS, Linux и Windows)
151+
- **[DPI Tunnel CLI](https://github.com/nomoresat/DPITunnel-cli)** от @zhenyolka (для Linux и маршрутизаторов)
152+
- **[DPI Tunnel for Android](https://github.com/nomoresat/DPITunnel-android)** от @zhenyolka (для Android)
153+
- **[PowerTunnel](https://github.com/krlvm/PowerTunnel)** от @krlvm (для Windows, MacOS и Linux)
154+
- **[PowerTunnel for Android](https://github.com/krlvm/PowerTunnel-Android)** от @krlvm (для Android)
155+
- **[SpoofDPI](https://github.com/xvzc/SpoofDPI)** от @xvzc (для macOS и Linux)
156+
- **[GhosTCP](https://github.com/macronut/ghostcp)** от @macronut (для Windows)
157+
- **[ByeDPI](https://github.com/hufrea/byedpi)** для Linux/Windows + **[ByeDPIAndroid](https://github.com/dovecoteescapee/ByeDPIAndroid/)** для Android (без root)
158+
159+
# Благодарности
160+
161+
Спасибо @basil00 за [WinDivert](https://github.com/basil00/Divert). Это основная часть этой программы.
162+
163+
Спасибо каждому участнику [BlockCheck](https://github.com/ValdikSS/blockcheck). Было бы невозможно понять поведение DPI без этой утилиты.

0 commit comments

Comments
 (0)