diff --git a/docs/readme.md b/docs/readme.md index 477b695..dd18308 100644 --- a/docs/readme.md +++ b/docs/readme.md @@ -1,4 +1,4 @@ -# zapret v70.7 +# zapret v71 # ВНИМАНИЕ, остерегайтесь мошенников @@ -25,7 +25,10 @@ zapret является свободным и open source. - [TCP СЕГМЕНТАЦИЯ](#tcp-сегментация) - [ПЕРЕКРЫТИЕ SEQUENCE NUMBERS](#перекрытие-sequence-numbers) - [СПЕЦИФИЧЕСКИЕ РЕЖИМЫ IPV6](#специфические-режимы-ipv6) + - [МОДИФИКАЦИЯ ОРИГИНАЛА](#модификация-оригинала) + - [ДУБЛИКАТЫ](#дубликаты) - [КОМБИНИРОВАНИЕ МЕТОДОВ ДЕСИНХРОНИЗАЦИИ](#комбинирование-методов-десинхронизации) + - [КЭШ IP](#кэш-ip) - [РЕАКЦИЯ DPI НА ОТВЕТ СЕРВЕРА](#реакция-dpi-на-ответ-сервера) - [РЕЖИМ SYNACK](#режим-synack) - [РЕЖИМ SYNDATA](#режим-syndata) @@ -169,10 +172,30 @@ dvtws, собираемый из тех же исходников (см. [док --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= ; время жизни записей кэша IP в секундах. 0 - без ограничений. +--ipcache-hostname=[0|1] ; 1 или отсутствие аргумента включают кэширование имен хостов для применения в стратегиях нулевой фазы --wsize=[:] ; менять tcp window size на указанный размер в SYN,ACK. если не задан scale_factor, то он не меняется (устарело !) --wssize=[:] ; менять tcp window size на указанный размер в исходящих пакетах. scale_factor по умолчанию 0. (см. conntrack !) --wssize-cutoff=[n|d|s]N ; изменять server window size в исходящих пакетах (n), пакетах данных (d), относительных sequence (s) по номеру меньше N ---ctrack-timeouts=S:E:F[:U] ; таймауты внутреннего conntrack в состояниях SYN, ESTABLISHED, FIN, таймаут udp. по умолчанию 60:300:60:60 +--orig-ttl= ; модифицировать TTL оригинального пакета +--orig-ttl6= ; модифицировать ipv6 hop limit оригинальных пакетов. если не указано, используется значение --orig-ttl +--orig-autottl=[[:[-]]] ; режим auto ttl для ipv4 и ipv6. по умолчанию: +5:3-64. delta=0 отключает функцию +--orig-autottl6=[[:[-]]] ; переопределение предыдущего параметра для ipv6 +--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= ; высылать N дубликатов до оригинала +--dup-replace=[0|1] ; 1 или отсутствие аргумента блокирует отправку оригинала. отправляются только дубликаты. +--dup-ttl= ; модифицировать TTL дубликатов +--dup-ttl6= ; модифицировать ipv6 hop limit дубликатов. если не указано, используется значение --dup-ttl +--dup-autottl=[[:[-]]] ; режим auto ttl для ipv4 и ipv6. по умолчанию: +1:3-64. delta=0 отключает функцию +--dup-autottl6=[[:[-]]] ; переопределение предыдущего параметра для ipv6 +--dup-fooling= ; дополнительные методики как сделать, чтобы дубликат не дошел до сервера. none md5sig badseq badsum datanoack hopbyhop hopbyhop2 +--dup-badseq-increment= ; инкремент sequence number для badseq. по умолчанию -10000 +--dup-badack-increment= ; инкремент ack sequence number для badseq. по умолчанию -66000 +--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" @@ -181,7 +204,7 @@ dvtws, собираемый из тех же исходников (см. [док --dpi-desync=[,][, ; бит fwmark для пометки десинхронизирующих пакетов, чтобы они повторно не падали в очередь. default = 0x40000000 --dpi-desync-ttl= ; установить ttl для десинхронизирующих пакетов ---dpi-desync-ttl6= ; установить ipv6 hop limit для десинхронизирующих пакетов. если не указано, используется значение ttl +--dpi-desync-ttl6= ; установить ipv6 hop limit для десинхронизирующих пакетов. если не указано, используется значение --dpi-desync-ttl --dpi-desync-autottl=[[:[-]]] ; режим auto ttl для ipv4 и ipv6. по умолчанию: 1:3-20. delta=0 отключает функцию. --dpi-desync-autottl6=[[:[-]]] ; переопределение предыдущего параметра для ipv6 --dpi-desync-fooling= ; дополнительные методики как сделать, чтобы фейковый пакет не дошел до сервера. none md5sig badseq badsum datanoack hopbyhop hopbyhop2 @@ -450,16 +473,68 @@ extension хедерам в поисках транспортного хедер При `hopbyhop,ipfrag2` последовательность хедеров будет : `ipv6,hop-by-hop`,`fragment`,`tcp/udp`. Режим `ipfrag1` может срабатывать не всегда без специальной подготовки. См. раздел `IP фрагментация`. +### МОДИФИКАЦИЯ ОРИГИНАЛА + +Параметры `--orig-ttl` и `--orig-ttl6` позволяют изменить TTL оригинальных пакетов. +Если дальнейшие манипуляции связаны с оригиналом, например, идет TCP сегментация, то исходными +данными являются измененные оригинальные пакеты. То есть в данном примере TCP сегменты пойдут с измененным TTL. + +Вариант `--orig-autottl` и `--orig-autottl6` работает аналогично `dpi-desync-autottl`, но по оригинальным пакетам. +Дельту стоит указывать положительную с унарным знаком `+`, иначе оригинал не дойдет до сервера, и вы вообще ничего не получите. +Пример : `--orig-autottl=+5:3-64`. + +`--orig-mod-start` и `--orig-mod-cutoff` задают ограничитель по началу и концу модификации оригинала. +Схема аналогична `--dpi-desync-start` и `--dpi-desync-cutoff`. + +Функция может быть полезна, когда DPI охотится за фейками и блокирует соединение при наличии подозрительных признаков, +в частности, измененный TTL. + +### ДУБЛИКАТЫ + +Дубликаты - это копии оригинальных пакетов, высылаемые перед ними. Включаются параметром `--dup=N`, где N - количество дублей, +не включающее оригинал. `--dup-replace` отключает отсылку оригинала. + +Отсылка дублей имеет место только в тех случаях, когда высылается и оригинал без реконструкции. +Например, если случилась TCP сегментация, то оригинал фактически дропается и заменяется искусственно сконструированными сегментами. +Дубли высланы не будут. Это же касается изменения состава хедеров ipv6, режима tamper для DHT и других. + +Возможно применение всех вариантов дурения, как и для desync : `--dup-ttl`. `--dup-ttl6`, `--dup-fooling`. Нужно ли, чтобы эти пакеты доходили до сервера и в каком виде, решаете вы согласно задуманной стратегии. + +Вариант `--dup-autottl` и `--dup-autottl6` работает аналогично `dpi-desync-autottl`, но по оригинальным пакетам. +Дельту стоит указывать можно положительную с унарным знаком `+`, а можно и отрицательную. Зависит от вашей задумки. +Пример : `--dup-autottl=-2:3-64`. + +`--dup-start` и `--dup-cutoff` задают ограничитель по началу и концу применения стратегии дубликатов. +Схема аналогична `--dpi-desync-start` и `--dpi-desync-cutoff`. + +Функция может помочь, когда DPI сечет разницу в характеристиках фейков и оригинала. +Дубликатами можно попытаться заставить DPI принять , что весь сеанс идет аномальным. +Например, у нас имеется TCP сеанс с MD5 сразу с первого SYN пакета. Значит последующие MD5 будут восприниматься нормально. + ### КОМБИНИРОВАНИЕ МЕТОДОВ ДЕСИНХРОНИЗАЦИИ В параметре dpi-desync можно указать до 3 режимов через запятую. -* 0 фаза - предполагает работу на этапе установления соединения : `synack`, `syndata`, `--wsize`, `--wssize`. На эту фазу не действуют фильтры по [hostlist](#множественные-стратегии). +* 0 фаза - предполагает работу на этапе установления соединения : `synack`, `syndata`, `--wsize`, `--wssize`. На эту фазу не действуют фильтры по [hostlist](#множественные-стратегии), кроме случая, описанного [далее](#кэш-ip). * 1 фаза - отсылка чего-либо до оригинального пакета данных : `fake`, `rst`, `rstack`. * 2 фаза - отсылка в модифицированном виде оригинального пакета данных (например, `fakedsplit` или `ipfrag2`). Режимы требуют указания в порядке возрастания номеров фаз. +### КЭШ IP + +ipcache представляет собой структуру в памяти процесса, позволяющую по ключу IP адреса и имени интерфейса запоминать некоторую информацию, +которую впоследствии можно извлечь и использовать как недостающие данные. На текущий момент это применяются в следующих ситуациях : + +1. IP,interface => hop count . Кэшируется количество хопов до сервера для последующего применения в autottl прямо с первого пакета, когда еще ответа не было. Пока записи в кэше нет, autottl не будет применен сразу. При повторном запросе до истечения времени жизни записи autottl будет применение сразу. + +2. IP => hostname . Кэшируется имя хоста, вне привязки к интерфейсу, для последующего применения в стратегиях нулевой фазы. Режим отключен по умолчанию и включается через параметры `ipcache-hostname`. +Данная техника является экспериментальной. Ее проблема в том, что как такового нет однозначного соответствия между доменом и IP. Множество доменов могут ссылаться на тот же IP адрес. +При коллизии происходит замещение имени хоста на последний вариант. +Домен может скакать по разным IP на CDN. Сейчас один адрес, через час - другой. Эта проблема решается через время жизни записей кэша : `--ipcache-lifetime`. По умолчанию 2 часа. + +При подаче сигнала SIGUSR2 процесс выводит содержимое ipcache на консоль. + ### РЕАКЦИЯ DPI НА ОТВЕТ СЕРВЕРА Есть DPI, которые анализируют ответы от сервера, в частности сертификат из ServerHello, где прописаны домены. @@ -1660,13 +1735,16 @@ nfqws начнет получать адреса пакетов из локал Каждая опция предполагает запуск одного инстанса соответствующего демона. Все различия методов дурения для `http`, `https`, `quic` и т.д. должны быть отражены через схему мультистратегий. В этом смысле настройка похожа на вариант `winws` на Windows, а перенос конфигов не должен представлять больших сложностей. + Основное правило настройки перехвата - перехватывайте только необходимый минимум. Любой перехват лишнего - это бессмысленная нагрузка на вашу систему. -Опции демонов `--ipset` использовать запрещено. Это сделано намеренно и искусственно, чтобы не поощрять простой и -работающий, но неэффективный метод на *nix системах. Используйте `ipset`-ы режима ядра. -При необходимости пишите и задействуйте `custom scripts`. +Опции демонов `--ipset` использовать нужно с умом. Не стоит перехватывать весь трафик, чтобы потом по параметру --ipset +выделить лишь горстку IP. Это будет работать, но очень неэффективно с точки зрения нагрузки на систему. +Используйте `ipset`-ы режима ядра. При необходимости пишите и задействуйте `custom scripts`. +Но если у вас и так идет работа по всем IP, и нужно написать небольшую специализацию по IP, то --ipset вполне уместен. + Настройки демонов можно для удобства писать на нескольких строках, используя двойные или одинарные кавычки. -Чтобы задействовать стандартные обновляемые хост-листы из `ipset`, используйте маркер . +Чтобы задействовать стандартные обновляемые хост-листы из каталога `ipset`, используйте маркер . Он будет заменен на параметры, соответствующие режиму MODE_FILTER, и будут подставлены реально существующие файлы. Если MODE_FILTER не предполагает стандартного хостлиста, будет заменен на пустую строку. Стандартные хостлисты следует вставлять в финальных стратегиях (стратегиях по умолчанию), закрывающих цепочки по @@ -1852,6 +1930,13 @@ OPENWRT_WAN6="wan6 vpn6" Это полезно, если у вас есть система управления фаерволом, в настройки которой и следует прикрутить правила.\ На OpenWrt неприменимо при использовании firewall3+iptables. +`FILTER_TTL_EXPIRED_ICMP=1` включает механизмы блокировки пакетов icmp time exceeded, высылаемые роутерами по пути следования пакета в ответ на исчерпание TTL/HL. +В linux соединение обрывается системой, если в ответ на первый пакет (для tcp - SYN) пришел такой icmp. Аналогичная схема имеется и в datagram сокетах. +Блокировка icmp идет исключительно за счет средств iptables/nftables. +Чтобы не трогать весь трафик, в режиме PRENAT используется connmark для пометки сеансов, над которыми поработал nfqws. В режиме POSTNAT так сделать нельзя, +поэтому помечаются все сеансы, заворачиваемые на nfqws. +Настройку лучше отключить, если вы не ожидаете проблем от icmp, тк в этом случае будет меньше ненужных вмешательств в трафик. + ***Следующие настройки не актуальны для openwrt:*** Если ваша система работает как роутер, то нужно вписать названия внутренних и внешних интерфейсов: @@ -2334,32 +2419,38 @@ OpenWrt является одной из немногих относительн VPS — это виртуальный сервер. Существует огромное множество датацентров, предлагающих данную услугу. На VPS могут выполняться какие угодно задачи. От простого веб-сайта до навороченной системы собственной разработки. Можно использовать VPS и для поднятия собственного VPN или прокси. -Сама широта возможных способов применения и распространенность услуги ограничивают возможности регуляторов -по бану сервисов такого типа. Да, если введут белые списки, то решение загнется, но это будет уже другая +Сама широта возможных способов применения и распространенность услуги сводят к минимуму возможности +регуляторов по бану сервисов такого типа. Да, если введут белые списки, то решение загнется, но это будет уже другая реальность, в которой придется изобретать иные решения. -Пока этого не сделали. Однако, уже наблюдаются попытки гасить некоторые протоколы на диапазонах VPS провайдеров. -Вплоть до TLS. Как следствие не работают ни средства обхода типа VLESS, ни обычные сайты. -Пока это делается еще точечно, не на всех провайдерах. Не стоит сразу оплачивать VPS надолго. Сначала проверьте -все ли работает из того, что вам нужно. Или может быть стоит найти другой VPS. - -VPS имеет преимущество над VPN провайдером. +Пока этого не сделали, никто не будет банить хостинги просто потому, что они предоставляют хостинг услуги. +Вы, как индивидуум, скорее всего, никому не нужны. Подумайте чем вы отличаетесь от известного VPN провайдера. VPN-провайдер предоставляет _простую_ и _доступную_ услугу по обходу блокировок для масс. -Все, что просто и доступно, первым делом идет под блок. +Этот факт делает его первоочередной целью блокировки. РКН направит уведомление, после отказа сотрудничать +заблокирует VPN. Предоплаченная сумма пропадет. +У регуляторов нет и никогда не будет ресурсов для тотальной проверки каждого сервера в сети. Возможен китайский расклад, при котором DPI выявляет VPN-протоколы и динамически банит IP серверов, предоставляющих нелицензированный VPN. Но имея знания, голову, вы всегда можете обфусцировать VPN трафик или применить другие типы VPN, более устойчивые к анализу на DPI, или просто менее широкоизвестные, а следовательно с меньшей вероятностью обнаруживаемые регулятором. У вас есть свобода делать на вашем VPS все что вы захотите, адаптируясь к новым условиям. Да, это потребует знаний. Вам выбирать учиться и держать ситуацию под контролем, когда вам ничего запретить -не могут, или покориться системе. Порог необходимых знаний и возможностей для самостоятельного входа в обход блокировок будет только возрастать. +не могут, или покориться системе. VPS можно приобрести в множестве мест. Существуют специализированные на поиске предложений VPS порталы.\ -Например, [вот этот](https://vps.today). Для персонального VPN сервера обычно достаточно самой минимальной конфигурации, но с безлимитным трафиком или +Например, [вот этот](https://vps.today). +Для персонального VPN сервера обычно достаточно самой минимальной конфигурации, но с безлимитным трафиком или с большим лимитом по трафику (терабайты). Важен и тип VPS. OpenVZ подойдёт для OpenVPN, но вы не поднимете на нем WireGuard, IPsec, то есть все, что требует kernel mode. Для kernel mode требуется тип виртуализации, предполагающий запуск полноценного экземпляра ОС linux вместе с ядром. Подойдут KVM, Xen, Hyper-V, VMware. +По цене можно найти предложения, которые будут дешевле готовой VPN услуги, но при этом вы сам хозяин в своей лавке +и не рискуете попасть под бан регулятора, разве что «заодно» — под ковровую бомбардировку с баном миллионов IP. +Кроме того, если вам совсем все кажется сложным, прочитанное вызывает ступор и вы точно знаете, что ничего +из описанного сделать не сможете, то вы сможете хотя бы использовать динамическое перенаправление портов SSH +для получения шифрованного SOCKS-прокси и прописать его в браузер. Знания linux не нужны совсем. +Это вариант наименее напряжный для чайников, хотя и не самый удобный в использовании. + ## Поддержать разработчика USDT `0x3d52Ce15B7Be734c53fc9526ECbAB8267b63d66E`