todo/Zapret2/preset.md
loop-uh baf0091fa3
Some checks failed
Published content check / validate (push) Failing after 17s
git.zapret.moe → git2.zapret.moe во всём хранилище, защита от возврата старых имён
git.zapret.moe в России заблокирован по имени, как и wiki.zapret.moe. Ссылки
на Forgejo во всех заметках, футерах, wizard.html и главной заменены на
git2.zapret.moe (включая закодированные адреса значков shields.io).

Какое имя рабочее, теперь решают реестры хоста /etc/zapret-*-domains.conf через
zapret-site-names: pre-commit хук vault отклоняет добавленные строки с
заблокированным именем, сборка Quartz сама переводит ссылки и baseUrl на
рабочие имена. Правило в AGENTS.md переписано под этот механизм.

scripts/wiki-stats.py: переходы с любых имён вики и git (wikiN, gitN) больше
не считаются внешними сайтами. content-check: проверка зеркал сторонних
проектов узнаёт любое имя git.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 15:51:32 -04:00

38 KiB
Raw Permalink Blame History

date tags link aliases description
пресет
конфиги
Пресеты (конфиги) в Zapret2 GUI: как устроен txt-файл с флагами winws2, блобы, профили для YouTube и Discord и полные примеры, включая Gaming.

[!mirror] Резервное зеркало Актуальная версия этой страницы — на основной вики: wiki2.zapret.moe/Zapret2/preset

Что такое пресеты в Zapret2 GUI?

Пресет (часто называемые конфигами) — это .txt файл(ы) с перечислением всех основные флаги Zapret2, которые можно использовать как вместо так и вместе с GUI (формат такой же как у winws2.exe, чтобы программы могли быстро считать и изменить настройки программы). Они доступны в программе начиная с Zapret2 v20.3 для режима Запрета 1 и Запрета 2.

Переход на них был оправдан тем чтобы быстрее разрабатывать новые пресеты, упростить обмен между людьми, а также привести и GUI и 🐳 Win 7 и 8 к одному виду.

Пресеты загружаются в ядро программы winws2.exe (для режима Zapret 2) или в winws.exe (для режима Zapret 1) через флаг @<config_file> — чтение опций командной строки из файла. все остальные опции из командной строки игнорируются.

Активный пресет заменяется в файл по пути %AppData%\ZapretTwoDev\preset-zapret2.txt. Он используется всегда и этот файл просто хранит активный пресет. Сам по себе пресетом не является. Все пресеты пользователя находятся в папке presets. По умолчанию используется пресет Default. Также существует стоковый пресет Gaming.

Note

Вы можете обмениваться напрямую этими пресетами, чтобы быстро изменить настройки программы. Для этого есть специальный раздел обращений.

[!WARNING] Почему пресеты плохи? По умолчанию в пресетах жёстко захардкоржены стратегии для каждой фильтра, и как следовательно для хостлиста (сайта). Это приводит к тому что один сайт на пресете загружается, а второй перестаёт работать. А на пресете номер 2 работает второй сайт, но не работает первый. Это проблема решается путём изучение и подбора стратегия для каждой категории и хостлиста отдельно. И называется она — прямой запуск. Подробнее о том, что настраивается внутри пресета — profile.

Структура пресета

Пресет делится на три логических части:

1. Заголовок и метаданные

# Preset: 1
# ActivePreset: 1
# Modified: 2026-01-22T16:09:12.572985

Служебная информация для GUI — номер пресета, активен ли он, когда изменён.

2. Глобальные настройки

--lua-init=@lua/zapret-lib.lua      # Библиотека хелперов
--lua-init=@lua/zapret-antidpi.lua  # Библиотека стратегий DPI-обхода
--lua-init=@lua/zapret-auto.lua     # Автоматизация и оркестрация
--lua-init=@lua/custom_funcs.lua    # Пользовательские функции
--lua-init=@lua/custom_diag.lua     # Диагностика

Это загрузка Lua-библиотек с готовыми функциями. Без них ничего работать не будет. Это нужно чтобы Вы не писали свои техники дурения, а использовали готовый набор. В частности это fake, multisplit, multidisorder и другие.

Дополнительные служебные флаги чтобы кэшировать hostlist'ы, а также правильнее отслеживать количества пакетов:

--ctrack-disable=0        # Включён connection tracking (отслеживание соединений)
--ipcache-lifetime=8400   # Кэш IP живёт 8400 секунд (~2.3 часа)
--ipcache-hostname=1      # Кэшировать hostname → IP

Далее следуют wf, на языке Zapret2 они имеют направление (-in, -out). По умолчанию (как правило) хватает только -out.

--wf-tcp-out=80,443,1080,2053,2083,2087,2096,8443  # Перехват TCP на этих портах
--wf-udp-out=80,443                                  # Перехват UDP
--wf-raw-part=@windivert.filter/...                  # Дополнительные фильтры windivert

Порты:

  • 80 — HTTP
  • 443 — HTTPS/QUIC
  • 1080 — SOCKS (часто использует Discord)
  • 2053, 2083, 2087, 2096, 8443 — альтернативные порты Discord для загрузки медиа-контента

3. blob (заготовки данных)

