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.
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.
## 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
[![en](https://img.shields.io/badge/lang-en-red.svg)](https://github.com/bol-van/zapret/tree/master/docs/readme.en.md)
[![ru](https://img.shields.io/badge/lang-ru-green.svg)](https://github.com/bol-van/zapret/tree/master/docs/readme.md)
[![en](https://img.shields.io/badge/lang-en-red.svg)](./readme.en.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:
https://habr.com/ru/post/335436
Подробнее про DPI:\
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
## Что сейчас происходит в России
@ -164,7 +209,7 @@ NFQUEUE работает без изменений.
## Особенности применения nftables
Более подробно преимущества и недостатки nftables применительно к данной системе описаны в docs/nftables_notes.txt Если
Более подробно преимущества и недостатки nftables применительно к данной системе описаны в [docs/nftables_notes.txt](./nftables_notes.txt) Если
коротко, то в nftables невозможно работать с большими ip листами на системах с малым количеством RAM. Остальные
рассматриваемые здесь функции могут быть перенесены на nftables.
@ -195,7 +240,7 @@ NFQUEUE работает без изменений.
## nfqws
Эта программа - модификатор пакетов и обработчик очереди NFQUEUE. Для BSD систем существует адаптированный вариант -
dvtws, собираемый из тех же исходников (см. bsd.txt).
dvtws, собираемый из тех же исходников (см. [bsd.txt](./bsd.txt)).
```
@<config_file>|$<config_file> ; читать конфигурацию из файла. опция должна быть первой. остальные опции игнорируются.
@ -257,7 +302,7 @@ dvtws, собираемый из тех же исходников (см. bsd.txt
--hostlist-auto-fail-time=<int> ; все эти ситуации должны быть в пределах указанного количества секунд (по умолчанию: 60)
--hostlist-auto-retrans-threshold=<int> ; сколько ретрансмиссий запроса считать блокировкой (по умолчанию: 3)
--hostlist-auto-debug=<logfile> ; лог положительных решений по autohostlist. позволяет разобраться почему там появляются хосты.
--new ; начало новой стратегии
--new ; начало новой стратегии (новый профиль)
--filter-l3=ipv4|ipv6 ; фильтр версии ip для текущей стратегии
--filter-tcp=[~]port1[-port2]|* ; фильтр портов tcp для текущей стратегии. ~ означает инверсию. установка фильтра tcp и неустановка фильтра udp запрещает udp. поддерживается список через запятую.
--filter-udp=[~]port1[-port2]|* ; фильтр портов udp для текущей стратегии. ~ означает инверсию. установка фильтра udp и неустановка фильтра tcp запрещает udp. поддерживается список через запятую.
@ -268,8 +313,9 @@ dvtws, собираемый из тех же исходников (см. bsd.txt
Параметры манипуляции могут сочетаться в любых комбинациях.
**ЗАМЕЧАНИЕ.** Параметр `--wsize` считается устаревшим и более не поддерживается в скриптах. Функции сплита выполняются в
рамках атаки десинхронизации. Это быстрее и избавляет от целого ряда недостатков wsize.
> [!TIP]
> **ЗАМЕЧАНИЕ.** Параметр `--wsize` считается устаревшим и более не поддерживается в скриптах. Функции сплита выполняются в
> рамках атаки десинхронизации. Это быстрее и избавляет от целого ряда недостатков wsize.
`--debug` позволяет выводить подробный лог действий на консоль, в syslog или в файл. Может быть важен порядок следования
опций. `--debug` лучше всего указывать в самом начале. Опции анализируются последовательно. Если ошибка будет при
@ -292,8 +338,8 @@ dvtws, собираемый из тех же исходников (см. bsd.txt
посылать пакет с инвалидной чексуммой, добавлять tcp option **MD5 signature**, испортить sequence numbers. Все они не
лишены недостатков.
* md5sig работает не на всех серверах. Пакеты с md5 обычно отбрасывают только linux.
* badsum не сработает, если ваше устройство за NAT, который не пропускает пакеты с инвалидной суммой. Наиболее
* `md5sig` работает не на всех серверах. Пакеты с md5 обычно отбрасывают только linux.
* `badsum` не сработает, если ваше устройство за NAT, который не пропускает пакеты с инвалидной суммой. Наиболее
распространенная настройка NAT роутера в Linux их не пропускает. На Linux построено большинство домашних роутеров.
Непропускание обеспечивается так : настройка ядра sysctl по умолчанию
`net.netfilter.nf_conntrack_checksum=1` заставляет conntrack проверять tcp и udp чексуммы входящих пакетов и
@ -309,14 +355,14 @@ dvtws, собираемый из тех же исходников (см. bsd.txt
себя ведут некоторые роутеры на базе mediatek. badsum пакеты уходят с клиентской ОС, но роутером не видятся в br-lan
через tcpdump. При этом если nfqws выполняется на самом роутере, обход может работать. badsum нормально уходят с
внешнего интерфейса.
* Пакеты с badseq будут наверняка отброшены принимающим узлом, но так же и DPI, если он ориентируется на sequence
* Пакеты с `badseq` будут наверняка отброшены принимающим узлом, но так же и DPI, если он ориентируется на sequence
numbers. По умолчанию смещение seq выбирается -10000. Практика показала, что некоторые DPI не пропускают seq вне
определенного окна. Однако, такое небольшое смещение может вызвать проблемы при существенной потоковой передаче и
потере пакетов. Если вы используете `--dpi-desync-any-protocol`, может понадобится установить badseq increment
0x80000000. Это обеспечит надежную гарантию, что поддельный пакет не вклинится в tcp window на сервере. Так же было
замечено, что badseq ломает логику некоторых DPI при анализе http, вызывая зависание соединения. Причем на тех же DPI
TLS с badseq работает нормально.
* TTL казалось бы - лучший вариант, но он требует индивидуальной настройки под каждого провайдера. Если DPI находится
* `TTL` казалось бы - лучший вариант, но он требует индивидуальной настройки под каждого провайдера. Если DPI находится
дальше локальных сайтов провайдера, то вы можете отрезать себе доступ к ним. Ситуация усугубляется наличием ТСПУ на
магистралах, что вынуждает делать TTL достаточно высоким, увеличивая риск пробоя фейка до сервера. Необходим ip
exclude list, заполняемый вручную. Вместе с ttl можно применять md5sig. Это ничего не испортит, зато дает неплохой
@ -676,14 +722,16 @@ L7 протокол становится известен обычно посл
Нумерация профилей идет с 1 до N. Последним в цепочке создается пустой профиль с номером 0.
Он используется, когда никакие условия фильтров не совпали.
**ВАЖНО:** множественные стратегии создавались только для случаев, когда невозможно обьединить
имеющиеся стратегии для разных ресурсов. Копирование стратегий из blockcheck для разных сайтов
во множество профилей без понимания как они работают приведет к нагромождению параметров, которые все равно
не покроют все возможные заблокированные ресурсы. Вы только увязните в этой каше.
> [!IMPORTANT]
> Множественные стратегии создавались только для случаев, когда невозможно обьединить
> имеющиеся стратегии для разных ресурсов. Копирование стратегий из blockcheck для разных сайтов
> во множество профилей без понимания как они работают приведет к нагромождению параметров, которые все равно
> не покроют все возможные заблокированные ресурсы. Вы только увязните в этой каше.
**ВАЖНО:** user-mode реализация ipset создавалась не как удобная замена *nix версии, реализованной в ядре.
Вариант в ядре работает гораздо эффективнее. Это создавалось для систем без подержки ipset в ядре.
Конкретно - Windows и ядра Linux, собранные без nftables и ipset модулей ядра. Например, в android нет ipset.
> [!IMPORTANT]
> user-mode реализация ipset создавалась не как удобная замена *nix версии, реализованной в ядре.
> Вариант в ядре работает гораздо эффективнее. Это создавалось для систем без подержки ipset в ядре.
> Конкретно - Windows и ядра Linux, собранные без nftables и ipset модулей ядра. Например, в android нет ipset.
## tpws
@ -706,7 +754,7 @@ tpws - это transparent proxy.
; force : биндаться только на LL
--bind-iface4=<iface> ; слушать на первом ipv4 интерфейса 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-linklocal=<sec>
; имеет смысл только при задании --bind-wait-ip
@ -774,7 +822,7 @@ tpws - это transparent proxy.
--hostlist-auto-fail-threshold=<int> ; сколько раз нужно обнаружить ситуацию, похожую на блокировку, чтобы добавить хост в лист (по умолчанию: 3)
--hostlist-auto-fail-time=<int> ; все эти ситуации должны быть в пределах указанного количества секунд (по умолчанию: 60)
--hostlist-auto-debug=<logfile> ; лог положительных решений по autohostlist. позволяет разобраться почему там появляются хосты.
--new ; начало новой стратегии
--new ; начало новой стратегии (новый профиль)
--filter-l3=ipv4|ipv6 ; фильтр версии ip для текущей стратегии
--filter-tcp=[~]port1[-port2]|* ; фильтр портов tcp для текущей стратегии. ~ означает инверсию. поддерживается список через запятую.
--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_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.
**ВАЖНО**: настройка маршрутизации, маскарада и т.д. не входит в задачу zapret.
Включаются только режимы, обеспечивающие перехват транзитного трафика.
Возможно определить несколько интерфейсов следующим образом:
> [!IMPORTANT]
> Настройка маршрутизации, маскарада и т.д. не входит в задачу zapret.
> Включаются только режимы, обеспечивающие перехват транзитного трафика.
> Возможно определить несколько интерфейсов следующим образом:
`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.
Для более гибкой настройки перед запуском инсталлятора следует выполнить раздел "Выбор параметров".
@ -1975,9 +2024,9 @@ connbytes придется опускать, поскольку модуля в
запускайте из конца autorun.sh через "&". Скрипт должен в начале делать sleep 5, чтобы дождаться
поднятия сети и iptables от huawei.
**ПРЕДУПРЕЖДЕНИЕ.**\
На этом модеме происходят хаотические сбросы соединений tcp по непонятным причинам.
Выглядит это так, если запускать curl с самого модема:
> [!WARNING]
> На этом модеме происходят хаотические сбросы соединений tcp по непонятным причинам.
> Выглядит это так, если запускать curl с самого модема:
```
curl www.ru
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 отсутствует. Значит, все, что можно сделать - создать индивидуальные правила
на небольшое количество хостов.
Некоторые наброски скриптов присутствуют в files/huawei. _Не готовое решение!_ Смотрите, изучайте, приспосабливайте.\
Некоторые наброски скриптов присутствуют в [files/huawei](./../files/huawei/). _Не готовое решение!_ Смотрите, изучайте, приспосабливайте.\
Здесь можно скачать готовые полезные статические бинарники для arm, включая curl : https://github.com/bol-van/bins
## FreeBSD, OpenBSD, MacOS
Описано в docs/bsd.txt
Описано в [docs/bsd.txt](./bsd.txt)
## Windows
Описано в docs/windows.txt
Описано в [docs/windows.txt](./windows.txt)
## Другие прошивки
@ -2078,8 +2127,8 @@ Openwrt является одной из немногих относительн
Если не работает автономный обход, приходится перенаправлять трафик через сторонний хост.
Предлагается использовать прозрачный редирект через socks5 посредством `iptables+redsocks`, либо `iptables+iproute+vpn`.
Настройка варианта с redsocks на openwrt описана в redsocks.txt.
Настройка варианта с `iproute+wireguard` - в `wireguard_iproute_openwrt.txt`.
Настройка варианта с redsocks на openwrt описана в [redsocks.txt](./redsocks.txt).
Настройка варианта с `iproute+wireguard` - в [wireguard_iproute_openwrt.txt](./wireguard/wireguard_iproute_openwrt.txt).
## Почему стоит вложиться в покупку VPS
@ -2118,3 +2167,10 @@ VPS можно прибрести в множестве мест. Существ
из описанного сделать не сможете, то вы сможете хотя бы использовать динамическое перенаправление портов ssh
для получения шифрованного 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