zapret2-mcp 0.7.4 → 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 +43 -0
- package/knowledge/blockcheckw/commands.md +7 -7
- package/knowledge/blockcheckw/overview.md +2 -2
- package/knowledge/config/nfqws2-options.md +79 -47
- package/knowledge/config/zapret2-config.md +21 -13
- package/knowledge/strategies/community-strategies.md +19 -32
- package/knowledge/strategies/dpi-types.md +9 -10
- package/knowledge/strategies/fake-packets.md +33 -45
- package/knowledge/strategies/http-specific.md +8 -7
- package/knowledge/strategies/lua-scripting.md +2 -2
- package/knowledge/strategies/orchestration.md +8 -20
- package/knowledge/strategies/tcp-segmentation.md +28 -25
- 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 +15 -7
- package/knowledge/troubleshooting/youtube-video-not-loading.md +21 -21
- package/knowledge/workflows/find-strategy.md +12 -9
- package/knowledge/workflows/setup.md +24 -45
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,48 @@
|
|
|
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
|
+
|
|
31
|
+
## [0.7.5](https://github.com/rcd27/zapret2-mcp/compare/v0.7.4...v0.7.5) (2026-04-01)
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
### Bug Fixes
|
|
35
|
+
|
|
36
|
+
* **blockcheckw:** правки с ссылкой на источник ([bed1603](https://github.com/rcd27/zapret2-mcp/commit/bed160349e392eb17a0d8e1ce50d01009794af09))
|
|
37
|
+
* **dpi-types:** корректный lua-синтаксис, ipfrag2 заменён на multidisorder в качестве рекомендации, удалён несуществующий параметр ([b2f7921](https://github.com/rcd27/zapret2-mcp/commit/b2f79214485db04b4c5f5c5cbcfcd1b5574cbb2d))
|
|
38
|
+
* **find-strategy:** убраны рефернсы к V1 стратегиям ([fcf7325](https://github.com/rcd27/zapret2-mcp/commit/fcf73253c4f8193b31cd8e74c57cd4c858548f01))
|
|
39
|
+
* **http-specific:** убраны галлюцинации и ошибки нэйминга ([dbb0720](https://github.com/rcd27/zapret2-mcp/commit/dbb0720f7e7e06bd6eb3eeaba39f36dfe524e835))
|
|
40
|
+
* **nfqws2-options:** выпилены ссылки на nfqws, добавлены fooling параметры и payload types ([7501b75](https://github.com/rcd27/zapret2-mcp/commit/7501b75fe1bbd4065fe4c9780fc400c66e53dea7))
|
|
41
|
+
* **setup:** DoH/DoT в качестве prereq, остальные тревоания к системе ([4776237](https://github.com/rcd27/zapret2-mcp/commit/477623779c7d372213d57dbfe522ec8e06912fb5))
|
|
42
|
+
* **tcp-segmentation:** убран несуществующий параметр, правки по claims ([7c1c945](https://github.com/rcd27/zapret2-mcp/commit/7c1c94548e757897f0205998a4e7d59f4df7121f))
|
|
43
|
+
* **tizen:** правки насчёт отсутствия альтернатив YouTube на Tizen ([6513205](https://github.com/rcd27/zapret2-mcp/commit/6513205b0323a1c7ce8d8e21e69ff5ea3c04d1d7))
|
|
44
|
+
* **zapret2-config:** мелкие правки по конфигу zapret2 ([d40c4cf](https://github.com/rcd27/zapret2-mcp/commit/d40c4cf5faf8debe7fc429378af60f2a43dae9e1))
|
|
45
|
+
|
|
3
46
|
## [0.7.4](https://github.com/rcd27/zapret2-mcp/compare/v0.7.3...v0.7.4) (2026-03-30)
|
|
4
47
|
|
|
5
48
|
|
|
@@ -4,7 +4,7 @@ blockcheckw-version: v0.8.3
|
|
|
4
4
|
tags: blockcheckw, scan, check, universal, status, benchmark, commands
|
|
5
5
|
source: official-docs
|
|
6
6
|
created: 2026-03-25
|
|
7
|
-
updated: 2026-
|
|
7
|
+
updated: 2026-04-01
|
|
8
8
|
---
|
|
9
9
|
|
|
10
10
|
# Команды blockcheckw
|
|
@@ -18,7 +18,7 @@ blockcheckw -w 256 scan -d rutracker.org [-p tls12] [--top 10] [--timeout 300]
|
|
|
18
18
|
```
|
|
19
19
|
|
|
20
20
|
Параметры:
|
|
21
|
-
- `-w N` — количество воркеров (по умолчанию
|
|
21
|
+
- `-w N` — количество воркеров (по умолчанию 8)
|
|
22
22
|
- `-d <domain>` — целевой домен
|
|
23
23
|
- `-p <protocol>` — протокол: `http`, `tls12`, `tls13` (по умолчанию все)
|
|
24
24
|
- `--top N` — показать топ-N результатов
|
|
@@ -37,7 +37,7 @@ blockcheckw check --from-file report_vanilla.txt -d rutracker.org [--take 10] [-
|
|
|
37
37
|
|
|
38
38
|
Параметры:
|
|
39
39
|
- `--from-file <file>` — файл с результатами scan (vanilla или JSON)
|
|
40
|
-
- `--take N` —
|
|
40
|
+
- `--take N` — остановиться после нахождения N верифицированных стратегий на каждый протокол (0 = проверить все)
|
|
41
41
|
- `--passes N` — количество проходов (по умолчанию 3)
|
|
42
42
|
|
|
43
43
|
Логика:
|
|
@@ -57,7 +57,7 @@ blockcheckw -w 512 universal --domain-list blocked.txt --sample 5 [-p tls12]
|
|
|
57
57
|
- `--domain-list <file>` — файл со списком доменов
|
|
58
58
|
- `--sample N` — выборка из списка для тестирования
|
|
59
59
|
|
|
60
|
-
Вывод: стратегии отсортированы по coverage (убывание)
|
|
60
|
+
Вывод: стратегии отсортированы по coverage (убывание).
|
|
61
61
|
|
|
62
62
|
## status — проверка доступности доменов
|
|
63
63
|
|
|
@@ -73,7 +73,7 @@ blockcheckw status --domain-list blocked.txt [--timeout 6]
|
|
|
73
73
|
- **IP blocked** — TCP не работает → нужен VPN
|
|
74
74
|
- **DNS failed** — проблема с DNS-резолвером
|
|
75
75
|
|
|
76
|
-
|
|
76
|
+
Использует до 256 параллельных проб. На практике проверяет 1000+ доменов за ~30 секунд.
|
|
77
77
|
|
|
78
78
|
## benchmark — оптимизация количества воркеров
|
|
79
79
|
|
|
@@ -81,9 +81,9 @@ blockcheckw status --domain-list blocked.txt [--timeout 6]
|
|
|
81
81
|
blockcheckw benchmark [-t 30] [-M 64] [-d rutracker.org] [-p tls12]
|
|
82
82
|
```
|
|
83
83
|
|
|
84
|
-
Тестирует
|
|
84
|
+
Тестирует воркеров степенями двойки (начиная от системного минимума, зависящего от числа ядер CPU), измеряет throughput и определяет оптимальное количество для текущего железа.
|
|
85
85
|
|
|
86
|
-
На роутерах с 256MB RAM
|
|
86
|
+
OOM-guard: ~3MB на воркер. На роутерах с 256MB RAM это ограничивает максимум до ~60 воркеров.
|
|
87
87
|
|
|
88
88
|
## Пайплайн: scan → check
|
|
89
89
|
|
|
@@ -4,7 +4,7 @@ blockcheckw-version: v0.8.3
|
|
|
4
4
|
tags: blockcheckw, scanner, strategy discovery, parallel, rust
|
|
5
5
|
source: official-docs
|
|
6
6
|
created: 2026-03-25
|
|
7
|
-
updated: 2026-
|
|
7
|
+
updated: 2026-04-01
|
|
8
8
|
---
|
|
9
9
|
|
|
10
10
|
# blockcheckw — быстрый сканер стратегий
|
|
@@ -15,7 +15,7 @@ blockcheckw (https://github.com/rcd27/blockcheckw) — высокопроизв
|
|
|
15
15
|
|
|
16
16
|
- **Скорость**: 100-150x быстрее blockcheck2.sh (~2 мин vs ~90 мин)
|
|
17
17
|
- **Throughput**: ~150 стратегий/сек vs ~1 стратегия/сек
|
|
18
|
-
- **Параллелизм**: до
|
|
18
|
+
- **Параллелизм**: до 2048 воркеров через nftables vmap dispatch (O(1) lookup)
|
|
19
19
|
- **TLS fingerprint**: rustls вместо curl/OpenSSL
|
|
20
20
|
- **9 архитектур**: x86_64, x86, arm64, arm, mips, mipsel, mips64, ppc, riscv64
|
|
21
21
|
- **16KB DPI detection**: обнаруживает DPI, который обрезает соединение после ~16KB данных
|
|
@@ -4,7 +4,7 @@ zapret2-version: v0.9.4.5
|
|
|
4
4
|
tags: nfqws2, cli, options, parameters, reference
|
|
5
5
|
source: official-docs
|
|
6
6
|
created: 2026-03-25
|
|
7
|
-
updated: 2026-
|
|
7
|
+
updated: 2026-04-01
|
|
8
8
|
---
|
|
9
9
|
|
|
10
10
|
# Справочник параметров nfqws2
|
|
@@ -28,15 +28,17 @@ updated: 2026-03-25
|
|
|
28
28
|
```
|
|
29
29
|
|
|
30
30
|
Стандартные Lua-библиотеки:
|
|
31
|
-
- `zapret-lib.lua` — вспомогательные
|
|
31
|
+
- `zapret-lib.lua` — вспомогательные функции, базовые fooling-операции
|
|
32
32
|
- `zapret-antidpi.lua` — библиотека стратегий desync
|
|
33
33
|
- `zapret-auto.lua` — автоматическое определение стратегий
|
|
34
|
+
- `zapret-obfs.lua` — обфускация протоколов
|
|
35
|
+
- `zapret-pcap.lua` — утилита PCAP-захвата
|
|
34
36
|
|
|
35
37
|
## Connection Tracking
|
|
36
38
|
|
|
37
39
|
```
|
|
38
|
-
--ctrack-timeouts=S:E:F:U
|
|
39
|
-
--ctrack-disable
|
|
40
|
+
--ctrack-timeouts=S:E:F[:U] # Таймауты conntrack (SYN:EST:FIN[:UDP]), UDP опционален
|
|
41
|
+
--ctrack-disable=[0|1] # Отключить conntrack (1 или без аргумента = отключить)
|
|
40
42
|
```
|
|
41
43
|
|
|
42
44
|
## Фильтры профиля
|
|
@@ -58,18 +60,29 @@ updated: 2026-03-25
|
|
|
58
60
|
|
|
59
61
|
## Типы payload
|
|
60
62
|
|
|
61
|
-
Для `--payload
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
63
|
+
Для `--payload=` (полный список из исходного кода):
|
|
64
|
+
|
|
65
|
+
Специальные: `all`, `known`, `unknown`, `empty`
|
|
66
|
+
|
|
67
|
+
| Протокол | Payload types |
|
|
68
|
+
|---|---|
|
|
69
|
+
| HTTP | `http_req`, `http_reply` |
|
|
70
|
+
| TLS | `tls_client_hello`, `tls_server_hello` |
|
|
71
|
+
| DTLS | `dtls_client_hello`, `dtls_server_hello` |
|
|
72
|
+
| QUIC | `quic_initial` |
|
|
73
|
+
| DNS | `dns_query`, `dns_response` |
|
|
74
|
+
| WireGuard | `wireguard_initiation`, `wireguard_response`, `wireguard_cookie`, `wireguard_keepalive`, `wireguard_data` |
|
|
75
|
+
| XMPP | `xmpp_stream`, `xmpp_starttls`, `xmpp_proceed`, `xmpp_features` |
|
|
76
|
+
| Telegram | `mtproto_initial` |
|
|
77
|
+
| BitTorrent | `bt_handshake`, `utp_bt_handshake` |
|
|
78
|
+
| P2P/Other | `dht`, `discord_ip_discovery`, `stun` |
|
|
79
|
+
| IP/ICMP | `ipv4`, `ipv6`, `icmp` |
|
|
68
80
|
|
|
69
81
|
## Списки доменов и IP
|
|
70
82
|
|
|
71
83
|
```
|
|
72
84
|
--hostlist=<file> # Белый список доменов
|
|
85
|
+
--hostlist-domains=a.com,b.com # Inline-список доменов (без файла)
|
|
73
86
|
--hostlist-exclude=<file> # Чёрный список доменов
|
|
74
87
|
--hostlist-auto=<file> # Автозаполняемый список (по детекции блокировки)
|
|
75
88
|
--ipset=<file> # Белый список IP
|
|
@@ -79,7 +92,7 @@ updated: 2026-03-25
|
|
|
79
92
|
## Binary данные (blob)
|
|
80
93
|
|
|
81
94
|
```
|
|
82
|
-
--blob=<name>:0xHEX
|
|
95
|
+
--blob=<name>:[+ofs]@<filename>|0xHEX # Загрузка бинарных данных (+ofs = смещение в файле)
|
|
83
96
|
```
|
|
84
97
|
|
|
85
98
|
Предопределённые blob:
|
|
@@ -105,45 +118,64 @@ updated: 2026-03-25
|
|
|
105
118
|
- `a` = всегда
|
|
106
119
|
- `x` = никогда
|
|
107
120
|
|
|
108
|
-
## Desync-параметры
|
|
121
|
+
## Desync-параметры
|
|
109
122
|
|
|
110
|
-
|
|
111
|
-
--dpi-desync=<strategy> # Стратегия: split2, disorder2, fake, rst, и др.
|
|
112
|
-
--dpi-desync-split-pos=<pos> # Позиция разбиения
|
|
113
|
-
--dpi-desync-split-seqovl=<N> # TCP sequence overlap
|
|
114
|
-
--dpi-desync-fooling=<methods> # Fooling: md5sig, badsum, ip_autottl, и др.
|
|
115
|
-
--dpi-desync-fake-tls=<file> # Кастомный fake TLS payload
|
|
116
|
-
--dpi-desync-fake-http=<file> # Кастомный fake HTTP payload
|
|
117
|
-
--dpi-desync-fake-quic=<file> # Кастомный fake QUIC payload
|
|
118
|
-
--dpi-desync-circular-strategy=N # Ротация стратегий
|
|
119
|
-
--dpi-desync-udplen-increment=N # UDP padding
|
|
120
|
-
```
|
|
123
|
+
> Параметры `--dpi-desync-*` (legacy) существуют только в nfqws **v1**. В nfqws2 все desync-стратегии задаются через `--lua-desync`.
|
|
121
124
|
|
|
122
|
-
|
|
125
|
+
### Lua-desync формат
|
|
123
126
|
|
|
124
|
-
Новый формат через `--lua-desync=`:
|
|
125
127
|
```
|
|
126
128
|
--lua-desync=<action>[:param1=val1[:param2=val2]]
|
|
127
129
|
```
|
|
128
130
|
|
|
129
|
-
Доступные action:
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
131
|
+
Доступные action (из `zapret-antidpi.lua`):
|
|
132
|
+
|
|
133
|
+
| Action | Описание |
|
|
134
|
+
|---|---|
|
|
135
|
+
| `fake` | Отправка fake-пакета |
|
|
136
|
+
| `rst` | Fake RST-пакет |
|
|
137
|
+
| `multisplit` | Разбиение в нескольких позициях |
|
|
138
|
+
| `multidisorder` | Разбиение в обратном порядке |
|
|
139
|
+
| `fakedsplit` | Разбиение с вставкой fake между частями |
|
|
140
|
+
| `fakeddisorder` | fakedsplit в обратном порядке |
|
|
141
|
+
| `hostfakesplit` | Fake-разбиение по hostname (HTTP + TLS) |
|
|
142
|
+
| `tcpseg` | TCP-сегментация |
|
|
143
|
+
| `oob` | Out-of-band data |
|
|
144
|
+
| `udplen` | Модификация длины UDP |
|
|
145
|
+
| `syndata` | SYN с данными |
|
|
146
|
+
| `http_hostcase` | Изменение регистра Host: → host: |
|
|
147
|
+
| `http_domcase` | Чередование регистра домена |
|
|
148
|
+
| `http_methodeol` | Вставка \r\n перед HTTP-методом |
|
|
149
|
+
| `wssize` | TCP window size на всех пакетах |
|
|
150
|
+
| `wsize` | TCP window size на SYN-ACK |
|
|
151
|
+
| `pktmod` | Модификация пакета in-place |
|
|
152
|
+
| `send` | Дублирование пакета с модификациями |
|
|
153
|
+
| `drop` | Сброс пакета |
|
|
154
|
+
|
|
155
|
+
Вспомогательные (из `zapret-lib.lua`): `pass`, `pktdebug`, `argdebug`, `posdebug`, `luaexec`
|
|
156
|
+
|
|
157
|
+
### Общие fooling-параметры (для action)
|
|
158
|
+
|
|
159
|
+
| Параметр | Описание |
|
|
160
|
+
|---|---|
|
|
161
|
+
| `ip_ttl=<N>` | IPv4 TTL |
|
|
162
|
+
| `ip_autottl=delta,min-max` | Автоопределение TTL до DPI |
|
|
163
|
+
| `ip6_ttl=<N>` | IPv6 hop limit |
|
|
164
|
+
| `ip6_autottl=delta,min-max` | Автоопределение IPv6 TTL |
|
|
165
|
+
| `tcp_seq=<offset>` | Смещение TCP sequence |
|
|
166
|
+
| `tcp_ack=<offset>` | Смещение TCP ACK |
|
|
167
|
+
| `tcp_md5[=hex]` | MD5 signature (TCP option) |
|
|
168
|
+
| `tcp_ts=<N>` | Смещение TCP timestamp |
|
|
169
|
+
| `tcp_ts_up` | Переместить timestamp option наверх |
|
|
170
|
+
| `tcp_flags_set=<list>` | Установить TCP-флаги |
|
|
171
|
+
| `tcp_flags_unset=<list>` | Снять TCP-флаги |
|
|
172
|
+
| `tcp_nop_del` | Удалить NOP TCP options |
|
|
173
|
+
| `badsum` | Испорченная L4 checksum |
|
|
174
|
+
| `ip_id=seq\|rnd\|zero\|none` | Политика IP ID |
|
|
175
|
+
| `ip6_hopbyhop[=hex]` | IPv6 hop-by-hop extension header |
|
|
176
|
+
| `ip6_hopbyhop2[=hex]` | Второй hop-by-hop header |
|
|
177
|
+
| `ip6_destopt[=hex]` | IPv6 destination options |
|
|
178
|
+
| `ip6_destopt2[=hex]` | Второй destopt header |
|
|
179
|
+
| `ip6_routing[=hex]` | IPv6 routing header |
|
|
180
|
+
| `ip6_ah[=hex]` | IPv6 authentication header |
|
|
181
|
+
| `fool=<func>` | Пользовательская функция fooling |
|
|
@@ -4,7 +4,7 @@ zapret2-version: v0.9.4.5
|
|
|
4
4
|
tags: config, configuration, parameters, setup
|
|
5
5
|
source: official-docs
|
|
6
6
|
created: 2026-03-25
|
|
7
|
-
updated: 2026-
|
|
7
|
+
updated: 2026-04-01
|
|
8
8
|
---
|
|
9
9
|
|
|
10
10
|
# Конфигурационный файл zapret2
|
|
@@ -15,17 +15,20 @@ updated: 2026-03-25
|
|
|
15
15
|
## Основные параметры
|
|
16
16
|
|
|
17
17
|
### Включение/выключение
|
|
18
|
+
|
|
18
19
|
```bash
|
|
19
|
-
NFQWS2_ENABLE=
|
|
20
|
+
NFQWS2_ENABLE=0 # Включить nfqws2 (0 = выключен, 1 = включён). По умолчанию выключен
|
|
20
21
|
```
|
|
21
22
|
|
|
22
23
|
### Порты
|
|
24
|
+
|
|
23
25
|
```bash
|
|
24
26
|
NFQWS2_PORTS_TCP=80,443 # TCP-порты для перехвата
|
|
25
27
|
NFQWS2_PORTS_UDP=443 # UDP-порты для перехвата
|
|
26
28
|
```
|
|
27
29
|
|
|
28
30
|
### Лимиты пакетов (connbytes)
|
|
31
|
+
|
|
29
32
|
```bash
|
|
30
33
|
NFQWS2_TCP_PKT_OUT=20 # Макс исходящих TCP-пакетов
|
|
31
34
|
NFQWS2_TCP_PKT_IN=10 # Макс входящих TCP-пакетов
|
|
@@ -34,6 +37,7 @@ NFQWS2_UDP_PKT_IN=3 # Макс входящих UDP-пакетов
|
|
|
34
37
|
```
|
|
35
38
|
|
|
36
39
|
### Стратегия bypass
|
|
40
|
+
|
|
37
41
|
```bash
|
|
38
42
|
NFQWS2_OPT="..." # Основные параметры nfqws2
|
|
39
43
|
```
|
|
@@ -41,21 +45,25 @@ NFQWS2_OPT="..." # Основные параметры nfqws2
|
|
|
41
45
|
Это главный параметр — содержит стратегии desync. Может быть multi-profile через `--new`.
|
|
42
46
|
|
|
43
47
|
### Метка desync
|
|
48
|
+
|
|
44
49
|
```bash
|
|
45
50
|
DESYNC_MARK=0x40000000 # NFT mark для предотвращения петель
|
|
46
51
|
```
|
|
47
52
|
|
|
48
53
|
### Фильтрация
|
|
54
|
+
|
|
49
55
|
```bash
|
|
50
56
|
MODE_FILTER=none|ipset|hostlist|autohostlist
|
|
51
57
|
```
|
|
52
58
|
|
|
53
59
|
### IPv6
|
|
60
|
+
|
|
54
61
|
```bash
|
|
55
62
|
DISABLE_IPV6=1 # Отключить IPv6 (по умолчанию включён)
|
|
56
63
|
```
|
|
57
64
|
|
|
58
65
|
### Прочее
|
|
66
|
+
|
|
59
67
|
```bash
|
|
60
68
|
SET_MAXELEM=522288 # Макс элементов ipset
|
|
61
69
|
MDIG_THREADS=30 # Потоки параллельного DNS-резолвинга
|
|
@@ -91,14 +99,14 @@ DISABLE_IPV6=0
|
|
|
91
99
|
|
|
92
100
|
## Файловая структура zapret2
|
|
93
101
|
|
|
94
|
-
| Путь
|
|
95
|
-
|
|
96
|
-
| `/opt/zapret2/config`
|
|
97
|
-
| `/opt/zapret2/config.default`
|
|
98
|
-
| `/opt/zapret2/nfq2/nfqws2`
|
|
99
|
-
| `/opt/zapret2/lua/zapret-lib.lua`
|
|
100
|
-
| `/opt/zapret2/lua/zapret-antidpi.lua` | Стратегии desync
|
|
101
|
-
| `/opt/zapret2/lua/zapret-auto.lua`
|
|
102
|
-
| `/opt/zapret2/ipset/`
|
|
103
|
-
| `/opt/zapret2/init.d/`
|
|
104
|
-
| `/opt/zapret2/blockcheck2.sh`
|
|
102
|
+
| Путь | Назначение |
|
|
103
|
+
|---------------------------------------|----------------------------------------|
|
|
104
|
+
| `/opt/zapret2/config` | Основной конфиг |
|
|
105
|
+
| `/opt/zapret2/config.default` | Шаблон конфига |
|
|
106
|
+
| `/opt/zapret2/nfq2/nfqws2` | Бинарник демона |
|
|
107
|
+
| `/opt/zapret2/lua/zapret-lib.lua` | Lua-библиотека |
|
|
108
|
+
| `/opt/zapret2/lua/zapret-antidpi.lua` | Стратегии desync |
|
|
109
|
+
| `/opt/zapret2/lua/zapret-auto.lua` | Авто-определение |
|
|
110
|
+
| `/opt/zapret2/ipset/` | Списки IP/доменов |
|
|
111
|
+
| `/opt/zapret2/init.d/` | Init-скрипты |
|
|
112
|
+
| `/opt/zapret2/blockcheck2.sh` | Диагностика (скрипт подбора стратегий) |
|
|
@@ -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: dpi, domain-based, stateful, stateless, recommendations
|
|
5
5
|
source: official-docs
|
|
6
6
|
created: 2026-03-25
|
|
7
|
-
updated: 2026-
|
|
7
|
+
updated: 2026-04-01
|
|
8
8
|
---
|
|
9
9
|
|
|
10
10
|
# Типы DPI и рекомендуемые подходы
|
|
@@ -30,10 +30,11 @@ DPI собирает TCP-сессию и анализирует полный п
|
|
|
30
30
|
```
|
|
31
31
|
--dpi-desync=fake,split2 --dpi-desync-fooling=md5sig
|
|
32
32
|
```
|
|
33
|
-
Или RST
|
|
33
|
+
Или RST-инъекция (zapret2 lua-синтаксис):
|
|
34
34
|
```
|
|
35
|
-
--
|
|
35
|
+
--lua-desync=rst:ip_autottl
|
|
36
36
|
```
|
|
37
|
+
> `ip_autottl` — lua-параметр, НЕ значение `--dpi-desync-fooling`. В legacy-синтаксисе v1 используется отдельный флаг `--dpi-desync-autottl`.
|
|
37
38
|
|
|
38
39
|
## Stateless DPI (инспектирует отдельные пакеты)
|
|
39
40
|
|
|
@@ -41,20 +42,18 @@ DPI смотрит на каждый пакет независимо, не со
|
|
|
41
42
|
|
|
42
43
|
Рекомендации:
|
|
43
44
|
```
|
|
44
|
-
--
|
|
45
|
-
```
|
|
46
|
-
Или:
|
|
47
|
-
```
|
|
48
|
-
--dpi-desync=disorder2
|
|
45
|
+
--lua-desync=multidisorder:pos=1,midsld
|
|
49
46
|
```
|
|
50
47
|
|
|
48
|
+
> `ipfrag2` (IP-фрагментация) формально существует, но TCP-фрагменты почти всегда фильтруются сетевым оборудованием. Для UDP/QUIC надёжность ~50-75%. Предпочтительнее `multidisorder`.
|
|
49
|
+
|
|
51
50
|
## HTTP-only DPI
|
|
52
51
|
|
|
53
52
|
DPI блокирует только HTTP (порт 80), не трогает HTTPS.
|
|
54
53
|
|
|
55
|
-
|
|
54
|
+
Рекомендации (zapret2 lua-синтаксис):
|
|
56
55
|
```
|
|
57
|
-
--
|
|
56
|
+
--lua-desync=http_hostcase --lua-desync=multisplit:pos=method,host
|
|
58
57
|
```
|
|
59
58
|
|
|
60
59
|
## Как определить тип DPI
|