--blob=tls_google:@bin/tls_clienthello_www_google_com.bin
--blob=tls7:@bin/tls_clienthello_7.bin
--blob=fake_tls:@bin/fake_tls_1.bin
--blob=fake_default_udp:0x00000000000000000000000000000000

blob — это заранее подготовленные данные (для удобства в готовом пресете сразу перечисляются все блоб файлы. Это необязательно!):

  • tls_google — настоящий TLS ClientHello от google.com (для TTL-спуфинга)
  • tls1..tls18 — различные варианты ClientHello
  • fake_tls_* — поддельные пакеты для отправки в качестве фейков
  • quic_* — QUIC-пакеты
  • 0x00... — просто нулевые байты (hex-формат)

4. profile (стратегии обхода)

После глобальных настроек идут профили, разделённые --new. Каждый профиль — отдельная стратегия для определённого трафика (Создание своей категории).

ВАЖНО — профиль выше имеет приоритет и перезаписывает конфликтующие настройки снизу. Профиля выполняются сверху вниз, если сверху что-то написано, а снизу написано другое — то что написано снизу будет игнорироваться если правила указывают на один и тот же домен или сайт.

Профили могут быть любыми, однако для удобства по умолчанию в программе выставлен следующий порядок: YouTube -> Discord -> Голосовой трафик -> Остальные https сайты -> Игры (протокол UDP).

Профиль 1: YouTube (TCP)

--filter-tcp=80,443
--hostlist=lists/youtube.txt
--out-range=-d8
--lua-desync=multisplit:pos=2,midsld-2:seqovl=1:seqovl_pattern=tls7
Параметр Значение
--filter-tcp=80,443 Применять только к TCP портам 80 и 443
--hostlist=lists/youtube.txt Только для доменов из файла youtube.txt
--out-range=-d8 Работать только на первых 8 пакетах с данными
--lua-desync=multisplit:... Техника разрезания пакета

multisplit разрезает пакет на части:

  • pos=2,midsld-2 — позиции разреза: 2-й байт и середина домена второго уровня минус 2
  • seqovl=1 — sequence overlap на 1 байт (смещение TCP sequence)
  • seqovl_pattern=tls7 — паттерн для overlap берётся из блоба tls7

Профиль 2: YouTube QUIC (UDP)

--filter-udp=443
--ipset=lists/ipset-youtube.txt
--out-range=-n8
--payload=all
--lua-desync=fake:repeats=6:blob=fake_default_quic

Для QUIC нельзя фильтровать по домену (он зашифрован), поэтому используется ipset — список IP-адресов.

fake — отправка фейковых пакетов:

  • repeats=6 — отправить 6 фейков
  • blob=fake_default_quic — использовать стандартный QUIC-фейк

Профиль 3: Googlevideo

[!WARNING] ВАЖНО! Для CDN-серверов (*.googlevideo.com) используется отдельная стратегия. Подробнее об этом писали здесь. Это нужно чтобы применить разные техники дурения к разным серверам, чтобы не дать ТСПУ быстро распознать сигнатуры Zapret'a и уменьшить шанс на блокировку активной стратегии.

--filter-tcp=80,443
--hostlist-domains=googlevideo.com
--out-range=-d8
--lua-desync=multidisorder:pos=1,host+2,sld+2,sld+5,sniext+1,sniext+2,endhost-2:seqovl=1

multidisorder — как multisplit, но отправляет сегменты в обратном порядке. DPI часто ожидает пакеты по порядку и путается.

Позиции разреза используют маркеры:

  • host+2 — начало hostname + 2 байта
  • sld+2 — начало домена второго уровня + 2
  • sniext+1 — SNI extension + 1
  • endhost-2 — конец hostname - 2

Профиль 4: Discord (обычный)

--filter-tcp=80,443,1080,2053,2083,2087,2096,8443
--hostlist=lists/discord.txt
--out-range=-n10
--lua-desync=fake:blob=tls_google:repeats=6:tcp_ts=1000
--lua-desync=multidisorder_legacy:seqovl=652:seqovl_pattern=tls5

Комбинация двух техник lua-desync (или же фаз, их можно выбирать несколько):

  1. fake с blob=tls_google — отправить фейк, выглядящий как запрос к google.com
  2. multidisorder_legacy — старая версия disorder с большим seqovl=652

Профиль 5: Discord Media (сложный)

Это профиль для серверов с голосовыми каналами. Из-за специфичности их блокировки они также блокируются отдельно.

--filter-tcp=80,443,1080,2053,2083,2087,2096,8443
--hostlist-domains=discord.media
--out-range=-d8
--lua-desync=send:repeats=2
--lua-desync=syndata:blob=tls_google:ip_autottl=-2,3-20
--lua-desync=multisplit:pos=1:repeats=10:tcp_ack=-66000:tcp_ts_up:ip_ttl=4:ip6_ttl=4

Три техники подряд:

  1. send:repeats=2 — отправить оригинал 2 раза
  2. syndata — вложить данные в SYN-пакет с автоподбором TTL
  3. multisplit с низким TTL=4 (пакет дойдёт до ТСПУ, но не до сервера)

