Some checks failed
Published content check / validate (push) Failing after 5s
Каждая публикуемая заметка получила callout-шапку со ссылкой на свою страницу wiki.zapret.moe (на самой вики она вырезается транформером RemoveMirrorCallout, видна только на зеркале Obsidian Publish и в Forgejo) и SEO-поле description — 1–2 предложения для meta description обоих сайтов. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
715 lines
No EOL
46 KiB
Markdown
715 lines
No EOL
46 KiB
Markdown
---
|
||
description: "Полный справочник флагов nfqws v72.2: --dpi-desync, fooling, hostlist, ipset, позиции split и готовые профили для HTTPS, HTTP, TCP и UDP."
|
||
---
|
||
|
||
> [!mirror] Резервное зеркало
|
||
> Актуальная версия этой страницы — на основной вики: [wiki.zapret.moe/Zapret/Zapret-flags](https://wiki.zapret.moe/Zapret/Zapret-flags)
|
||
|
||
|
||
```bash
|
||
@<config_file>|$<config_file> ; читать конфигурацию из файла. опция должна быть первой. остальные опции игнорируются.
|
||
|
||
--debug=0|1 ; 1=выводить отладочные сообщения
|
||
--dry-run ; проверить опции командной строки и выйти. код 0 - успешная проверка.
|
||
--version ; вывести версию и выйти
|
||
--comment ; любой текст (игнорируется)
|
||
--daemon ; демонизировать прогу
|
||
--pidfile=<file> ; сохранить PID в файл
|
||
--user=<username> ; менять uid процесса
|
||
--uid=uid[:gid] ; менять uid процесса
|
||
--qnum=N ; номер очереди N
|
||
--bind-fix4 ; пытаться решить проблему неверного выбора исходящего интерфейса для сгенерированных ipv4 пакетов
|
||
--bind-fix6 ; пытаться решить проблему неверного выбора исходящего интерфейса для сгенерированных ipv6 пакетов
|
||
--ctrack-timeouts=S:E:F[:U] ; таймауты внутреннего conntrack в состояниях SYN, ESTABLISHED, FIN, таймаут udp. по умолчанию 60:300:60:60
|
||
--ctrack-disable=[0|1] ; 1 или остутствие аргумента отключает conntrack
|
||
--ipcache-lifetime=<int> ; время жизни записей кэша IP в секундах. 0 - без ограничений.
|
||
--ipcache-hostname=[0|1] ; 1 или отсутствие аргумента включают кэширование имен хостов для применения в стратегиях нулевой фазы
|
||
--wsize=<winsize>[:<scale_factor>] ; менять tcp window size на указанный размер в SYN,ACK. если не задан scale_factor, то он не меняется (устарело !)
|
||
--wssize=<winsize>[:<scale_factor>] ; менять tcp window size на указанный размер в исходящих пакетах. scale_factor по умолчанию 0. (см. conntrack !)
|
||
--wssize-cutoff=[n|d|s]N ; изменять server window size в исходящих пакетах (n), пакетах данных (d), относительных sequence (s) по номеру меньше N
|
||
--wssize-forced-cutoff=0|1 ; 1(default)=автоматически отключать wssize в случае обнаружения известного протокола
|
||
--synack-split=[syn|synack|acksyn] ; выполнить tcp split handshake. вместо SYN,ACK отсылать только SYN, SYN+ACK или ACK+SYN
|
||
--orig-ttl=<int> ; модифицировать TTL оригинального пакета
|
||
--orig-ttl6=<int> ; модифицировать ipv6 hop limit оригинальных пакетов. если не указано, используется значение --orig-ttl
|
||
--orig-autottl=[<delta>[:<min>[-<max>]]|-] ; режим auto ttl для ipv4 и ipv6. по умолчанию: +5:3-64. "0:0-0" или "-" отключает функцию
|
||
--orig-autottl6=[<delta>[:<min>[-<max>]]|-] ; переопределение предыдущего параметра для ipv6
|
||
--orig-tcp-flags-set=<int|0xHEX|flaglist> ; устанавливать указанные tcp флаги (flags |= value). число , либо список через запятую : FIN,SYN,RST,PSH,ACK,URG,ECE,CWR,AE,R1,R2,R3
|
||
--orig-tcp-flags-unset=<int|0xHEX|flaglist> ; удалять указанные tcp флаги (flags &= ~value)
|
||
--orig-mod-start=[n|d|s]N ; применять orig-mod только в исходящих пакетах (n), пакетах данных (d), относительных sequence (s) по номеру больше или равно N
|
||
--orig-mod-cutoff=[n|d|s]N ; применять orig-mod только в исходящих пакетах (n), пакетах данных (d), относительных sequence (s) по номеру меньше N
|
||
--dup=<int> ; высылать N дубликатов до оригинала
|
||
--dup-replace=[0|1] ; 1 или отсутствие аргумента блокирует отправку оригинала. отправляются только дубликаты.
|
||
--dup-ttl=<int> ; модифицировать TTL дубликатов
|
||
--dup-ttl6=<int> ; модифицировать ipv6 hop limit дубликатов. если не указано, используется значение --dup-ttl
|
||
--dup-autottl=[<delta>[:<min>[-<max>]]|-] ; режим auto ttl для ipv4 и ipv6. по умолчанию: +1:3-64. "0:0-0" или "-" отключает функцию
|
||
--dup-autottl6=[<delta>[:<min>[-<max>]]|-] ; переопределение предыдущего параметра для ipv6
|
||
--dup-tcp-flags-set=<int|0xHEX|flaglist> ; устанавливать указанные tcp флаги (flags |= value). число , либо список через запятую : FIN,SYN,RST,PSH,ACK,URG,ECE,CWR,AE,R1,R2,R3
|
||
--dup-tcp-flags-unset=<int|0xHEX|flaglist> ; удалять указанные tcp флаги (flags &= ~value)
|
||
--dup-fooling=<fooling> ; дополнительные методики как сделать, чтобы дубликат не дошел до сервера. none md5sig badseq badsum datanoack ts hopbyhop hopbyhop2
|
||
--dup-ts-increment=<int|0xHEX> ; инкремент TSval для ts. по умолчанию -600000
|
||
--dup-badseq-increment=<int|0xHEX> ; инкремент sequence number для badseq. по умолчанию -10000
|
||
--dup-badack-increment=<int|0xHEX> ; инкремент ack sequence number для badseq. по умолчанию -66000
|
||
--dup-ip-id=same|zero|seq|rnd ; режим назначения ip_id для пакетов dup
|
||
--dup-start=[n|d|s]N ; применять dup только в исходящих пакетах (n), пакетах данных (d), относительных sequence (s) по номеру больше или равно N
|
||
--dup-cutoff=[n|d|s]N ; применять dup только в исходящих пакетах (n), пакетах данных (d), относительных sequence (s) по номеру меньше N
|
||
--hostcase ; менять регистр заголовка "Host:" по умолчанию на "host:".
|
||
--hostnospace ; убрать пробел после "Host:" и переместить его в конец значения "User-Agent:" для сохранения длины пакета
|
||
--methodeol ; добавить перевод строки в unix стиле ('\n') перед методом и убрать пробел из Host: : "GET / ... Host: domain.com" => "\nGET / ... Host:domain.com"
|
||
--hostspell=HoST ; точное написание заголовка Host (можно "HOST" или "HoSt"). автоматом включает --hostcase
|
||
--domcase ; домен после Host: сделать таким : TeSt.cOm
|
||
--ip-id=seq|seqgroup|rnd|zero ; режим назначения ip_id для генерированных пакетов
|
||
--dpi-desync=[<mode0>,]<mode>[,<mode2] ; атака по десинхронизации DPI. mode : synack syndata fake fakeknown rst rstack hopbyhop destopt ipfrag1 multisplit multidisorder fakedsplit hostfakesplit fakeddisorder ipfrag2 udplen tamper
|
||
--dpi-desync-fwmark=<int|0xHEX> ; бит fwmark для пометки десинхронизирующих пакетов, чтобы они повторно не падали в очередь. default = 0x40000000
|
||
--dpi-desync-ttl=<int> ; установить ttl для десинхронизирующих пакетов
|
||
--dpi-desync-ttl6=<int> ; установить ipv6 hop limit для десинхронизирующих пакетов. если не указано, используется значение --dpi-desync-ttl
|
||
--dpi-desync-autottl=[<delta>[:<min>[-<max>]]|-] ; режим auto ttl для ipv4 и ipv6. по умолчанию: 1:3-20. "0:0-0" или "-" отключает функцию
|
||
--dpi-desync-autottl6=[<delta>[:<min>[-<max>]]|-] ; переопределение предыдущего параметра для ipv6
|
||
--dpi-desync-tcp-flags-set=<int|0xHEX|flaglist> ; устанавливать указанные tcp флаги (flags |= value). число , либо список через запятую : FIN,SYN,RST,PSH,ACK,URG,ECE,CWR,AE,R1,R2,R3
|
||
--dpi-desync-tcp-flags-unset=<int|0xHEX|flaglist> ; удалять указанные tcp флаги (flags &= ~value)
|
||
--dpi-desync-fooling=<fooling> ; дополнительные методики как сделать, чтобы фейковый пакет не дошел до сервера. none md5sig badseq badsum datanoack ts hopbyhop hopbyhop2
|
||
--dpi-desync-repeats=<N> ; посылать каждый генерируемый в nfqws пакет N раз (не влияет на остальные пакеты)
|
||
--dpi-desync-skip-nosni=0|1 ; 1(default)=не применять dpi desync для запросов без hostname в SNI, в частности для ESNI
|
||
--dpi-desync-split-pos=N|-N|marker+N|marker-N ; список через запятую маркеров для tcp сегментации в режимах split и disorder
|
||
--dpi-desync-split-seqovl=N|-N|marker+N|marker-N ; единичный маркер, определяющий величину перекрытия sequence в режимах split и disorder. для split поддерживается только положительное число.
|
||
--dpi-desync-split-seqovl-pattern=[+ofs]@<filename>|0xHEX ; чем заполнять фейковую часть overlap
|
||
--dpi-desync-fakedsplit-pattern=[+ofs]@<filename>|0xHEX ; чем заполнять фейки в fakedsplit/fakeddisorder
|
||
--dpi-desync-fakedsplit-mod=mod[,mod] ; может быть none, altorder=0|1|2|3 + 0|8|16
|
||
--dpi-desync-hostfakesplit-midhost=marker+N|marker-N ; маркер дополнительного разреза сегмента с оригинальным хостом. должен попадать в пределы хоста.
|
||
--dpi-desync-hostfakesplit-mod=mod[,mod] ; может быть none, host=<hostname>, altorder=0|1
|
||
--dpi-desync-ts-increment=<int|0xHEX> ; инкремент TSval для ts. по умолчанию -600000
|
||
--dpi-desync-badseq-increment=<int|0xHEX> ; инкремент sequence number для badseq. по умолчанию -10000
|
||
--dpi-desync-badack-increment=<int|0xHEX> ; инкремент ack sequence number для badseq. по умолчанию -66000
|
||
--dpi-desync-any-protocol=0|1 ; 0(default)=работать только по http request и tls clienthello 1=по всем непустым пакетам данных
|
||
--dpi-desync-fake-tcp-mod=mod[,mod] ; список через запятую режимов runtime модификации tcp фейков (любых) : none, seq
|
||
--dpi-desync-fake-http=[+ofs]@<filename>|0xHEX ; файл, содержащий фейковый http запрос для dpi-desync=fake, на замену стандартному www.iana.org
|
||
--dpi-desync-fake-tls=[+ofs]@<filename>|0xHEX|![+offset] ; файл, содержащий фейковый tls clienthello для dpi-desync=fake, на замену стандартному. '!' = стандартный фейк
|
||
--dpi-desync-fake-tls-mod=mod[,mod] ; список через запятую режимов runtime модификации фейков : none,rnd,rndsni,sni=<sni>,dupsid,padencap
|
||
--dpi-desync-fake-unknown=[+ofs]@<filename>|0xHEX ; файл, содержащий фейковый пейлоад неизвестного протокола для dpi-desync=fake, на замену стандартным нулям 256 байт
|
||
--dpi-desync-fake-syndata=[+ofs]@<filename>|0xHEX ; файл, содержащий фейковый пейлоад пакета SYN для режима десинхронизации syndata
|
||
--dpi-desync-fake-quic=[+ofs]@<filename>|0xHEX ; файл, содержащий фейковый QUIC Initial
|
||
--dpi-desync-fake-wireguard=[+ofs]@<filename>|0xHEX ; файл, содержащий фейковый wireguard handshake initiation
|
||
--dpi-desync-fake-dht=[+ofs]@<filename>|0xHEX ; файл, содержащий фейковый пейлоад DHT протокола для dpi-desync=fake, на замену стандартным нулям 64 байт
|
||
--dpi-desync-fake-discord=[+ofs]@<filename>|0xHEX ; файл, содержащий фейковый пейлоад Discord протокола нахождения IP адреса для голосовых чатов для dpi-desync=fake, на замену стандартным нулям 64 байт
|
||
--dpi-desync-fake-stun=[+ofs]@<filename>|0xHEX ; файл, содержащий фейковый пейлоад STUN протокола для dpi-desync=fake, на замену стандартным нулям 64 байт
|
||
--dpi-desync-fake-unknown-udp=[+ofs]@<filename>|0xHEX ; файл, содержащий фейковый пейлоад неизвестного udp протокола для dpi-desync=fake, на замену стандартным нулям 64 байт
|
||
--dpi-desync-udplen-increment=<int> ; на сколько увеличивать длину udp пейлоада в режиме udplen
|
||
--dpi-desync-udplen-pattern=[+ofs]@<filename>|0xHEX ; чем добивать udp пакет в режиме udplen. по умолчанию - нули
|
||
--dpi-desync-start=[n|d|s]N ; применять dpi desync только в исходящих пакетах (n), пакетах данных (d), относительных sequence (s) по номеру больше или равно N
|
||
--dpi-desync-cutoff=[n|d|s]N ; применять dpi desync только в исходящих пакетах (n), пакетах данных (d), относительных sequence (s) по номеру меньше N
|
||
--hostlist=<filename> ; действовать только над доменами, входящими в список из filename. поддомены автоматически учитываются, если хост не начинается с '^'.
|
||
; в файле должен быть хост на каждой строке.
|
||
; список читается при старте и хранится в памяти в виде иерархической структуры для быстрого поиска.
|
||
; при изменении времени модификации файла он перечитывается автоматически по необходимости
|
||
; список может быть запакован в gzip. формат автоматически распознается и разжимается
|
||
; списков может быть множество. пустой общий лист = его отсутствие
|
||
; хосты извлекаются из Host: хедера обычных http запросов и из SNI в TLS ClientHello.
|
||
--hostlist-domains=<domain_list> ; фиксированный список доменов через зяпятую. можно использовать # в начале для комментирования отдельных доменов.
|
||
--hostlist-exclude=<filename> ; не применять дурение к доменам из листа. может быть множество листов. схема аналогична include листам.
|
||
--hostlist-exclude-domains=<domain_list> ; фиксированный список доменов через зяпятую. можно использовать # в начале для комментирования отдельных доменов.
|
||
--hostlist-auto=<filename> ; обнаруживать автоматически блокировки и заполнять автоматический hostlist (требует перенаправления входящего трафика)
|
||
--hostlist-auto-fail-threshold=<int> ; сколько раз нужно обнаружить ситуацию, похожую на блокировку, чтобы добавить хост в лист (по умолчанию: 3)
|
||
--hostlist-auto-fail-time=<int> ; все эти ситуации должны быть в пределах указанного количества секунд (по умолчанию: 60)
|
||
--hostlist-auto-retrans-threshold=<int> ; сколько ретрансмиссий запроса считать блокировкой (по умолчанию: 3)
|
||
--hostlist-auto-debug=<logfile> ; лог положительных решений по autohostlist. позволяет разобраться почему там появляются хосты.
|
||
--new ; начало новой стратегии (новый профиль)
|
||
--skip ; не использовать этот профиль . полезно для временной деактивации профиля без удаления параметров.
|
||
--filter-l3=ipv4|ipv6 ; фильтр версии ip для текущей стратегии
|
||
--filter-tcp=[~]port1[-port2]|* ; фильтр портов tcp для текущей стратегии. ~ означает инверсию. установка фильтра tcp и неустановка фильтра udp запрещает udp. поддерживается список через запятую.
|
||
--filter-udp=[~]port1[-port2]|* ; фильтр портов udp для текущей стратегии. ~ означает инверсию. установка фильтра udp и неустановка фильтра tcp запрещает tcp. поддерживается список через запятую.
|
||
--filter-l7=<proto> ; фильтр протокола L6-L7. поддерживается несколько значений через запятую. proto : http tls quic wireguard dht discord stun unknown
|
||
--filter-ssid=ssid1[,ssid2,ssid3,...] ; фильтр по имени wifi сети (только для linux)
|
||
--ipset=<filename> ; включающий ip list. на каждой строчке ip или cidr ipv4 или ipv6. поддерживается множество листов и gzip. перечитка автоматическая.
|
||
--ipset-ip=<ip_list> ; фиксированный список подсетей через запятую. можно использовать # в начале для комментирования отдельных подсетей.
|
||
--ipset-exclude=<filename> ; исключающий ip list. на каждой строчке ip или cidr ipv4 или ipv6. поддерживается множество листов и gzip. перечитка автоматическая.
|
||
--ipset-exclude-ip=<ip_list> ; фиксированный список подсетей через запятую. можно использовать # в начале для комментирования отдельных подсетей.
|
||
```
|
||
|
||
# 📚 Справочник параметров nfqws v72.2
|
||
|
||
## 🔧 Базовые параметры
|
||
|
||
### Конфигурация и управление
|
||
```bash
|
||
@<file> | $<file> # Загрузить конфиг из файла (должно быть первым)
|
||
--debug=0|1 # Отладочные сообщения
|
||
--dry-run # Проверить параметры и выйти
|
||
--version # Показать версию
|
||
--comment # Комментарий (игнорируется)
|
||
--daemon # Запустить как демон
|
||
--pidfile=<file> # Файл PID
|
||
--user=<username> # Сменить пользователя
|
||
--uid=uid[:gid] # Сменить UID:GID
|
||
--qnum=N # Номер NFQUEUE
|
||
```
|
||
|
||
### Системные настройки
|
||
```bash
|
||
--bind-fix4 # Фикс выбора интерфейса IPv4
|
||
--bind-fix6 # Фикс выбора интерфейса IPv6
|
||
--ctrack-timeouts=S:E:F[:U] # Таймауты conntrack (по умолч: 60:300:60:60)
|
||
--ctrack-disable=[0|1] # Отключить conntrack
|
||
--ipcache-lifetime=<int> # Время жизни IP-кэша (сек), 0=∞
|
||
--ipcache-hostname=[0|1] # Кэшировать имена хостов
|
||
```
|
||
|
||
---
|
||
|
||
## 🎯 Модификация оригинальных пакетов (orig)
|
||
|
||
```bash
|
||
--orig-ttl=<int> # TTL для IPv4
|
||
--orig-ttl6=<int> # Hop limit для IPv6
|
||
--orig-autottl=[<delta>[:<min>[-<max>]]|-] # AutoTTL IPv4/6 (дефолт: +5:3-64)
|
||
--orig-autottl6=[...] # AutoTTL только для IPv6
|
||
--orig-tcp-flags-set=<flags> 🆕 # Установить TCP флаги
|
||
--orig-tcp-flags-unset=<flags> 🆕 # Снять TCP флаги
|
||
--orig-mod-start=[n|d|s]N # Начать модификацию с пакета N
|
||
--orig-mod-cutoff=[n|d|s]N # Прекратить модификацию после пакета N
|
||
```
|
||
|
||
---
|
||
|
||
## 👥 Дубликаты пакетов (dup)
|
||
|
||
```bash
|
||
--dup=<int> # Количество дубликатов
|
||
--dup-replace=[0|1] # Отправлять только дубликаты (блокировать оригинал)
|
||
--dup-ttl=<int> # TTL для дубликатов
|
||
--dup-ttl6=<int> # Hop limit для дубликатов IPv6
|
||
--dup-autottl=[<delta>[:<min>[-<max>]]|-] # AutoTTL (дефолт: +1:3-64)
|
||
--dup-autottl6=[...] # AutoTTL для IPv6
|
||
--dup-tcp-flags-set=<flags> 🆕 # Установить TCP флаги
|
||
--dup-tcp-flags-unset=<flags> 🆕 # Снять TCP флаги
|
||
--dup-fooling=<method> # Метод "обмана": md5sig, badseq, badsum, datanoack, ts, hopbyhop, hopbyhop2
|
||
--dup-ts-increment=<int> # Инкремент TSval (дефолт: -600000)
|
||
--dup-badseq-increment=<int> # Инкремент SEQ (дефолт: -10000)
|
||
--dup-badack-increment=<int> # Инкремент ACK (дефолт: -66000)
|
||
--dup-ip-id=same|zero|seq|rnd 🆕 # Режим назначения IP_ID
|
||
--dup-start=[n|d|s]N # Начать с пакета N
|
||
--dup-cutoff=[n|d|s]N # Прекратить после пакета N
|
||
```
|
||
|
||
---
|
||
|
||
## 🛡️ DPI Desync (основные параметры)
|
||
|
||
### Режимы десинхронизации
|
||
```bash
|
||
--dpi-desync=[mode0,]mode[,mode2]
|
||
```
|
||
**Режимы TCP:** `synack`, `syndata`, `fake`, `fakeknown`, `rst`, `rstack`, `multisplit`, `multidisorder`, `fakedsplit`, `hostfakesplit`, `fakeddisorder`, `ipfrag1`, `ipfrag2`, `hopbyhop`, `destopt`
|
||
|
||
**Режимы UDP:** `udplen`, `tamper`
|
||
|
||
### TTL и автоматика
|
||
```bash
|
||
--dpi-desync-ttl=<int> # TTL для десинхронизирующих пакетов
|
||
--dpi-desync-ttl6=<int> # Hop limit IPv6
|
||
--dpi-desync-autottl=[<delta>[:<min>[-<max>]]|-] # AutoTTL (дефолт: 1:3-20)
|
||
--dpi-desync-autottl6=[...] # AutoTTL для IPv6
|
||
--dpi-desync-tcp-flags-set=<flags> 🆕 # Установить TCP флаги
|
||
--dpi-desync-tcp-flags-unset=<flags> 🆕 # Снять TCP флаги
|
||
```
|
||
|
||
### Методы "обмана" фейков
|
||
```bash
|
||
--dpi-desync-fooling=<method> # none, md5sig, badseq, badsum, datanoack, ts, hopbyhop, hopbyhop2
|
||
--dpi-desync-repeats=<N> # Повторять каждый фейк N раз
|
||
--dpi-desync-skip-nosni=0|1 # Пропускать ESNI (дефолт: 1)
|
||
```
|
||
|
||
### TCP сегментация
|
||
```bash
|
||
--dpi-desync-split-pos=N|-N|marker+N|marker-N # Позиции разреза
|
||
--dpi-desync-split-seqovl=N|-N|marker+N|marker-N # Величина sequence overlap
|
||
--dpi-desync-split-seqovl-pattern=[+ofs]@file|0xHEX # Чем заполнять overlap
|
||
```
|
||
|
||
**Маркеры:** `method`, `host`, `endhost`, `sld`, `endsld`, `midsld`, `sniext`
|
||
|
||
### Модификации для split режимов
|
||
```bash
|
||
--dpi-desync-fakedsplit-pattern=[+ofs]@file|0xHEX # Паттерн фейков
|
||
--dpi-desync-fakedsplit-mod=mod[,mod] # altorder=0-3 + 0|8|16
|
||
--dpi-desync-hostfakesplit-midhost=marker±N # Доп. разрез в хосте
|
||
--dpi-desync-hostfakesplit-mod=mod[,mod] # host=<hostname>, altorder=0|1
|
||
```
|
||
|
||
### Инкременты для fooling
|
||
```bash
|
||
--dpi-desync-ts-increment=<int> # TSval (дефолт: -600000)
|
||
--dpi-desync-badseq-increment=<int> # SEQ (дефолт: -10000)
|
||
--dpi-desync-badack-increment=<int> # ACK (дефолт: -66000)
|
||
```
|
||
|
||
### Протоколы и фейки
|
||
```bash
|
||
--dpi-desync-any-protocol=0|1 # 1=работать со всеми протоколами
|
||
--dpi-desync-fake-tcp-mod=mod[,mod] # seq
|
||
```
|
||
|
||
#### Фейковые пейлоады
|
||
```bash
|
||
--dpi-desync-fake-http=[+ofs]@file|0xHEX
|
||
--dpi-desync-fake-tls=[+ofs]@file|0xHEX|![+ofs]
|
||
--dpi-desync-fake-tls-mod=mod[,mod] # none, rnd, rndsni, sni=<sni>, dupsid, padencap
|
||
--dpi-desync-fake-unknown=[+ofs]@file|0xHEX
|
||
--dpi-desync-fake-syndata=[+ofs]@file|0xHEX
|
||
--dpi-desync-fake-quic=[+ofs]@file|0xHEX
|
||
--dpi-desync-fake-wireguard=[+ofs]@file|0xHEX
|
||
--dpi-desync-fake-dht=[+ofs]@file|0xHEX
|
||
--dpi-desync-fake-discord=[+ofs]@file|0xHEX
|
||
--dpi-desync-fake-stun=[+ofs]@file|0xHEX
|
||
--dpi-desync-fake-unknown-udp=[+ofs]@file|0xHEX
|
||
```
|
||
|
||
### UDP специфичное
|
||
```bash
|
||
--dpi-desync-udplen-increment=<int> # Увеличение длины UDP
|
||
--dpi-desync-udplen-pattern=[+ofs]@file|0xHEX # Чем добивать пакет
|
||
```
|
||
|
||
### Ограничители применения
|
||
```bash
|
||
--dpi-desync-start=[n|d|s]N # Начать с пакета N
|
||
--dpi-desync-cutoff=[n|d|s]N # Прекратить после пакета N
|
||
--dpi-desync-fwmark=<int|0xHEX> # Метка fwmark (дефолт: 0x40000000)
|
||
```
|
||
|
||
---
|
||
|
||
## 🌐 Модификации HTTP/TLS заголовков
|
||
|
||
```bash
|
||
--hostcase # "Host:" → "host:"
|
||
--hostnospace # Убрать пробел после "Host:"
|
||
--methodeol # Добавить \n перед методом
|
||
--hostspell=HoST # Точное написание "Host"
|
||
--domcase # Домен: example.com → ExAmPlE.cOm
|
||
```
|
||
|
||
---
|
||
|
||
## 📊 Window Size
|
||
|
||
```bash
|
||
--wsize=<size>[:<scale>] # В SYN,ACK (устарело!)
|
||
--wssize=<size>[:<scale>] # В исходящих пакетах
|
||
--wssize-cutoff=[n|d|s]N # Прекратить изменение после пакета N
|
||
--wssize-forced-cutoff=0|1 🆕 # 1=авто-отключение при HTTP/TLS (дефолт)
|
||
```
|
||
|
||
Почему `--wssize` стоит применять только как крайнюю меру (нет фильтрации по хостлистам и l7, замедление всех соединений на отфильтрованных портах) — в [[Zapret/wssize|отдельной заметке]].
|
||
|
||
---
|
||
|
||
## 🎭 Режим назначения IP_ID
|
||
|
||
```bash
|
||
--ip-id=seq|seqgroup|rnd|zero # Для всех генерируемых пакетов
|
||
--dup-ip-id=same|zero|seq|rnd 🆕 # Для дубликатов (дефолт: same)
|
||
```
|
||
|
||
---
|
||
|
||
## 📋 Фильтрация и листы
|
||
|
||
### Хост-листы
|
||
```bash
|
||
--hostlist=<file> # Включающий список доменов
|
||
--hostlist-domains=<domain,domain> # Фикс. список доменов
|
||
--hostlist-exclude=<file> # Исключающий список
|
||
--hostlist-exclude-domains=<list> # Фикс. список исключений
|
||
```
|
||
|
||
### Автоматический hostlist
|
||
```bash
|
||
--hostlist-auto=<file> # Автообнаружение блокировок
|
||
--hostlist-auto-fail-threshold=<int> # Порог срабатывания (дефолт: 3)
|
||
--hostlist-auto-fail-time=<int> # Временное окно (дефолт: 60 сек)
|
||
--hostlist-auto-retrans-threshold=<int> # Порог ретрансмиссий (дефолт: 3)
|
||
--hostlist-auto-debug=<logfile> # Лог решений
|
||
```
|
||
|
||
### IP-листы
|
||
```bash
|
||
--ipset=<file> # Включающий IP/CIDR список
|
||
--ipset-ip=<ip,ip,cidr> # Фикс. список подсетей
|
||
--ipset-exclude=<file> # Исключающий список
|
||
--ipset-exclude-ip=<list> # Фикс. список исключений
|
||
```
|
||
|
||
---
|
||
|
||
## 🔀 Профили и фильтры
|
||
|
||
### Управление профилями
|
||
```bash
|
||
--new # Начать новый профиль
|
||
--skip # Пропустить профиль
|
||
```
|
||
|
||
### Фильтры
|
||
```bash
|
||
--filter-l3=ipv4|ipv6 # По версии IP
|
||
--filter-tcp=[~]port[-port]|* # По TCP портам
|
||
--filter-udp=[~]port[-port]|* # По UDP портам
|
||
--filter-l7=<proto> # По протоколу L7: http, tls, quic, wireguard, dht, discord, stun, unknown
|
||
--filter-ssid=ssid1,ssid2 # По WiFi SSID (только Linux)
|
||
```
|
||
|
||
---
|
||
|
||
## 🆕 Новое в [[Zapret v72.2]]
|
||
|
||
1. **`--wssize-forced-cutoff=0|1`** - контроль авто-отключения wssize
|
||
2. **Манипуляция TCP флагами:**
|
||
- `--orig-tcp-flags-set/unset`
|
||
- `--dup-tcp-flags-set/unset`
|
||
- `--dpi-desync-tcp-flags-set/unset`
|
||
- Формат: число, 0xHEX или список: `FIN,SYN,RST,PSH,ACK,URG,ECE,CWR,AE,R1,R2,R3`
|
||
3. **`--dup-ip-id=same|zero|seq|rnd`** - режим IP_ID для дубликатов
|
||
|
||
---
|
||
|
||
## 💡 Подсказки
|
||
|
||
### Форматы параметров:
|
||
- `[n|d|s]N` - n=номер пакета, d=пакет данных, s=sequence number
|
||
- `marker±N` - относительная позиция от маркера
|
||
- `[+ofs]@file|0xHEX` - данные из файла со смещением или hex-строка
|
||
- `#` в начале домена/IP - комментарий (игнорируется)
|
||
|
||
### TCP флаги (12 бит):
|
||
- Стандартные: FIN, SYN, RST, PSH, ACK, URG, ECE, CWR
|
||
- Reserved: **AE** (Accurate ECN), **R1, R2, R3**
|
||
|
||
# 🔀 Разделение параметров nfqws по типам трафика
|
||
|
||
## 🔐 HTTPS (TLS over TCP, порт 443)
|
||
|
||
### Основные режимы десинхронизации
|
||
```bash
|
||
--dpi-desync=fake,split # Фейковый TLS ClientHello + сегментация
|
||
--dpi-desync=fakedsplit # Замешивание фейков и оригинала
|
||
--dpi-desync=multisplit # Нарезка на несколько сегментов
|
||
--dpi-desync=multidisorder # Нарезка + обратный порядок
|
||
--dpi-desync=hostfakesplit # Фейк только на имени хоста (SNI)
|
||
```
|
||
|
||
### Позиции разреза (специфичные для TLS)
|
||
```bash
|
||
--dpi-desync-split-pos=sni # Разрез в начале SNI extension
|
||
--dpi-desync-split-pos=sniext # Разрез в начале данных SNI
|
||
--dpi-desync-split-pos=host # Разрез в начале hostname в SNI
|
||
--dpi-desync-split-pos=midsld # Разрез в середине домена 2-го уровня
|
||
--dpi-desync-split-pos=sld # Разрез в начале SLD
|
||
```
|
||
|
||
### Фейковые пейлоады для TLS
|
||
```bash
|
||
--dpi-desync-fake-tls=@tls_clienthello.bin # Кастомный TLS ClientHello
|
||
--dpi-desync-fake-tls=! # Стандартный фейк
|
||
--dpi-desync-fake-tls=0xHEX # Hex-данные
|
||
|
||
# Модификации TLS фейков
|
||
--dpi-desync-fake-tls-mod=rnd # Рандомизировать random и session_id
|
||
--dpi-desync-fake-tls-mod=rndsni # Случайный SNI
|
||
--dpi-desync-fake-tls-mod=dupsid # Копировать session_id из оригинала
|
||
--dpi-desync-fake-tls-mod=sni=google.com # Заменить SNI
|
||
--dpi-desync-fake-tls-mod=padencap # Инкапсулировать в padding extension
|
||
--dpi-desync-fake-tls-mod=rnd,dupsid,rndsni # Комбинация (по умолч.)
|
||
```
|
||
|
||
### Фильтры для HTTPS
|
||
```bash
|
||
--filter-tcp=443 # Только порт 443
|
||
--filter-l7=tls # Только TLS протокол
|
||
--dpi-desync-skip-nosni=1 # Пропускать ESNI (по умолч.)
|
||
```
|
||
|
||
### Типичные конфигурации для HTTPS
|
||
```bash
|
||
# Вариант 1: Простой split на SNI
|
||
--filter-tcp=443 --dpi-desync=split --dpi-desync-split-pos=sniext
|
||
|
||
# Вариант 2: Фейк + split с TTL
|
||
--filter-tcp=443 --dpi-desync=fake,split \
|
||
--dpi-desync-fooling=badsum --dpi-desync-split-pos=midsld
|
||
|
||
# Вариант 3: AutoTTL фейк
|
||
--filter-tcp=443 --dpi-desync=fake,multisplit \
|
||
--dpi-desync-autottl=2 --dpi-desync-split-pos=sniext,midsld
|
||
|
||
# Вариант 4: Disorder с кастомным SNI
|
||
--filter-tcp=443 --dpi-desync=fake,multidisorder \
|
||
--dpi-desync-fake-tls-mod=sni=ya.ru --dpi-desync-split-pos=midsld
|
||
```
|
||
|
||
---
|
||
|
||
## 🌐 HTTP (plain HTTP over TCP, порт 80)
|
||
|
||
### Основные режимы
|
||
```bash
|
||
--dpi-desync=split # Простая сегментация
|
||
--dpi-desync=multisplit # Множественная нарезка
|
||
--dpi-desync=fake,split # Фейк + сегментация
|
||
--dpi-desync=hostfakesplit # Фейк на Host: заголовке
|
||
```
|
||
|
||
### Позиции разреза (специфичные для HTTP)
|
||
```bash
|
||
--dpi-desync-split-pos=method # В начале метода (GET, POST)
|
||
--dpi-desync-split-pos=method+2 # После "GET" -> "GE|T /"
|
||
--dpi-desync-split-pos=host # В начале значения Host:
|
||
--dpi-desync-split-pos=midsld # В середине домена
|
||
--dpi-desync-split-pos=3 # После 3-го байта: "GET| /"
|
||
```
|
||
|
||
### Модификация HTTP заголовков
|
||
```bash
|
||
--hostcase # "Host:" → "host:"
|
||
--hostspell=HoSt # Точное написание
|
||
--hostnospace # Убрать пробел после Host:
|
||
--domcase # example.com → ExAmPlE.cOm
|
||
--methodeol # \n перед методом
|
||
```
|
||
|
||
### Фейковые пейлоады для HTTP
|
||
```bash
|
||
--dpi-desync-fake-http=@fake_request.txt # Кастомный HTTP запрос
|
||
--dpi-desync-fake-http=0x474554202F20485454... # Hex-данные
|
||
# По умолчанию: GET / HTTP/1.1\r\nHost: www.iana.org\r\n\r\n
|
||
```
|
||
|
||
### Фильтры для HTTP
|
||
```bash
|
||
--filter-tcp=80 # Только порт 80
|
||
--filter-l7=http # Только HTTP протокол
|
||
```
|
||
|
||
### Типичные конфигурации для HTTP
|
||
```bash
|
||
# Вариант 1: Split после метода
|
||
--filter-tcp=80 --dpi-desync=split --dpi-desync-split-pos=method+2
|
||
|
||
# Вариант 2: Смена регистра + split
|
||
--filter-tcp=80 --hostcase --dpi-desync=split --dpi-desync-split-pos=host
|
||
|
||
# Вариант 3: Фейк с TTL
|
||
--filter-tcp=80 --dpi-desync=fake,split \
|
||
--dpi-desync-ttl=4 --dpi-desync-split-pos=midsld
|
||
|
||
# Вариант 4: Модификация заголовков
|
||
--filter-tcp=80 --hostcase --domcase --methodeol
|
||
```
|
||
|
||
---
|
||
|
||
## 🔌 TCP (прочий TCP трафик)
|
||
|
||
### Когда применяется
|
||
```bash
|
||
--dpi-desync-any-protocol=1 # Работать со ВСЕМИ TCP пакетами
|
||
```
|
||
|
||
⚠️ **Внимание:** Без этого флага desync работает только с HTTP/TLS!
|
||
|
||
### Подходящие режимы для любого TCP
|
||
```bash
|
||
--dpi-desync=syndata # Данные в SYN пакете
|
||
--dpi-desync=synack # Модификация handshake
|
||
--dpi-desync=multisplit # Универсальная сегментация
|
||
--dpi-desync=fake,split # Фейк + split
|
||
```
|
||
|
||
### Позиции разреза (универсальные)
|
||
```bash
|
||
--dpi-desync-split-pos=1 # После 1-го байта
|
||
--dpi-desync-split-pos=2 # После 2-го байта
|
||
--dpi-desync-split-pos=-1 # Последний байт
|
||
--dpi-desync-split-pos=10,20,30 # Множественные позиции
|
||
```
|
||
|
||
### Фейковые пейлоады для неизвестных протоколов
|
||
```bash
|
||
--dpi-desync-fake-unknown=@payload.bin # Кастомный пейлоад
|
||
--dpi-desync-fake-unknown=0x0000... # Hex (256 байт по умолч.)
|
||
```
|
||
|
||
### Sequence overlap (для любого TCP)
|
||
```bash
|
||
--dpi-desync-split-seqovl=10 # Перекрытие на 10 байт
|
||
--dpi-desync-split-seqovl-pattern=0x41414141 # Чем заполнять overlap
|
||
```
|
||
|
||
### Фильтры для прочего TCP
|
||
```bash
|
||
--filter-tcp=* # Все TCP порты
|
||
--filter-tcp=~80,443 # Все КРОМЕ 80 и 443
|
||
--filter-tcp=22,3389 # Конкретные порты (SSH, RDP)
|
||
--filter-l7=unknown # Неизвестные протоколы
|
||
```
|
||
|
||
### Типичные конфигурации для TCP
|
||
```bash
|
||
# Вариант 1: SSH, VPN через TCP
|
||
--filter-tcp=22 --dpi-desync=split --dpi-desync-split-pos=2 \
|
||
--dpi-desync-any-protocol=1
|
||
|
||
# Вариант 2: Все TCP кроме HTTP/HTTPS
|
||
--filter-tcp=~80,443 --dpi-desync=fake,split \
|
||
--dpi-desync-any-protocol=1 --dpi-desync-split-pos=1
|
||
|
||
# Вариант 3: SYN data для быстрых соединений
|
||
--filter-tcp=* --dpi-desync=syndata \
|
||
--dpi-desync-fake-syndata=@payload.bin
|
||
```
|
||
|
||
---
|
||
|
||
## 📡 UDP
|
||
|
||
### Режимы десинхронизации для UDP
|
||
```bash
|
||
--dpi-desync=udplen # Увеличить длину UDP пакета
|
||
--dpi-desync=tamper # Испортить пакет
|
||
--dpi-desync=fake # Фейковый UDP пакет
|
||
--dpi-desync=ipfrag2 # IP фрагментация
|
||
```
|
||
|
||
### UDP длина (udplen)
|
||
```bash
|
||
--dpi-desync-udplen-increment=2 # Увеличить длину на 2 байта
|
||
--dpi-desync-udplen-pattern=0x0000 # Чем добивать (по умолч. нули)
|
||
```
|
||
|
||
### Фейковые пейлоады для UDP протоколов
|
||
```bash
|
||
# QUIC (HTTP/3)
|
||
--dpi-desync-fake-quic=@quic_initial.bin
|
||
--filter-l7=quic
|
||
--filter-udp=443
|
||
|
||
# WireGuard VPN
|
||
--dpi-desync-fake-wireguard=@wg_handshake.bin
|
||
--filter-l7=wireguard
|
||
--filter-udp=51820
|
||
|
||
# DHT (torrents)
|
||
--dpi-desync-fake-dht=@dht_payload.bin
|
||
--filter-l7=dht
|
||
|
||
# Discord голосовой чат
|
||
--dpi-desync-fake-discord=@discord_payload.bin
|
||
--filter-l7=discord
|
||
|
||
# STUN (WebRTC, VoIP)
|
||
--dpi-desync-fake-stun=@stun_payload.bin
|
||
--filter-l7=stun
|
||
|
||
# Неизвестный UDP
|
||
--dpi-desync-fake-unknown-udp=@payload.bin
|
||
--filter-l7=unknown
|
||
```
|
||
|
||
### Фильтры для UDP
|
||
```bash
|
||
--filter-udp=443 # QUIC (HTTP/3)
|
||
--filter-udp=53 # DNS
|
||
--filter-udp=51820 # WireGuard
|
||
--filter-udp=* # Все UDP
|
||
--filter-l7=quic,wireguard,stun # Несколько протоколов
|
||
```
|
||
|
||
### Типичные конфигурации для UDP
|
||
```bash
|
||
# Вариант 1: QUIC (YouTube, Google)
|
||
--filter-udp=443 --filter-l7=quic \
|
||
--dpi-desync=fake --dpi-desync-repeats=6 \
|
||
--dpi-desync-fake-quic=@quic_initial.bin
|
||
|
||
# Вариант 2: WireGuard VPN
|
||
--filter-udp=51820 --filter-l7=wireguard \
|
||
--dpi-desync=fake,udplen \
|
||
--dpi-desync-udplen-increment=2
|
||
|
||
# Вариант 3: Все UDP с увеличением длины
|
||
--filter-udp=* --dpi-desync=udplen \
|
||
--dpi-desync-udplen-increment=1
|
||
|
||
# Вариант 4: DNS через UDP
|
||
--filter-udp=53 --dpi-desync=fake \
|
||
--dpi-desync-ttl=1
|
||
```
|
||
|
||
---
|
||
|
||
## 📊 Сравнительная таблица
|
||
|
||
| Параметр | HTTPS | HTTP | TCP | UDP |
|
||
|----------|-------|------|-----|-----|
|
||
| **Основной порт** | 443 | 80 | * | * |
|
||
| **Фильтр L7** | `tls` | `http` | `unknown` | `quic`, `wireguard`, etc. |
|
||
| **Лучший режим** | `fake,split` | `split` | `syndata` | `fake,udplen` |
|
||
| **Маркеры split** | `sniext`, `midsld` | `method+2`, `host` | Числа | - |
|
||
| **Фейки** | `--fake-tls` | `--fake-http` | `--fake-unknown` | `--fake-quic`, etc. |
|
||
| **Модификации** | `--fake-tls-mod` | `--hostcase` | - | `--udplen-increment` |
|
||
| **any-protocol** | Не нужен | Не нужен | **Обязателен!** | - |
|
||
|
||
---
|
||
|
||
## 🎯 Готовые профили (многопрофильная конфигурация)
|
||
|
||
### Полная конфигурация для всех типов трафика
|
||
```bash
|
||
# Профиль 1: HTTPS
|
||
--filter-tcp=443 --filter-l7=tls \
|
||
--dpi-desync=fake,multisplit \
|
||
--dpi-desync-split-pos=sniext,midsld \
|
||
--dpi-desync-fooling=badsum \
|
||
--dpi-desync-fake-tls-mod=rnd,dupsid
|
||
|
||
# Профиль 2: HTTP
|
||
--new \
|
||
--filter-tcp=80 --filter-l7=http \
|
||
--hostcase --domcase \
|
||
--dpi-desync=split \
|
||
--dpi-desync-split-pos=method+2
|
||
|
||
# Профиль 3: QUIC (YouTube)
|
||
--new \
|
||
--filter-udp=443 --filter-l7=quic \
|
||
--dpi-desync=fake \
|
||
--dpi-desync-repeats=6
|
||
|
||
# Профиль 4: Прочий TCP
|
||
--new \
|
||
--filter-tcp=~80,443 \
|
||
--dpi-desync=split \
|
||
--dpi-desync-split-pos=2 \
|
||
--dpi-desync-any-protocol=1
|
||
|
||
# Профиль 5: WireGuard
|
||
--new \
|
||
--filter-udp=51820 --filter-l7=wireguard \
|
||
--dpi-desync=fake,udplen \
|
||
--dpi-desync-udplen-increment=2
|
||
```
|
||
|
||
---
|
||
|
||
## 💡 Ключевые отличия
|
||
|
||
### HTTPS vs HTTP
|
||
- **HTTPS**: Работает с бинарным TLS, нужны `sni*` маркеры, `--fake-tls-mod`
|
||
- **HTTP**: Работает с текстом, можно менять регистр (`--hostcase`), маркеры `method`, `host`
|
||
|
||
### TCP vs UDP
|
||
- **TCP**: Sequence numbers, сегментация, syn/ack манипуляции
|
||
- **UDP**: Без состояния, `udplen`, специфичные фейки для протоколов
|
||
|
||
### Известные vs неизвестные протоколы
|
||
- **HTTP/TLS**: Автоопределение, маркеры работают
|
||
- **Прочие**: Нужен `--dpi-desync-any-protocol=1`, только числовые позиции split |