mirror of
https://github.com/bol-van/zapret2.git
synced 2026-03-20 08:15:48 +00:00
update docs
This commit is contained in:
350
docs/manual.md
350
docs/manual.md
@@ -3405,3 +3405,353 @@ function cond_payload_str(desync)
|
||||
|
||||
Возвращает true, если в desync.dis.payload присутствует подстрока pattern.
|
||||
Это простейший сигнатурый детектор. Если C код не распознает нужный вам протокол, вы можете написать свой сигнатурный детектор и запускать последующие инстансы под оркестратором condition с вашим детектором в качестве iff.
|
||||
|
||||
|
||||
# Вспомогательные программы
|
||||
|
||||
## ip2net
|
||||
|
||||
Утилита ip2net предназначена для преобразования ipv4 или ipv6 списка ip в список подсетей с целью сокращения размера списка. Входные данные берутся из stdin, выходные выдаются в `stdout`.
|
||||
|
||||
```
|
||||
-4 ; лист - ipv4 (по умолчанию)
|
||||
-6 ; лист - ipv6
|
||||
--prefix-length=min[-max] ; диапазон рассматриваемых длин префиксов. например : 22-30 (ipv4), 56-64 (ipv6)
|
||||
--v4-threshold=mul/div ; ipv4 : включать подсети, в которых заполнено по крайней мере mul/div адресов. например : 3/4
|
||||
--v6-threshold=N ; ipv6 : минимальное количество ip для создания подсети
|
||||
```
|
||||
В списке могут присутствовать записи вида ip/prefix и ip1-ip2. Такие записи выкидываются в stdout без изменений.
|
||||
Они принимаются командой ipset. ipset умеет для листов hash:net из ip1-ip2 делать оптимальное покрытие ip/prefix.
|
||||
ipfw из FreeBSD понимает ip/prefix, но не понимает ip1-ip2.
|
||||
ip2net фильтрует входные данные, выкидывая неправильные IP адреса.
|
||||
|
||||
Выбирается подсеть, в которой присутствует указанный минимум адресов.
|
||||
Для ipv4 минимум задается как процент от размера подсети (mul/div. например, 3/4), для ipv6 минимум задается напрямую.
|
||||
|
||||
Размер подсети выбирается следующим алгоритмом:
|
||||
Сначала в указанном диапазоне длин префиксов ищутся подсети, в которых количество адресов - максимально.
|
||||
Если таких сетей найдено несколько, берется наименьшая сеть (префикс больше).
|
||||
Например, заданы параметры v6_threshold=2 prefix_length=32-64, имеются следующие ipv6 :
|
||||
```
|
||||
1234:5678:aaaa::5
|
||||
1234:5678:aaaa::6
|
||||
1234:5678:aaac::5
|
||||
Результат будет :
|
||||
1234:5678:aaa8::/45
|
||||
```
|
||||
Эти адреса так же входят в подсеть /32. Однако, нет смысла проходиться ковровой бомбардировкой, когда те же самые адреса вполне влезают в /45 и их ровно столько же.
|
||||
Если изменить v6_threshold=4, то результат будет:
|
||||
```
|
||||
1234:5678:aaaa::5
|
||||
1234:5678:aaaa::6
|
||||
1234:5678:aaac::5
|
||||
```
|
||||
То есть ip не объединятся в подсеть, потому что их слишком мало.
|
||||
Если изменить `prefix_length=56-64`, результат будет:
|
||||
```
|
||||
1234:5678:aaaa::/64
|
||||
1234:5678:aaac::5
|
||||
```
|
||||
|
||||
Требуемое процессорное время для вычислений сильно зависит от ширины диапазона длин префиксов, размера искомых подсетей и длины листа.
|
||||
Если ip2net думает слишком долго, не используйте слишком большие подсети и уменьшите диапазон длин префиксов.
|
||||
Учтите, что арифметика mul/div - целочисленная. При превышении разрядной сетки 32 bit результат непредсказуем.
|
||||
Не надо делать такое: 5000000/10000000. 1/2 - гораздо лучше.
|
||||
|
||||
## mdig
|
||||
|
||||
Программа предназначена для многопоточного ресолвинга больших листов через системный DNS.
|
||||
Она берет из stdin список доменов и выводит в stdout результат ресолвинга. Ошибки выводятся в stderr.
|
||||
|
||||
```
|
||||
--threads=<threads_number> ; количество потоков. по умолчанию 1.
|
||||
--family=<4|6|46> ; выбор семейства IP адресов : ipv4, ipv6, ipv4+ipv6
|
||||
--verbose ; дебаг-лог на консоль
|
||||
--stats=N ; выводить статистику каждые N доменов
|
||||
--log-resolved=<file> ; сохранять успешно отресолвленные домены в файл
|
||||
--log-failed=<file> ; сохранять неудачно отресолвленные домены в файл
|
||||
--dns-make-query=<domain> ; вывести в stdout бинарный DNS запрос по домену. если --family=6, запрос будет AAAA, иначе A.
|
||||
--dns-parse-query ; распарсить бинарный DNS ответ и выдать все ivp4 и ipv6 адреса из него в stdout
|
||||
```
|
||||
|
||||
Параметры `--dns-make-query` и `--dns-parse-query` позволяют провести ресолвинг одного домена через произвольный канал.
|
||||
Например, следующим образом можно выполнить DoH запрос, используя лишь mdig и curl :
|
||||
|
||||
```
|
||||
mdig --family=6 --dns-make-query=rutracker.org | curl --data-binary @- -H "Content-Type: application/dns-message" https://cloudflare-dns.com/dns-query | mdig --dns-parse-query
|
||||
```
|
||||
|
||||
# blockcheck2
|
||||
|
||||
blockcheck2 - это средство автоматизации проверки стратегий. Представляет собой posix shell script. Имеет модульную структуру тестов.
|
||||
|
||||
Тест - это набор подключаемых шелл-скриптов для тестирования блока стратегий. Тестируемые стратегии могут формироваться алгоритмом скрипта в зависимости от различных условий или успешности предыдущих проверок, чтобы сократить общее время проверок.
|
||||
|
||||
Наборы тестов располагаются в субдиректориях blockcheck2.d. Название субдиректории есть название теста.
|
||||
|
||||
blockcheck2 по умолчанию работает в интерактивном режиме, выводя сообщения и спрашивая у пользователя параметры. Но параметров слишком много, поэтому спрашиваются далеко не все из них, а только основные. Оставшиеся передаются через [shell переменные](#shell-переменные).
|
||||
|
||||
Типичная схема запуска с переменными :
|
||||
|
||||
`BATCH=1 DOMAINS=bbc.com CURL_CMD=1 SKIP_DNSCHECK=1 /opt/zapret2/blockcheck2.sh`
|
||||
|
||||
Если нужно записать лог, это делается стандартными для shell средствами :
|
||||
|
||||
`/opt/zapret2/blockcheck2.sh | tee /tmp/blockcheck2.log`
|
||||
|
||||
В [win bundle](https://github.com/bol-van/zapret-win-bundle) можно пользоваться cygwin prompt (`cygwin/cygwin-admin.cmd`). Там уже созданы alias-ы для запуска blockcheck из первой версии zapret, blockcheck2, winws, winws2 с подключенными стандартными LUA скриптами. Это удобно, потому что не нужно думать о путях и каждый раз писать или вставлять откуда-то огромный текст, тем боллее при наличии национальных символов и пробелов в путях, путаясь в экранировании символов и кодировках.
|
||||
|
||||
Возможно последовательное тестирование нескольких доменов. Для этого нужно задать их через пробел.
|
||||
|
||||
Поддерживаются URI вида `rutracker.org/forum/index.php`. Префикса с протоколом вида `https://` быть не должно. По умолчанию используется URI - корень ('/'). http тестируется через метод GET, https - через метод HEAD, поскольку под tls все равно ничего не видно. Однако, бывают ситуации, когда идет блок не сразу - по длинному ответу сервера. В этом случае можно пользоваться [CURL_HTTPS_GET=1](#shell-переменные) и указать URI, по которому сервер возвращает длинный ответ.
|
||||
|
||||
blockcheck2 не является панацеей, не является средством генерации магических букв, которые надо куда-то вписать, чтобы сайты начали открываться. Это настраиваемое средство исследования DPI и автоматизации рутинной работы. Понимание выдаваемых результатов и способов их применения ложится на пользователя.
|
||||
|
||||
Не стоит так же ждать от blockcheck каких-то сверхсложных алгоритмов выбора стратегий. shell скрипты не являются полноценным языком программирования, не содержат средств работы со сложными структурами данных. Программирование на shell при работе со сложными данными часто превращается в мучение, поскольку их надо как-то записывать в линейный набор переменных окружения.
|
||||
|
||||
blockcheck2 работает не всех поддерживаемых платформах - Linux, FreeBSD, OpenBSD, Windows. На Windows самый простой способ им воспользоваться - через [win bundle](https://github.com/bol-van/zapret-win-bundle) - минимальную систему cygwin, преднастроенную для zapret.
|
||||
|
||||
## Проверка DNS
|
||||
|
||||
Ничего не будет работать, если на заблокированные домены провайдер будет отдавать подмененные IP адреса, если только ваш клиент или ОС не поддерживают передачу запросов через шифрованные каналы (DoH, например). Даже если броузер и заработает из-за встроенного DoH, существуют и другие программы, в которых поддержки нет. Если сама ОС поддерживает шифрованный DNS - можно воспользоваться этой возможностью, а если нет - решение проблемы DNS ложится на вас.
|
||||
|
||||
Если IP подменяются только на DNS серверах провайдера, а доступ к другим DNS не блокируется и не подменяется, можно использовать другие DNS. Например, публичные - 1.1.1.1, 8.8.8.8, 9.9.9.9. Если доступ к другим DNS блокируется или подменяется, нужно шифровать DNS канал. Может быть и так, что подмена идет только на порту 53, а на других портах DNS ответы не подменяются. Но такую конфигурацию не поддерживают клиенты. Нужно или сделать прозрачное перенаправление на роутере, или использовать аггрегатор DNS (dnsmasq, например), который поддерживает обращение к DNS на нестандартных портах.
|
||||
|
||||
yandex предоставляет DNS на портах 1253. На openwrt он прописывается довольно просто :
|
||||
|
||||
**/etc/config/dhcp**
|
||||
```
|
||||
config dnsmasq
|
||||
list server '77.88.8.88#1253'
|
||||
```
|
||||
**/etc/config/network**
|
||||
```
|
||||
config interface 'wan'
|
||||
option peerdns '0'
|
||||
```
|
||||
|
||||
blockcheck2 способен определить подменяется ли DNS и перехватывается ли обращение к сторонним DNS. Если есть подмена, он автоматически переходит на DoH.
|
||||
Список внешних DNS серверов, доменов для тестирования подмены, выбранный DoH сервер и список DoH серверов для автоматического выбора меняются через [shell переменные](#shell-переменные). Тем же способом можно и отказаться от тестирования.
|
||||
|
||||
Переменная `SECURE_DNS` позволяет принудительно отключить переход на DoH или наоборот - форсировать его, даже если подмены нет.
|
||||
|
||||
## Основные режимы тестирования
|
||||
|
||||
### Множественные попытки
|
||||
|
||||
Ситуация нестабильности стратегий - явление частое. Бывает у провайдера балансировка нагрузки , и разные запросы проходят через разные DPI. То работает, то не работает. Стабильность стратегий тестируется за счет множественных повторений - попыток. Количество попыток задается в диалоге или через [shell переменные](#shell-переменные).
|
||||
|
||||
[Поддерживается](#shell-переменные) параллельный режим. В нем каждая попытка выполняется в отдельном дочернем процессе, а потом собираются результаты со всех процессов. Режим включается только через (переменную PARALLEL](#shell-переменные). Может значительно ускорить тестирование, но так же может и нарваться на rate limit - ситуацию, когда сервер вас ограничивает или банит из-за слишком частой долбежки.
|
||||
|
||||
### Уровни сканирования
|
||||
|
||||
* standard - использовать алгоритм теста, позволяющий исключить тестирование неактуальных по его мнению стратегий в зависимости от успешности предыдущих или по каким-то другим критериям. В случае множественных попыток тестирование не прекращается при неудаче. Процент успеха и ошибки curl тоже могут служить полезной информации при анализе ситуации.
|
||||
* quick - то же самое, что и standard, но при использовании множественных попыток прекращение тестирования после первой неудачи
|
||||
* force - тестировать максимально много без учета результата предыдущих тестов
|
||||
|
||||
### Поддерживаемые протоколы
|
||||
|
||||
blockcheck2 тестирует стратегии через curl. Доступна проверка http, https через TLS 1.2, https через TLS 1.3 и http3 (quic). Поддержка TLS 1.3 и quic может отсутствовать в curl, который установлен в вашей системе. Если это так, можно взять статический curl с [curl.se](https://curl.se), записать его куда-нибудь, дать права на исполнение и указать переменную `CURL=<путь>/curl`. Тогда блокчек будет использовать его вместо системного. На OpenWRT с минимумом места на диске можно использовать `/tmp`, который есть tmpfs и хранится в RAM.
|
||||
|
||||
TLS 1.2 - более сложен для обхода DPI, чем TLS 1.3 по причине возврата в TLS server hello сертификата в открытом виде, где прописан домен. По ответу сервера DPI может блокировать соединение, и с этим что-то сделать довольно сложно. Для обхода TLS 1.2 лучшая тактика - сделать так, чтобы DPI удовлетворился запросом от клиента и не стал проверять ответ сервера. Если это никак не выходит, есть [wssize](#wssize), но он снижает скорость и не работает с хостлистами.
|
||||
|
||||
TLS 1.3 выдает минимум незашифрованной информации в TLS server hello. Там нет информации о домене в открытом виде, как и нет практически никакого fingerprint, поэтому DPI не может блокировать по домену за счет анализа ответа сервера, но может блокировать по протоколу TLS вообще, если в его правилах стоит запрет TLS.
|
||||
|
||||
### Проверка блока по IP
|
||||
|
||||
zapret не может обойти блок по IP.
|
||||
Блоки по IP бывают разные.
|
||||
|
||||
1. Полный блок IP. Не доходит ничего. Нет ни пингов, ни коннекта на порт. Без проксирования ничего сделать нельзя.
|
||||
2. Блок по порту или L4 протоколу. Например, пинги ходят, но не коннектят никакие tcp порты, udp тоже ходят. Или заблокирован порт tcp 443. Блокировка tcp порта означает, что все пакеты с этим destination port блокируются. Коннект повисает на бесконечной отправке SYN запросов, 3-way handshake не проходит. Без проксирования ничего сделать нельзя.
|
||||
3. Частичный блок по ip/port. 3-way handshake проходит, но дальше все, что бы вы туда ни отправляли, приводит лишь к зависанию или к приходу RST. Сам факт, что коннект проходит, уже говорит о потенциальной возможности наличия неких "белых" сообщений, которые открывают доступ. Это могут быть запросы с белыми SNI или пакеты с какими-то другим протоколом - не TLS. Пробить этот блок можно только если у вас есть готовая информация чем его пробивать или вы достаточно владеете техническими средствами и у вас достаточно упорства, чтобы проверять варианты вручную.
|
||||
|
||||
blockcheck2 способен содействовать в определении IP блока, но он не выносит самостоятельный вердикт - вы должны сами решить по его действиям есть ли блок.
|
||||
|
||||
Первым делом проверяется доступность порта через nc или ncat. Они должны быть установлены, из коробки их может не быть. Предпочителен ncat, поскольку у него больше возможностей и точно нет проблем с ipv6. Если не установлено - тест отменяется. Вынесению автоматического решения препятствует несогласованность exit кодов разных вариантов netcat. Где-то вообще не возвращается информация об успехе или неудаче, а только сообщения, зависящие от версии.
|
||||
|
||||
Вы должны посмотреть лог, и если не увидите успеха подключения на порт, значит это может говорить о блокировке ip/порта. Может быть блокировка только части IP ресурса. Если продолжить ничего не делая - стратегии будут работать нестабильно, потому что запросы пойдут на случайный IP из доступных. Если блокированы все ip/port - дальнейшая проверка полностью теряет смысл - везде будут ошибки.
|
||||
|
||||
Далее следует проверка частичного IP блока через curl. Исследуется ситуация, когда коннект на порт есть. Задача выяснить происходит ли блокировка на IP блокированного домена при использовании неблокированного домена и наоборот. Если на IP блокированного домена не проходят неблокированные домены, но они проходят на своих родных IP адресах, значит есть частичный блок по IP. Если блокированные домены не проходят на IP неблокированных доменов, а сами неблокированные домены - проходят, значит есть блок по SNI. Блоки по IP и SNI могут сочетаться.
|
||||
|
||||
Оценка успеха или неуспеха этих проверок и есть та загводзка, из-за которой интерпретация результата ложится на человека. Что есть успех и не успех ? Это очень сильно варьируется и может зависеть как от DPI, так и от самого сервера.
|
||||
|
||||
Например, ошибка TLS при запросе через SNI iana.org на IP rutracker.org, может свидетельствовать об успехе. Ошибка сертификата может быть как успехом, так и неудачей - неверный сертификат может вернуть как сам сервер, так и DPI в результате MiTM атаки. Вам важно понять вернул ли сервер хоть какой-то ответ и является ли это действительно ответом сервера или является результатом работы DPI. TLS alert при запросе домена, который не хостится на сервере, явление нормальное и частое. Но может так же и быть, что сервер выдает страницу на любой SNI в TLS - тоже нормальная ситуация.
|
||||
|
||||
Подвисание - это обычно неудача, но может быть и следствием проблем на самом сервере или если он вас забанил. RST - вероятно неудача, но может быть и легитимным ответом сервера или его системы DDoS защиты.
|
||||
|
||||
Вариантов здесь много, поэтому смотрите и рассуждайте.
|
||||
|
||||
#### Примеры блокировки только по домену без блока по IP
|
||||
|
||||
```
|
||||
> testing iana.org on it's original
|
||||
!!!!! AVAILABLE !!!!!
|
||||
> testing rutracker.org on 192.0.43.8 (iana.org)
|
||||
curl: (28) Operation timed out after 1002 milliseconds with 0 bytes received
|
||||
> testing iana.org on 172.67.182.196 (rutracker.org)
|
||||
HTTP/1.1 409 Conflict
|
||||
> testing iana.org on 104.21.32.39 (rutracker.org)
|
||||
HTTP/1.1 409 Conflict
|
||||
|
||||
> testing iana.org on it's original ip
|
||||
!!!!! AVAILABLE !!!!!
|
||||
> testing rutracker.org on 192.0.43.8 (iana.org)
|
||||
curl: (28) Connection timed out after 1001 milliseconds
|
||||
> testing iana.org on 172.67.182.196 (rutracker.org)
|
||||
curl: (35) OpenSSL/3.2.1: error:0A000410:SSL routines::ssl/tls alert handshake failure
|
||||
> testing iana.org on 104.21.32.39 (rutracker.org)
|
||||
curl: (35) OpenSSL/3.2.1: error:0A000410:SSL routines::ssl/tls alert handshake failure
|
||||
|
||||
> testing iana.org on it's original ip
|
||||
!!!!! AVAILABLE !!!!!
|
||||
> testing rutracker.org on 192.0.43.8 (iana.org)
|
||||
HTTP/1.1 307 Temporary Redirect
|
||||
Location: https://www.gblnet.net/blocked.php
|
||||
> testing iana.org on 172.67.182.196 (rutracker.org)
|
||||
HTTP/1.1 409 Conflict
|
||||
> testing iana.org on 104.21.32.39 (rutracker.org)
|
||||
HTTP/1.1 409 Conflict
|
||||
|
||||
> testing iana.org on it's original ip
|
||||
!!!!! AVAILABLE !!!!!
|
||||
> testing rutracker.org on 192.0.43.8 (iana.org)
|
||||
curl: (35) Recv failure: Connection reset by peer
|
||||
> testing iana.org on 172.67.182.196 (rutracker.org)
|
||||
curl: (35) OpenSSL/3.2.1: error:0A000410:SSL routines::ssl/tls alert handshake failure
|
||||
> testing iana.org on 104.21.32.39 (rutracker.org)
|
||||
curl: (35) OpenSSL/3.2.1: error:0A000410:SSL routines::ssl/tls alert handshake failure
|
||||
```
|
||||
|
||||
#### Пример полного IP блока или блока TCP порта при отсутствии блока по домену
|
||||
|
||||
```
|
||||
* port block tests ipv4 startmail.com:80
|
||||
ncat -z -w 1 145.131.90.136 80
|
||||
145.131.90.136 does not connect. netcat code 1
|
||||
ncat -z -w 1 145.131.90.152 80
|
||||
145.131.90.152 does not connect. netcat code 1
|
||||
|
||||
* curl_test_http ipv4 startmail.com
|
||||
- checking without DPI bypass
|
||||
curl: (28) Connection timed out after 2002 milliseconds
|
||||
UNAVAILABLE code=28
|
||||
|
||||
- IP block tests (requires manual interpretation)
|
||||
|
||||
> testing iana.org on it's original ip
|
||||
!!!!! AVAILABLE !!!!!
|
||||
> testing startmail.com on 192.0.43.8 (iana.org)
|
||||
HTTP/1.1 302 Found
|
||||
Location: https://www.iana.org/
|
||||
> testing iana.org on 145.131.90.136 (startmail.com)
|
||||
curl: (28) Connection timed out after 2002 milliseconds
|
||||
> testing iana.org on 145.131.90.152 (startmail.com)
|
||||
curl: (28) Connection timed out after 2002 milliseconds
|
||||
```
|
||||
|
||||
### Стандартные тесты
|
||||
|
||||
#### Тест standard
|
||||
|
||||
Основной тест, состоящий из ряда подтестов в `blockcheck2.d/standard`. Если вам не нужны какие-то тесты, можно скопировать директорию `standard` в `my` и оставить там только нужные скрипты. `def.in` нужен обязательно.
|
||||
|
||||
Принимает ряд дополнительных переменных :
|
||||
|
||||
```
|
||||
MIN_TTL - минимальный TTL
|
||||
MAX_TTL - максимальный TTL. 0 отключает тесты TTL
|
||||
MIN_AUTOTTL_DELTA - минимальная отрицательная дельта autottl
|
||||
MAX_AUTOTTL_DELTA - максимальная отрицательная дельта autottl. 0 отключает тесты AUTOTTL
|
||||
FAKE_REPEATS - количество повторов fake
|
||||
FOOLINGS46_TCP - список через пробел фулингов TCP для ipv4+ipv6
|
||||
FOOLINGS6_TCP - список через пробел особых фулингов TCP для ipv6
|
||||
|
||||
FAKE_HTTP - путь к файлу с фейком для http
|
||||
FAKE_HTTPS - путь к файлу с фейком для https
|
||||
FAKED_PATTERN_HTTP - путь к файлу с fakedsplit/fakeddisorder pattern для http
|
||||
FAKED_PATTERN_HTTPS - путь к файлу с fakedsplit/fakeddisorder pattern для https
|
||||
FAKE_QUIC - путь к файлу с фейком для quic
|
||||
SEQOVL_PATTERN_HTTP - путь к файлу с seqovl pattern для http
|
||||
SEQOVL_PATTERN_HTTPS - путь к файлу с seqovl pattern для https
|
||||
|
||||
NOTEST_BASIC_HTTP=1 - отмена тестов 10-http-basic.sh
|
||||
NOTEST_MULTI_HTTP=1 - отмена тестов http 20-multi.sh
|
||||
NOTEST_MULTI_HTTPS=1 - отмена тестов https 20-multi.sh
|
||||
NOTEST_SEQOVL_HTTP=1 - отмена тестов http 23-seqovl.sh
|
||||
NOTEST_SEQOVL_HTTPS=1 - отмена тестов https 23-seqovl.sh
|
||||
NOTEST_FAKE_HTTP=1 - отмена тестов http 25-fake.sh
|
||||
NOTEST_FAKE_HTTPS=1 - отмена тестов https 25-fake.sh
|
||||
NOTEST_FAKED_HTTP=1 - отмена тестов http 25-faked.sh
|
||||
NOTEST_FAKED_HTTPS=1 - отмена тестов https 25-faked.sh
|
||||
NOTEST_HOSTFAKE_HTTP=1 - отмена тестов http 35-hostfake.sh
|
||||
NOTEST_HOSTFAKE_HTTPS=1 - отмена тестов https 35-hostfake.sh
|
||||
NOTEST_FAKE_MULTI_HTTP=1 - отмена тестов http 50-fake-multi.sh
|
||||
NOTEST_FAKE_MULTI_HTTPS=1 - отмена тестов https 50-fake-multi.sh
|
||||
NOTEST_FAKE_FAKED_HTTP=1 - отмена тестов http 55-fake-faked.sh
|
||||
NOTEST_FAKE_FAKED_HTTPS=1 - отмена тестов https 55-fake-faked.sh
|
||||
NOTEST_FAKE_HOSTFAKE_HTTP=1 - отмена тестов http 60-fake-hostfake.sh
|
||||
NOTEST_FAKE_HOSTFAKE_HTTPS=1 - отмена тестов https 60-fake-hostfake.sh
|
||||
NOTEST_QUIC=1 - отмена тестов 90-quic.sh
|
||||
```
|
||||
|
||||
#### Тест custom
|
||||
|
||||
Простой тестировщик по списку стратегий из файлов. Стратегии должны быть на отдельных строчках, переносы строки не допускаются. Используются отдельные списки для протоколов - `list_http.txt`, `list_https_tls12.txt`, `list_https_tls13.txt`, `list_quic.sh`. В файлах поддерживаются комментарии, начинающиеся на `#`.
|
||||
|
||||
Самый правильный способ применения - скопировать в свою поддиректорию внутри `blockcheck2.d` и заполнить txt файлы с тестами. Выбрать свое имя теста в диалоге.
|
||||
|
||||
### Summary
|
||||
|
||||
В конце теста выдаются все успешные стратегии по каждому домену и каждой версии ip протокола. Если тестировалось более одного домена, дополнительно выдается пересечение успешных стратегий. Однако, ему можно полностью доверять только при использовании SCANLEVEL=force. Иначе возможна ситуация, когда для первого домена не стали тестировать стратегии, которые подошли бы для последующих.
|
||||
|
||||
## Shell переменные
|
||||
|
||||
```
|
||||
CURL - замена программы curl
|
||||
CURL_MAX_TIME - время таймаута curl в секундах
|
||||
CURL_MAX_TIME_QUIC - время таймаута curl для quic. если не задано, используется значение CURL_MAX_TIME
|
||||
CURL_MAX_TIME_DOH - время таймаута curl для DoH серверов
|
||||
CURL_CMD=1 - показывать команды curl
|
||||
CURL_OPT - дополнительные параметры curl. `-k` - игнор сертификатов. `-v` - подробный вывод протокола
|
||||
CURL_HTTPS_GET=1 - использовать метод GET вместо HEAD для https
|
||||
DOMAINS - список тестируемых доменов или доменов с URI через пробел
|
||||
TEST - имя теста
|
||||
IPVS=4|6|46 - тестируемые версии ip протокола
|
||||
ENABLE_HTTP=0|1 - включить тест plain http
|
||||
ENABLE_HTTPS_TLS12=0|1 - включить тест https TLS 1.2
|
||||
ENABLE_HTTPS_TLS13=0|1 - включить тест https TLS 1.3
|
||||
ENABLE_HTTP3=0|1 - включить тест QUIC
|
||||
REPEATS - количество попыток тестирования
|
||||
PARALLEL=0|1 - включить параллельные попытки. может обидеть сайт из-за долбежки и привести к неверному результату
|
||||
SCANLEVEL=quick|standard|force - уровень сканирования
|
||||
BATCH=1 - пакетный режим без вопросов и ожидания ввода в консоли
|
||||
HTTP_PORT, HTTPS_PORT, QUIC_PORT - номера портов для соответствующих протоколов
|
||||
SKIP_DNSCHECK=1 - отказ от проверки DNS
|
||||
SKIP_IPBLOCK=1 - отказ от тестов блокировки по порту или IP
|
||||
PKTWS_EXTRA_POST - дополнительные параметры nfqws/dvtws/winws, указываемые после основной стратегии
|
||||
PKTWS_EXTRA_POST_1 .. PKTWS_EXTRA_POST_9 - отдельно дополнительные параметры, содержащие пробелы
|
||||
PKTWS_EXTRA_PRE - дополнительные параметры для nfqws/dvtws/winws, указываемые перед основной стратегией
|
||||
PKTWS_EXTRA_PRE_1 .. PKTWS_EXTRA_PRE_9 - отдельно дополнительные параметры, содержащие пробелы
|
||||
DNSCHECK_DNS - список сторонних DNS через пробел для тестирования подмены DNS
|
||||
DNSCHECK_DOM - список доменов через пробел для тестирования подмены DNS
|
||||
SECURE_DNS=0|1 - принудительно выключить или включить DoH
|
||||
DOH_SERVERS - список URL DoH через пробел для автоматического выбора работающего сервера
|
||||
DOH_SERVER - конкретный DoH URL, отказ от поиска
|
||||
UNBLOCKED_DOM - незаблокированный домен, который используется для тестов IP block
|
||||
SIMULATE=1 - включить режим симуляции для отладки логики скрипта. отключаются реальные запросы через curl, заменяются рандомным результатом.
|
||||
SIM_SUCCESS_RATE=<percent> - вероятность успеха симуляции в процентах
|
||||
```
|
||||
|
||||
|
||||
# Скрипты запуска
|
||||
|
||||
Под скриптами запуска понимается обвязка для Linux, позволяющая устанавливать, настраивать, и удалять программу. Сюда же входит система обслуживания файлов IP и хост листов. Она поддерживает openwrt и классические Linux с systemd и openrc. Для остальных Linux и прошивок возможна настройка параметров, но обеспечить автозапуск вам нужно самостоятельно.
|
||||
|
||||
Из прошивок гарантируется работа только на OpenWRT, начиная с 18-й версии. На более старых может работать или частично не работать. На keenetic работает под entware, но только в составе дополнительных "обеспечительных мер", которые выходят за рамки проекта zapret2 и поддерживаются сторонними разработчиками. На остальных прошивках прикрутка ложится целиком на пользователя.
|
||||
|
||||
nfqws2 может работать и самостоятельно без скриптов запуска. Но вам необходимо будет обеспечить автоматический запуск, передачу параметров, настройки фаервола.
|
||||
|
||||
На Windows система запуска не требуется - все как правило решается батниками для запуска winws2 в интерактивном режиме или управления службой.
|
||||
|
||||
На BSD работает только система получения листов из ipset. На FreeBSD она умеет загружать ipset-ы (tables) в ipfw. На OpenBSD файлы с ip листами загружает сам pf.
|
||||
|
||||
Reference in New Issue
Block a user