Важно, почему эта связка работает. multisplit блокирует оригинальный пакет, а все его сегменты «мёртвые» (TTL=4 и неверный tcp_ack), поэтому сервер получает данные только из копий, которые до этого отправил send. Для DPI нарезанные сегменты — дополнительные фейки. Если убрать send, сервер не получит ClientHello, пока клиент не передаст его повторно, уже без обработки, — разбор и проверка на стенде в multidisorder#9. Fooling применяется ко ВСЕМ сегментам. Та же схема (send + «мёртвый» multidisorder) используется ниже в «Примере 3», в профиле с --ipset-ip=130.255.77.28.

Профиль 6: STUN/Discord голос (UDP)

--filter-l7=stun,discord
--payload=stun,discord_ip_discovery
--out-range=-n8
--lua-desync=fake:blob=fake_default_udp

Для голосовых звонков Discord. Фильтрация по протоколу L7 (уровень приложения):

  • stun — протокол для NAT traversal
  • discord_ip_discovery — специфичный протокол Discord

Профиль 7-11: Остальные сервисы

Аналогичные техники для:

  • Конкретного IP 130.255.77.28
  • Списков other.txt, russia-blacklist.txt
  • Порно-сайтов (ipset-porn.txt)
  • Танки X (ipset-tankix.txt)

Основные техники (краткая справка)

Техника Описание
fake Отправить поддельный пакет перед настоящим
multisplit Разрезать пакет на части по указанным позициям
multidisorder Разрезать и отправить в обратном порядке
syndata Вложить данные в SYN-пакет
send Просто отправить пакет (с модификациями)
fakedsplit Разрезать с замешиванием фейков между частями

Итоговый пример

Итоговые ПОЛНЫЕ примеры txt файлов представлен ниже.

Пример 1

# Preset: 1
# ActivePreset: 1
# Modified: 2026-01-22T16:09:12.572985

--lua-init=@lua/zapret-lib.lua
--lua-init=@lua/zapret-antidpi.lua
--lua-init=@lua/zapret-auto.lua
--lua-init=@lua/custom_funcs.lua
--lua-init=@lua/custom_diag.lua
--ctrack-disable=0
--ipcache-lifetime=8400
--ipcache-hostname=1
--wf-tcp-out=80,443,1080,2053,2083,2087,2096,8443
--wf-udp-out=80,443
--wf-raw-part=@windivert.filter/windivert_part.discord_media.txt
--wf-raw-part=@windivert.filter/windivert_part.stun.txt
--wf-raw-part=@windivert.filter/windivert_part.wireguard.txt
--blob=tls_google:@bin/tls_clienthello_www_google_com.bin
--blob=tls1:@bin/tls_clienthello_1.bin
--blob=tls2:@bin/tls_clienthello_2.bin
--blob=tls2n:@bin/tls_clienthello_2n.bin
--blob=tls3:@bin/tls_clienthello_3.bin
--blob=tls4:@bin/tls_clienthello_4.bin
--blob=tls5:@bin/tls_clienthello_5.bin
--blob=tls6:@bin/tls_clienthello_6.bin
--blob=tls7:@bin/tls_clienthello_7.bin
--blob=tls8:@bin/tls_clienthello_8.bin
--blob=tls9:@bin/tls_clienthello_9.bin
--blob=tls10:@bin/tls_clienthello_10.bin
--blob=tls11:@bin/tls_clienthello_11.bin
--blob=tls12:@bin/tls_clienthello_12.bin
--blob=tls13:@bin/tls_clienthello_13.bin
--blob=tls14:@bin/tls_clienthello_14.bin
--blob=tls17:@bin/tls_clienthello_17.bin
--blob=tls18:@bin/tls_clienthello_18.bin
--blob=tls_sber:@bin/tls_clienthello_sberbank_ru.bin
--blob=tls_vk:@bin/tls_clienthello_vk_com.bin
--blob=tls_vk_kyber:@bin/tls_clienthello_vk_com_kyber.bin
--blob=tls_deepseek:@bin/tls_clienthello_chat_deepseek_com.bin
--blob=tls_max:@bin/tls_clienthello_max_ru.bin
--blob=tls_iana:@bin/tls_clienthello_iana_org.bin
--blob=tls_4pda:@bin/tls_clienthello_4pda_to.bin
--blob=tls_gosuslugi:@bin/tls_clienthello_gosuslugi_ru.bin
--blob=syndata3:@bin/tls_clienthello_3.bin
--blob=syn_packet:@bin/syn_packet.bin
--blob=dtls_w3:@bin/dtls_clienthello_w3_org.bin
--blob=quic_google:@bin/quic_initial_www_google_com.bin
--blob=quic_vk:@bin/quic_initial_vk_com.bin
--blob=quic1:@bin/quic_1.bin
--blob=quic2:@bin/quic_2.bin
--blob=quic3:@bin/quic_3.bin
--blob=quic4:@bin/quic_4.bin
--blob=quic5:@bin/quic_5.bin
--blob=quic6:@bin/quic_6.bin
--blob=quic7:@bin/quic_7.bin
--blob=quic_test:@bin/quic_test_00.bin
--blob=fake_tls:@bin/fake_tls_1.bin
--blob=fake_tls_1:@bin/fake_tls_1.bin
--blob=fake_tls_2:@bin/fake_tls_2.bin
--blob=fake_tls_3:@bin/fake_tls_3.bin
--blob=fake_tls_4:@bin/fake_tls_4.bin
--blob=fake_tls_5:@bin/fake_tls_5.bin
--blob=fake_tls_6:@bin/fake_tls_6.bin
--blob=fake_tls_7:@bin/fake_tls_7.bin
--blob=fake_tls_8:@bin/fake_tls_8.bin
--blob=fake_quic:@bin/fake_quic.bin
--blob=fake_quic_1:@bin/fake_quic_1.bin
--blob=fake_quic_2:@bin/fake_quic_2.bin
--blob=fake_quic_3:@bin/fake_quic_3.bin
--blob=fake_default_udp:0x00000000000000000000000000000000
--blob=http_req:@bin/http_iana_org.bin
--blob=hex_0e0e0f0e:0x0E0E0F0E
--blob=hex_0f0e0e0f:0x0F0E0E0F
--blob=hex_0f0f0f0f:0x0F0F0F0F
--blob=hex_00:0x00

