zapret2-mcp 0.7.3 → 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.
Files changed (29) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/README.md +12 -4
  3. package/build/index.js +38 -5
  4. package/build/index.js.map +1 -1
  5. package/knowledge/blockcheckw/commands.md +7 -7
  6. package/knowledge/blockcheckw/overview.md +2 -2
  7. package/knowledge/config/nfqws2-options.md +79 -47
  8. package/knowledge/config/zapret2-config.md +21 -13
  9. package/knowledge/obsidian-gui/argument-ordering.md +106 -0
  10. package/knowledge/obsidian-gui/blobs-detailed.md +218 -0
  11. package/knowledge/obsidian-gui/lua-desync-reference.md +1005 -0
  12. package/knowledge/obsidian-gui/main-flags.md +124 -0
  13. package/knowledge/obsidian-gui/mtproto-detection.md +639 -0
  14. package/knowledge/obsidian-gui/out-range-in-range.md +90 -0
  15. package/knowledge/obsidian-gui/payload-types.md +195 -0
  16. package/knowledge/obsidian-gui/windivert-filters.md +699 -0
  17. package/knowledge/platforms/desktop-linux-nftables.md +196 -0
  18. package/knowledge/strategies/community-strategies.md +155 -9
  19. package/knowledge/strategies/discord-bypass.md +43 -19
  20. package/knowledge/strategies/dpi-types.md +9 -10
  21. package/knowledge/strategies/fake-packets.md +105 -37
  22. package/knowledge/strategies/http-specific.md +8 -7
  23. package/knowledge/strategies/tcp-segmentation.md +28 -25
  24. package/knowledge/strategies/udp-quic.md +113 -9
  25. package/knowledge/troubleshooting/smart-tv-youtube.md +13 -5
  26. package/knowledge/troubleshooting/youtube-video-not-loading.md +141 -0
  27. package/knowledge/workflows/find-strategy.md +12 -9
  28. package/knowledge/workflows/setup.md +24 -45
  29. package/package.json +3 -2
