zapret2-mcp 0.7.4 → 0.7.5

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 CHANGED
@@ -1,5 +1,20 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.7.5](https://github.com/rcd27/zapret2-mcp/compare/v0.7.4...v0.7.5) (2026-04-01)
4
+
5
+
6
+ ### Bug Fixes
7
+
8
+ * **blockcheckw:** правки с ссылкой на источник ([bed1603](https://github.com/rcd27/zapret2-mcp/commit/bed160349e392eb17a0d8e1ce50d01009794af09))
9
+ * **dpi-types:** корректный lua-синтаксис, ipfrag2 заменён на multidisorder в качестве рекомендации, удалён несуществующий параметр ([b2f7921](https://github.com/rcd27/zapret2-mcp/commit/b2f79214485db04b4c5f5c5cbcfcd1b5574cbb2d))
10
+ * **find-strategy:** убраны рефернсы к V1 стратегиям ([fcf7325](https://github.com/rcd27/zapret2-mcp/commit/fcf73253c4f8193b31cd8e74c57cd4c858548f01))
11
+ * **http-specific:** убраны галлюцинации и ошибки нэйминга ([dbb0720](https://github.com/rcd27/zapret2-mcp/commit/dbb0720f7e7e06bd6eb3eeaba39f36dfe524e835))
12
+ * **nfqws2-options:** выпилены ссылки на nfqws, добавлены fooling параметры и payload types ([7501b75](https://github.com/rcd27/zapret2-mcp/commit/7501b75fe1bbd4065fe4c9780fc400c66e53dea7))
13
+ * **setup:** DoH/DoT в качестве prereq, остальные тревоания к системе ([4776237](https://github.com/rcd27/zapret2-mcp/commit/477623779c7d372213d57dbfe522ec8e06912fb5))
14
+ * **tcp-segmentation:** убран несуществующий параметр, правки по claims ([7c1c945](https://github.com/rcd27/zapret2-mcp/commit/7c1c94548e757897f0205998a4e7d59f4df7121f))
15
+ * **tizen:** правки насчёт отсутствия альтернатив YouTube на Tizen ([6513205](https://github.com/rcd27/zapret2-mcp/commit/6513205b0323a1c7ce8d8e21e69ff5ea3c04d1d7))
16
+ * **zapret2-config:** мелкие правки по конфигу zapret2 ([d40c4cf](https://github.com/rcd27/zapret2-mcp/commit/d40c4cf5faf8debe7fc429378af60f2a43dae9e1))
17
+
3
18
  ## [0.7.4](https://github.com/rcd27/zapret2-mcp/compare/v0.7.3...v0.7.4) (2026-03-30)
4
19
 
5
20
 
@@ -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-03-25
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` — количество воркеров (по умолчанию определяется benchmark)
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` — проверить топ-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 (убывание), затем по simplicity (возрастание).
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
- Скорость: 1000+ доменов за ~30 секунд.
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
- Тестирует 8→16→32→64→... воркеров, измеряет throughput, определяет оптимальное количество для текущего железа.
84
+ Тестирует воркеров степенями двойки (начиная от системного минимума, зависящего от числа ядер CPU), измеряет throughput и определяет оптимальное количество для текущего железа.
85
85
 
86
- На роутерах с 256MB RAM оптимально ~64 воркеров.
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-03-25
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
- - **Параллелизм**: до 1024 воркеров через nftables vmap dispatch (O(1) lookup)
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-03-25
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 # Таймауты conntrack (SYN:EST:FIN:UDP)
39
- --ctrack-disable # Отключить conntrack
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
- - `http_req`, `http_reply`
63
- - `tls_client_hello`, `tls_server_hello`
64
- - `quic_initial`
65
- - `dns_query`, `dns_response`
66
- - `empty` (пакеты нулевой длины)
67
- - `unknown` (нераспознанные)
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|@<filename> # Загрузка бинарных данных для стратегий
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-параметры (legacy формат)
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
- ## Lua-desync формат (nfqws2 v0.9+)
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
- - `fake` — отправка fake-пакета
131
- - `multisplit` разбиение в нескольких позициях
132
- - `multidisorder` — разбиение в обратном порядке
133
- - `tcpseg` TCP-сегментация
134
- - `pktmod` модификация пакета in-place
135
- - `send` дублирование пакета с модификациями
136
- - `drop` сброс пакета
137
- - `http_hostcase` изменение регистра Host:
138
- - `http_domcase` рандомизация регистра домена
139
- - `wssize` TCP window size manipulation
140
- - `oob` out-of-band data
141
-
142
- Общие fooling-параметры (для всех action):
143
- - `ip_ttl=<N>` IP TTL
144
- - `ip6_ttl=<N>` IPv6 hop limit
145
- - `tcp_seq=<offset>` смещение TCP sequence
146
- - `tcp_ack=<offset>` смещение TCP ACK
147
- - `tcp_md5[=hex]` MD5 signature
148
- - `badsum` испорченная L4 checksum
149
- - `ip_id=rnd` случайный IP ID
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-03-25
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=1 # Включить nfqws2 (0 = выключен)
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` | Lua-библиотека |
100
- | `/opt/zapret2/lua/zapret-antidpi.lua` | Стратегии desync |
101
- | `/opt/zapret2/lua/zapret-auto.lua` | Авто-определение |
102
- | `/opt/zapret2/ipset/` | Списки IP/доменов |
103
- | `/opt/zapret2/init.d/` | Init-скрипты |
104
- | `/opt/zapret2/blockcheck2.sh` | Диагностика (legacy) |
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: dpi, domain-based, stateful, stateless, recommendations
5
5
  source: official-docs
6
6
  created: 2026-03-25
7
- updated: 2026-03-25
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
- --dpi-desync=rst --dpi-desync-fooling=ip_autottl
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
- --dpi-desync=ipfrag2
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
- --hostcase --dpi-desync=split2 --dpi-desync-split-http-req=method+host
56
+ --lua-desync=http_hostcase --lua-desync=multisplit:pos=method,host
58
57
  ```
59
58
 
60
59
  ## Как определить тип DPI
@@ -4,7 +4,7 @@ zapret2-version: v0.9.4.5
4
4
  tags: hostcase, domcase, methodeol, http, host header
5
5
  source: official-docs
6
6
  created: 2026-03-25
7
- updated: 2026-03-25
7
+ updated: 2026-04-01
8
8
  ---
9
9
 
10
10
  # HTTP-специфичные стратегии
@@ -17,18 +17,19 @@ updated: 2026-03-25
17
17
  ```
18
18
  --hostcase
19
19
  ```
20
- Меняет регистр заголовка Host: (например, `Host:` → `hOsT:`). DPI ищет точное совпадение `Host:` и пропускает изменённый заголовок. Сервер обрабатывает header case-insensitively.
20
+ Меняет регистр заголовка `Host:` → `host:` (lowercase). DPI ищет точное совпадение `Host:` и пропускает изменённый заголовок. Сервер обрабатывает header case-insensitively (RFC 7230).
21
21
 
22
22
  Lua-формат:
23
23
  ```
24
- --lua-desync=http_hostcase:spell=hOsT
24
+ --lua-desync=http_hostcase
25
25
  ```
26
+ По умолчанию `spell=host` (lowercase). Можно задать произвольное написание из 4 символов: `--lua-desync=http_hostcase:spell=hOsT`.
26
27
 
27
28
  ### domcase
28
29
  ```
29
30
  --domcase
30
31
  ```
31
- Рандомизирует регистр доменного имени в Host-заголовке. DPI не может сопоставить домен.
32
+ Чередует регистр символов доменного имени в Host-заголовке (напр. `example.com` → `ExAmPlE.cOm`). DPI не может сопоставить домен. Чередование детерминированное — нечётные позиции uppercase, чётные lowercase.
32
33
 
33
34
  Lua-формат:
34
35
  ```
@@ -39,15 +40,15 @@ Lua-формат:
39
40
  ```
40
41
  --methodeol
41
42
  ```
42
- Добавляет дополнительный перевод строки после HTTP-метода. Ломает парсинг DPI.
43
+ Вставляет `\r\n` **перед** HTTP-методом (т.е. в начало запроса), сдвигая строку запроса. Для сохранения размера пакета крадёт 2 байта из значения User-Agent. Ломает парсинг DPI, который ожидает метод в начале пакета.
43
44
 
44
45
  ## Когда использовать
45
46
 
46
47
  HTTP — самый лёгкий протокол для bypass. Часто `--hostcase` в одиночку достаточно.
47
48
 
48
- Комбинация для надёжного HTTP bypass:
49
+ Комбинация для надёжного HTTP bypass (zapret2 lua-синтаксис):
49
50
  ```
50
- --hostcase --dpi-desync=split2 --dpi-desync-split-http-req=method+host
51
+ --lua-desync=http_hostcase --lua-desync=multisplit:pos=method,host
51
52
  ```
52
53
 
53
54
  ## Ограничения
@@ -4,7 +4,7 @@ zapret2-version: v0.9.4.5
4
4
  tags: split2, disorder2, multisplit, multidisorder, fakedsplit, fakeddisorder, hostfakesplit, segmentation
5
5
  source: official-docs
6
6
  created: 2026-03-25
7
- updated: 2026-03-25
7
+ updated: 2026-04-01
8
8
  ---
9
9
 
10
10
  # TCP Segmentation (разбиение исходящих пакетов)
@@ -13,23 +13,22 @@ updated: 2026-03-25
13
13
 
14
14
  ## Базовые стратегии
15
15
 
16
- ### split2 / disorder2
17
- Самые простые и надёжные. Разбивают TCP-сегмент в указанной позиции.
18
- - **split2** — отправляет фрагменты по порядку
19
- - **disorder2** — отправляет фрагменты в обратном порядке (сначала второй, потом первый)
16
+ ### multisplit / multidisorder (ранее split2 / disorder2)
17
+ Самые простые и надёжные. Разбивают TCP-сегмент в указанных позициях.
18
+ - **multisplit** — отправляет фрагменты по порядку
19
+ - **multidisorder** — отправляет фрагменты в обратном порядке (от последнего к первому)
20
20
 
21
- disorder2 эффективнее против stateless DPI, который обрабатывает только первый пакет.
21
+ > В zapret v1 эти стратегии назывались `split2` и `disorder2`. С версии v69 они стали алиасами для `multisplit`/`multidisorder`. В zapret2 используются только имена `multisplit`/`multidisorder`.
22
22
 
23
- Не используют fake-пакеты нет проблем с fooling.
23
+ multidisorder эффективнее против stateless DPI, который обрабатывает только первый пакет.
24
24
 
25
- ### multisplit / multidisorder
26
- Разбиение в нескольких позициях. Для DPI, который умеет пересобирать single-split сегменты.
25
+ Не используют fake-пакеты — нет проблем с fooling.
27
26
 
28
27
  ### fakedsplit / fakeddisorder
29
28
  Разбиение с вставкой fake-сегмента между реальными частями. Fake сбивает DPI-реассемблер. Требует fooling для корректной работы.
30
29
 
31
30
  ### hostfakesplit
32
- Разбиение только на позиции Host-заголовка в HTTP. Узкоспециализированная стратегия.
31
+ Разбиение на позиции hostname в TCP-протоколах, содержащих имя хоста: **HTTP (Host-заголовок) и TLS (SNI в ClientHello)**. Вставляет fake-сегменты между частями hostname, затрудняя DPI различение реального и фейкового имени. Требует fooling.
33
32
 
34
33
  ## Ключевые параметры
35
34
 
@@ -37,11 +36,16 @@ disorder2 эффективнее против stateless DPI, который об
37
36
  ```
38
37
  --dpi-desync-split-pos=N
39
38
  ```
40
- Специальные значения:
39
+ Специальные значения (маркеры позиций):
40
+ - `method` — начало HTTP-метода (GET, POST и т.д.)
41
41
  - `host` — начало Host/SNI заголовка
42
42
  - `endhost` — конец Host/SNI заголовка
43
- - `midsld` — середина домена второго уровня (SLD) в SNI
43
+ - `sld` — начало домена второго уровня (SLD)
44
+ - `endsld` — конец SLD
45
+ - `midsld` — середина SLD
46
+ - `sniext` — начало SNI extension в TLS ClientHello
44
47
  - Числовое значение — смещение в байтах
48
+ - Поддерживается арифметика: `host+1`, `midsld-2`, `sniext+1`
45
49
 
46
50
  ### Overlap TCP-последовательности
47
51
  ```
@@ -49,12 +53,6 @@ disorder2 эффективнее против stateless DPI, который об
49
53
  ```
50
54
  Перекрытие TCP sequence number. Сбивает DPI, который отслеживает последовательности. Требует `--dpi-desync-split-pos` > N.
51
55
 
52
- ### Разбиение HTTP-запроса
53
- ```
54
- --dpi-desync-split-http-req=method+host
55
- ```
56
- Разбивает HTTP-запрос на границах method и host.
57
-
58
56
  ## Lua-формат (nfqws2 v0.9+)
59
57
 
60
58
  В новых версиях zapret2 стратегии задаются через Lua:
@@ -70,14 +68,14 @@ disorder2 эффективнее против stateless DPI, который об
70
68
 
71
69
  ## Примеры
72
70
 
73
- Простейший bypass для TLS 1.3:
71
+ Простейший bypass для TLS 1.3 (zapret2 lua-синтаксис):
74
72
  ```
75
- --dpi-desync=split2 --dpi-desync-split-pos=host
73
+ --lua-desync=multisplit:pos=host
76
74
  ```
77
75
 
78
- Для stateful DPI:
76
+ Для stateful DPI (с overlap):
79
77
  ```
80
- --dpi-desync=split2 --dpi-desync-split-pos=host --dpi-desync-split-seqovl=1
78
+ --lua-desync=multisplit:pos=host:seqovl=1
81
79
  ```
82
80
 
83
81
  Multi-split для продвинутого DPI:
@@ -85,9 +83,14 @@ Multi-split для продвинутого DPI:
85
83
  --lua-desync=multisplit:pos=1,midsld
86
84
  ```
87
85
 
86
+ Обратный порядок для stateless DPI:
87
+ ```
88
+ --lua-desync=multidisorder:pos=1,midsld:seqovl=2
89
+ ```
90
+
88
91
  ## Когда использовать
89
92
 
90
- - **split2** — первое, что стоит попробовать. Простейшая и самая надёжная стратегия.
91
- - **disorder2** — если split2 не работает. Полезна против stateless DPI.
92
- - **multisplit** — если DPI умеет пересобирать single-split.
93
+ - **multisplit** — первое, что стоит попробовать. Простейшая и самая надёжная стратегия.
94
+ - **multidisorder** — если multisplit не работает. Полезна против stateless DPI.
95
+ - **multisplit с несколькими pos** — если DPI умеет пересобирать single-split (напр. `pos=1,midsld`).
93
96
  - **fakedsplit** — если segmentation без fakes не помогает. Требует правильный fooling.
@@ -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-03-28
7
+ updated: 2026-04-01
8
8
  ---
9
9
 
10
10
  # Smart TV и YouTube: почему стратегия работает на ПК, но не на телевизоре
@@ -62,7 +62,7 @@ VIDAA, WebOS и Tizen агрессивно кешируют приложение
62
62
  - При открытии YouTube приложение сначала обращается к **серверам авторизации Samsung**, затем к Google/YouTube
63
63
  - Эти промежуточные запросы тоже могут попадать под DPI
64
64
  - На ТВ невозможно установить диагностические инструменты
65
- - Нельзя заменить приложение YouTube на альтернативное (нет SmartTube для Tizen)
65
+ - SmartTube (Android-only) не работает на Tizen, но есть **TizenTube** — модуль для TizenBrew, который блокирует рекламу, поддерживает SponsorBlock и DeArrow. Установка через TizenBrew требует включения Developer Mode и USB-флешки. Подробнее: https://github.com/reisxd/TizenTube
66
66
 
67
67
  ### LG WebOS
68
68
 
@@ -126,9 +126,17 @@ NFQWS2_OPT="
126
126
 
127
127
  Первая секция — агрессивная стратегия для YouTube (покрывает и TLS 1.2, и 1.3). Вторая — более мягкая для остальных сайтов.
128
128
 
129
- ### 4. Радикальное решение: Android TV приставка
129
+ ### 4. TizenTube для Samsung Tizen
130
130
 
131
- Если ничего не помогает на Samsung Tizenнаиболее надёжное решение:
131
+ На Samsung Tizen есть альтернатива стоковому YouTube**TizenTube** (модуль для TizenBrew):
132
+ - Блокировка рекламы, SponsorBlock, DeArrow
133
+ - Установка: включить Developer Mode на ТВ → установить TizenBrew через USB → TizenTube ставится как модуль
134
+ - Из минусов: более сложный процесс установки, иногда нужно запускать TizenBrew перед открытием YouTube
135
+ - При использовании TizenTube DPI bypass стратегии zapret2 работают нормально — трафик идёт тот же самый
136
+
137
+ ### 5. Радикальное решение: Android TV приставка
138
+
139
+ Если ничего не помогает на Samsung Tizen (и TizenTube не подходит) — наиболее надёжное решение:
132
140
 
133
141
  1. Купить Android TV приставку (Xiaomi Mi Box, любая на Android TV)
134
142
  2. Установить SmartTube (альтернативный клиент YouTube)
@@ -143,5 +151,5 @@ NFQWS2_OPT="
143
151
  3. [ ] Запустить blockcheck2, смотреть результаты `curl_test_https_tls12`
144
152
  4. [ ] Попробовать агрессивную multidisorder стратегию (см. выше)
145
153
  5. [ ] Выдернуть ТВ из розетки перед каждой проверкой
146
- 6. [ ] Если Samsung Tizen — рассмотреть Android TV приставку как альтернативу
154
+ 6. [ ] Если Samsung Tizen — попробовать TizenTube (ad-free + SponsorBlock) или рассмотреть Android TV приставку
147
155
  7. [ ] Проверить что Private DNS на устройствах выключен (может мешать на Android)
@@ -5,7 +5,7 @@ blockcheckw-version: v0.8.3
5
5
  tags: strategy, blockcheckw, scan, check, bypass, workflow
6
6
  source: official-docs
7
7
  created: 2026-03-25
8
- updated: 2026-03-25
8
+ updated: 2026-04-01
9
9
  ---
10
10
 
11
11
  # Поиск рабочей стратегии DPI bypass
@@ -51,24 +51,27 @@ blockcheckw check --from-file scan_results.txt -d rutracker.org --take 10 --pass
51
51
  ## Выбор стратегии: критерии (в порядке приоритета)
52
52
 
53
53
  1. **Стабильность** — избегать стратегий с хрупкими TTL-трюками (фиксированный ip_ttl). Предпочитать ip_autottl или non-TTL fooling.
54
- 2. **Простота** — меньше параметров = надёжнее. Предпочитать `split2` перед сложными multi-strategy цепочками.
54
+ 2. **Простота** — меньше параметров = надёжнее. Предпочитать `multisplit` перед сложными multi-strategy цепочками.
55
55
  3. **Покрытие протоколов** — если домен использует HTTPS и HTTP, стратегия должна покрывать оба.
56
56
  4. **TLS-версия** — TLS 1.3 легче (меньше метаданных). TLS 1.2 может требовать обработку server response.
57
57
 
58
58
  ## Приоритет стратегий
59
59
 
60
- 1. `split2` или `disorder2` — TCP segmentation без fakes, самый простой вариант
61
- 2. `fake,split2` с `md5sig` или `badsum` fooling — надёжное удаление fakes
62
- 3. `multisplit` / `multidisorder` — для DPI, который пересобирает split-сегменты
63
- 4. Избегать стратегий, основанных только на `ip_ttl` — TTL зависит от маршрута
60
+ 1. `multisplit` или `multidisorder` — TCP segmentation без fakes, самый простой вариант
61
+ 2. `fakedsplit` / `fakeddisorder` с `tcp_md5` или `badsum` fooling — надёжное удаление fakes
62
+ 3. `multisplit` / `multidisorder` с несколькими `pos` — для DPI, который пересобирает single-split
63
+ 4. Избегать стратегий, основанных только на `ip_ttl` — TTL зависит от маршрута, предпочитать `ip_autottl`
64
64
 
65
65
  ## Resilience
66
66
 
67
- Для устойчивости к обновлениям DPI используй circular strategy:
67
+ Для устойчивости к обновлениям DPI используй circular orchestrator из `zapret-auto.lua`:
68
68
  ```
69
- --dpi-desync-circular-strategy=3
69
+ --lua-desync=circular
70
+ --lua-desync=<стратегия1>:strategy=1
71
+ --lua-desync=<стратегия2>:strategy=2
72
+ --lua-desync=<стратегия3>:strategy=3
70
73
  ```
71
- nfqws2 автоматически переключается между стратегиями при сбое.
74
+ nfqws2 циклически переключается между пронумерованными стратегиями при обнаружении сбоев (порог задаётся через `fails=N`).
72
75
 
73
76
  ## Конструирование NFQWS2_OPT из результатов
74
77
 
@@ -4,7 +4,7 @@ zapret2-version: v0.9.4.5
4
4
  tags: install, setup, workflow, router, desktop
5
5
  source: official-docs
6
6
  created: 2026-03-25
7
- updated: 2026-03-25
7
+ updated: 2026-04-01
8
8
  ---
9
9
 
10
10
  # Установка zapret2
@@ -46,66 +46,45 @@ updated: 2026-03-25
46
46
 
47
47
  Те же шаги 1-5, плюс:
48
48
 
49
- 6. Настроить DNS (один из методов):
49
+ 1. Установить systemd unit (поставляется с репо):
50
50
  ```bash
51
- # Через systemd-resolved
52
- mkdir -p /etc/systemd/resolved.conf.d/
53
- cat > /etc/systemd/resolved.conf.d/dns.conf << EOF
54
- [Resolve]
55
- DNS=1.1.1.1 8.8.8.8
56
- EOF
57
- systemctl restart systemd-resolved
58
-
59
- # Или через resolv.conf
60
- echo "nameserver 1.1.1.1" > /etc/resolv.conf
61
- ```
62
-
63
- 7. Создать systemd unit:
64
- ```bash
65
- cat > /etc/systemd/system/zapret2.service << EOF
66
- [Unit]
67
- Description=zapret2 DPI bypass
68
- After=network-online.target
69
- Wants=network-online.target
70
-
71
- [Service]
72
- Type=forking
73
- ExecStart=/opt/zapret2/init.d/sysv/zapret2 start
74
- ExecStop=/opt/zapret2/init.d/sysv/zapret2 stop
75
- RemainAfterExit=yes
76
-
77
- [Install]
78
- WantedBy=multi-user.target
79
- EOF
51
+ cp /opt/zapret2/init.d/systemd/zapret2.service /etc/systemd/system/
80
52
  systemctl daemon-reload
81
53
  systemctl enable zapret2
82
54
  ```
83
55
 
84
- 8. Включить и запустить (шаги 7-9 из универсальной установки)
56
+ 2. Включить и запустить (шаги 7-9 из универсальной установки)
57
+
58
+ > DNS-конфигурация не является частью установки zapret2. Если у провайдера DNS-перехват — рекомендуется настроить
59
+ > DoH/DoT отдельно.
85
60
 
86
61
  ## Предварительные требования
87
62
 
88
63
  ### Необходимые инструменты
89
- - `nft` или `iptables` — управление firewall
90
- - `curl` — скачивание бинарников
91
- - `git` — клонирование репозитория
92
- - `base64`, `sed`, `awk` — обработка конфигов
93
- - `modprobe` — загрузка модулей ядра
64
+
65
+ - `nft` (nftables) или `iptables` + `ip6tables` + `ipset` управление firewall
66
+ - `curl` — скачивание бинарников и списков
94
67
 
95
68
  ### Модуль ядра NFQUEUE
69
+
70
+ Модуль `nfnetlink_queue` необходим для работы nfqws2. Обычно подгружается автоматически при старте. Если нет:
71
+
96
72
  ```bash
97
73
  modprobe nfnetlink_queue
98
74
  ```
99
- Без NFQUEUE nfqws2 не может перехватывать пакеты.
100
75
 
101
76
  ### Архитектуры
102
- Поддерживаются: x86_64, x86, arm64, arm, mips, mipsel, mips64, ppc, riscv64
77
+
78
+ Поддерживаются: x86_64, x86, arm64, arm, mips64, mipssf, mipselsf, ppc, riscv64, lexra
103
79
 
104
80
  ## Управление сервисом
105
81
 
106
- | Init system | Команда |
107
- |-------------|---------|
108
- | sysv | `/opt/zapret2/init.d/sysv/zapret2 start\|stop\|restart` |
109
- | systemd | `systemctl start\|stop\|restart zapret2` |
110
- | OpenWrt | `/etc/init.d/zapret2 start\|stop\|restart` |
111
- | openrc | `/opt/zapret2/init.d/openrc/zapret2 start\|stop\|restart` |
82
+ | Init system | Команда |
83
+ |-------------|-----------------------------------------------------------|
84
+ | sysv | `/opt/zapret2/init.d/sysv/zapret2 start\|stop\|restart` |
85
+ | systemd | `systemctl start\|stop\|restart zapret2` |
86
+ | OpenWrt | `/etc/init.d/zapret2 start\|stop\|restart` |
87
+ | openrc | `/opt/zapret2/init.d/openrc/zapret2 start\|stop\|restart` |
88
+ | runit | `/opt/zapret2/init.d/runit/zapret2` |
89
+ | s6 | `/opt/zapret2/init.d/s6/zapret2` |
90
+ | pfsense | `/opt/zapret2/init.d/pfsense/zapret2` |
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zapret2-mcp",
3
- "version": "0.7.4",
3
+ "version": "0.7.5",
4
4
  "description": "MCP knowledge server for zapret2 DPI bypass tool and blockcheckw strategy scanner",
5
5
  "license": "MIT",
6
6
  "author": "Stanislav Zemlyakov",