--filter-tcp=80,443
--hostlist=lists/youtube.txt
--out-range=-d8
--lua-desync=multisplit:pos=2,midsld-2:seqovl=1:seqovl_pattern=tls7

--new

--filter-udp=443
--ipset=lists/ipset-youtube.txt
--out-range=-n8
--payload=all
--lua-desync=fake:repeats=6:blob=fake_default_quic

--new

--filter-tcp=80,443
--hostlist-domains=googlevideo.com
--out-range=-d8
--lua-desync=multidisorder:pos=1,host+2,sld+2,sld+5,sniext+1,sniext+2,endhost-2:seqovl=1

--new

--filter-tcp=443
--hostlist-domains=updates.discord.com
--out-range=-d10
--lua-desync=multidisorder:pos=1,host+2,sld+2,sld+5,sniext+1,sniext+2,endhost-2:seqovl=1

--new

--filter-tcp=80,443,1080,2053,2083,2087,2096,8443
--hostlist=lists/discord.txt
--out-range=-n10
--lua-desync=fake:blob=tls_google:repeats=6:tcp_ts=1000
--lua-desync=multidisorder_legacy:seqovl=652:seqovl_pattern=tls5

--new

--filter-tcp=80,443,1080,2053,2083,2087,2096,8443
--hostlist-domains=discord.media
--out-range=-d8
--lua-desync=send:repeats=2
--lua-desync=syndata:blob=tls_google:ip_autottl=-2,3-20
--lua-desync=multisplit:pos=1:repeats=10:tcp_ack=-66000:tcp_ts_up:ip_ttl=4:ip6_ttl=4

--new

--filter-l7=stun,discord
--payload=stun,discord_ip_discovery
--out-range=-n8
--lua-desync=fake:blob=fake_default_udp

--new

--filter-tcp=80,443
--ipset-ip=130.255.77.28
--out-range=-d9
--lua-desync=multidisorder:pos=1,host+2,sld+2,sld+5,sniext+1,sniext+2,endhost-2:seqovl=1

--new

--filter-tcp=443
--hostlist-exclude=lists/netrogat.txt
--hostlist=lists/other.txt
--hostlist=lists/other2.txt
--hostlist=lists/russia-blacklist.txt
--out-range=-n10
--lua-desync=send:repeats=2
--lua-desync=syndata:blob=tls_google
--lua-desync=fake:blob=tls_google:repeats=6:tcp_ts=1000
--lua-desync=multidisorder:pos=1,host+2,sld+2,sld+5,sniext+1,sniext+2,endhost-2:seqovl=1

--new

--filter-tcp=80,443
--ipset=lists/ipset-porn.txt
--out-range=-n8
--lua-desync=send:repeats=2
--lua-desync=syndata:blob=tls_google
--lua-desync=fake:blob=fake_default_http:repeats=4:ip_autottl=2,3-20:ip6_autottl=2,3-20:tcp_md5
--lua-desync=multidisorder:pos=host+1

--new

--filter-tcp=80,443
--ipset=lists/ipset-tankix.txt
--out-range=-n8
--lua-desync=fake:blob=fake_default_http:repeats=4:ip_autottl=2,3-20:ip6_autottl=2,3-20:tcp_md5
--lua-desync=multidisorder:pos=host+1

Пример 2

# Preset: 1
# Created: 2026-01-21T19:15:55.706763
# Modified: 2026-01-21T19:15:55.707605
# Description: 