package/CHANGELOG.md CHANGED
@@ -1,5 +1,35 @@
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
+
18
+ ## [0.7.4](https://github.com/rcd27/zapret2-mcp/compare/v0.7.3...v0.7.4) (2026-03-30)
19
+
20
+
21
+ ### Features
22
+
23
+ * **knowledge:** fallback до первоисточников, чтобы агент не гуглил лишнее ([e25c950](https://github.com/rcd27/zapret2-mcp/commit/e25c950cd90b81762484acfbda620844f4f03f16))
24
+ * **knowledge:** обогащение статей стратегиями из community ([6e737f6](https://github.com/rcd27/zapret2-mcp/commit/6e737f65d831173b6476df3f231c5491295ed619))
25
+ * **knowledge:** проблемы с ютубом и особенности zapret2 на десктопе ([5cd3110](https://github.com/rcd27/zapret2-mcp/commit/5cd3110aab0975c6c60be5135f3a93487584ad28))
26
+ * **knowledge:** цикл выжимок из статей на obsidian ([ea072e2](https://github.com/rcd27/zapret2-mcp/commit/ea072e222b478d04f44d0f6b98fd552b06a25d41))
27
+
28
+
29
+ ### Bug Fixes
30
+
31
+ * **contract:** явное указание языка ([1b4ca5b](https://github.com/rcd27/zapret2-mcp/commit/1b4ca5b62f2f3b69390db080e440a854cb4aa840)), closes [#9](https://github.com/rcd27/zapret2-mcp/issues/9)
32
+
3
33
  ## [0.7.3](https://github.com/rcd27/zapret2-mcp/compare/v0.7.2...v0.7.3) (2026-03-28)
4
34
 
5
35
 
package/README.md CHANGED
@@ -3,12 +3,12 @@
3
3
  [![CI](https://github.com/rcd27/zapret2-mcp/actions/workflows/ci.yml/badge.svg)](https://github.com/rcd27/zapret2-mcp/actions/workflows/ci.yml)
4
4
  [![npm](https://img.shields.io/npm/v/zapret2-mcp)](https://www.npmjs.com/package/zapret2-mcp)
5
5
  [![downloads](https://img.shields.io/npm/dm/zapret2-mcp)](https://www.npmjs.com/package/zapret2-mcp)
6
- [![Knowledge Base](https://img.shields.io/badge/knowledge_base-35_articles-green)](./knowledge/)
6
+ [![Knowledge Base](https://img.shields.io/badge/knowledge_base-45_articles-green)](./knowledge/)
7
7
  [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
8
8
 
9
9
  База знаний по [zapret2](https://github.com/bol-van/zapret2) (DPI bypass) и [blockcheckw](https://github.com/rcd27/blockcheckw) (сканер стратегий). Работает как [MCP-сервер](https://modelcontextprotocol.io/) для LLM-агентов и как обычная документация.
10
10
 
11
- > **Можно использовать без агентов.** [`knowledge/`](./knowledge/) — 35 статей на русском языке. Открывайте и читайте как обычную документацию, без установки чего-либо.
11
+ > **Можно использовать без агентов.** [`knowledge/`](./knowledge/) — 45 статей на русском языке. Открывайте и читайте как обычную документацию, без установки чего-либо.
12
12
 
13
13
  ## Что внутри
14
14
 
@@ -16,11 +16,12 @@
16
16
  |--------|--------|------|
17
17
  | [strategies/](./knowledge/strategies/) | 10 | TCP segmentation, fake packets, Lua scripting, QUIC, circular, Discord, Telegram, orchestration, community production strategies |
18
18
  | [config/](./knowledge/config/) | 9 | nfqws2 CLI, zapret2 config, desync profiles, hostlists/ipsets, auto-hostlist, security hardening, UCI, blobs, миграция v1 → v2 |
19
- | [troubleshooting/](./knowledge/troubleshooting/) | 5 | Smart TV + YouTube, QUIC, IPv6, FLOWOFFLOAD, конфликты с Podkop |
19
+ | [troubleshooting/](./knowledge/troubleshooting/) | 6 | Smart TV + YouTube, YouTube видео не грузится (googlevideo CDN), QUIC, IPv6, FLOWOFFLOAD, конфликты с Podkop |
20
20
  | [tspu/](./knowledge/tspu/) | 6 | Архитектура ТСПУ, DPI engine, методы блокировки, двухстадийная система, ночные реконфигурации, юридические риски |
21
21
  | [workflows/](./knowledge/workflows/) | 2 | Установка, поиск стратегии |
22
22
  | [blockcheckw/](./knowledge/blockcheckw/) | 2 | Overview, команды |
23
- | [platforms/](./knowledge/platforms/) | 1 | Linux, OpenWrt, Windows, FreeBSD, OpenBSD, Android |
23
+ | [platforms/](./knowledge/platforms/) | 2 | Linux, OpenWrt, Windows, FreeBSD, OpenBSD, Android, десктопный Linux + nftables |
24
+ | [obsidian-gui/](./knowledge/obsidian-gui/) | 8 | lua-desync справочник, payload типы, out-range/in-range, блобы, WinDivert фильтры, порядок аргументов, MTProto, основные флаги |
24
25
 
25
26
  ## Подключение к LLM-агенту
26
27
 
@@ -69,6 +70,12 @@ npm start
69
70
  |------|----------|
70
71
  | `query-zapret-knowledge(topic, tokens?)` | Keyword-поиск по базе знаний с ранжированием |
71
72
 
73
+ ### Resources
74
+
75
+ | URI | Описание |
76
+ |-----|----------|
77
+ | `zapret2://knowledge/{path}` | Прямой доступ к статьям базы знаний по пути (listResources для списка всех) |
78
+
72
79
  ### Prompts
73
80
 
74
81
  | Prompt | Описание |
@@ -96,6 +103,7 @@ npm start
96
103
  - [blockcheckw](https://github.com/rcd27/blockcheckw) — быстрый сканер стратегий
97
104
  - [tspu-docs](https://github.com/DanielLavrushin/tspu-docs) — документация ТСПУ
98
105
  - Academic: [IMC 2022](https://dl.acm.org/doi/10.1145/3517745.3561461), [IMC 2021](https://dl.acm.org/doi/10.1145/3487552.3487858), [NDSS 2020](https://www.ndss-symposium.org/ndss-paper/decentralized-control-a-case-study-of-russia/), [USENIX Security 2023](https://www.usenix.org/conference/usenixsecurity23/presentation/ramesh-network-responses) — рецензированные исследования архитектуры и поведения ТСПУ
106
+ - [Zapret GUI Docs](https://publish.obsidian.md/zapret) — документация сообщества (импорт через `npm run import:obsidian`)
99
107
  - Community — обезличенные знания из открытых обсуждений
100
108
 
101
109
  ## Лицензия
package/build/index.js CHANGED
@@ -6,6 +6,7 @@ import { resolve, dirname } from "path";
6
6
  import { fileURLToPath } from "url";
7
7
  import { KnowledgeIndex } from "./indexer.js";
8
8
  import { registerPrompts } from "./prompts.js";
9
+ import { ResourceTemplate } from "@modelcontextprotocol/sdk/server/mcp.js";
9
10
  const __dirname = dirname(fileURLToPath(import.meta.url));
10
11
  const knowledgeDir = resolve(__dirname, "..", "knowledge");
11
12
  const index = new KnowledgeIndex(knowledgeDir);
@@ -23,14 +24,20 @@ It provides contextual documentation and expert knowledge about:
23
24
  - Troubleshooting common issues
24
25
 
25
26
  Use the query-zapret-knowledge tool to search the knowledge base.
27
+ IMPORTANT: The entire knowledge base is written in Russian. Always query in Russian for accurate results (e.g. 'стратегия split2' instead of 'split2 strategy').
26
28
  Use getPrompt for guided workflows: setup-zapret, find-bypass-strategy, troubleshoot, strategy-knowledge.
27
29
 
28
- This server does NOT execute commands — it provides knowledge and guidance. The consuming agent executes commands directly.`,
30
+ This server does NOT execute commands — it provides knowledge and guidance. The consuming agent executes commands directly.
31
+
32
+ FALLBACK: If query-zapret-knowledge returns no results or insufficient information, check these primary sources directly (via web fetch):
33
+ 1. DeepWiki (most complete, generated from source code): https://deepwiki.com/bol-van/zapret2
34
+ 2. Official docs: https://github.com/bol-van/zapret2/blob/master/docs/manual.md
35
+ 3. Community docs (Obsidian Publish): https://publish.obsidian.md/zapret — raw markdown available at https://publish-01.obsidian.md/access/18b1b883e5b94cb062854c94fb182bb4/{path}.md (e.g. Zapret/Zapret2%20-%20lua-desync.md)`,
29
36
  });
30
- server.tool("query-zapret-knowledge", "Search zapret2 and blockcheckw knowledge base by topic. Returns relevant documentation, strategy guides, configuration references, and troubleshooting information.", {
31
- topic: z.string().describe("What to search for (e.g. 'split2 strategy', 'blockcheckw scan', 'troubleshooting dns', 'config nfqws2_opt')"),
37
+ server.tool("query-zapret-knowledge", "Search zapret2 and blockcheckw knowledge base by topic. Returns relevant documentation, strategy guides, configuration references, and troubleshooting information. IMPORTANT: The entire knowledge base is in Russian. Always send queries in Russian for best results.", {
38
+ topic: z.string().describe("What to search for — MUST be in Russian (e.g. 'стратегия split2', 'сканирование blockcheckw', 'диагностика dns', 'конфигурация nfqws2_opt')"),
32
39
  tokens: z.number().optional().describe("Maximum approximate token count for the response (default: 4000). Use 0 for unlimited."),
33
- context: z.string().optional().describe("What you already know or checked (e.g. 'curl OK on router, QUIC disabled, flow_offloading_hw=1'). Helps narrow results by deprioritizing already-covered topics."),
40
+ context: z.string().optional().describe("What you already know or checked, in Russian (e.g. 'curl работает на роутере, QUIC отключен, flow_offloading_hw=1'). Helps narrow results by deprioritizing already-covered topics."),
34
41
  }, async (args) => {
35
42
  const tokenLimit = args.tokens === 0 ? undefined : (args.tokens ?? 4000);
36
43
  const results = index.query(args.topic, tokenLimit, args.context);
@@ -39,7 +46,7 @@ server.tool("query-zapret-knowledge", "Search zapret2 and blockcheckw knowledge
39
46
  content: [
40
47
  {
41
48
  type: "text",
42
- text: `No results found for "${args.topic}". Try broader keywords like: strategies, config, blockcheckw, troubleshooting, setup, platforms.`,
49
+ text: `No results found for "${args.topic}". The knowledge base is in Russian — try querying in Russian. Broader keywords to try: стратегии, конфигурация, blockcheckw, диагностика, установка, платформы.\n\nFallback: check primary sources directly via web fetch:\n1. https://deepwiki.com/bol-van/zapret2 (most complete)\n2. https://github.com/bol-van/zapret2/blob/master/docs/manual.md\n3. https://publish-01.obsidian.md/access/18b1b883e5b94cb062854c94fb182bb4/Zapret/home.md (community docs, raw markdown)`,
43
50
  },
44
51
  ],
45
52
  };
@@ -63,6 +70,32 @@ server.tool("query-zapret-knowledge", "Search zapret2 and blockcheckw knowledge
63
70
  };
64
71
  });
65
72
  registerPrompts(server);
73
+ // MCP Resources: expose knowledge articles for browsing
74
+ server.resource("knowledge-article", new ResourceTemplate("zapret2://knowledge/{+path}", {
75
+ list: async () => ({
76
+ resources: index.all().map((entry) => ({
77
+ uri: `zapret2://knowledge/${entry.path}`,
78
+ name: entry.title,
79
+ description: `Tags: ${entry.tags.join(", ")}`,
80
+ mimeType: "text/markdown",
81
+ })),
82
+ }),
83
+ }), { description: "Knowledge base article", mimeType: "text/markdown" }, async (uri, variables) => {
84
+ const path = variables.path;
85
+ const entry = index.all().find((e) => e.path === path);
86
+ if (!entry) {
87
+ throw new Error(`Article not found: ${path}`);
88
+ }
89
+ return {
90
+ contents: [
91
+ {
92
+ uri: uri.href,
93
+ mimeType: "text/markdown",
94
+ text: `# ${entry.title}\n\n${entry.content}`,
95
+ },
96
+ ],
97
+ };
98
+ });
66
99
  async function main() {
67
100
  const transport = new StdioServerTransport();
68
101
  await server.connect(transport);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -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` | Диагностика (скрипт подбора стратегий) |
@@ -0,0 +1,106 @@
1
+ ---
2
+ title: Последовательность аргументов в zapret2
3
+ zapret2-version: v0.9.4.5
4
+ tags: аргументы, порядок, payload, lua-desync, hostlist, профиль, filter
5
+ created: 2026-03-29
6
+ updated: 2026-03-29
7
+ source: community
8
+ ---
9
+
10
+ ## 📋 **Короткий ответ: Порядок между `--hostlist` и `--payload` не важен**
11
+
12
+ Но **порядок `--payload` относительно `--lua-desync` — важен!**
13
+
14
+ ---
15
+
16
+ ## 🔍 **Как это работает**
17
+
18
+ ### **`--hostlist`** — фильтр **профиля**
19
+ - Применяется ко всему профилю в целом
20
+ - Проверяется при входе соединения в профиль
21
+ - Позиция внутри профиля не важна
22
+
23
+ ### **`--payload`** — фильтр для **`--lua-desync`**
24
+ - Применяется к **последующим** `--lua-desync` функциям
25
+ - Действует до следующего `--payload` или до конца профиля
26
+ - **Порядок относительно `--lua-desync` важен!**
27
+
28
+ ---
29
+
30
+ ## ✅ **Эквивалентные варианты (все работают одинаково):**
31
+
32
+ ```bash
33
+ # Вариант 1: hostlist первый
34
+ --hostlist=list.txt --payload=tls_client_hello --lua-desync=fake:blob=fake_default_tls
35
+
36
+ # Вариант 2: payload первый
37
+ --payload=tls_client_hello --hostlist=list.txt --lua-desync=fake:blob=fake_default_tls
38
+
39
+ # Вариант 3: hostlist в конце
40
+ --payload=tls_client_hello --lua-desync=fake:blob=fake_default_tls --hostlist=list.txt
41
+ ```
42
+
43
+ **Все три варианта работают одинаково!**
44
+
45
+ ---
46
+
47
+ ## ⚠️ **Что ВАЖНО: порядок `--payload` и `--lua-desync`**
48
+
49
+ ```bash
50
+ # ✅ ПРАВИЛЬНО: payload ПЕРЕД lua-desync
51
+ --payload=tls_client_hello --lua-desync=fake:blob=fake_default_tls
52
+
53
+ # ❌ НЕПРАВИЛЬНО: payload ПОСЛЕ lua-desync (не влияет на эту функцию!)
54
+ --lua-desync=fake:blob=fake_default_tls --payload=tls_client_hello
55
+ ```
56
+
57
+ ---
58
+
59
+ ## 📊 **Область действия фильтров**
60
+
61
+ ```bash
62
+ --filter-tcp=80,443 # Фильтр профиля (весь профиль)
63
+ --filter-l7=http,tls # Фильтр профиля (весь профиль)
64
+ --hostlist=youtube.txt # Фильтр профиля (весь профиль)
65
+ --payload=http_req # Фильтр lua-desync (до следующего --payload)
66
+ --lua-desync=fake:blob=fake_default_http # Применяется фильтр http_req
67
+ --lua-desync=multisplit:pos=method+2 # Применяется фильтр http_req
68
+ --payload=tls_client_hello # Новый фильтр (отменяет предыдущий)
69
+ --lua-desync=fake:blob=fake_default_tls # Применяется фильтр tls_client_hello
70
+ --new # Конец профиля
71
+ ```
72
+
73
+ ---
74
+
75
+ ## 💡 **Рекомендуемый стиль (для читабельности)**
76
+
77
+ ```bash
78
+ # Сначала фильтры профиля
79
+ --filter-tcp=443
80
+ --filter-l7=tls
81
+ --hostlist=mylist.txt
82
+
83
+ # Потом payload + lua-desync группами
84
+ --payload=tls_client_hello
85
+ --lua-desync=fake:blob=fake_default_tls:tcp_md5
86
+ --lua-desync=multisplit:pos=1,midsld
87
+
88
+ --new
89
+ ```
90
+
91
+ Это не обязательно, но **легче читать и поддерживать**.
92
+
93
+ ---
94
+
95
+ ## 📝 **Итог**
96
+
97
+ | Параметр | Область действия | Порядок важен? |
98
+ | ------------------ | --------------------------- | ------------------------------- |
99
+ | `--filter-tcp/udp` | Весь профиль | Нет |
100
+ | `--filter-l7` | Весь профиль | Нет |
101
+ | `--hostlist` | Весь профиль | Нет |
102
+ | `--ipset` | Весь профиль | Нет |
103
+ | `--payload` | До следующего `--payload` | **Да, перед `--lua-desync`** |
104
+ | `--out-range` | До следующего `--out-range` | **Да, перед `--lua-desync`** |
105
+ | `--in-range` | До следующего `--in-range` | **Да, перед `--lua-desync`** |
106
+ | `--lua-desync` | Конкретный вызов | Да (последовательность вызовов) |