mirror of
https://github.com/bol-van/zapret.git
synced 2025-04-20 22:12:58 +03:00
Compare commits
4 Commits
9735bd876c
...
f73b1a5d46
Author | SHA1 | Date | |
---|---|---|---|
|
f73b1a5d46 | ||
|
2cc73de15c | ||
|
9762f2d22b | ||
|
92ba6b439e |
153
docs/readme.md
153
docs/readme.md
@ -47,9 +47,9 @@ zapret является свободным и open source.
|
|||||||
- [СЛУЖЕБНЫЕ ПАРАМЕТРЫ](#служебные-параметры)
|
- [СЛУЖЕБНЫЕ ПАРАМЕТРЫ](#служебные-параметры)
|
||||||
- [IPTABLES ДЛЯ TPWS](#iptables-для-tpws)
|
- [IPTABLES ДЛЯ TPWS](#iptables-для-tpws)
|
||||||
- [NFTABLES ДЛЯ TPWS](#nftables-для-tpws)
|
- [NFTABLES ДЛЯ TPWS](#nftables-для-tpws)
|
||||||
- [Способы получения списка заблокированных IP](#способы-получения-списка-заблокированных-ip)
|
|
||||||
- [ip2net](#ip2net)
|
- [ip2net](#ip2net)
|
||||||
- [mdig](#mdig)
|
- [mdig](#mdig)
|
||||||
|
- [Способы получения списка заблокированных IP](#способы-получения-списка-заблокированных-ip)
|
||||||
- [Фильтрация по именам доменов](#фильтрация-по-именам-доменов)
|
- [Фильтрация по именам доменов](#фильтрация-по-именам-доменов)
|
||||||
- [Режим фильтрации autohostlist](#режим-фильтрации-autohostlist)
|
- [Режим фильтрации autohostlist](#режим-фильтрации-autohostlist)
|
||||||
- [Проверка провайдера](#проверка-провайдера)
|
- [Проверка провайдера](#проверка-провайдера)
|
||||||
@ -903,13 +903,15 @@ tpws, как и nfqws, поддерживает множественную се
|
|||||||
указанным сплит позициям. Другие ОС в этом вопросе ведут себя более предсказуемо. Спонтанного обьединения замечено не было.
|
указанным сплит позициям. Другие ОС в этом вопросе ведут себя более предсказуемо. Спонтанного обьединения замечено не было.
|
||||||
Поэтому не стоит злоупотреблять сплитами и в особенности мелкими соседними пакетами.
|
Поэтому не стоит злоупотреблять сплитами и в особенности мелкими соседними пакетами.
|
||||||
|
|
||||||
Как показывается практика, проблемы могут начаться , если количество сплит позиций превышает 8.
|
Как показывается практика, проблемы могут начаться , если количество сплитов более одного.
|
||||||
|
На каких-то системах наблюдался стабильный результат до 8 сплитов, на других проблемы уже начинались после 2 сплитов.
|
||||||
|
Один сплит работает стабильно, если не является частью массивной потоковой передачи.
|
||||||
При неудаче сегментации будет выводиться сообщение `WARNING ! segmentation failed`.
|
При неудаче сегментации будет выводиться сообщение `WARNING ! segmentation failed`.
|
||||||
Если вы его видите, это повод снизить количество сплит позиций.
|
Если вы его видите, это повод снизить количество сплит позиций.
|
||||||
Если это не вариант, для ядер Linux >=4.6 есть параметр `--fix-seg`. Он позволяет подождать завершение отсылки перед отправкой следующей части.
|
Если это не вариант, для ядер Linux >=4.6 есть параметр `--fix-seg`. Он позволяет подождать завершение отсылки перед отправкой следующей части.
|
||||||
Но этот вариант ломает модель асинхронной обработки событий. Пока идет ожидание, все остальные соединения не обрабатываются
|
Но этот вариант ломает модель асинхронной обработки событий. Пока идет ожидание, все остальные соединения не обрабатываются
|
||||||
и кратковременно подвисают. На практике это может быть совсем небольшое ожидание - менее 10 мс.
|
и кратковременно подвисают. На практике это может быть совсем небольшое ожидание - менее 10 мс.
|
||||||
И производится оно только , если происходит split, и в ожидании есть реальная необходимость.
|
Выполняется оно только , если происходит split, и в ожидании есть реальная необходимость.
|
||||||
В высоконагруженных системах данный вариант не рекомендуется. Но для домашнего использования может подойти, и вы эти задержки даже не заметите.
|
В высоконагруженных системах данный вариант не рекомендуется. Но для домашнего использования может подойти, и вы эти задержки даже не заметите.
|
||||||
|
|
||||||
Если вы пытаетесь сплитнуть массивную передачу с `--split-any-protocol`, когда информация поступает быстрее отсылки,
|
Если вы пытаетесь сплитнуть массивную передачу с `--split-any-protocol`, когда информация поступает быстрее отсылки,
|
||||||
@ -1125,6 +1127,78 @@ nft add rule inet ztest dnat_pre meta iifname $IFACE_LAN tcp dport { 80, 443 } d
|
|||||||
nft delete table inet ztest
|
nft delete table inet ztest
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## 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
|
||||||
|
```
|
||||||
|
|
||||||
## Способы получения списка заблокированных IP
|
## Способы получения списка заблокированных IP
|
||||||
|
|
||||||
@ -1223,79 +1297,6 @@ ipfw таблицы в отличие от ipset могут содержать
|
|||||||
Это особенно полезно на BSD системах с PF.
|
Это особенно полезно на BSD системах с PF.
|
||||||
LISTS_RELOAD=- отключает перезагрузку листов.
|
LISTS_RELOAD=- отключает перезагрузку листов.
|
||||||
|
|
||||||
## 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
|
|
||||||
```
|
|
||||||
|
|
||||||
## Фильтрация по именам доменов
|
## Фильтрация по именам доменов
|
||||||
|
|
||||||
Альтернативой ipset является использование tpws или nfqws со списком доменов.
|
Альтернативой ipset является использование tpws или nfqws со списком доменов.
|
||||||
|
40
ipset/get_antifilter_domains.sh
Normal file
40
ipset/get_antifilter_domains.sh
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
IPSET_DIR="$(dirname "$0")"
|
||||||
|
IPSET_DIR="$(cd "$IPSET_DIR"; pwd)"
|
||||||
|
|
||||||
|
. "$IPSET_DIR/def.sh"
|
||||||
|
|
||||||
|
TMPLIST="$TMPDIR/list.txt"
|
||||||
|
|
||||||
|
URL="https://antifilter.download/list/domains.lst"
|
||||||
|
|
||||||
|
dl()
|
||||||
|
{
|
||||||
|
# $1 - url
|
||||||
|
# $2 - file
|
||||||
|
# $3 - minsize
|
||||||
|
# $4 - maxsize
|
||||||
|
curl -L -H "Accept-Encoding: gzip" -k --fail --max-time 60 --connect-timeout 10 --retry 4 --max-filesize 251658240 -o "$TMPLIST" "$1" ||
|
||||||
|
{
|
||||||
|
echo list download failed : $1
|
||||||
|
exit 2
|
||||||
|
}
|
||||||
|
dlsize=$(LANG=C wc -c "$TMPLIST" | xargs | cut -f 1 -d ' ')
|
||||||
|
if test $dlsize -lt $3; then
|
||||||
|
echo list is too small : $dlsize bytes. can be bad.
|
||||||
|
exit 2
|
||||||
|
fi
|
||||||
|
zzcat "$TMPLIST" | tr -d '\015' | zz "$2"
|
||||||
|
rm -f "$TMPLIST"
|
||||||
|
}
|
||||||
|
|
||||||
|
# useful in case ipban set is used in custom scripts
|
||||||
|
FAIL=
|
||||||
|
getipban || FAIL=1
|
||||||
|
"$IPSET_DIR/create_ipset.sh"
|
||||||
|
[ -n "$FAIL" ] && exit
|
||||||
|
|
||||||
|
dl "$URL" "$ZHOSTLIST" 32768 4194304
|
||||||
|
|
||||||
|
exit 0
|
Loading…
x
Reference in New Issue
Block a user