--lua-init=@lua/zapret-lib.lua
--lua-init=@lua/zapret-antidpi.lua
--lua-init=@lua/zapret-auto.lua
--lua-init=@lua/custom_funcs.lua
--lua-init=@lua/custom_diag.lua
--ctrack-disable=0
--ipcache-lifetime=8400
--ipcache-hostname=1
--wf-tcp-out=80,443,1080,2053,2083,2087,2096,8443
--wf-udp-out=80,443
--wf-raw-part=@windivert.filter/windivert_part.discord_media.txt
--wf-raw-part=@windivert.filter/windivert_part.stun.txt
--wf-raw-part=@windivert.filter/windivert_part.wireguard.txt
--blob=tls_google:@bin/tls_clienthello_www_google_com.bin
--blob=tls1:@bin/tls_clienthello_1.bin
--blob=tls2:@bin/tls_clienthello_2.bin
--blob=tls2n:@bin/tls_clienthello_2n.bin
--blob=tls3:@bin/tls_clienthello_3.bin
--blob=tls4:@bin/tls_clienthello_4.bin
--blob=tls5:@bin/tls_clienthello_5.bin
--blob=tls6:@bin/tls_clienthello_6.bin
--blob=tls7:@bin/tls_clienthello_7.bin
--blob=tls8:@bin/tls_clienthello_8.bin
--blob=tls9:@bin/tls_clienthello_9.bin
--blob=tls10:@bin/tls_clienthello_10.bin
--blob=tls11:@bin/tls_clienthello_11.bin
--blob=tls12:@bin/tls_clienthello_12.bin
--blob=tls13:@bin/tls_clienthello_13.bin
--blob=tls14:@bin/tls_clienthello_14.bin
--blob=tls17:@bin/tls_clienthello_17.bin
--blob=tls18:@bin/tls_clienthello_18.bin
--blob=tls_sber:@bin/tls_clienthello_sberbank_ru.bin
--blob=tls_vk:@bin/tls_clienthello_vk_com.bin
--blob=tls_vk_kyber:@bin/tls_clienthello_vk_com_kyber.bin
--blob=tls_deepseek:@bin/tls_clienthello_chat_deepseek_com.bin
--blob=tls_max:@bin/tls_clienthello_max_ru.bin
--blob=tls_iana:@bin/tls_clienthello_iana_org.bin
--blob=tls_4pda:@bin/tls_clienthello_4pda_to.bin
--blob=tls_gosuslugi:@bin/tls_clienthello_gosuslugi_ru.bin
--blob=syndata3:@bin/tls_clienthello_3.bin
--blob=syn_packet:@bin/syn_packet.bin
--blob=dtls_w3:@bin/dtls_clienthello_w3_org.bin
--blob=quic_google:@bin/quic_initial_www_google_com.bin
--blob=quic_vk:@bin/quic_initial_vk_com.bin
--blob=quic1:@bin/quic_1.bin
--blob=quic2:@bin/quic_2.bin
--blob=quic3:@bin/quic_3.bin
--blob=quic4:@bin/quic_4.bin
--blob=quic5:@bin/quic_5.bin
--blob=quic6:@bin/quic_6.bin
--blob=quic7:@bin/quic_7.bin
--blob=quic_test:@bin/quic_test_00.bin
--blob=fake_tls:@bin/fake_tls_1.bin
--blob=fake_tls_1:@bin/fake_tls_1.bin
--blob=fake_tls_2:@bin/fake_tls_2.bin
--blob=fake_tls_3:@bin/fake_tls_3.bin
--blob=fake_tls_4:@bin/fake_tls_4.bin
--blob=fake_tls_5:@bin/fake_tls_5.bin
--blob=fake_tls_6:@bin/fake_tls_6.bin
--blob=fake_tls_7:@bin/fake_tls_7.bin
--blob=fake_tls_8:@bin/fake_tls_8.bin
--blob=fake_quic:@bin/fake_quic.bin
--blob=fake_quic_1:@bin/fake_quic_1.bin
--blob=fake_quic_2:@bin/fake_quic_2.bin
--blob=fake_quic_3:@bin/fake_quic_3.bin
--blob=fake_default_udp:0x00000000000000000000000000000000
--blob=http_req:@bin/http_iana_org.bin
--blob=hex_0e0e0f0e:0x0E0E0F0E
--blob=hex_0f0e0e0f:0x0F0E0E0F
--blob=hex_0f0f0f0f:0x0F0F0F0F
--blob=hex_00:0x00

--filter-tcp=80,443
--hostlist=lists/youtube.txt
--out-range=-d8
--lua-desync=multisplit:pos=2,midsld-2:seqovl=1:seqovl_pattern=tls7

--new

--filter-udp=443
--ipset=lists/ipset-youtube.txt
--out-range=-n8
--payload=all
--lua-desync=fake:repeats=6:blob=fake_default_quic

--new

--filter-tcp=80,443
--hostlist-domains=googlevideo.com
--out-range=-d8
--lua-desync=multidisorder:pos=1,host+2,sld+2,sld+5,sniext+1,sniext+2,endhost-2:seqovl=1

--new

--filter-tcp=443
--hostlist-domains=updates.discord.com
--out-range=-d10
--lua-desync=multidisorder:pos=1,host+2,sld+2,sld+5,sniext+1,sniext+2,endhost-2:seqovl=1

--new

--filter-tcp=80,443,1080,2053,2083,2087,2096,8443
--hostlist=lists/discord.txt
--out-range=-n10
--lua-desync=send:repeats=2
--lua-desync=syndata:blob=tls_google
--lua-desync=fake:blob=tls7:tcp_ack=-66000:tcp_ts_up:tls_mod=rnd
--lua-desync=multisplit:seqovl=700:seqovl_pattern=tls_google:tcp_flags_unset=ack

--new

--filter-tcp=80,443,1080,2053,2083,2087,2096,8443
--hostlist-domains=discord.media
--out-range=-d8
--lua-desync=send:repeats=2
--lua-desync=syndata:blob=tls_google:ip_autottl=-2,3-20
--lua-desync=multisplit:pos=1:repeats=10:tcp_ack=-66000:tcp_ts_up:ip_ttl=4:ip6_ttl=4

--new

--filter-l7=stun,discord
--payload=stun,discord_ip_discovery
--out-range=-n8
--lua-desync=fake:blob=fake_default_udp

