zapret2-mcp 0.7.5 → 0.7.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +28 -0
- package/knowledge/strategies/community-strategies.md +19 -32
- package/knowledge/strategies/fake-packets.md +33 -45
- package/knowledge/strategies/lua-scripting.md +2 -2
- package/knowledge/strategies/orchestration.md +8 -20
- package/knowledge/strategies/telegram-bypass.md +2 -2
- package/knowledge/troubleshooting/common-issues.md +10 -8
- package/knowledge/troubleshooting/ipv6-trap.md +4 -4
- package/knowledge/troubleshooting/openwrt-conflicts.md +16 -31
- package/knowledge/troubleshooting/quic-issues.md +23 -26
- package/knowledge/troubleshooting/smart-tv-youtube.md +3 -3
- package/knowledge/troubleshooting/youtube-video-not-loading.md +21 -21
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,33 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.7.9](https://github.com/rcd27/zapret2-mcp/compare/v0.7.8...v0.7.9) (2026-04-02)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Bug Fixes
|
|
7
|
+
|
|
8
|
+
* **ci-cd:** [@latest](https://github.com/latest) -> [@11](https://github.com/11) в npm ([57347de](https://github.com/rcd27/zapret2-mcp/commit/57347de840f76bdd2578d414961a2e1bc86c5328))
|
|
9
|
+
|
|
10
|
+
## [0.7.8](https://github.com/rcd27/zapret2-mcp/compare/v0.7.7...v0.7.8) (2026-04-02)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
### Bug Fixes
|
|
14
|
+
|
|
15
|
+
* **ci-cd:** вернул registry ([db7f031](https://github.com/rcd27/zapret2-mcp/commit/db7f031f1c694f8c5c9549de915938921be53e59))
|
|
16
|
+
|
|
17
|
+
## [0.7.7](https://github.com/rcd27/zapret2-mcp/compare/v0.7.6...v0.7.7) (2026-04-02)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
### Bug Fixes
|
|
21
|
+
|
|
22
|
+
* **ci-cd:** убран npm install, чтобы при релизе github-action не валился ([ed2b089](https://github.com/rcd27/zapret2-mcp/commit/ed2b08909d45a264ac08ed3a660a57f8ba54e307))
|
|
23
|
+
|
|
24
|
+
## [0.7.6](https://github.com/rcd27/zapret2-mcp/compare/v0.7.5...v0.7.6) (2026-04-02)
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
### Bug Fixes
|
|
28
|
+
|
|
29
|
+
* **multiple:** фикс ряда статей согласно аудиту ([34511e4](https://github.com/rcd27/zapret2-mcp/commit/34511e4157a2e66f0fcf31e5c3c8a2b2858c2fe4))
|
|
30
|
+
|
|
3
31
|
## [0.7.5](https://github.com/rcd27/zapret2-mcp/compare/v0.7.4...v0.7.5) (2026-04-01)
|
|
4
32
|
|
|
5
33
|
|
|
@@ -4,7 +4,7 @@ zapret2-version: v0.9.4.5
|
|
|
4
4
|
tags: community, strategies, circular, production, youtube, examples, multidisorder, multisplit, hostfakesplit, syndata, hostfakesplit, seqovl-pattern, googlevideo, three-stream
|
|
5
5
|
source: community
|
|
6
6
|
created: 2026-03-29
|
|
7
|
-
updated: 2026-
|
|
7
|
+
updated: 2026-04-02
|
|
8
8
|
---
|
|
9
9
|
|
|
10
10
|
# Community-стратегии (production-примеры)
|
|
@@ -23,7 +23,7 @@ updated: 2026-03-30
|
|
|
23
23
|
```
|
|
24
24
|
--out-range=-s34228
|
|
25
25
|
--payload=tls_client_hello
|
|
26
|
-
--in-range=-s5556 --lua-desync=circular:fails=3:
|
|
26
|
+
--in-range=-s5556 --lua-desync=circular:fails=3:time=60
|
|
27
27
|
--in-range=x
|
|
28
28
|
--lua-desync=<action>:strategy=1
|
|
29
29
|
--lua-desync=<action>:strategy=2
|
|
@@ -35,7 +35,7 @@ updated: 2026-03-30
|
|
|
35
35
|
|
|
36
36
|
- `--out-range=-s34228` — обрабатывать исходящие пакеты в пределах ~25 TCP-пакетов
|
|
37
37
|
- `--in-range=-s5556` — обрабатывать входящие до ~5 TCP-пакетов (для circular-детекции сбоев)
|
|
38
|
-
- `--lua-desync=circular:fails=3:
|
|
38
|
+
- `--lua-desync=circular:fails=3:time=60` — переключение стратегии после 3 неудач; счётчик сбрасывается если последний сбой был более 60 секунд назад
|
|
39
39
|
- `--in-range=x` — отключить обработку входящих для desync-действий (только для circular-мониторинга)
|
|
40
40
|
- `:final` — маркер последней стратегии в цепочке circular
|
|
41
41
|
|
|
@@ -46,12 +46,12 @@ updated: 2026-03-30
|
|
|
46
46
|
```
|
|
47
47
|
--out-range=-s34228
|
|
48
48
|
--payload=tls_client_hello
|
|
49
|
-
--in-range=-s5556 --lua-desync=circular:fails=3:
|
|
49
|
+
--in-range=-s5556 --lua-desync=circular:fails=3:time=60
|
|
50
50
|
--in-range=x
|
|
51
51
|
--lua-desync=multidisorder:pos=1,sniext+1,host+1,midsld-2,midsld,midsld+2,endhost-1:strategy=1
|
|
52
|
-
--lua-desync=fake:blob=fake_default_tls:badsum:tls_mod=sni=rzd.ru:
|
|
52
|
+
--lua-desync=fake:blob=fake_default_tls:badsum:tls_mod=sni=rzd.ru:repeats=8:strategy=1
|
|
53
53
|
--lua-desync=multidisorder:pos=1,sniext+1,host+1,midsld-2,midsld,midsld+2,endhost-1:strategy=2
|
|
54
|
-
--lua-desync=fake:blob=
|
|
54
|
+
--lua-desync=fake:blob=fake_default_tls:optional:tcp_seq=-10000:tcp_ack=-66000:badsum:tls_mod=rnd,dupsid,sni=rzd.ru:repeats=4:strategy=2:final
|
|
55
55
|
```
|
|
56
56
|
|
|
57
57
|
Как работает:
|
|
@@ -68,7 +68,7 @@ updated: 2026-03-30
|
|
|
68
68
|
```
|
|
69
69
|
--out-range=-s34228
|
|
70
70
|
--payload=tls_client_hello
|
|
71
|
-
--in-range=-s5556 --lua-desync=circular:fails=3:
|
|
71
|
+
--in-range=-s5556 --lua-desync=circular:fails=3:time=90
|
|
72
72
|
--in-range=x
|
|
73
73
|
--lua-desync=fake:blob=fake_default_tls:tcp_seq=1000000:repeats=1:strategy=1
|
|
74
74
|
--lua-desync=multisplit:pos=2:strategy=1
|
|
@@ -91,7 +91,7 @@ updated: 2026-03-30
|
|
|
91
91
|
```
|
|
92
92
|
--out-range=-s34228
|
|
93
93
|
--payload=tls_client_hello
|
|
94
|
-
--in-range=-s5556 --lua-desync=circular:fails=3:
|
|
94
|
+
--in-range=-s5556 --lua-desync=circular:fails=3:time=60
|
|
95
95
|
--in-range=x
|
|
96
96
|
--lua-desync=fake:blob=fake_default_tls:ip_ttl=2:repeats=1 --payload=empty --out-range=s1<d1 --lua-desync=pktmod:ip_ttl=1:strategy=1
|
|
97
97
|
--lua-desync=fake:blob=fake_default_tls:ip_ttl=3:repeats=1 --payload=empty --out-range=s1<d1 --lua-desync=pktmod:ip_ttl=1:strategy=2
|
|
@@ -121,7 +121,7 @@ Circular перебирает TTL от 2 до 8, затем fallback на badsum
|
|
|
121
121
|
|
|
122
122
|
```
|
|
123
123
|
--payload=tls_client_hello
|
|
124
|
-
--lua-desync=fake:blob=
|
|
124
|
+
--lua-desync=fake:blob=fake_default_tls:badsum:tcp_ts=-600000:repeats=6
|
|
125
125
|
--lua-desync=multidisorder:pos=1,sniext+1,host+1,midsld-2,midsld,midsld+2,endhost-1
|
|
126
126
|
```
|
|
127
127
|
|
|
@@ -153,7 +153,7 @@ Community-практика: YouTube требует **трёх отдельных
|
|
|
153
153
|
--payload=tls_client_hello
|
|
154
154
|
--hostlist-domains=googlevideo.com
|
|
155
155
|
--out-range=-s34228
|
|
156
|
-
--lua-desync=fake:blob=
|
|
156
|
+
--lua-desync=fake:blob=fake_default_tls:badsum:tls_mod=rnd,dupsid,sni=rzd.ru:repeats=4
|
|
157
157
|
--lua-desync=multidisorder:pos=1,sniext+1,host+1,midsld-2,midsld,midsld+2,endhost-1
|
|
158
158
|
|
|
159
159
|
--new
|
|
@@ -174,20 +174,11 @@ Community-практика: YouTube требует **трёх отдельных
|
|
|
174
174
|
|
|
175
175
|
```
|
|
176
176
|
--payload=tls_client_hello
|
|
177
|
-
--lua-desync=syndata:blob=
|
|
177
|
+
--lua-desync=syndata:blob=fake_default_tls
|
|
178
178
|
--lua-desync=multisplit:pos=1,sld+1,endsld-2:seqovl=1
|
|
179
179
|
```
|
|
180
180
|
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
```
|
|
184
|
-
--payload=tls_client_hello
|
|
185
|
-
--lua-desync=syndata:blob=blob_syn_packet
|
|
186
|
-
--lua-desync=multisplit:pos=1,sld+1,endsld-2:seqovl=1:dup=2:dup_cutoff=3
|
|
187
|
-
```
|
|
188
|
-
|
|
189
|
-
Используется для googlevideo.com CDN, где стандартные fake-стратегии не проходят. Blob `syn_packet.bin` содержит
|
|
190
|
-
специально сформированный SYN payload.
|
|
181
|
+
Используется для googlevideo.com CDN, где стандартные fake-стратегии не проходят.
|
|
191
182
|
|
|
192
183
|
## Стратегия: hostfakesplit с российскими SNI
|
|
193
184
|
|
|
@@ -212,7 +203,7 @@ hostfakesplit подставляет в fake-часть split-а домен "б
|
|
|
212
203
|
|
|
213
204
|
```
|
|
214
205
|
--payload=tls_client_hello
|
|
215
|
-
--in-range=-s5556 --lua-desync=circular:fails=3:
|
|
206
|
+
--in-range=-s5556 --lua-desync=circular:fails=3:time=60
|
|
216
207
|
--in-range=x
|
|
217
208
|
--lua-desync=hostfakesplit:host=rzd.ru:midhost=host-2:seqovl=sniext+3:badsum:strategy=1
|
|
218
209
|
--lua-desync=hostfakesplit:host=ozon.ru:repeats=4:badsum:strategy=2:final
|
|
@@ -225,14 +216,10 @@ overlap "нормальный" российский ClientHello и пропус
|
|
|
225
216
|
|
|
226
217
|
```
|
|
227
218
|
--payload=tls_client_hello
|
|
228
|
-
--lua-desync=fakeddisorder:pos=10,midsld:seqovl=336:seqovl_pattern=
|
|
219
|
+
--lua-desync=fakeddisorder:pos=10,midsld:seqovl=336:seqovl_pattern=fake_default_tls:badsum
|
|
229
220
|
```
|
|
230
221
|
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
- `blob_tls_clienthello_gosuslugi_ru` — Госуслуги
|
|
234
|
-
- `blob_tls_clienthello_www_google_com` — Google
|
|
235
|
-
- `blob_tls_clienthello_activated` — активационные серверы
|
|
222
|
+
Для seqovl-pattern используются стандартные blob'ы (`fake_default_tls`) или кастомные, загруженные из файла через `name:@path.bin`. Кастомные blob'ы с ClientHello от российских сайтов создаются через захват трафика — в стандартной поставке zapret2 их нет.
|
|
236
223
|
|
|
237
224
|
Большие значения seqovl (336, 654, 681, 726) нужны для DPI, который анализирует паттерны в TCP window. Малые значения (
|
|
238
225
|
1-2) — для статических DPI, которые не отслеживают TCP-состояние.
|
|
@@ -243,7 +230,7 @@ overlap "нормальный" российский ClientHello и пропус
|
|
|
243
230
|
|
|
244
231
|
```
|
|
245
232
|
--payload=tls_client_hello
|
|
246
|
-
--lua-desync=fake:blob=0x0F0F0F0F:tls_mod=rnd,dupsid,sni=fonts.google.com:
|
|
233
|
+
--lua-desync=fake:blob=0x0F0F0F0F:tls_mod=rnd,dupsid,sni=fonts.google.com:badsum:repeats=4
|
|
247
234
|
--lua-desync=multidisorder:pos=7,sld+1
|
|
248
235
|
```
|
|
249
236
|
|
|
@@ -254,10 +241,10 @@ overlap "нормальный" российский ClientHello и пропус
|
|
|
254
241
|
- `sni=<domain>` — подмена SNI в fake на указанный домен
|
|
255
242
|
- Комбинация `rnd,dupsid,sni=...` — максимальная маскировка
|
|
256
243
|
|
|
257
|
-
Специфичные значения `
|
|
244
|
+
Специфичные значения `tcp_seq`:
|
|
258
245
|
|
|
259
|
-
- `0` — нулевой
|
|
260
|
-
- `
|
|
246
|
+
- `0` — нулевой сдвиг (пакет выглядит валидным для DPI, но отбрасывается сервером по другим fooling-причинам)
|
|
247
|
+
- `1000000` — стандартный сдвиг
|
|
261
248
|
- `10000000` — огромный сдвиг, гарантированно вне TCP window
|
|
262
249
|
|
|
263
250
|
Параметр `ip_id=zero` — обнуление IP Identification field. Обманывает DPI, которые используют IP ID для трекинга потока.
|
|
@@ -4,7 +4,7 @@ zapret2-version: v0.9.4.5
|
|
|
4
4
|
tags: fake, rst, rstack, syndata, fooling, md5sig, badsum, autottl, ttl, ip6, extension headers, tcp_ts_up, tcp_nop_del, ip_id, ipfrag2, synhide, hex-pattern, syn_packet
|
|
5
5
|
source: deepwiki/bol-van/zapret2, official-docs, community
|
|
6
6
|
created: 2026-03-25
|
|
7
|
-
updated: 2026-
|
|
7
|
+
updated: 2026-04-02
|
|
8
8
|
revision: 4
|
|
9
9
|
---
|
|
10
10
|
|
|
@@ -19,33 +19,35 @@ revision: 4
|
|
|
19
19
|
|
|
20
20
|
Отправляет fake-пакет перед реальным. DPI обрабатывает fake и «теряет» реальные данные.
|
|
21
21
|
|
|
22
|
-
### rst
|
|
22
|
+
### rst
|
|
23
23
|
|
|
24
24
|
Отправляет fake RST, чтобы DPI считал соединение закрытым и прекратил инспекцию.
|
|
25
25
|
|
|
26
|
+
Параметр `rstack` — отправить RST+ACK вместо RST:
|
|
27
|
+
|
|
28
|
+
```
|
|
29
|
+
--lua-desync=rst:rstack
|
|
30
|
+
```
|
|
31
|
+
|
|
26
32
|
### syndata
|
|
27
33
|
|
|
28
34
|
Отправляет данные в SYN-пакете (нестандартное поведение). Сбивает некоторые DPI, которые не ожидают payload в SYN и
|
|
29
35
|
теряют контекст отслеживания соединения.
|
|
30
36
|
|
|
31
|
-
|
|
32
|
-
multisplit для googlevideo.com CDN:
|
|
37
|
+
Community-практика — комбинировать syndata с multisplit для googlevideo.com CDN:
|
|
33
38
|
|
|
34
39
|
```
|
|
35
|
-
--lua-desync=syndata:blob=
|
|
36
|
-
--lua-desync=multisplit:pos=1,sld+1,endsld-2:seqovl=1
|
|
40
|
+
--lua-desync=syndata:blob=fake_default_tls
|
|
41
|
+
--lua-desync=multisplit:pos=1,sld+1,endsld-2:seqovl=1
|
|
37
42
|
```
|
|
38
43
|
|
|
39
|
-
Дублирование пакетов (`dup=2`) повышает надёжность: если первая копия потерялась или была заблокирована DPI, вторая
|
|
40
|
-
пройдёт.
|
|
41
|
-
|
|
42
44
|
### fakeddisorder
|
|
43
45
|
|
|
44
46
|
Комбинация fake + disorder в одном действии. Отправляет fake-пакет и переупорядочивает сегменты:
|
|
45
47
|
|
|
46
48
|
```
|
|
47
49
|
--lua-desync=fakeddisorder:pos=method+2:tcp_md5
|
|
48
|
-
--lua-desync=fakeddisorder:pos=10,midsld:seqovl=336:seqovl_pattern=
|
|
50
|
+
--lua-desync=fakeddisorder:pos=10,midsld:seqovl=336:seqovl_pattern=fake_default_tls:badsum
|
|
49
51
|
```
|
|
50
52
|
|
|
51
53
|
### tls_client_hello_clone
|
|
@@ -91,38 +93,29 @@ Split с fake на уровне hostname. Позволяет указать ко
|
|
|
91
93
|
|
|
92
94
|
## Параметры fake-пакетов
|
|
93
95
|
|
|
94
|
-
|
|
95
|
-
--dpi-desync-fake-tls=<file> # кастомный fake TLS ClientHello
|
|
96
|
-
--dpi-desync-fake-http=<file> # кастомный fake HTTP-запрос
|
|
97
|
-
```
|
|
98
|
-
|
|
99
|
-
Lua-формат:
|
|
96
|
+
В nfqws2 fake-пакеты задаются через blob-систему в lua-desync:
|
|
100
97
|
|
|
101
98
|
```
|
|
102
99
|
--lua-desync=fake:blob=fake_default_tls:tcp_md5
|
|
103
100
|
--lua-desync=fake:blob=fake_default_http:tcp_md5:tcp_seq=-10000
|
|
104
101
|
```
|
|
105
102
|
|
|
103
|
+
Стандартные blob'ы: `fake_default_tls` (Firefox ClientHello, SNI=www.microsoft.com), `fake_default_http` (GET www.iana.org), `fake_default_quic` (0x40 + 619×0x00). Кастомные blob'ы загружаются из файлов: `name:@path/to/file.bin`.
|
|
104
|
+
|
|
106
105
|
### Inline hex-паттерны вместо blob-файлов
|
|
107
106
|
|
|
108
107
|
Вместо загрузки .bin файла можно указать hex-паттерн прямо в командной строке. Компактнее и не зависит от наличия файлов
|
|
109
108
|
на диске:
|
|
110
109
|
|
|
111
110
|
```
|
|
112
|
-
--lua-desync=fake:blob=0x0F0F0F0F:
|
|
111
|
+
--lua-desync=fake:blob=0x0F0F0F0F:badsum:repeats=4
|
|
113
112
|
--lua-desync=fake:blob=0x0F0F0E0F:tls_mod=rnd,dupsid:tcp_md5
|
|
114
|
-
--lua-desync=fake:blob=0x00000000:
|
|
113
|
+
--lua-desync=fake:blob=0x00000000:badsum:repeats=11
|
|
115
114
|
```
|
|
116
115
|
|
|
117
116
|
Community-практика: hex-паттерны `0x0F0F0F0F` и `0x0F0F0E0F` часто используются как compact fake. Паттерн `0x00000000` —
|
|
118
117
|
нулевые байты, минимальный fake для brute-force подхода с высоким repeats.
|
|
119
118
|
|
|
120
|
-
Специальный маркер `!` — пустой/инвертированный fake:
|
|
121
|
-
|
|
122
|
-
```
|
|
123
|
-
--lua-desync=fake:blob=!:badseq
|
|
124
|
-
```
|
|
125
|
-
|
|
126
119
|
Параметры fake в Lua:
|
|
127
120
|
|
|
128
121
|
- `blob=<payload>` — binary payload для fake
|
|
@@ -138,19 +131,18 @@ Community-практика: hex-паттерны `0x0F0F0F0F` и `0x0F0F0E0F` ч
|
|
|
138
131
|
|
|
139
132
|
Fake-пакеты ОБЯЗАНЫ быть отброшены сервером, но обработаны DPI. Fooling обеспечивает это.
|
|
140
133
|
|
|
141
|
-
###
|
|
134
|
+
### tcp_md5
|
|
142
135
|
|
|
143
136
|
```
|
|
144
|
-
--
|
|
137
|
+
--lua-desync=fake:blob=fake_default_tls:tcp_md5
|
|
145
138
|
```
|
|
146
139
|
|
|
147
|
-
Добавляет фальшивую TCP MD5 signature. Сервер на Linux отбрасывает пакеты с неверной MD5. **Самый надёжный метод** для
|
|
148
|
-
Linux-серверов.
|
|
140
|
+
Добавляет фальшивую TCP MD5 signature (Option 19). По умолчанию — 16 случайных байт. Сервер на Linux отбрасывает пакеты с неверной MD5. **Самый надёжный метод** для Linux-серверов.
|
|
149
141
|
|
|
150
142
|
### badsum
|
|
151
143
|
|
|
152
144
|
```
|
|
153
|
-
--
|
|
145
|
+
--lua-desync=fake:blob=fake_default_tls:badsum
|
|
154
146
|
```
|
|
155
147
|
|
|
156
148
|
Портит TCP checksum. NIC сервера отбрасывает пакеты с плохой checksum. **НЕ работает**, если у сервера отключён checksum
|
|
@@ -159,15 +151,15 @@ offload.
|
|
|
159
151
|
### ip_autottl
|
|
160
152
|
|
|
161
153
|
```
|
|
162
|
-
--
|
|
154
|
+
--lua-desync=fake:blob=fake_default_tls:ip_autottl
|
|
163
155
|
```
|
|
164
156
|
|
|
165
|
-
Автоматически подбирает TTL так, чтобы fake «умер» до сервера, но прошёл через DPI. **Лучший TTL-метод** — адаптивный.
|
|
157
|
+
Автоматически подбирает TTL так, чтобы fake «умер» до сервера, но прошёл через DPI. Формат: `ip_autottl=delta,min-max`. **Лучший TTL-метод** — адаптивный.
|
|
166
158
|
|
|
167
159
|
### ip_ttl=N
|
|
168
160
|
|
|
169
161
|
```
|
|
170
|
-
--
|
|
162
|
+
--lua-desync=fake:blob=fake_default_tls:ip_ttl=3
|
|
171
163
|
```
|
|
172
164
|
|
|
173
165
|
Фиксированный TTL для fakes. **Хрупкий** — зависит от количества хопов до DPI и сервера. Может сломаться при смене
|
|
@@ -175,18 +167,14 @@ offload.
|
|
|
175
167
|
|
|
176
168
|
### tcp_ts
|
|
177
169
|
|
|
178
|
-
|
|
179
|
-
--dpi-desync-fooling=tcp_ts
|
|
180
|
-
```
|
|
181
|
-
|
|
182
|
-
Сдвигает TCP timestamp далеко в прошлое. Сервер отбрасывает устаревшие timestamps.
|
|
170
|
+
Сдвигает TCP timestamp. Сервер отбрасывает устаревшие timestamps.
|
|
183
171
|
|
|
184
172
|
### Комбинации
|
|
185
173
|
|
|
186
|
-
Можно комбинировать несколько
|
|
174
|
+
Можно комбинировать несколько методов в одном инстансе:
|
|
187
175
|
|
|
188
176
|
```
|
|
189
|
-
--
|
|
177
|
+
--lua-desync=fake:blob=fake_default_tls:tcp_md5:badsum
|
|
190
178
|
```
|
|
191
179
|
|
|
192
180
|
## Расширенные fooling-параметры (Lua)
|
|
@@ -226,7 +214,7 @@ offload.
|
|
|
226
214
|
| `tcp_ts=delta` | Модификация TCP Timestamp option |
|
|
227
215
|
| `tcp_ts_up` | Переместить Timestamp option в начало списка опций (обходит DPI, которые проверяют timestamp только если он первый) |
|
|
228
216
|
| `tcp_nop_del` | Удалить NOP-padding (0x01) из TCP options, освобождая место в 40-байтном пространстве |
|
|
229
|
-
| `tcp_md5[=hexdata]` | Добавить TCP MD5 Signature (Option 19). По умолчанию — 16
|
|
217
|
+
| `tcp_md5[=hexdata]` | Добавить TCP MD5 Signature (Option 19). По умолчанию — 16 случайных байт |
|
|
230
218
|
|
|
231
219
|
### Checksum и фрагментация
|
|
232
220
|
|
|
@@ -238,15 +226,15 @@ offload.
|
|
|
238
226
|
|
|
239
227
|
## Когда использовать
|
|
240
228
|
|
|
241
|
-
- **fake +
|
|
242
|
-
- **fake + badsum** — альтернатива
|
|
243
|
-
- **fake + ip_autottl** — если
|
|
229
|
+
- **fake + tcp_md5** — основная комбинация. Работает против большинства stateful DPI.
|
|
230
|
+
- **fake + badsum** — альтернатива tcp_md5. Не всегда работает.
|
|
231
|
+
- **fake + ip_autottl** — если tcp_md5/badsum не помогают. Адаптивный TTL.
|
|
244
232
|
- **Избегать ip_ttl=N** — хрупкий, ломается при смене маршрутизации.
|
|
245
|
-
- **rst
|
|
233
|
+
- **rst** (с `rstack` при необходимости) — для DPI, который отслеживает состояние TCP-сессий.
|
|
246
234
|
|
|
247
235
|
## Типичная ошибка
|
|
248
236
|
|
|
249
237
|
Если fakes доходят до сервера (неправильный fooling), соединение ломается:
|
|
250
238
|
|
|
251
239
|
- Симптомы: connection reset, TLS handshake failure
|
|
252
|
-
- Решение: сменить fooling метод (
|
|
240
|
+
- Решение: сменить fooling метод (tcp_md5 → badsum → ip_autottl)
|
|
@@ -4,7 +4,7 @@ zapret2-version: v0.9.4.5
|
|
|
4
4
|
tags: lua, scripting, lua-desync, zapret-lib, zapret-antidpi, zapret-auto, zapret-obfs, obfuscation, wireguard, ippxor, udp2icmp, synhide
|
|
5
5
|
source: deepwiki/bol-van/zapret2, official-docs
|
|
6
6
|
created: 2026-03-28
|
|
7
|
-
updated: 2026-
|
|
7
|
+
updated: 2026-04-02
|
|
8
8
|
---
|
|
9
9
|
|
|
10
10
|
# Lua Scripting System
|
|
@@ -34,7 +34,7 @@ C-демон (nfqws2/dvtws2/winws2):
|
|
|
34
34
|
### zapret-lib.lua (утилиты)
|
|
35
35
|
|
|
36
36
|
Фундаментальные функции:
|
|
37
|
-
- **Dissection**: `
|
|
37
|
+
- **Dissection**: `http_dissect_req`, `http_dissect_reply`, `dissect_url`, `tls_client_hello_mod` — разбор протоколов
|
|
38
38
|
- **Реконструкция**: `rawsend_dissect_segmented`, `ipfrag2` — отправка модифицированных пакетов
|
|
39
39
|
- **Модификация**: `apply_fooling` — применение fooling-параметров (TTL, checksums, etc.)
|
|
40
40
|
|
|
@@ -4,7 +4,7 @@ zapret2-version: v0.9.4.5
|
|
|
4
4
|
tags: circular-strategy, rotation, resilience, multi-strategy, profiles, autohostlist
|
|
5
5
|
source: official-docs
|
|
6
6
|
created: 2026-03-25
|
|
7
|
-
updated: 2026-
|
|
7
|
+
updated: 2026-04-02
|
|
8
8
|
---
|
|
9
9
|
|
|
10
10
|
# Оркестрация стратегий
|
|
@@ -16,15 +16,14 @@ Circular — автоматическая ротация между нескол
|
|
|
16
16
|
### Lua-формат
|
|
17
17
|
|
|
18
18
|
```
|
|
19
|
-
--lua-desync=circular:fails=
|
|
19
|
+
--lua-desync=circular:fails=3:time=60
|
|
20
20
|
```
|
|
21
21
|
|
|
22
22
|
Параметры:
|
|
23
|
-
- `fails=N` — порог неудач для смены стратегии (по умолчанию
|
|
24
|
-
- `
|
|
25
|
-
- `
|
|
26
|
-
- `
|
|
27
|
-
- `nld=N` — количество записей в NLD (network latency detection)
|
|
23
|
+
- `fails=N` — порог неудач для смены стратегии (по умолчанию 3)
|
|
24
|
+
- `time=N` — если последний сбой был раньше N секунд назад, счётчик сбрасывается (по умолчанию 60)
|
|
25
|
+
- `retrans=N` — количество ретрансмиссий до считывания неудачи (параметр failure detector)
|
|
26
|
+
- `nld=N` — количество записей NLD для hostkey генератора
|
|
28
27
|
|
|
29
28
|
**Важно:** параметры circular должны быть без пробелов между стратегиями.
|
|
30
29
|
|
|
@@ -43,7 +42,7 @@ Circular — автоматическая ротация между нескол
|
|
|
43
42
|
Каждый `--lua-desync` может быть привязан к конкретной стратегии ротации через `strategy=N`:
|
|
44
43
|
|
|
45
44
|
```
|
|
46
|
-
--lua-desync=circular:fails=
|
|
45
|
+
--lua-desync=circular:fails=3:time=60
|
|
47
46
|
--lua-desync=fake:blob=0x0F0F0F0F:tcp_seq=-10000:tcp_ack=-66000:badsum:strategy=1
|
|
48
47
|
--lua-desync=multisplit:pos=2,sld:seqovl=620:strategy=1
|
|
49
48
|
--lua-desync=fake:blob=0x00000000:tcp_ack=-66000:strategy=2
|
|
@@ -62,7 +61,7 @@ nfqws2 \
|
|
|
62
61
|
--filter-tcp=443 \
|
|
63
62
|
--filter-l7=tls \
|
|
64
63
|
--out-range=-s34228 \
|
|
65
|
-
--in-range=-s5556 --lua-desync=circular:fails=
|
|
64
|
+
--in-range=-s5556 --lua-desync=circular:fails=3:time=60 \
|
|
66
65
|
--in-range=x \
|
|
67
66
|
--payload=tls_client_hello \
|
|
68
67
|
--lua-desync=fake:blob=0x0F0F0F0F:tcp_seq=-10000:tcp_ack=-66000:badsum:strategy=1 \
|
|
@@ -72,17 +71,6 @@ nfqws2 \
|
|
|
72
71
|
--lua-desync=multisplit:pos=1:seqovl=681:ip_id=zero:strategy=3
|
|
73
72
|
```
|
|
74
73
|
|
|
75
|
-
### Предустановленные circular-конфигурации
|
|
76
|
-
|
|
77
|
-
Пакет zapret2 включает предустановленные наборы:
|
|
78
|
-
|
|
79
|
-
| Стратегия | Статус | Circular | Назначение |
|
|
80
|
-
|---|---|---|---|
|
|
81
|
-
| **youtube** | Включена по умолчанию | 14 вариантов | Оптимизирована для YouTube, Google Video |
|
|
82
|
-
| **default** | Отключена | 8 вариантов | Универсальная для других сайтов |
|
|
83
|
-
|
|
84
|
-
Стратегия `youtube` работает со списком `zapret_hosts_youtube.txt`. Стратегия `default` может быть активирована для обхода блокировок других ресурсов и использует список `zapret_hosts_user.txt` с исключениями из `zapret_hosts_user_exclude.txt`.
|
|
85
|
-
|
|
86
74
|
### Range-параметры в circular
|
|
87
75
|
|
|
88
76
|
- `--out-range=-s34228` — обрабатывать исходящие пакеты до ~25 TCP-пакетов (по TCP sequence). Достаточно для полного TLS ClientHello включая большие (YouTube)
|
|
@@ -4,7 +4,7 @@ zapret2-version: v0.9.4.5
|
|
|
4
4
|
tags: telegram, mtproto, ip-block, dpi, bypass, vpn, strategies
|
|
5
5
|
source: community
|
|
6
6
|
created: 2026-03-28
|
|
7
|
-
updated: 2026-
|
|
7
|
+
updated: 2026-04-02
|
|
8
8
|
---
|
|
9
9
|
|
|
10
10
|
# Telegram и zapret2: границы возможного
|
|
@@ -136,7 +136,7 @@ ping -c 3 149.154.167.50
|
|
|
136
136
|
# Если timeout → IP заблокирован → нужен VPN
|
|
137
137
|
|
|
138
138
|
# Проверить через blockcheckw (если доступен)
|
|
139
|
-
blockcheckw status -
|
|
139
|
+
echo "web.telegram.org" > /tmp/tg.txt && blockcheckw status --domain-list /tmp/tg.txt
|
|
140
140
|
# "IP blocked" → VPN
|
|
141
141
|
# "DPI blocked" → zapret2 может помочь
|
|
142
142
|
|
|
@@ -4,7 +4,7 @@ zapret2-version: v0.9.4.5
|
|
|
4
4
|
tags: troubleshooting, diagnosis, problems, fixes
|
|
5
5
|
source: official-docs
|
|
6
6
|
created: 2026-03-25
|
|
7
|
-
updated: 2026-
|
|
7
|
+
updated: 2026-04-02
|
|
8
8
|
---
|
|
9
9
|
|
|
10
10
|
# Диагностика проблем zapret2
|
|
@@ -28,7 +28,9 @@ updated: 2026-03-29
|
|
|
28
28
|
|
|
29
29
|
Быстрая проверка через blockcheckw:
|
|
30
30
|
```bash
|
|
31
|
-
|
|
31
|
+
# создать файл с доменами для проверки
|
|
32
|
+
echo "example.com" > /tmp/check.txt
|
|
33
|
+
blockcheckw status --domain-list /tmp/check.txt
|
|
32
34
|
```
|
|
33
35
|
Если "IP blocked" → VPN.
|
|
34
36
|
|
|
@@ -37,9 +39,9 @@ blockcheckw status -d example.com
|
|
|
37
39
|
**Симптомы:** Connection reset, TLS handshake failure.
|
|
38
40
|
**Причина:** Fake-пакеты доходят до сервера и ломают соединение.
|
|
39
41
|
**Решение:** Сменить fooling метод:
|
|
40
|
-
1. `
|
|
42
|
+
1. `tcp_md5` → самый надёжный на Linux-серверах
|
|
41
43
|
2. `badsum` → альтернатива (не работает если checksum offload выключен)
|
|
42
|
-
3. `ip_autottl` → адаптивный TTL
|
|
44
|
+
3. `ip_autottl` → адаптивный TTL (формат: `delta,min-max`)
|
|
43
45
|
4. Не использовать фиксированный `ip_ttl` — хрупкий
|
|
44
46
|
|
|
45
47
|
### TTL-проблемы
|
|
@@ -54,7 +56,7 @@ blockcheckw status -d example.com
|
|
|
54
56
|
**Решение:**
|
|
55
57
|
1. Если перестала работать ночью — подождать 15-30 минут, возможна реконфигурация ТСПУ
|
|
56
58
|
2. Запустить `blockcheckw scan` заново для поиска новой стратегии
|
|
57
|
-
3. Для resilience: использовать `--lua-desync=circular:fails=3:
|
|
59
|
+
3. Для resilience: использовать `--lua-desync=circular:fails=3:time=60` с 3+ стратегиями в ротации
|
|
58
60
|
|
|
59
61
|
Подробнее о ночных реконфигурациях: `tspu/night-reconfig.md`
|
|
60
62
|
|
|
@@ -75,8 +77,8 @@ modprobe nfnetlink_queue
|
|
|
75
77
|
pgrep -f nfqws2
|
|
76
78
|
|
|
77
79
|
# Проверить правила firewall
|
|
78
|
-
nft list
|
|
79
|
-
iptables -L -n | grep -c NFQUEUE
|
|
80
|
+
nft list table inet zapret2 # или:
|
|
81
|
+
iptables -L -n -t mangle | grep -c NFQUEUE
|
|
80
82
|
|
|
81
83
|
# Проверить конфиг
|
|
82
84
|
grep NFQWS2_ENABLE /opt/zapret2/config # должно быть =1
|
|
@@ -132,7 +134,7 @@ systemctl status zapret2 # systemd
|
|
|
132
134
|
/opt/zapret2/init.d/sysv/zapret2 status # sysv
|
|
133
135
|
|
|
134
136
|
# Правила firewall
|
|
135
|
-
nft list
|
|
137
|
+
nft list table inet zapret2
|
|
136
138
|
iptables -L -n -t mangle | grep NFQUEUE
|
|
137
139
|
|
|
138
140
|
# Конфигурация
|
|
@@ -4,7 +4,7 @@ zapret2-version: v0.9.4.5
|
|
|
4
4
|
tags: troubleshooting, ipv6, bypass, blockcheck, dual-stack, apple, android
|
|
5
5
|
source: community
|
|
6
6
|
created: 2026-03-28
|
|
7
|
-
updated: 2026-
|
|
7
|
+
updated: 2026-04-02
|
|
8
8
|
---
|
|
9
9
|
|
|
10
10
|
# IPv6 ловушка: стратегия работает, а сайты — нет
|
|
@@ -28,7 +28,7 @@ updated: 2026-03-28
|
|
|
28
28
|
|
|
29
29
|
### blockcheck2 тестирует IPv4
|
|
30
30
|
|
|
31
|
-
По умолчанию blockcheck2 ищет стратегии для **IPv4** (`IPVS=4`). Найденная стратегия применяется к IPv4-трафику. Но устройство отправляет запросы по **IPv6**, которые идут мимо nfqws2 → попадают под DPI без bypass.
|
|
31
|
+
По умолчанию blockcheck2 ищет стратегии для **IPv4** (`IPVS=4`). blockcheckw также работает только с IPv4 (резолвит только A-записи). Найденная стратегия применяется к IPv4-трафику. Но устройство отправляет запросы по **IPv6**, которые идут мимо nfqws2 → попадают под DPI без bypass.
|
|
32
32
|
|
|
33
33
|
### zapret2 и IPv6
|
|
34
34
|
|
|
@@ -120,7 +120,7 @@ IPVS=6 blockcheck2 ...
|
|
|
120
120
|
/etc/init.d/zapret2 restart
|
|
121
121
|
```
|
|
122
122
|
|
|
123
|
-
**Важно:** стратегия для IPv4 может не работать для IPv6 и наоборот. Нужно тестировать
|
|
123
|
+
**Важно:** стратегия для IPv4 может не работать для IPv6 и наоборот. В zapret2 автоматическое применение TTL к IPv6 убрано — `ip_autottl` и `ip6_autottl` нужно указывать отдельно. Нужно тестировать IPv4 и IPv6 раздельно.
|
|
124
124
|
|
|
125
125
|
### Вариант 3: Отключить IPv6 только для проблемных устройств
|
|
126
126
|
|
|
@@ -154,7 +154,7 @@ uci commit dhcp
|
|
|
154
154
|
|
|
155
155
|
Это заставит все устройства использовать только IPv4 для DNS-резолвинга, при этом IPv6-связность сохраняется для локальной сети.
|
|
156
156
|
|
|
157
|
-
**Внимание:**
|
|
157
|
+
**Внимание:** при использовании FakeIP DNS (sing-box и аналоги) убедитесь, что FakeIP rules матчат только `query_type=A`, иначе AAAA-запросы могут ломать резолвинг.
|
|
158
158
|
|
|
159
159
|
## Чеклист: стратегия найдена, но не работает
|
|
160
160
|
|
|
@@ -4,7 +4,7 @@ zapret2-version: v0.9.4.5
|
|
|
4
4
|
tags: troubleshooting, openwrt, flowoffload, podkop, zeroblock, nft, firewall, conflicts
|
|
5
5
|
source: community
|
|
6
6
|
created: 2026-03-28
|
|
7
|
-
updated: 2026-
|
|
7
|
+
updated: 2026-04-01
|
|
8
8
|
---
|
|
9
9
|
|
|
10
10
|
# Конфликты zapret2 с другим ПО на OpenWrt
|
|
@@ -48,7 +48,7 @@ OpenWrt поддерживает **flow offloading** — ускорение ма
|
|
|
48
48
|
FLOWOFFLOAD=software
|
|
49
49
|
```
|
|
50
50
|
|
|
51
|
-
|
|
51
|
+
**Community-совет**: `software` — компромисс между скоростью и совместимостью. zapret2 при установке `software` или `hardware` создаёт цепочки exemption (`flow_offload_zapret`, `flow_offload_always`) в nftables, чтобы трафик на целевых портах проходил через NFQUEUE, а остальной — offloaded.
|
|
52
52
|
|
|
53
53
|
#### Вариант 2: Отключить системный offload
|
|
54
54
|
|
|
@@ -66,15 +66,12 @@ uci commit firewall
|
|
|
66
66
|
|
|
67
67
|
#### Вариант 3: Если zapret управляет offload сам
|
|
68
68
|
|
|
69
|
-
Если `FLOWOFFLOAD=software` или `FLOWOFFLOAD=hardware` указаны в конфиге
|
|
69
|
+
Если `FLOWOFFLOAD=software` или `FLOWOFFLOAD=hardware` указаны в конфиге zapret2, он создаёт цепочки nftables для управления offload:
|
|
70
|
+
- `flow_offload` — точка входа
|
|
71
|
+
- `flow_offload_zapret` — содержит `return` rules для трафика, который должен пройти через NFQUEUE (exemption от offload)
|
|
72
|
+
- `flow_offload_always` — всё остальное отправляется в `flow add @ft` (offloaded)
|
|
70
73
|
|
|
71
|
-
|
|
72
|
-
# Пример exemption rule, который zapret добавляет в nftables:
|
|
73
|
-
add rule inet zapret flow_offload mark and != 0 tcp dport {80,443} ct original packets 1-9
|
|
74
|
-
ip daddr != @nozapret return comment "direct flow offloading exemption"
|
|
75
|
-
```
|
|
76
|
-
|
|
77
|
-
Это правило говорит: "для пакетов на порты 80/443 в первых 1-9 пакетах соединения — НЕ делать offload, пропустить через обычный путь (и NFQUEUE)".
|
|
74
|
+
Таким образом трафик к целевым доменам/портам проходит обычный путь через nfqws2, а остальной трафик ускоряется через offload.
|
|
78
75
|
|
|
79
76
|
### Диагностика
|
|
80
77
|
|
|
@@ -112,18 +109,14 @@ Podkop — популярный инструмент точечной маршр
|
|
|
112
109
|
### Причина
|
|
113
110
|
|
|
114
111
|
Zapret и Podkop оба создают nftables rules с mark-ами:
|
|
115
|
-
- **
|
|
112
|
+
- **Zapret2**: `DESYNC_MARK=0x40000000` (meta mark для предотвращения петель), `DESYNC_MARK_POSTNAT=0x20000000` (для postnat-схемы), queue to 200
|
|
116
113
|
- **Podkop**: свои mangle/proxy rules для перенаправления в sing-box
|
|
117
114
|
|
|
118
115
|
Эти правила пересекаются: трафик может сначала попасть в zapret queue, потом в podkop redirect (или наоборот), что приводит к непредсказуемому поведению.
|
|
119
116
|
|
|
120
|
-
###
|
|
121
|
-
|
|
122
|
-
> Одновременное использование Podkop с zapret или youtubeunblock вызывает сбои, так как нарушает работу схемы FakeIP. Документация не содержит инструкций по настройке сторонних DPI-утилит совместно с Podkop.
|
|
117
|
+
### Совместимость с Podkop
|
|
123
118
|
|
|
124
|
-
|
|
125
|
-
- Конфликты: https://podkop.net/docs/troubleshooting/
|
|
126
|
-
- Диагностика FakeIP: https://podkop.net/docs/diagnostics/
|
|
119
|
+
Podkop и zapret2 могут работать одновременно при правильном разделении трафика. На практике конфликты чаще всего возникают когда оба инструмента пытаются обработать один и тот же трафик. Рекомендуется разделение по доменам (см. ниже).
|
|
127
120
|
|
|
128
121
|
### Варианты решения
|
|
129
122
|
|
|
@@ -159,23 +152,15 @@ config section 'exclusion'
|
|
|
159
152
|
3. Если FakeIP работает и всё открывается — можно не трогать
|
|
160
153
|
4. Если что-то не работает:
|
|
161
154
|
- Остановить zapret: `/etc/init.d/zapret stop` (или `/etc/init.d/zapret2 stop`)
|
|
162
|
-
- Перезапустить firewall:
|
|
155
|
+
- Перезапустить firewall: `/etc/init.d/firewall restart`
|
|
163
156
|
- Проверить без zapret — если заработало, значит конфликт
|
|
164
157
|
- Решать по варианту 1, 2 или 3
|
|
165
158
|
|
|
166
159
|
## ZeroBlock (Routerich): совместная работа
|
|
167
160
|
|
|
168
|
-
|
|
161
|
+
> Информация о ZeroBlock получена из community-источников и не верифицирована по публичной документации.
|
|
169
162
|
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
- ZeroBlock в версии 0.7.0+ имеет встроенную **диагностику zapret/zapret2**: показывает NFQWS_OPT и strategy-секции с hostlist
|
|
173
|
-
- ZeroBlock может автоматически загружать секции конфигурации zapret2 с сервера
|
|
174
|
-
- DPI Check в ZeroBlock включает YouTube Stream Check (проверка Innertube API + скачивание 5MB видео), который управляет стратегией `rr_youtube` в zapret2
|
|
175
|
-
|
|
176
|
-
### Рекомендация
|
|
177
|
-
|
|
178
|
-
Связка ZeroBlock + zapret2 — штатная конфигурация на Routerich-роутерах. При использовании ZeroBlock следовать его документации по настройке zapret2, а не настраивать вручную.
|
|
163
|
+
ZeroBlock — инструмент для Routerich-роутеров (OpenWrt-based), который включает sing-box маршрутизацию и умеет управлять zapret/zapret2. Связка ZeroBlock + zapret2 — штатная конфигурация на Routerich-роутерах. При использовании ZeroBlock следовать его документации по настройке zapret2.
|
|
179
164
|
|
|
180
165
|
## Общие рекомендации
|
|
181
166
|
|
|
@@ -191,13 +176,13 @@ ls -la /etc/rc.d/ | grep -E 'zapret|podkop|sing-box|firewall'
|
|
|
191
176
|
|
|
192
177
|
```bash
|
|
193
178
|
# Все правила zapret
|
|
194
|
-
nft list ruleset | grep -i
|
|
179
|
+
nft list ruleset | grep -i zapret2
|
|
195
180
|
|
|
196
181
|
# Все правила с mark
|
|
197
182
|
nft list ruleset | grep mark
|
|
198
183
|
|
|
199
184
|
# Конкретная таблица zapret
|
|
200
|
-
nft list table inet
|
|
185
|
+
nft list table inet zapret2
|
|
201
186
|
```
|
|
202
187
|
|
|
203
188
|
### "Всё упало" — экстренное восстановление
|
|
@@ -209,7 +194,7 @@ nft list table inet zapret
|
|
|
209
194
|
/etc/init.d/zapret disable
|
|
210
195
|
|
|
211
196
|
# Перезапустить firewall
|
|
212
|
-
|
|
197
|
+
/etc/init.d/firewall restart
|
|
213
198
|
|
|
214
199
|
# Проверить интернет
|
|
215
200
|
ping -c 3 8.8.8.8
|
|
@@ -4,14 +4,14 @@ zapret2-version: v0.9.4.5
|
|
|
4
4
|
tags: troubleshooting, quic, udp, youtube, performance, disable-quic, podkop, browser
|
|
5
5
|
source: community
|
|
6
6
|
created: 2026-03-28
|
|
7
|
-
updated: 2026-
|
|
7
|
+
updated: 2026-04-02
|
|
8
8
|
---
|
|
9
9
|
|
|
10
10
|
# QUIC: главный незаметный враг YouTube на роутере
|
|
11
11
|
|
|
12
12
|
## Что такое QUIC и почему это проблема
|
|
13
13
|
|
|
14
|
-
QUIC (HTTP/3) — протокол
|
|
14
|
+
QUIC (HTTP/3) — транспортный протокол поверх UDP на порту 443, стандартизированный IETF (RFC 9000). Широко используется Google, Cloudflare, Meta и другими. Современные браузеры и приложения **предпочитают QUIC** вместо обычного HTTPS (TCP). Проблема в том, что:
|
|
15
15
|
|
|
16
16
|
1. **ТСПУ умеет блокировать/замедлять QUIC** отдельно от HTTPS
|
|
17
17
|
2. **Стратегии zapret2 для TCP не работают для QUIC** — это совершенно другой протокол
|
|
@@ -23,7 +23,7 @@ QUIC (HTTP/3) — протокол Google поверх UDP на порту 443.
|
|
|
23
23
|
- YouTube открывается, но видео бесконечно буферизуется или грузится в 480p
|
|
24
24
|
- Сайты Google грузятся по 20 секунд
|
|
25
25
|
- "На ПК работает, на телефоне нет" (разные приложения по-разному используют QUIC)
|
|
26
|
-
- "В одном браузере работает, в другом нет" (
|
|
26
|
+
- "В одном браузере работает, в другом нет" (все основные браузеры включают QUIC по умолчанию, но поведение fallback различается)
|
|
27
27
|
- Стратегия zapret2 для TCP работает (`curl` на роутере OK), но YouTube всё равно тормозит
|
|
28
28
|
|
|
29
29
|
### Почему это происходит
|
|
@@ -32,8 +32,8 @@ QUIC (HTTP/3) — протокол Google поверх UDP на порту 443.
|
|
|
32
32
|
Без QUIC:
|
|
33
33
|
Браузер → TCP:443 → nfqws2 обрабатывает → DPI обманут → YouTube работает
|
|
34
34
|
|
|
35
|
-
С QUIC:
|
|
36
|
-
Браузер → UDP:443 (QUIC) → nfqws2 НЕ обрабатывает (нет
|
|
35
|
+
С QUIC (без UDP-секции в конфиге):
|
|
36
|
+
Браузер → UDP:443 (QUIC) → nfqws2 НЕ обрабатывает (нет секции --filter-udp в конфиге)
|
|
37
37
|
→ ТСПУ распознаёт QUIC → замедление/блокировка
|
|
38
38
|
→ YouTube тормозит
|
|
39
39
|
```
|
|
@@ -119,33 +119,30 @@ NFQWS2_OPT="
|
|
|
119
119
|
```
|
|
120
120
|
|
|
121
121
|
Но QUIC bypass **сложнее** TCP bypass:
|
|
122
|
-
- QUIC зашифрован с первого пакета —
|
|
122
|
+
- QUIC зашифрован с первого пакета — nfqws2 расшифровывает QUIC Initial для извлечения SNI, но манипулировать SNI бессмысленно (DPI тоже расшифровывает)
|
|
123
123
|
- Основная стратегия — fake packets (отправить поддельный QUIC Initial)
|
|
124
124
|
- Результат менее предсказуем чем для TCP
|
|
125
125
|
- Не все ТСПУ одинаково обрабатывают QUIC
|
|
126
126
|
|
|
127
|
-
### 3.
|
|
127
|
+
### 3. Отдельная QUIC-секция в конфиге zapret2
|
|
128
128
|
|
|
129
|
-
|
|
129
|
+
В zapret2 QUIC-обработка добавляется как отдельная секция через `--new`:
|
|
130
130
|
|
|
131
|
-
```bash
|
|
132
|
-
# Скрипт quic4all для zapret2 custom.d/
|
|
133
|
-
NFQWS_OPT_DESYNC_QUIC="${NFQWS_OPT_DESYNC_QUIC:---payload quic_initial --blob=quic_3:@/opt/zapret2/files/fake/quic_3.bin --lua-desync=fake:blob=quic_3}"
|
|
134
|
-
|
|
135
|
-
alloc_dnum DNUM_QUIC4ALL
|
|
136
|
-
alloc_qnum QNUM_QUIC4ALL
|
|
137
|
-
|
|
138
|
-
zapret_custom_daemons()
|
|
139
|
-
{
|
|
140
|
-
local opt="--qnum=$QNUM_QUIC4ALL $NFQWS_OPT_DESYNC_QUIC"
|
|
141
|
-
do_nfqws $1 $DNUM_QUIC4ALL "$opt"
|
|
142
|
-
}
|
|
143
|
-
zapret_custom_firewall_nft()
|
|
144
|
-
{
|
|
145
|
-
local f="udp length >= 264 @ih,0,4 0xC @ih,8,32 0x00000001"
|
|
146
|
-
nft_fw_nfqws_post "$f" "$f" $QNUM_QUIC4ALL
|
|
147
|
-
}
|
|
148
131
|
```
|
|
132
|
+
NFQWS2_OPT="
|
|
133
|
+
--name=https
|
|
134
|
+
--filter-tcp=443 --filter-l7=tls
|
|
135
|
+
--payload=tls_client_hello
|
|
136
|
+
--lua-desync=multisplit:pos=10:seqovl=1
|
|
137
|
+
--new
|
|
138
|
+
--name=quic
|
|
139
|
+
--filter-udp=443 --filter-l7=quic
|
|
140
|
+
--payload=quic_initial
|
|
141
|
+
--lua-desync=fake:blob=fake_default_quic:repeats=11
|
|
142
|
+
"
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
Доступные blob-ы для QUIC fake: `fake_default_quic`, `quic_initial_www_google_com`, `quic_initial_facebook_com` и др. Количество repeats критично — UDP не гарантирует доставку, для агрессивного DPI может потребоваться 8-11 повторений.
|
|
149
146
|
|
|
150
147
|
## Частые ошибки
|
|
151
148
|
|
|
@@ -172,7 +169,7 @@ SmartTV могут использовать свои DNS-серверы и QUIC,
|
|
|
172
169
|
## Чеклист: YouTube тормозит
|
|
173
170
|
|
|
174
171
|
1. [ ] Проверить: `curl -m 5 -I https://www.youtube.com` на роутере — если OK, стратегия TCP работает
|
|
175
|
-
2. [ ] Проверить QUIC: `disable_quic` в podkop / `
|
|
172
|
+
2. [ ] Проверить QUIC: `disable_quic` в podkop / наличие секции `--filter-udp=443` в конфиге zapret2
|
|
176
173
|
3. [ ] Если QUIC не отключён — отключить (самый быстрый фикс)
|
|
177
174
|
4. [ ] Проверить Private DNS на Android-устройствах
|
|
178
175
|
5. [ ] Проверить QUIC в браузере: `chrome://flags` → QUIC → Disabled
|
|
@@ -4,7 +4,7 @@ zapret2-version: v0.9.4.5
|
|
|
4
4
|
tags: troubleshooting, smart-tv, youtube, tls, samsung, tizen, lg, webos, vidaa, platforms
|
|
5
5
|
source: community
|
|
6
6
|
created: 2026-03-28
|
|
7
|
-
updated: 2026-04-
|
|
7
|
+
updated: 2026-04-02
|
|
8
8
|
---
|
|
9
9
|
|
|
10
10
|
# Smart TV и YouTube: почему стратегия работает на ПК, но не на телевизоре
|
|
@@ -95,7 +95,7 @@ VIDAA, WebOS и Tizen агрессивно кешируют приложение
|
|
|
95
95
|
--out-range=-s34228
|
|
96
96
|
--payload=tls_client_hello
|
|
97
97
|
--lua-desync=multidisorder:pos=1,sniext+1,host+1,midsld-2,midsld,midsld+2,endhost-1
|
|
98
|
-
--lua-desync=fake:blob=
|
|
98
|
+
--lua-desync=fake:blob=fake_default_tls:optional:tcp_seq=-10000:tcp_ack=-66000:badsum:tls_mod=rnd,dupsid,sni=rzd.ru:repeat=4
|
|
99
99
|
```
|
|
100
100
|
|
|
101
101
|
Принцип работы:
|
|
@@ -115,7 +115,7 @@ NFQWS2_OPT="
|
|
|
115
115
|
--payload=tls_client_hello
|
|
116
116
|
--hostlist-domains=youtube.com,googlevideo.com,youtubei.googleapis.com
|
|
117
117
|
--lua-desync=multidisorder:pos=1,sniext+1,host+1,midsld-2,midsld,midsld+2,endhost-1
|
|
118
|
-
--lua-desync=fake:blob=
|
|
118
|
+
--lua-desync=fake:blob=fake_default_tls:optional:tcp_seq=-10000:tcp_ack=-66000:badsum:tls_mod=rnd,dupsid,sni=rzd.ru:repeat=4
|
|
119
119
|
--new
|
|
120
120
|
--name=other-https
|
|
121
121
|
--filter-tcp=443 --filter-l7=tls
|
|
@@ -3,7 +3,7 @@ title: YouTube Opens But Video Does Not Load
|
|
|
3
3
|
zapret2-version: v0.9.4.5
|
|
4
4
|
tags: youtube, googlevideo, CDN, video, troubleshooting, badsum, aggressive, desktop, three-stream, quic
|
|
5
5
|
created: 2026-03-29
|
|
6
|
-
updated: 2026-
|
|
6
|
+
updated: 2026-04-02
|
|
7
7
|
source: community, deepwiki/bol-van/zapret2
|
|
8
8
|
---
|
|
9
9
|
|
|
@@ -63,17 +63,17 @@ nft add rule inet zapret2 postrouting_hook udp dport 443 drop
|
|
|
63
63
|
|
|
64
64
|
### 3. Проверить hostlist
|
|
65
65
|
|
|
66
|
-
googlevideo.com должен быть в hostlist
|
|
66
|
+
googlevideo.com должен быть в hostlist. Проверить через конфиг:
|
|
67
67
|
|
|
68
68
|
```bash
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
Если нет — добавить:
|
|
69
|
+
# Если используется --hostlist-domains в NFQWS2_OPT:
|
|
70
|
+
grep -i googlevideo /opt/zapret2/config
|
|
73
71
|
|
|
72
|
+
# Если используется --hostlist с файлом:
|
|
73
|
+
grep -r googlevideo /opt/zapret2/ipset/
|
|
74
74
|
```
|
|
75
|
-
|
|
76
|
-
|
|
75
|
+
|
|
76
|
+
Если нет — добавить `googlevideo.com` в hostlist или в `--hostlist-domains`.
|
|
77
77
|
|
|
78
78
|
## Решение: агрессивная стратегия для YouTube
|
|
79
79
|
|
|
@@ -85,7 +85,7 @@ googlevideo.com
|
|
|
85
85
|
--out-range=-s34228
|
|
86
86
|
--payload=tls_client_hello
|
|
87
87
|
--lua-desync=multidisorder:pos=1,sniext+1,host+1,midsld-2,midsld,midsld+2,endhost-1
|
|
88
|
-
--lua-desync=fake:blob=
|
|
88
|
+
--lua-desync=fake:blob=fake_default_tls:optional:tcp_seq=-10000:tcp_ack=-66000:badsum:tls_mod=rnd,dupsid,sni=rzd.ru:repeat=4
|
|
89
89
|
```
|
|
90
90
|
|
|
91
91
|
**Что делает:**
|
|
@@ -99,27 +99,27 @@ googlevideo.com
|
|
|
99
99
|
|
|
100
100
|
### Вариант 2: circular-стратегия с автоматическим перебором
|
|
101
101
|
|
|
102
|
-
|
|
103
|
-
работает — автоматически переключается на следующую.
|
|
102
|
+
Можно настроить circular-оркестратор для автоматической ротации стратегий при отказе:
|
|
104
103
|
|
|
105
|
-
Включение:
|
|
106
|
-
|
|
107
|
-
```bash
|
|
108
|
-
# В config
|
|
109
|
-
MODE=nfqws2
|
|
110
|
-
NFQWS2_ENABLE=1
|
|
111
|
-
# Использовать профиль youtube
|
|
112
104
|
```
|
|
105
|
+
--lua-desync=circular:fails=3:time=60
|
|
106
|
+
--lua-desync=multidisorder:pos=1,sniext+1,host+1,midsld:strategy=1
|
|
107
|
+
--lua-desync=fake:blob=fake_default_tls:badsum:strategy=1
|
|
108
|
+
--lua-desync=split2:pos=2:strategy=2
|
|
109
|
+
--lua-desync=fake:blob=fake_default_tls:tcp_md5:strategy=2
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
Если стратегия 1 набирает 3 неудачи — переключается на стратегию 2 и т.д.
|
|
113
113
|
|
|
114
114
|
### Вариант 3: найти стратегию через blockcheckw
|
|
115
115
|
|
|
116
116
|
Самый надёжный подход — просканировать что работает именно для вашего провайдера:
|
|
117
117
|
|
|
118
118
|
```bash
|
|
119
|
-
blockcheckw scan
|
|
119
|
+
blockcheckw scan -d googlevideo.com -w 128
|
|
120
120
|
```
|
|
121
121
|
|
|
122
|
-
Важно: сканировать именно `googlevideo.com`, а не только `youtube.com`.
|
|
122
|
+
Важно: сканировать именно `googlevideo.com`, а не только `youtube.com`. Флаг `-d` задаёт домен, `-w` — число параллельных воркеров.
|
|
123
123
|
|
|
124
124
|
## Почему badsum
|
|
125
125
|
|
|
@@ -128,7 +128,7 @@ blockcheckw scan --target youtube.com --target googlevideo.com -j 128
|
|
|
128
128
|
| Метод | Механизм | Для googlevideo |
|
|
129
129
|
|--------------|---------------------------------------------------|--------------------------------|
|
|
130
130
|
| `badsum` | Испорченная TCP checksum, NIC сервера отбрасывает | Работает в большинстве случаев |
|
|
131
|
-
| `
|
|
131
|
+
| `tcp_md5` | Фальшивая TCP MD5 подпись, сервер отклоняет | Надёжнее на Linux-серверах |
|
|
132
132
|
| `ip_autottl` | TTL = расстояние до DPI, пакет умирает до сервера | Зависит от топологии |
|
|
133
133
|
|
|
134
134
|
`badsum` — наиболее распространённый выбор для YouTube CDN в community-стратегиях.
|