# 15. Руководство по Zapret v1 (nfqws): Полная спецификация и рецепты ## 1. Архитектура и принцип работы `nfqws` (Zapret v1) Классический `nfqws` — это высокопроизводительный демон перехвата пакетов через Linux Netfilter Queue (`NFQUEUE`). Он работает на уровне ядра и L4/L7 сетевого стека, перехватывая исходящие TCP и UDP соединения до отправки в физический сетевой интерфейс и модифицируя структуру пакетов. --- ## 2. Основные параметры десинхронизации (`--dpi-desync`) В Zapret v1 режим десинхронизации задается флагом `--dpi-desync=<режим1>,<режим2>`. | Режим | Описание | Механика | |---|---|---| | `split2` | Деление пакета на 2 части | Пакет режется на 2 TCP-сегмента по указанной позиции. | | `disorder2` | Деление с обратной отправкой | Сегменты отправляются в порядке [хвост, голова]. | | `fake` | Инжекция фейкового пакета | Перед реальным запросом отправляется ложный payload с низким TTL. | | `multisplit` | Множественная фрагментация | Пакет делится на 3+ сегмента по списку позиций. | | `ipfrag2` | IP-фрагментация | Фрагментация на сетевом уровне L3 (IP-пакет делится на части). | | `syndata` | Данные в SYN пакете | Внедрение полезной нагрузки в первый TCP SYN пакет (TCP Fast Open). | --- ## 3. Позиционирование сплита (`--dpi-desync-split-pos`) Параметр `--dpi-desync-split-pos` определяет точное смещение (байт), по которому происходит разрезание TCP-сегмента: - `--dpi-desync-split-pos=1` — сплит на 1-м байте payload. Разрывает первый байт TLS Content Type (`0x16`). - `--dpi-desync-split-pos=2` — сплит на 2-м байте. Разрывает версию TLS (`0x0301`). - `--dpi-desync-split-pos=midsld` — сплит посередине доменного имени второго уровня в SNI. - `--dpi-desync-split-pos=sniext+4` — сплит в блоке TLS расширений. - `--dpi-desync-split-pos=1,midsld` — комбинированное разделение. --- ## 4. Перекрытие Sequence (`--dpi-desync-split-seqovl`) - `--dpi-desync-split-seqovl=1` или `2` — при сплите второй сегмент имеет начальный Sequence номер, заходящий на N байт назад (перекрывает конец первого сегмента). - ТСПУ видит коллизию данных в потоке и сбрасывает проверку, а сервер назначения корректно дедуплицирует байты по RFC 793. --- ## 5. Методы дурения ТСПУ (`--dpi-desync-fooling`) - `badseq` — отправка фейка с невалидным Sequence номером. - `md5sig` — добавление опции TCP MD5 signature, заставляющей DPI дропнуть фейк или пропустить сессию. - `badack` — невалидный номер подтверждения ACK. - `hopbyhop` — добавление IPv6 Hop-by-Hop extension header. --- ## 6. Проверенные рецепты для Zapret v1 ### 1. YouTube 4K / Web ```text --dpi-desync=fake,split2 --dpi-desync-split-pos=1 --dpi-desync-ttl=8 --dpi-desync-fooling=badseq ``` ### 2. RuTracker & Заблокированные HTTP/HTTPS ресурсы ```text --dpi-desync=disorder2 --dpi-desync-split-pos=1 --dpi-desync-fooling=badseq ``` ### 3. State-DPI Bypass (Перекрытие TCP Sequence) ```text --dpi-desync=split2 --dpi-desync-split-seqovl=1 --dpi-desync-fooling=badseq ```