--new

--filter-tcp=80,443
--ipset-ip=130.255.77.28
--out-range=-d9
--lua-desync=multidisorder:pos=1,host+2,sld+2,sld+5,sniext+1,sniext+2,endhost-2:seqovl=1

--new

--filter-tcp=443
--hostlist-exclude=lists/netrogat.txt
--hostlist=lists/other.txt
--hostlist=lists/other2.txt
--hostlist=lists/russia-blacklist.txt
--out-range=-n10
--lua-desync=send:repeats=2
--lua-desync=syndata:blob=tls_google
--lua-desync=hostfakesplit:host=ozon.ru:tcp_ts=-1000:tcp_md5:repeats=4

--new

--filter-tcp=80,443
--ipset=lists/ipset-tankix.txt
--out-range=-n8
--lua-desync=fake:blob=fake_default_http:repeats=4:ip_autottl=2,3-20:ip6_autottl=2,3-20:tcp_md5
--lua-desync=multidisorder:pos=host+1

Пример 3 (игровой для игр)

# Preset: Gaming
# ActivePreset: Gaming

--lua-init=@lua/zapret-lib.lua
--lua-init=@lua/zapret-antidpi.lua
--lua-init=@lua/zapret-auto.lua
--lua-init=@lua/custom_funcs.lua
--ipcache-lifetime=8400
--ipcache-hostname=1 
--wf-tcp-out=80,444-65535
--wf-udp-out=80,444-65535
--wf-raw-part=@windivert.filter/windivert_part.discord_media.txt
--wf-raw-part=@windivert.filter/windivert_part.stun.txt
--wf-raw-part=@windivert.filter/windivert_part.wireguard.txt
--blob=tls_google:@bin/tls_clienthello_www_google_com.bin
--blob=tls1:@bin/tls_clienthello_1.bin
--blob=tls2:@bin/tls_clienthello_2.bin
--blob=tls2n:@bin/tls_clienthello_2n.bin
--blob=tls3:@bin/tls_clienthello_3.bin
--blob=tls4:@bin/tls_clienthello_4.bin
--blob=tls5:@bin/tls_clienthello_5.bin
--blob=tls6:@bin/tls_clienthello_6.bin
--blob=tls7:@bin/tls_clienthello_7.bin
--blob=tls8:@bin/tls_clienthello_8.bin
--blob=tls9:@bin/tls_clienthello_9.bin
--blob=tls10:@bin/tls_clienthello_10.bin
--blob=tls11:@bin/tls_clienthello_11.bin
--blob=tls12:@bin/tls_clienthello_12.bin
--blob=tls13:@bin/tls_clienthello_13.bin
--blob=tls14:@bin/tls_clienthello_14.bin
--blob=tls17:@bin/tls_clienthello_17.bin
--blob=tls18:@bin/tls_clienthello_18.bin
--blob=tls_sber:@bin/tls_clienthello_sberbank_ru.bin
--blob=tls_vk:@bin/tls_clienthello_vk_com.bin
--blob=tls_vk_kyber:@bin/tls_clienthello_vk_com_kyber.bin
--blob=tls_deepseek:@bin/tls_clienthello_chat_deepseek_com.bin
--blob=tls_max:@bin/tls_clienthello_max_ru.bin
--blob=tls_iana:@bin/tls_clienthello_iana_org.bin
--blob=tls_4pda:@bin/tls_clienthello_4pda_to.bin
--blob=tls_gosuslugi:@bin/tls_clienthello_gosuslugi_ru.bin
--blob=syndata3:@bin/tls_clienthello_3.bin
--blob=syn_packet:@bin/syn_packet.bin
--blob=dtls_w3:@bin/dtls_clienthello_w3_org.bin
--blob=quic_google:@bin/quic_initial_www_google_com.bin
--blob=quic_vk:@bin/quic_initial_vk_com.bin
--blob=quic1:@bin/quic_1.bin
--blob=quic2:@bin/quic_2.bin
--blob=quic3:@bin/quic_3.bin
--blob=quic4:@bin/quic_4.bin
--blob=quic5:@bin/quic_5.bin
--blob=quic6:@bin/quic_6.bin
--blob=quic7:@bin/quic_7.bin
--blob=quic_test:@bin/quic_test_00.bin
--blob=fake_tls:@bin/fake_tls_1.bin
--blob=fake_tls_1:@bin/fake_tls_1.bin
--blob=fake_tls_2:@bin/fake_tls_2.bin
--blob=fake_tls_3:@bin/fake_tls_3.bin
--blob=fake_tls_4:@bin/fake_tls_4.bin
--blob=fake_tls_5:@bin/fake_tls_5.bin
--blob=fake_tls_6:@bin/fake_tls_6.bin
--blob=fake_tls_7:@bin/fake_tls_7.bin
--blob=fake_tls_8:@bin/fake_tls_8.bin
--blob=fake_quic:@bin/fake_quic.bin
--blob=fake_quic_1:@bin/fake_quic_1.bin
--blob=fake_quic_2:@bin/fake_quic_2.bin
--blob=fake_quic_3:@bin/fake_quic_3.bin
--blob=fake_default_udp:0x00000000000000000000000000000000
--blob=http_req:@bin/http_iana_org.bin
--blob=hex_0e0e0f0e:0x0E0E0F0E
--blob=hex_0f0e0e0f:0x0F0E0E0F
--blob=hex_0f0f0f0f:0x0F0F0F0F
--blob=hex_00:0x00

