lt;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> | lt;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 (дефолт) ``` --- ## 🎭 Режим назначения 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 [email protected] # Кастомный пейлоад --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 \ [email protected] ``` --- ## 📡 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 [email protected] --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