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 +15 -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/dpi-types.md +9 -10
- package/knowledge/strategies/http-specific.md +8 -7
- package/knowledge/strategies/tcp-segmentation.md +28 -25
- package/knowledge/troubleshooting/smart-tv-youtube.md +13 -5
- 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,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-
|
|
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: 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
|
|
@@ -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-
|
|
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
|
-
Меняет регистр заголовка
|
|
20
|
+
Меняет регистр заголовка `Host:` → `host:` (lowercase). DPI ищет точное совпадение `Host:` и пропускает изменённый заголовок. Сервер обрабатывает header case-insensitively (RFC 7230).
|
|
21
21
|
|
|
22
22
|
Lua-формат:
|
|
23
23
|
```
|
|
24
|
-
--lua-desync=http_hostcase
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
--
|
|
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-
|
|
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
|
-
- **
|
|
19
|
-
- **
|
|
16
|
+
### multisplit / multidisorder (ранее split2 / disorder2)
|
|
17
|
+
Самые простые и надёжные. Разбивают TCP-сегмент в указанных позициях.
|
|
18
|
+
- **multisplit** — отправляет фрагменты по порядку
|
|
19
|
+
- **multidisorder** — отправляет фрагменты в обратном порядке (от последнего к первому)
|
|
20
20
|
|
|
21
|
-
disorder2
|
|
21
|
+
> В zapret v1 эти стратегии назывались `split2` и `disorder2`. С версии v69 они стали алиасами для `multisplit`/`multidisorder`. В zapret2 используются только имена `multisplit`/`multidisorder`.
|
|
22
22
|
|
|
23
|
-
|
|
23
|
+
multidisorder эффективнее против stateless DPI, который обрабатывает только первый пакет.
|
|
24
24
|
|
|
25
|
-
|
|
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
|
-
Разбиение
|
|
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
|
-
- `
|
|
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
|
-
--
|
|
73
|
+
--lua-desync=multisplit:pos=host
|
|
76
74
|
```
|
|
77
75
|
|
|
78
|
-
Для stateful DPI:
|
|
76
|
+
Для stateful DPI (с overlap):
|
|
79
77
|
```
|
|
80
|
-
--
|
|
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
|
-
- **
|
|
91
|
-
- **
|
|
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-
|
|
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
|
-
-
|
|
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.
|
|
129
|
+
### 4. TizenTube для Samsung Tizen
|
|
130
130
|
|
|
131
|
-
|
|
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-
|
|
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. **Простота** — меньше параметров = надёжнее. Предпочитать `
|
|
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. `
|
|
61
|
-
2. `
|
|
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
|
|
67
|
+
Для устойчивости к обновлениям DPI используй circular orchestrator из `zapret-auto.lua`:
|
|
68
68
|
```
|
|
69
|
-
--
|
|
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-
|
|
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
|
-
|
|
49
|
+
1. Установить systemd unit (поставляется с репо):
|
|
50
50
|
```bash
|
|
51
|
-
|
|
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
|
-
|
|
56
|
+
2. Включить и запустить (шаги 7-9 из универсальной установки)
|
|
57
|
+
|
|
58
|
+
> DNS-конфигурация не является частью установки zapret2. Если у провайдера DNS-перехват — рекомендуется настроить
|
|
59
|
+
> DoH/DoT отдельно.
|
|
85
60
|
|
|
86
61
|
## Предварительные требования
|
|
87
62
|
|
|
88
63
|
### Необходимые инструменты
|
|
89
|
-
|
|
90
|
-
- `
|
|
91
|
-
- `
|
|
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
|
-
|
|
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
|
|
109
|
-
| systemd
|
|
110
|
-
| OpenWrt
|
|
111
|
-
| openrc
|
|
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` |
|