--filter-tcp=80,443
--ipset=lists/ipset-youtube.txt
--out-range=-n8
--lua-desync=send:repeats=2
--lua-desync=syndata:blob=tls_google:ip_autottl=-2,3-20
--lua-desync=multidisorder_legacy:pos=1,midsld

--new

--filter-udp=443
--ipset=lists/ipset-youtube.txt
--out-range=-n8
--payload=all
--lua-desync=fake:repeats=6:blob=fake_default_quic

--new

--filter-tcp=80,443,1080,2053,2083,2087,2096,8443
--ipset=lists/ipset-discord.txt
--out-range=-n8
--lua-desync=send:repeats=2
--lua-desync=syndata:blob=tls_google:ip_autottl=-2,3-20
--lua-desync=multidisorder_legacy:pos=1,midsld

--new

--filter-l7=stun,discord
--payload=stun,discord_ip_discovery
--out-range=-n8
--lua-desync=fake:blob=quic_google:ip_autottl=-2,3-20:ip6_autottl=-2,3-20:payload=all:repeats=10

--new

--filter-tcp=80,443
--ipset=lists/ipset-telegram.txt
--out-range=-n8
--lua-desync=send:repeats=2
--lua-desync=syndata:blob=tls_google:ip_autottl=-2,3-20
--lua-desync=pass

--new

--filter-tcp=80,443
--ipset-ip=130.255.77.28
--out-range=-n20
--lua-desync=send:repeats=2
--lua-desync=syndata:blob=tls_google:ip_autottl=-2,3-20
--lua-desync=fake:blob=tls14:tcp_ack=-66000:tcp_ts_up:ip_autottl=-1,3-20:ip6_autottl=-1,3-20:tls_mod=rnd,dupsid,sni=fonts.google.com
--lua-desync=multidisorder:pos=7,sld+1:tcp_ack=-66000:tcp_ts_up:ip_autottl=-1,3-20:ip6_autottl=-1,3-20

--new

--filter-tcp=80,443
--hostlist=lists/roblox.txt
--out-range=-n8
--lua-desync=send:repeats=2
--lua-desync=syndata:blob=tls_google:ip_autottl=-2,3-20
--lua-desync=fake:blob=tls_google:tcp_ts=1:repeats=8:payload=tls_client_hello
--lua-desync=multisplit:pos=1:seqovl=681:seqovl_pattern=tls_google:payload=tls_client_hello

--new

--filter-udp=443,49152-65535
--ipset=lists/ipset-roblox.txt
--out-range=-n8
--payload=all
--lua-desync=fake:blob=quic_google:ip_autottl=-2,3-20:ip6_autottl=-2,3-20:payload=all:repeats=10

--new

--filter-tcp=80,443-65535
--ipset=lists/russia-youtube-rtmps.txt
--ipset=lists/ipset-all.txt
--ipset=lists/ipset-base.txt
--ipset=lists/ipset-discord.txt
--ipset-exclude=lists/ipset-dns.txt
--out-range=-n8
--lua-desync=send:repeats=2
--lua-desync=syndata:blob=tls_google:ip_autottl=-2,3-20
--lua-desync=multisplit:seqovl=700:seqovl_pattern=tls_google:tcp_flags_unset=ack

--new

--filter-udp=*
--ipset=lists/ipset-all.txt
--ipset=lists/ipset-base.txt
--ipset=lists/cloudflare-ipset.txt
--ipset=lists/ipset-cloudflare1.txt
--ipset=lists/ipset-cloudflare.txt
--ipset-exclude=lists/ipset-dns.txt
--out-range=-n8
--payload=all
--lua-desync=fake:blob=quic_google:ip_autottl=-2,3-20:ip6_autottl=-2,3-20:payload=all:repeats=10

Тот же пресет в виде .bat-файла

