Каждая публикуемая заметка получила callout-шапку со ссылкой на свою страницу wiki.zapret.moe (на самой вики она вырезается транформером RemoveMirrorCallout, видна только на зеркале Obsidian Publish и в Forgejo) и SEO-поле description — 1–2 предложения для meta description обоих сайтов. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
4.6 KiB
| date | tags | aliases | description | |||||
|---|---|---|---|---|---|---|---|---|
| 2026-01-21 |
|
|
Урок 06 по Zapret2: Lua pipeline — инстансы --lua-desync, синтаксис аргументов, вердикты PASS/DROP/MODIFY, cutoff и дебаг argdebug, posdebug. |
[!mirror] Резервное зеркало Актуальная версия этой страницы — на основной вики: wiki.zapret.moe/Zapret/manual/zapret2_06
Zapret2 для новичков — 06: Lua pipeline (инстансы, аргументы, дебаг)
Цель: понять, как читается строка --lua-desync=..., что такое “инстанс”, как данные переходят между функциями, и как дебажить без хаоса.
1) Инстанс: что это
Каждая опция --lua-desync=... создаёт инстанс:
- имя функции (например
fake) - набор аргументов (
desync.arg) - позиция в профиле (порядок выполнения)
Инстансы выполняются строго по порядку, в рамках активного профиля.
2) Синтаксис аргументов (важная мелочь)
Формат:
--lua-desync=function:arg1[=val1]:arg2[=val2]:flag3:flag4
Особенность:
- все значения — строки
- если
=valотсутствует, значение считается пустой строкой""(а это “true” в Lua)
Поэтому “флаги” пишутся как:
:optional,:nodrop,:tcp_ts_up,:ipfrag,:ipfrag_disorder
3) Как стандартные блоки “прикручиваются” к стратегиям
Большинство стратегий не реализуют “отправку” вручную. Они вызывают общий отправщик, который:
- делает deepcopy диссекта при необходимости
- применяет
apply_fooling(TTL/MD5/flags/…) - при необходимости режет payload по MSS
- применяет
ip_idполитику - затем может применить
ipfrag(L3 фрагментацию) - и в конце делает
rawsend
Из-за этого “standard args” работают согласованно и предсказуемо.
4) Вердикт и приоритет
Каждый инстанс возвращает:
PASS(ничего не блокировать)DROP(заблокировать перехваченный пакет)MODIFY(передать изменённый пакет)
Итоговый вердикт по пакету выбирается с приоритетом:
DROP > MODIFY > PASS.
Практический вывод:
- достаточно одного
DROP, чтобы оригинал не ушёл fakeможет отправить “доп. пакет”, но если оригинал не дропнут — он уйдёт
5) Cutoff: как перестать вызываться и сэкономить CPU
В zapret2 есть идея “самоотсечения”:
- инстанс может выключить себя (по направлению)
- или выключить весь Lua профиль (lua cutoff)
Это нужно, чтобы после “критической фазы” (например первых N пакетов) больше не тратить ресурсы на Lua.
6) 3 инструмента дебага (must-have)
argdebug
Печатает desync.arg текущего инстанса.
posdebug
Печатает счётчики conntrack (n/d/b/s/p) и статус reasm/decrypt/replay.
pktdebug
Печатает весь desync (много текста, но иногда незаменимо).
7) Мини‑рецепт “дебажим стратегию без каши”
- ограничить профиль по
--payload=...и--out-range=... - поставить
--lua-desync=posdebugпервым - поставить тестируемую стратегию
- при необходимости —
argdebugрядом
Так вы увидите:
- когда стратегия сработала
- на каком payload’е
- был ли reasm/replay
8) Что читать дальше
[[fake]],[[multisplit]],[[multidisorder]][[Zapret2 - Roadmap обучения]]