Compare commits

..

11 Commits

Author SHA1 Message Date
bol-van
bbeee9d640 readme.en: donate info 2024-11-04 12:08:11 +03:00
bol-van
466a142ebe work on readme.md 2024-11-04 11:53:28 +03:00
bol-van
8aa8bb5941 work on readme.md 2024-11-04 11:52:29 +03:00
bol-van
ffa701e497 work on readme.md 2024-11-04 11:52:12 +03:00
bol-van
e0063eecd5 work on readme.md 2024-11-04 11:51:44 +03:00
bol-van
2d530d5f63 work on readme.md 2024-11-04 11:50:33 +03:00
bol-van
95b3830afd work on readme.md 2024-11-04 11:46:31 +03:00
bol-van
0ea3215187 work on readme.md 2024-11-04 11:44:44 +03:00
bol-van
27745a3747 work on readme.md 2024-11-04 11:42:58 +03:00
bol-van
c68b75d4ac work on readme.md 2024-11-04 11:38:30 +03:00
0x201
f4d31cdcb6 Update docs/readme.md 2024-11-04 10:10:13 +03:00
2 changed files with 219 additions and 156 deletions

View File

@ -1308,3 +1308,10 @@ Dont ask me how to do it. Its different for all firmwares and requires studying.
Find manual or reverse engineer yourself. Find manual or reverse engineer yourself.
Check for race conditions. Firmware can clear or modify iptables after your startup script. Check for race conditions. Firmware can clear or modify iptables after your startup script.
If this is the case then run another script in background and add some delay there. If this is the case then run another script in background and add some delay there.
## Donations
Are welcome here :
<img src=https://cdn-icons-png.flaticon.com/16/14446/14446252.png alt="USDT" style="vertical-align: middle;"/> USDT 0x3d52Ce15B7Be734c53fc9526ECbAB8267b63d66E
<img src=https://cdn-icons-png.flaticon.com/16/5968/5968260.png alt="USDT" style="vertical-align: middle;"/> BTC bc1qhqew3mrvp47uk2vevt5sctp7p2x9m7m5kkchve

View File