Пресет — это те же самые флаги winws2.exe, только записанные в текстовый файл по одному на строку. Поэтому любой пресет можно превратить в обычный .bat-файл и запускать winws2.exe напрямую, без GUI, и наоборот: готовую командную строку из .bat можно разложить по строкам в текстовый файл и передать winws2.exe через @файл. Чтобы такой файл подхватил GUI, ему обычно нужны ещё служебные строки-комментарии в начале (# Preset: …, см. «Заголовок и метаданные»). Меняется только обвязка, логика profile остаётся прежней.

В .bat появляется несколько элементов, которых нет в .txt-пресете:

  • start "zapret: http,https,quic" /min запускает winws2.exe в отдельном свёрнутом окне с заголовком из кавычек;
  • %~dp0 — папка, в которой лежит сам .bat. Через неё записываются пути к Lua-скриптам, блобам и спискам, чтобы файл работал из любого места;
  • ^ в конце строки переносит команду на следующую строку. Вся команда для Windows остаётся одной строкой, перенос нужен только для читаемости;
  • @ перед путём в --lua-init=@"…" и --blob=имя:@"…" означает «прочитать содержимое из файла», а не использовать строку как есть.

Ниже пример такого запуска с шестью профилями, разделёнными --new. Сначала идёт общая часть: wf решают, какой трафик WinDivert вообще передаст в программу, --lua-init подключает библиотеки стратегий и перенастраивает blob fake_default_tls (tls_mod со случайными данными и случайным SNI), --blob загружает QUIC-фейк из файла. Затем каждый профиль выбирает свой трафик filter --filter-tcp/--filter-udp/--filter-l7 и хостлистом, ограничивает момент срабатывания через payload и out-range и задаёт технику через desync.

start "zapret: http,https,quic" /min "%~dp0winws2.exe" ^
--wf-tcp-out=80,443 ^
--lua-init=@"%~dp0lua\zapret-lib.lua" --lua-init=@"%~dp0lua\zapret-antidpi.lua" ^
--lua-init="fake_default_tls = tls_mod(fake_default_tls,'rnd,rndsni')" ^
--blob=quic_google:@"%~dp0files\quic_initial_www_google_com.bin" ^
--wf-raw-part=@"%~dp0windivert.filter\windivert_part.discord_media.txt" ^
--wf-raw-part=@"%~dp0windivert.filter\windivert_part.stun.txt" ^
--wf-raw-part=@"%~dp0windivert.filter\windivert_part.wireguard.txt" ^
--wf-raw-part=@"%~dp0windivert.filter\windivert_part.quic_initial_ietf.txt" ^
--filter-tcp=80 --filter-l7=http ^
  --out-range=-d10 ^
  --payload=http_req ^
   --lua-desync=fake:blob=fake_default_http:ip_autottl=-2,3-20:ip6_autottl=-2,3-20:tcp_md5 ^
   --lua-desync=fakedsplit:ip_autottl=-2,3-20:ip6_autottl=-2,3-20:tcp_md5 ^
  --new ^
--filter-tcp=443 --filter-l7=tls --hostlist="%~dp0files\list-youtube.txt" ^
  --out-range=-d10 ^
  --payload=tls_client_hello ^
   --lua-desync=fake:blob=fake_default_tls:tcp_md5:repeats=11:tls_mod=rnd,dupsid,sni=www.google.com ^
   --lua-desync=multidisorder:pos=1,midsld ^
  --new ^
--filter-tcp=443 --filter-l7=tls ^
  --out-range=-d10 ^
  --payload=tls_client_hello ^
   --lua-desync=fake:blob=fake_default_tls:tcp_md5:tcp_seq=-10000:repeats=6 ^
   --lua-desync=multidisorder:pos=midsld ^
  --new ^
--filter-udp=443 --filter-l7=quic --hostlist="%~dp0files\list-youtube.txt" ^
  --out-range=-d10 ^
  --payload=quic_initial ^
   --lua-desync=fake:blob=quic_google:repeats=11 ^
  --new ^
--filter-udp=443 --filter-l7=quic ^
  --out-range=-d10 ^
  --payload=quic_initial ^
   --lua-desync=fake:blob=fake_default_quic:repeats=11 ^
  --new ^
--filter-l7=wireguard,stun,discord ^
  --out-range=-d10 ^
  --payload=wireguard_initiation,wireguard_cookie,stun,discord_ip_discovery ^
   --lua-desync=fake:blob=0x00000000000000000000000000000000:repeats=2

Что делает каждый профиль, по порядку:

  1. HTTP на порту 80. Перед запросом отправляется фейковый HTTP-запрос (fake), затем настоящий режется с подмешиванием фейков (fakedsplit). Фейки «умирают» до сервера за счёт ip_autottl=-2 (TTL на два хопа меньше пути) и tcp_md5, см. основные флаги.
  2. TLS для YouTube по хостлисту. 11 фейковых ClientHello с подменённым SNI www.google.com, затем настоящий ClientHello режется на три части и отправляется в обратном порядке (multidisorder).
  3. TLS для всего остального. Шесть фейков с tcp_md5 и сдвинутым номером последовательности и разрез по середине домена второго уровня. Профиль стоит после YouTube, поэтому ловит всё, что не попало в хостлист: выигрывает первый подходящий профиль, см. profile-independence.
  4. QUIC для YouTube. 11 фейковых QUIC Initial из заранее записанного пакета к www.google.com.
  5. QUIC для остальных сайтов. То же со встроенным блобом fake_default_quic.
  6. WireGuard, STUN и Discord. Два пакета из нулей перед каждым пакетом этих типов в пределах первых десяти пакетов с данными (--out-range=-d10). Порты не указаны, потому что такой трафик распознаётся по содержимому, а до программы его доводят --wf-raw-part-фильтры из общей части.

[!warning] Устаревшее имя payload в старых копиях примера В ранних копиях этого примера в последнем профиле стояло --payload=…,stun_binding_req,…. Такой тип был в первых версиях nfqws2, но в v0.4 его убрали и заменили общим stun (запись «remove stun_binding_req, replace to stun» в docs/changes.txt репозитория zapret2). Текущие версии на неизвестное имя в --payload отвечают Invalid payload filter и завершаются сразу при запуске, поэтому в примере выше уже стоит stun. Список допустимых типов — в payload.


[!quote] 🤖 Эти статьи открыты — можно обучать на них ИИ При желании вы можете натренировать ИИ на наших статьях. Исходное форматирование доступно в Forgejo: исходник этой заметки · скачать весь репозиторий одним zip-архивом.