@ -2,8 +2,53 @@
# Multilanguage README # Multilanguage README
[![en](https://img.shields.io/badge/lang-en-red.svg)](https://github.com/bol-van/zapret/tree/master/docs/readme.en.md) [![en](https://img.shields.io/badge/lang-en-red.svg)](./readme.en.md)
[![ru](https://img.shields.io/badge/lang-ru-green.svg)](https://github.com/bol-van/zapret/tree/master/docs/readme.md) [![ru](https://img.shields.io/badge/lang-ru-green.svg)](./readme.md)
***
- [Зачем это нужно](#зачем-это-нужно)
- [Быстрый старт](#быстрый-старт)
- [Как это работает](#как-это-работает)
- [Что сейчас происходит в России](#что-сейчас-происходит-в-россии)
- [Как это реализовать на практике в системе linux](#как-это-реализовать-на-практике-в-системе-linux)
- [Особенности применения ip6tables](#особенности-применения-ip6tables)
- [Особенности применения nftables](#особенности-применения-nftables)
- [Когда это работать не будет](#когда-это-работать-не-будет)
- [nfqws](#nfqws)
- [АТАКА ДЕСИНХРОНИЗАЦИИ DPI](#атака-десинхронизации-dpi)
- [КОМБИНИРОВАНИЕ МЕТОДОВ ДЕСИНХРОНИЗАЦИИ](#комбинирование-методов-десинхронизации)
- [РЕЖИМ SYNACK](#режим-synack)
- [РЕЖИМ SYNDATA](#режим-syndata)
- [ВИРТУАЛЬНЫЕ МАШИНЫ](#виртуальные-машины)
- [CONNTRACK](#conntrack)
- [РЕАССЕМБЛИНГ](#реассемблинг)
- [ПОДДЕРЖКА UDP](#поддержка-udp)
- [IP ФРАГМЕНТАЦИЯ](#ip-фрагментация)
- [МНОЖЕСТВЕННЫЕ СТРАТЕГИИ](#множественные-стратегии)
- [tpws](#tpws)
- [МНОЖЕСТВЕННЫЕ СТРАТЕГИИ](#множественные-стратегии-1)
- [Способы получения списка заблокированных IP](#способы-получения-списка-заблокированных-ip)
- [ip2net](#ip2net)
- [mdig](#mdig)
- [Фильтрация по именам доменов](#фильтрация-по-именам-доменов)
- [Режим фильтрации autohostlist](#режим-фильтрации-autohostlist)
- [Проверка провайдера](#проверка-провайдера)
- [Выбор параметров](#выбор-параметров)
- [Прикручивание к системе управления фаерволом или своей системе запуска](#прикручивание-к-системе-управления-фаерволом-или-своей-системе-запуска)
- [Вариант custom](#вариант-custom)
- [Простая установка](#простая-установка)
- [Простая установка на openwrt](#простая-установка-на-openwrt)
- [Установка на openwrt в режиме острой нехватки места на диске](#установка-на-openwrt-в-режиме-острой-нехватки-места-на-диске)
- [Android](#android)
- [Мобильные модемы и роутеры huawei](#мобильные-модемы-и-роутеры-huawei)
- [FreeBSD, OpenBSD, MacOS](#freebsd-openbsd-macos)
- [Windows](#windows)
- [Другие прошивки](#другие-прошивки)
- [Обход блокировки через сторонний хост](#обход-блокировки-через-сторонний-хост)
- [Почему стоит вложиться в покупку VPS](#почему-стоит-вложиться-в-покупку-vps)
- [Поддержать разработчика](#поддержать-разработчика)
***
## Зачем это нужно ## Зачем это нужно
@ -19,9 +64,9 @@ VPN.
## Быстрый старт ## Быстрый старт
> *Linux/openwrt:* docs/quick_start.txt > *Linux/openwrt:* [docs/quick_start.txt](./quick_start.txt)
> >
>*Windows:* docs/quick_start_windows.txt >*Windows:* [docs/quick_start_windows.txt](./quick_start_windows.txt)
## Как это работает ## Как это работает
@ -49,8 +94,8 @@ VPN.
Существует и более продвинутая магия, направленная на преодоление DPI на пакетном уровне. Существует и более продвинутая магия, направленная на преодоление DPI на пакетном уровне.
Подробнее про DPI: Подробнее про DPI:\
https://habr.com/ru/post/335436 https://habr.com/ru/post/335436 или https://web.archive.org/web/20230331233644/https://habr.com/ru/post/335436/ \
https://geneva.cs.umd.edu/papers/geneva_ccs19.pdf https://geneva.cs.umd.edu/papers/geneva_ccs19.pdf
## Что сейчас происходит в России ## Что сейчас происходит в России
@ -164,7 +209,7 @@ NFQUEUE работает без изменений.
## Особенности применения nftables ## Особенности применения nftables
Более подробно преимущества и недостатки nftables применительно к данной системе описаны в docs/nftables_notes.txt Если Более подробно преимущества и недостатки nftables применительно к данной системе описаны в [docs/nftables_notes.txt](./nftables_notes.txt) Если
коротко, то в nftables невозможно работать с большими ip листами на системах с малым количеством RAM. Остальные коротко, то в nftables невозможно работать с большими ip листами на системах с малым количеством RAM. Остальные
рассматриваемые здесь функции могут быть перенесены на nftables. рассматриваемые здесь функции могут быть перенесены на nftables.
@ -195,7 +240,7 @@ NFQUEUE работает без изменений.
## nfqws ## nfqws
Эта программа - модификатор пакетов и обработчик очереди NFQUEUE. Для BSD систем существует адаптированный вариант - Эта программа - модификатор пакетов и обработчик очереди NFQUEUE. Для BSD систем существует адаптированный вариант -
dvtws, собираемый из тех же исходников (см. bsd.txt). dvtws, собираемый из тех же исходников (см. [bsd.txt](./bsd.txt)).
``` ```
@<config_file>|$<config_file> ; читать конфигурацию из файла. опция должна быть первой. остальные опции игнорируются. @<config_file>|$<config_file> ; читать конфигурацию из файла. опция должна быть первой. остальные опции игнорируются.
@ -224,7 +269,7 @@ dvtws, собираемый из тех же исходников (см. bsd.txt
--dpi-desync-autottl6=[<delta>[:<min>[-<max>]]] ; переопределение предыдущего параметра для ipv6 --dpi-desync-autottl6=[<delta>[:<min>[-<max>]]] ; переопределение предыдущего параметра для ipv6
--dpi-desync-fooling=<fooling> ; дополнительные методики как сделать, чтобы фейковый пакет не дошел до сервера. none md5sig badseq badsum datanoack hopbyhop hopbyhop2 --dpi-desync-fooling=<fooling> ; дополнительные методики как сделать, чтобы фейковый пакет не дошел до сервера. none md5sig badseq badsum datanoack hopbyhop hopbyhop2
--dpi-desync-repeats=<N> ; посылать каждый генерируемый в nfqws пакет N раз (не влияет на остальные пакеты) --dpi-desync-repeats=<N> ; посылать каждый генерируемый в nfqws пакет N раз (не влияет на остальные пакеты)
--dpi-desync-skip-nosni=0| 1 ; 1(default)=не применять dpi desync для запросов без hostname в SNI, в частности для ESNI --dpi-desync-skip-nosni=0|1 ; 1(default)=не применять dpi desync для запросов без hostname в SNI, в частности для ESNI
--dpi-desync-split-pos=<1..1500> ; (только для split*, disorder*) разбивать пакет на указанной позиции --dpi-desync-split-pos=<1..1500> ; (только для split*, disorder*) разбивать пакет на указанной позиции
--dpi-desync-split-http-req=method|host ; разбивка http request на указанном логическом месте --dpi-desync-split-http-req=method|host ; разбивка http request на указанном логическом месте
--dpi-desync-split-tls=sni|sniext ; разбивка tls client hello на указанном логическом месте --dpi-desync-split-tls=sni|sniext ; разбивка tls client hello на указанном логическом месте
@ -245,19 +290,19 @@ dvtws, собираемый из тех же исходников (см. bsd.txt
--dpi-desync-start=[n|d|s]N ; применять dpi desync только в исходящих пакетах (n), пакетах данных (d), относительных sequence (s) по номеру больше или равно N --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 --dpi-desync-cutoff=[n|d|s]N ; применять dpi desync только в исходящих пакетах (n), пакетах данных (d), относительных sequence (s) по номеру меньше N
--hostlist=<filename> ; действовать только над доменами, входящими в список из filename. поддомены автоматически учитываются. --hostlist=<filename> ; действовать только над доменами, входящими в список из filename. поддомены автоматически учитываются.
; в файле должен быть хост на каждой строке. ; в файле должен быть хост на каждой строке.
; список читается при старте и хранится в памяти в виде иерархической структуры для быстрого поиска. ; список читается при старте и хранится в памяти в виде иерархической структуры для быстрого поиска.
; при изменении времени модификации файла он перечитывается автоматически по необходимости ; при изменении времени модификации файла он перечитывается автоматически по необходимости
; список может быть запакован в gzip. формат автоматически распознается и разжимается ; список может быть запакован в gzip. формат автоматически распознается и разжимается
; списков может быть множество. пустой общий лист = его отсутствие ; списков может быть множество. пустой общий лист = его отсутствие
; хосты извлекаются из Host: хедера обычных http запросов и из SNI в TLS ClientHello. ; хосты извлекаются из Host: хедера обычных http запросов и из SNI в TLS ClientHello.
--hostlist-exclude=<filename> ; не применять дурение к доменам из листа. может быть множество листов. схема аналогична include листам. --hostlist-exclude=<filename> ; не применять дурение к доменам из листа. может быть множество листов. схема аналогична include листам.
--hostlist-auto=<filename> ; обнаруживать автоматически блокировки и заполнять автоматический hostlist (требует перенаправления входящего трафика) --hostlist-auto=<filename> ; обнаруживать автоматически блокировки и заполнять автоматический hostlist (требует перенаправления входящего трафика)
--hostlist-auto-fail-threshold=<int> ; сколько раз нужно обнаружить ситуацию, похожую на блокировку, чтобы добавить хост в лист (по умолчанию: 3) --hostlist-auto-fail-threshold=<int> ; сколько раз нужно обнаружить ситуацию, похожую на блокировку, чтобы добавить хост в лист (по умолчанию: 3)
--hostlist-auto-fail-time=<int> ; все эти ситуации должны быть в пределах указанного количества секунд (по умолчанию: 60) --hostlist-auto-fail-time=<int> ; все эти ситуации должны быть в пределах указанного количества секунд (по умолчанию: 60)
--hostlist-auto-retrans-threshold=<int> ; сколько ретрансмиссий запроса считать блокировкой (по умолчанию: 3) --hostlist-auto-retrans-threshold=<int> ; сколько ретрансмиссий запроса считать блокировкой (по умолчанию: 3)
--hostlist-auto-debug=<logfile> ; лог положительных решений по autohostlist. позволяет разобраться почему там появляются хосты. --hostlist-auto-debug=<logfile> ; лог положительных решений по autohostlist. позволяет разобраться почему там появляются хосты.
--new ; начало новой стратегии --new ; начало новой стратегии (новый профиль)
--filter-l3=ipv4|ipv6 ; фильтр версии ip для текущей стратегии --filter-l3=ipv4|ipv6 ; фильтр версии ip для текущей стратегии
--filter-tcp=[~]port1[-port2]|* ; фильтр портов tcp для текущей стратегии. ~ означает инверсию. установка фильтра tcp и неустановка фильтра udp запрещает udp. поддерживается список через запятую. --filter-tcp=[~]port1[-port2]|* ; фильтр портов tcp для текущей стратегии. ~ означает инверсию. установка фильтра tcp и неустановка фильтра udp запрещает udp. поддерживается список через запятую.
--filter-udp=[~]port1[-port2]|* ; фильтр портов udp для текущей стратегии. ~ означает инверсию. установка фильтра udp и неустановка фильтра tcp запрещает udp. поддерживается список через запятую. --filter-udp=[~]port1[-port2]|* ; фильтр портов udp для текущей стратегии. ~ означает инверсию. установка фильтра udp и неустановка фильтра tcp запрещает udp. поддерживается список через запятую.
@ -268,8 +313,9 @@ dvtws, собираемый из тех же исходников (см. bsd.txt
Параметры манипуляции могут сочетаться в любых комбинациях. Параметры манипуляции могут сочетаться в любых комбинациях.
**ЗАМЕЧАНИЕ.** Параметр `--wsize` считается устаревшим и более не поддерживается в скриптах. Функции сплита выполняются в > [!TIP]
рамках атаки десинхронизации. Это быстрее и избавляет от целого ряда недостатков wsize. > **ЗАМЕЧАНИЕ.** Параметр `--wsize` считается устаревшим и более не поддерживается в скриптах. Функции сплита выполняются в
> рамках атаки десинхронизации. Это быстрее и избавляет от целого ряда недостатков wsize.
`--debug` позволяет выводить подробный лог действий на консоль, в syslog или в файл. Может быть важен порядок следования `--debug` позволяет выводить подробный лог действий на консоль, в syslog или в файл. Может быть важен порядок следования
опций. `--debug` лучше всего указывать в самом начале. Опции анализируются последовательно. Если ошибка будет при опций. `--debug` лучше всего указывать в самом начале. Опции анализируются последовательно. Если ошибка будет при
@ -292,8 +338,8 @@ dvtws, собираемый из тех же исходников (см. bsd.txt
посылать пакет с инвалидной чексуммой, добавлять tcp option **MD5 signature**, испортить sequence numbers. Все они не посылать пакет с инвалидной чексуммой, добавлять tcp option **MD5 signature**, испортить sequence numbers. Все они не
лишены недостатков. лишены недостатков.
* md5sig работает не на всех серверах. Пакеты с md5 обычно отбрасывают только linux. * `md5sig` работает не на всех серверах. Пакеты с md5 обычно отбрасывают только linux.
* badsum не сработает, если ваше устройство за NAT, который не пропускает пакеты с инвалидной суммой. Наиболее * `badsum` не сработает, если ваше устройство за NAT, который не пропускает пакеты с инвалидной суммой. Наиболее
распространенная настройка NAT роутера в Linux их не пропускает. На Linux построено большинство домашних роутеров. распространенная настройка NAT роутера в Linux их не пропускает. На Linux построено большинство домашних роутеров.
Непропускание обеспечивается так : настройка ядра sysctl по умолчанию Непропускание обеспечивается так : настройка ядра sysctl по умолчанию
`net.netfilter.nf_conntrack_checksum=1` заставляет conntrack проверять tcp и udp чексуммы входящих пакетов и `net.netfilter.nf_conntrack_checksum=1` заставляет conntrack проверять tcp и udp чексуммы входящих пакетов и
@ -309,14 +355,14 @@ dvtws, собираемый из тех же исходников (см. bsd.txt
себя ведут некоторые роутеры на базе mediatek. badsum пакеты уходят с клиентской ОС, но роутером не видятся в br-lan себя ведут некоторые роутеры на базе mediatek. badsum пакеты уходят с клиентской ОС, но роутером не видятся в br-lan
через tcpdump. При этом если nfqws выполняется на самом роутере, обход может работать. badsum нормально уходят с через tcpdump. При этом если nfqws выполняется на самом роутере, обход может работать. badsum нормально уходят с
внешнего интерфейса. внешнего интерфейса.
* Пакеты с badseq будут наверняка отброшены принимающим узлом, но так же и DPI, если он ориентируется на sequence * Пакеты с `badseq` будут наверняка отброшены принимающим узлом, но так же и DPI, если он ориентируется на sequence
numbers. По умолчанию смещение seq выбирается -10000. Практика показала, что некоторые DPI не пропускают seq вне numbers. По умолчанию смещение seq выбирается -10000. Практика показала, что некоторые DPI не пропускают seq вне
определенного окна. Однако, такое небольшое смещение может вызвать проблемы при существенной потоковой передаче и определенного окна. Однако, такое небольшое смещение может вызвать проблемы при существенной потоковой передаче и
потере пакетов. Если вы используете `--dpi-desync-any-protocol`, может понадобится установить badseq increment потере пакетов. Если вы используете `--dpi-desync-any-protocol`, может понадобится установить badseq increment
0x80000000. Это обеспечит надежную гарантию, что поддельный пакет не вклинится в tcp window на сервере. Так же было 0x80000000. Это обеспечит надежную гарантию, что поддельный пакет не вклинится в tcp window на сервере. Так же было
замечено, что badseq ломает логику некоторых DPI при анализе http, вызывая зависание соединения. Причем на тех же DPI замечено, что badseq ломает логику некоторых DPI при анализе http, вызывая зависание соединения. Причем на тех же DPI
TLS с badseq работает нормально. TLS с badseq работает нормально.
* TTL казалось бы - лучший вариант, но он требует индивидуальной настройки под каждого провайдера. Если DPI находится * `TTL` казалось бы - лучший вариант, но он требует индивидуальной настройки под каждого провайдера. Если DPI находится
дальше локальных сайтов провайдера, то вы можете отрезать себе доступ к ним. Ситуация усугубляется наличием ТСПУ на дальше локальных сайтов провайдера, то вы можете отрезать себе доступ к ним. Ситуация усугубляется наличием ТСПУ на
магистралах, что вынуждает делать TTL достаточно высоким, увеличивая риск пробоя фейка до сервера. Необходим ip магистралах, что вынуждает делать TTL достаточно высоким, увеличивая риск пробоя фейка до сервера. Необходим ip
exclude list, заполняемый вручную. Вместе с ttl можно применять md5sig. Это ничего не испортит, зато дает неплохой exclude list, заполняемый вручную. Вместе с ttl можно применять md5sig. Это ничего не испортит, зато дает неплохой
@ -676,14 +722,16 @@ L7 протокол становится известен обычно посл
Нумерация профилей идет с 1 до N. Последним в цепочке создается пустой профиль с номером 0. Нумерация профилей идет с 1 до N. Последним в цепочке создается пустой профиль с номером 0.
Он используется, когда никакие условия фильтров не совпали. Он используется, когда никакие условия фильтров не совпали.
**ВАЖНО:** множественные стратегии создавались только для случаев, когда невозможно обьединить > [!IMPORTANT]
имеющиеся стратегии для разных ресурсов. Копирование стратегий из blockcheck для разных сайтов > Множественные стратегии создавались только для случаев, когда невозможно обьединить
во множество профилей без понимания как они работают приведет к нагромождению параметров, которые все равно > имеющиеся стратегии для разных ресурсов. Копирование стратегий из blockcheck для разных сайтов
не покроют все возможные заблокированные ресурсы. Вы только увязните в этой каше. > во множество профилей без понимания как они работают приведет к нагромождению параметров, которые все равно
> не покроют все возможные заблокированные ресурсы. Вы только увязните в этой каше.
**ВАЖНО:** user-mode реализация ipset создавалась не как удобная замена *nix версии, реализованной в ядре. > [!IMPORTANT]
Вариант в ядре работает гораздо эффективнее. Это создавалось для систем без подержки ipset в ядре. > user-mode реализация ipset создавалась не как удобная замена *nix версии, реализованной в ядре.
Конкретно - Windows и ядра Linux, собранные без nftables и ipset модулей ядра. Например, в android нет ipset. > Вариант в ядре работает гораздо эффективнее. Это создавалось для систем без подержки ipset в ядре.
> Конкретно - Windows и ядра Linux, собранные без nftables и ipset модулей ядра. Например, в android нет ipset.
## tpws ## tpws
@ -698,38 +746,38 @@ tpws - это transparent proxy.
--user=<username> ; менять uid процесса --user=<username> ; менять uid процесса
--uid=uid[:gid] ; менять uid процесса --uid=uid[:gid] ; менять uid процесса
--bind-addr ; на каком адресе слушать. может быть ipv4 или ipv6 адрес --bind-addr ; на каком адресе слушать. может быть ipv4 или ipv6 адрес
; если указан ipv6 link local, то требуется указать с какого он интерфейса : fe80::1%br-lan ; если указан ipv6 link local, то требуется указать с какого он интерфейса : fe80::1%br-lan
--bind-linklocal=no|unwanted|prefer|force --bind-linklocal=no|unwanted|prefer|force
; no : биндаться только на global ipv6 ; no : биндаться только на global ipv6
; unwanted (default) : предпочтительно global, если нет - LL ; unwanted (default) : предпочтительно global, если нет - LL
; prefer : предпочтительно LL, если нет - global ; prefer : предпочтительно LL, если нет - global
; force : биндаться только на LL ; force : биндаться только на LL
--bind-iface4=<iface> ; слушать на первом ipv4 интерфейса iface --bind-iface4=<iface> ; слушать на первом ipv4 интерфейса iface
--bind-iface6=<iface> ; слушать на первом ipv6 интерфейса iface --bind-iface6=<iface> ; слушать на первом ipv6 интерфейса iface
--bind-wait-ifup=<sec> ; ждать до N секунд появления и поднятия интерфейса --bind-wait-ifup=<sec ; ждать до N секунд появления и поднятия интерфейса
--bind-wait-ip=<sec> ; ждать до N секунд получения IP адреса (если задан --bind-wait-ifup - время идет после поднятия интерфейса) --bind-wait-ip=<sec> ; ждать до N секунд получения IP адреса (если задан --bind-wait-ifup - время идет после поднятия интерфейса)
--bind-wait-ip-linklocal=<sec> --bind-wait-ip-linklocal=<sec>
; имеет смысл только при задании --bind-wait-ip ; имеет смысл только при задании --bind-wait-ip
; --bind-linklocal=unwanted : согласиться на LL после N секунд ; --bind-linklocal=unwanted : согласиться на LL после N секунд
; --bind-linklocal=prefer : согласиться на global address после N секунд ; --bind-linklocal=prefer : согласиться на global address после N секунд
--bind-wait-only ; подождать все бинды и выйти. результат 0 в случае успеха, иначе не 0. --bind-wait-only ; подождать все бинды и выйти. результат 0 в случае успеха, иначе не 0.
--connect-bind-addr ; с какого адреса подключаться во внешнюю сеть. может быть ipv4 или ipv6 адрес --connect-bind-addr ; с какого адреса подключаться во внешнюю сеть. может быть ipv4 или ipv6 адрес
; если указан ipv6 link local, то требуется указать с какого он интерфейса : fe80::1%br-lan ; если указан ipv6 link local, то требуется указать с какого он интерфейса : fe80::1%br-lan
; опция может повторяться для v4 и v6 адресов ; опция может повторяться для v4 и v6 адресов
; опция не отменяет правил маршрутизации ! выбор интерфейса определяется лишь правилами маршрутизации, кроме случая v6 link local. ; опция не отменяет правил маршрутизации ! выбор интерфейса определяется лишь правилами маршрутизации, кроме случая v6 link local.
--socks ; вместо прозрачного прокси реализовать socks4/5 proxy --socks ; вместо прозрачного прокси реализовать socks4/5 proxy
--no-resolve ; запретить ресолвинг имен через socks5 --no-resolve ; запретить ресолвинг имен через socks5
--resolve-threads ; количество потоков ресолвера --resolve-threads ; количество потоков ресолвера
--port=<port> ; на каком порту слушать --port=<port> ; на каком порту слушать
--maxconn=<max_connections> ; максимальное количество соединений от клиентов к прокси --maxconn=<max_connections> ; максимальное количество соединений от клиентов к прокси
--maxfiles=<max_open_files> ; макс количество файловых дескрипторов (setrlimit). мин требование (X*connections+16), где X=6 в tcp proxy mode, X=4 в режиме тамперинга. --maxfiles=<max_open_files> ; макс количество файловых дескрипторов (setrlimit). мин требование (X*connections+16), где X=6 в tcp proxy mode, X=4 в режиме тамперинга.
; стоит сделать запас с коэффициентом как минимум 1.5. по умолчанию maxfiles (X*connections)*1.5+16 ; стоит сделать запас с коэффициентом как минимум 1.5. по умолчанию maxfiles (X*connections)*1.5+16
--max-orphan-time=<sec>; если вы запускаете через tpws торрент-клиент с множеством раздач, он пытается установить очень много исходящих соединений, --max-orphan-time=<sec> ; если вы запускаете через tpws торрент-клиент с множеством раздач, он пытается установить очень много исходящих соединений,
; большая часть из которых отваливается по таймауту (юзера сидят за NAT, firewall, ...) ; большая часть из которых отваливается по таймауту (юзера сидят за NAT, firewall, ...)
; установление соединения в linux может длиться очень долго. локальный конец отвалился, перед этим послав блок данных, ; установление соединения в linux может длиться очень долго. локальный конец отвалился, перед этим послав блок данных,
; tpws ждет подключения удаленного конца, чтобы отослать ему этот блок, и зависает надолго. ; tpws ждет подключения удаленного конца, чтобы отослать ему этот блок, и зависает надолго.
; настройка позволяет сбрасывать такие подключения через N секунд, теряя блок данных. по умолчанию 5 сек. 0 означает отключить функцию ; настройка позволяет сбрасывать такие подключения через N секунд, теряя блок данных. по умолчанию 5 сек. 0 означает отключить функцию
; эта функция не действует на успешно подключенные ранее соединения ; эта функция не действует на успешно подключенные ранее соединения
--local-rcvbuf=<bytes> ; SO_RCVBUF для соединений client-proxy --local-rcvbuf=<bytes> ; SO_RCVBUF для соединений client-proxy
--local-sndbuf=<bytes> ; SO_SNDBUF для соединений client-proxy --local-sndbuf=<bytes> ; SO_SNDBUF для соединений client-proxy
@ -763,18 +811,18 @@ tpws - это transparent proxy.
--tamper-start=[n]<pos> ; начинать дурение только с указанной байтовой позиции или номера блока исходяшего потока (считается позиция начала принятого блока) --tamper-start=[n]<pos> ; начинать дурение только с указанной байтовой позиции или номера блока исходяшего потока (считается позиция начала принятого блока)
--tamper-cutoff=[n]<pos> ; закончить дурение на указанной байтовой позиции или номере блока исходящего потока (считается позиция начала принятого блока) --tamper-cutoff=[n]<pos> ; закончить дурение на указанной байтовой позиции или номере блока исходящего потока (считается позиция начала принятого блока)
--hostlist=<filename> ; действовать только над доменами, входящими в список из filename. поддомены автоматически учитываются. --hostlist=<filename> ; действовать только над доменами, входящими в список из filename. поддомены автоматически учитываются.
; в файле должен быть хост на каждой строке. ; в файле должен быть хост на каждой строке.
; список читается при старте и хранится в памяти в виде иерархической структуры для быстрого поиска. ; список читается при старте и хранится в памяти в виде иерархической структуры для быстрого поиска.
; при изменении времени модификации файла он перечитывается автоматически по необходимости ; при изменении времени модификации файла он перечитывается автоматически по необходимости
; список может быть запакован в gzip. формат автоматически распознается и разжимается ; список может быть запакован в gzip. формат автоматически распознается и разжимается
; списков может быть множество. пустой общий лист = его отсутствие ; списков может быть множество. пустой общий лист = его отсутствие
; хосты извлекаются из Host: хедера обычных http запросов и из SNI в TLS ClientHello. ; хосты извлекаются из Host: хедера обычных http запросов и из SNI в TLS ClientHello.
--hostlist-exclude=<filename> ; не применять дурение к доменам из листа. может быть множество листов. схема аналогична include листам. --hostlist-exclude=<filename> ; не применять дурение к доменам из листа. может быть множество листов. схема аналогична include листам.
--hostlist-auto=<filename> ; обнаруживать автоматически блокировки и заполнять автоматический hostlist (требует перенаправления входящего трафика) --hostlist-auto=<filename> ; обнаруживать автоматически блокировки и заполнять автоматический hostlist (требует перенаправления входящего трафика)
--hostlist-auto-fail-threshold=<int> ; сколько раз нужно обнаружить ситуацию, похожую на блокировку, чтобы добавить хост в лист (по умолчанию: 3) --hostlist-auto-fail-threshold=<int> ; сколько раз нужно обнаружить ситуацию, похожую на блокировку, чтобы добавить хост в лист (по умолчанию: 3)
--hostlist-auto-fail-time=<int> ; все эти ситуации должны быть в пределах указанного количества секунд (по умолчанию: 60) --hostlist-auto-fail-time=<int> ; все эти ситуации должны быть в пределах указанного количества секунд (по умолчанию: 60)
--hostlist-auto-debug=<logfile> ; лог положительных решений по autohostlist. позволяет разобраться почему там появляются хосты. --hostlist-auto-debug=<logfile> ; лог положительных решений по autohostlist. позволяет разобраться почему там появляются хосты.
--new ; начало новой стратегии --new ; начало новой стратегии (новый профиль)
--filter-l3=ipv4|ipv6 ; фильтр версии ip для текущей стратегии --filter-l3=ipv4|ipv6 ; фильтр версии ip для текущей стратегии
--filter-tcp=[~]port1[-port2]|* ; фильтр портов tcp для текущей стратегии. ~ означает инверсию. поддерживается список через запятую. --filter-tcp=[~]port1[-port2]|* ; фильтр портов tcp для текущей стратегии. ~ означает инверсию. поддерживается список через запятую.
--filter-l7=[http|tls|quic|wireguard|dht|unknown] ; фильтр протокола L6-L7. поддерживается несколько значений через запятую. --filter-l7=[http|tls|quic|wireguard|dht|unknown] ; фильтр протокола L6-L7. поддерживается несколько значений через запятую.
@ -1151,7 +1199,7 @@ ipset/get_antizapret_domains.sh
ipset/get_reestr_resolvable_domains.sh ipset/get_reestr_resolvable_domains.sh
ipset/get_refilter_domains.sh ipset/get_refilter_domains.sh
``` ```
Он кладется в ipset/zapret-hosts.txt.gz. Он кладется в `ipset/zapret-hosts.txt.gz`.
При изменении времени модификации файлов списки перечитываются автоматически. При изменении времени модификации файлов списки перечитываются автоматически.
@ -1625,9 +1673,10 @@ IFACE_WAN6="henet ipsec0"
Несколько интерфейсов могут быть вписаны через пробел. Несколько интерфейсов могут быть вписаны через пробел.
Если IFACE_WAN6 не задан, то берется значение IFACE_WAN. Если IFACE_WAN6 не задан, то берется значение IFACE_WAN.
**ВАЖНО**: настройка маршрутизации, маскарада и т.д. не входит в задачу zapret. > [!IMPORTANT]
Включаются только режимы, обеспечивающие перехват транзитного трафика. > Настройка маршрутизации, маскарада и т.д. не входит в задачу zapret.
Возможно определить несколько интерфейсов следующим образом: > Включаются только режимы, обеспечивающие перехват транзитного трафика.
> Возможно определить несколько интерфейсов следующим образом:
`IFACE_LAN="eth0 eth1 eth2"` `IFACE_LAN="eth0 eth1 eth2"`
@ -1757,7 +1806,7 @@ zapret_custom_firewall_nft поднимает правила nftables.
## Простая установка ## Простая установка
`install_easy.sh` автоматизирует ручные варианты процедур установки (см manual_setup.txt). `install_easy.sh` автоматизирует ручные варианты процедур установки (см [manual_setup.txt](./manual_setup.txt)).
Он поддерживает OpenWRT, linux системы на базе systemd или openrc и MacOS. Он поддерживает OpenWRT, linux системы на базе systemd или openrc и MacOS.
Для более гибкой настройки перед запуском инсталлятора следует выполнить раздел "Выбор параметров". Для более гибкой настройки перед запуском инсталлятора следует выполнить раздел "Выбор параметров".
@ -1975,9 +2024,9 @@ connbytes придется опускать, поскольку модуля в
запускайте из конца autorun.sh через "&". Скрипт должен в начале делать sleep 5, чтобы дождаться запускайте из конца autorun.sh через "&". Скрипт должен в начале делать sleep 5, чтобы дождаться
поднятия сети и iptables от huawei. поднятия сети и iptables от huawei.
**ПРЕДУПРЕЖДЕНИЕ.**\ > [!WARNING]
На этом модеме происходят хаотические сбросы соединений tcp по непонятным причинам. > На этом модеме происходят хаотические сбросы соединений tcp по непонятным причинам.
Выглядит это так, если запускать curl с самого модема: > Выглядит это так, если запускать curl с самого модема:
``` ```
curl www.ru curl www.ru
curl: (7) Failed to connect to www.ru port 80: Host is unreachable curl: (7) Failed to connect to www.ru port 80: Host is unreachable
@ -1999,17 +2048,17 @@ curl: (7) Failed to connect to www.ru port 80: Host is unreachable
Поддержка ipset отсутствует. Значит, все, что можно сделать - создать индивидуальные правила Поддержка ipset отсутствует. Значит, все, что можно сделать - создать индивидуальные правила
на небольшое количество хостов. на небольшое количество хостов.
Некоторые наброски скриптов присутствуют в files/huawei. _Не готовое решение!_ Смотрите, изучайте, приспосабливайте.\ Некоторые наброски скриптов присутствуют в [files/huawei](./../files/huawei/). _Не готовое решение!_ Смотрите, изучайте, приспосабливайте.\
Здесь можно скачать готовые полезные статические бинарники для arm, включая curl : https://github.com/bol-van/bins Здесь можно скачать готовые полезные статические бинарники для arm, включая curl : https://github.com/bol-van/bins
## FreeBSD, OpenBSD, MacOS ## FreeBSD, OpenBSD, MacOS
Описано в docs/bsd.txt Описано в [docs/bsd.txt](./bsd.txt)
## Windows ## Windows
Описано в docs/windows.txt Описано в [docs/windows.txt](./windows.txt)
## Другие прошивки ## Другие прошивки
@ -2078,8 +2127,8 @@ Openwrt является одной из немногих относительн
Если не работает автономный обход, приходится перенаправлять трафик через сторонний хост. Если не работает автономный обход, приходится перенаправлять трафик через сторонний хост.
Предлагается использовать прозрачный редирект через socks5 посредством `iptables+redsocks`, либо `iptables+iproute+vpn`. Предлагается использовать прозрачный редирект через socks5 посредством `iptables+redsocks`, либо `iptables+iproute+vpn`.
Настройка варианта с redsocks на openwrt описана в redsocks.txt. Настройка варианта с redsocks на openwrt описана в [redsocks.txt](./redsocks.txt).
Настройка варианта с `iproute+wireguard` - в `wireguard_iproute_openwrt.txt`. Настройка варианта с `iproute+wireguard` - в [wireguard_iproute_openwrt.txt](./wireguard/wireguard_iproute_openwrt.txt).
## Почему стоит вложиться в покупку VPS ## Почему стоит вложиться в покупку VPS
@ -2118,3 +2167,10 @@ VPS можно прибрести в множестве мест. Существ
из описанного сделать не сможете, то вы сможете хотя бы использовать динамическое перенаправление портов ssh из описанного сделать не сможете, то вы сможете хотя бы использовать динамическое перенаправление портов ssh
для получения шифрованного socks proxy и прописать его в броузер. Знания linux не нужны совсем. для получения шифрованного socks proxy и прописать его в броузер. Знания linux не нужны совсем.
Это вариант наименее напряжный для чайников, хотя и не самый удобный в использовании. Это вариант наименее напряжный для чайников, хотя и не самый удобный в использовании.
## Поддержать разработчика
[Реквизиты](https://github.com/bol-van/zapret/issues/590):
<img src=https://cdn-icons-png.flaticon.com/16/14446/14446252.png alt="USDT" style="vertical-align: middle;"/> USDT 0x3d52Ce15B7Be734c53fc9526ECbAB8267b63d66E
<img src=https://cdn-icons-png.flaticon.com/16/5968/5968260.png alt="USDT" style="vertical-align: middle;"/> BTC bc1qhqew3mrvp47uk2vevt5sctp7p2x9m7m5kkchve