mirror of
https://github.com/gSpotx2f/ruantiblock_openwrt.git
synced 2026-05-14 14:40:58 +00:00
Initial Home page
+180
@@ -0,0 +1,180 @@
|
||||
## Описание
|
||||
|
||||
Ruantiblock - решение для обхода блокировок (при помощи Tor или VPN-соединения) с выборочной проксификацией трафика к заблокированным ресурсам (при этом доступ к остальным ресурсам осуществляется напрямую). В качестве источника списка блокировок поддерживаются выгрузки с сайтов: [https://rublacklist.net](http://rublacklist.net), [zapret-info](https://github.com/zapret-info/z-i) и [https://antifilter.download](https://antifilter.download), а также список созданный самим пользователем. Включает в себя функции управления правилами iptables, списками ipset и парсер списка блокировок. Доступны конфигурации с использованием доменных имен (dnsmasq) и IP адресов (включая диапазоны CIDR).
|
||||
|
||||
Данная версия решения предназначена для OpenWrt. В отличии от других решений подобного типа не имеет жёсткой интеграции и привязки исключительно к OpenWrt (при этом поддерживает конфигурацию через UCI, а также имеется функциональное LuCI-приложение) и может быть перенесено на другие Linux. Вся конфигурация находится в одном месте, все операции выполняются с помощью одного скрипта (`/usr/bin/ruantiblock`), широкие возможности конфигурации. Помимо прочего, данное решение предлагает опции для собственной тонкой настройки оптимизации списка блокировок: группировка и суммаризация IP, объединение поддоменов, фильтрация записей по шаблонам...
|
||||
|
||||
|
||||
## [Установка](https://github.com/gSpotx2f/ruantiblock_openwrt/wiki/%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0)
|
||||
|
||||
|
||||
## Режимы прокси
|
||||
|
||||
Доступны два режима проксификации трафика: с использованием сети Tor или клиентского VPN соединения (OpenVPN). Режим прокси определяется парметром `ruantiblock.config.proxy_mode`. `1` - Tor, `2` - VPN. Включение VPN конфигурации:
|
||||
|
||||
uci set ruantiblock.config.proxy_mode="2"
|
||||
uci commit ruantiblock
|
||||
|
||||
Данный параметр влияет, в первую очередь, на процесс создания правил iptables. В Tor конфигурации правила создаются в цепочке `nat`, при VPN конфигурации - в `mangle`. Соответственно, и удаление правил при выключении ruantiblock зависит от выбранного типа прокси. Поэтому, перед изменением этого параметра следует отключить ruantiblock (`/usr/bin/ruantiblock stop`), для корректного удаления правил предыдущей конфигурации.
|
||||
|
||||
|
||||
## Режимы обновления блэклиста и модули-парсеры
|
||||
|
||||
Обновление блэклиста может выполняться в 2-х режимах:
|
||||
|
||||
1. Режим `ip` - в этом режиме модули загружают из блэклиста все IP адреса и диапазоны CIDR, которые содержатся в записях, и они сразу помещаются в соответствующие ipset'ы. Данный вариант не задействует в своей работе dnsmasq, т.е список блокировок статичен и формируется только при обновлении.
|
||||
|
||||
2. Режим `fqdn` - в этом режиме из блэклиста извлекаются доменные имена (FQDN). Из записей, в которых отсутствует доменное имя, извлекаются IP адреса и CIDR диапазоны. Домены заносятся в конфиг dnsmasq и, далее, dnsmasq формирует временный список ipset по мере обращения к этим доменам - записи добавляются и удаляются динамически на основе DNS-запросов и таймаута. Т.е. домены обрабатывает dnsmasq, а CIDR диапазоны и IP адреса помещаются сразу в ipset. В этом режиме разрешение доменного имени в IP адрес происходит при обращении к заблокированному сайту, следовательно IP адрес сайта всегда будет актуальным (даже если устарел в самом списке блокировок).
|
||||
|
||||
Режим работы модуля можно задать в UCI:
|
||||
|
||||
uci set ruantiblock.config.bllist_mode="ip"
|
||||
uci commit ruantiblock
|
||||
|
||||
**Модули-парсеры:**
|
||||
|
||||
`/usr/bin/ruab_parser.lua` - стандартный модуль на Lua. Работает быстро, когда достаточно свободной оперативной памяти.
|
||||
|
||||
`/usr/bin/ruab_parser.py` - дополнительный модуль, написан на Python3 и не имеет проблем с кириллицей, кодировкой CP1251 (`zapret-info`) и пр. Очень стабильный, аккуратно раcходует память. Недостаток лишь в том, что нужно ставить Python3. [Установка](https://github.com/gSpotx2f/ruantiblock_openwrt/wiki/Python-%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D1%8C).
|
||||
|
||||
Модуль можно задать в UCI:
|
||||
|
||||
uci set ruantiblock.config.bllist_module="/usr/bin/ruab_parser.py"
|
||||
uci commit ruantiblock
|
||||
|
||||
**Источники блэклиста:**
|
||||
|
||||
`rublacklist` - https://rublacklist.net. Применяется по умолчанию. Имеет удобный API и в выдаче нет ничего лишнего.
|
||||
|
||||
`zapret-info` - https://raw.githubusercontent.com/zapret-info/z-i/master/dump.csv. Чистый реестр от РКН в исходном виде. Содержит много лишних данных (всякие статьи, основания, судебные решения и пр. для каждой записи), что увеличивает размер файла (к тому же в кодировке CP1251). Можно использовать вместо предыдущего, разница лишь в чуть более долгой работе модуля-парсера при обновлениях.
|
||||
|
||||
`antifilter` - https://antifilter.download. Этот источник для устройств, которым не хватает оперативной памяти для полных списков блокировок. В режиме `fqdn` модули загружают только список доменов (без IP адресов). В режиме `ip` - оптимизированный список IP адресов (все адреса приведены к маске /24), который очень компактен в размере, но покрывает огромное количество лишних IP адресов в диапазонах.
|
||||
|
||||
Изменение источника блэклиста в конфигурации:
|
||||
|
||||
uci set ruantiblock.config.bllist_source="zapret-info"
|
||||
uci commit ruantiblock
|
||||
|
||||
|
||||
## Дополнительные настройки
|
||||
|
||||
Далее описаны некоторые опции доступные через UCI, они переопределяют часть переменных конфигурационного файла `/etc/ruantiblock/ruantiblock.conf`.
|
||||
|
||||
+ **Проксификация трафика локальных клиентов (`PROXY_LOCAL_CLIENTS=1`):**
|
||||
|
||||
Эта опция включает обработку трафика локальных приложений роутера в ruantiblock. Т.е. различные сетевые утилиты установленные на самом роутере ходят на заблокированные сайты через Tor или VPN. Можно отключить если нет необходимости:
|
||||
|
||||
uci set ruantiblock.config.proxy_local_clients="0"
|
||||
|
||||
+ **Очистка ipset перед обновлением блэклиста (`IPSET_CLEAR_SETS=0`):**
|
||||
|
||||
Включение этой опции позволяет освободить некоторое количество оперативной памяти (зависит от текущего размера списка блокировок) перед обновлением блэклиста. Недостаток в том, что во время обновления не применяются правила отбора трафика в Tor или VPN, т.е. обход блокировок не работает до завершения обновления блэклиста. Следует применять лишь в случае проблем со свободной оперативной памятью. Включить:
|
||||
|
||||
uci set ruantiblock.config.ipset_clear_sets="1"
|
||||
|
||||
+ **LAN интерфейс:**
|
||||
|
||||
Параметр нужен для правил iptables в Tor конфигурации. Должен содержать интерфейс, через который приходят пакеты из локальной сети. По умолчанию: `eth0`
|
||||
|
||||
ruantiblock.config.if_lan="eth0"
|
||||
|
||||
+ **VPN интерфейс:**
|
||||
|
||||
Параметр нужен для правил маршрутизации в VPN конфигурации. Должен содержать интерфейс L3 VPN. По умолчанию (OpenVPN): `tun0`
|
||||
|
||||
ruantiblock.config.if_vpn="tun0"
|
||||
|
||||
+ **Запись событий в syslog (`USE_LOGGER=1`):**
|
||||
|
||||
Опция включает запись событий в системный лог. Отключить:
|
||||
|
||||
uci set ruantiblock.config.use_logger="0"
|
||||
|
||||
+ **Полная проксификация всего трафика, без применения правил блэклиста (`DEF_TOTAL_PROXY=0`):**
|
||||
|
||||
При активном ruantiblock можно включить режим полного прокси выполнив в консоли:
|
||||
|
||||
/usr/bin/ruantiblock total-proxy-on
|
||||
|
||||
В этом режиме весь трафик заворачивается в Tor или VPN, без применения правил блэклиста. Отключение:
|
||||
|
||||
/usr/bin/ruantiblock total-proxy-off
|
||||
|
||||
Этот режим доступен только при отключенной проксификации локальных клиентов (`PROXY_LOCAL_CLIENTS=0`, `ruantiblock.config.proxy_local_clients="0"`). Включение режима полного прокси при запуске ruantiblock:
|
||||
|
||||
uci set ruantiblock.config.def_total_proxy="1"
|
||||
|
||||
+ **Оптимизации записей в итоговых конфигах ipset и dnsmasq: группировка субдоменов и IP адресов, суммаризация IP адресов (`SD_LIMIT`, `IP_LIMIT`, `OPT_EXCLUDE_SLD`, `OPT_EXCLUDE_NETS`, `SUMMARIZE_IP`, `SUMMARIZE_CIDR`):**
|
||||
|
||||
[Подробнее здесь](https://github.com/gSpotx2f/ruantiblock_openwrt/wiki/%D0%A1%D0%BF%D0%BE%D1%81%D0%BE%D0%B1%D1%8B-%D0%BE%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8-%D0%B8-%D1%81%D0%BE%D0%BA%D1%80%D0%B0%D1%89%D0%B5%D0%BD%D0%B8%D1%8F-%D0%BA%D0%BE%D0%BB%D0%B8%D1%87%D0%B5%D1%81%D1%82%D0%B2%D0%B0-%D0%B7%D0%B0%D0%BF%D0%B8%D1%81%D0%B5%D0%B9-%D0%B2-%D1%81%D0%BF%D0%B8%D1%81%D0%BA%D0%B5-%D0%B1%D0%BB%D0%BE%D0%BA%D0%B8%D1%80%D0%BE%D0%B2%D0%BE%D0%BA)...
|
||||
|
||||
+ **Фильтрация записей блэклиста по шаблонам (`FQDN_FILTER`, `IP_FILTER`):**
|
||||
|
||||
Переменные определяют параметры функции предварительной фильтрации записей блэклиста. [Подробнее здесь](https://github.com/gSpotx2f/ruantiblock_openwrt/wiki/%D0%A4%D0%B8%D0%BB%D1%8C%D1%82%D1%80%D0%B0%D1%86%D0%B8%D1%8F-%D0%B7%D0%B0%D0%BF%D0%B8%D1%81%D0%B5%D0%B9-%D0%B1%D0%BB%D1%8D%D0%BA%D0%BB%D0%B8%D1%81%D1%82%D0%B0-%D0%BF%D0%BE-%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD%D0%B0%D0%BC)...
|
||||
|
||||
+ **Преобразование кириллических доменов в punycode (`USE_IDN=0`):**
|
||||
|
||||
В lua-модуле (`ruab_parser.lua`) преобразование выполняется дополнительной библиотекой lua-idn. Python-модуль (`ruab_parser.py`) уже имеет всё необходимое в стандартной библиотеке. Если существует насущная необходимость учитывать кириллические домены, то с этим лучше справляется именно python-модуль. Данная опция некорректно работает с источником `zapret-info` в lua-модуле, поскольку данные имеют кодировку CP1251 и конвертирование кодировок выполняется утилитой iconv, но OpenWrt не поддерживает CP1251. Поэтому, правило такое: если нужны кириллические домены и источник блэклиста `zapret-info` - используйте только python-модуль! Вообще, во всём списке блокировок количество кириллических доменов не значительно, без преобразования в punycode они просто не проходят через регулярные выражения и отбрасываются парсером... Включить:
|
||||
|
||||
uci set ruantiblock.config.use_idn="1"
|
||||
|
||||
+ **Разрешение DNS-имен через альтернативный DNS-сервер (`ALT_NSLOOKUP=0`):**
|
||||
|
||||
Добавление записи DNS-сервера для каждого домена в конфиге dnsmasq (очень существенно увеличивает размер конфига dnsmasq!):
|
||||
|
||||
uci set ruantiblock.config.alt_nslookup="1"
|
||||
|
||||
Если провайдер блокирует сторонние DNS-серверы, то необходимо использовать dnscrypt-proxy (или [https-dns-proxy](https://github.com/gSpotx2f/ruantiblock_openwrt/wiki/%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0-%D0%B8-%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0-https-dns-proxy) и пр.) на роутере. На сегодняшний день, лучший вариант - применять полное шифрование DNS, вообще без использования этой опции.
|
||||
|
||||
Tor также имеет свой собственный резолвер, который вполне можно использовать...
|
||||
|
||||
+ **Альтернативный DNS-сервер (`ALT_DNS_ADDR="8.8.8.8"`):**
|
||||
|
||||
Альтернативный DNS-сервер для предыдущего пункта.
|
||||
|
||||
uci set ruantiblock.config.alt_dns_addr="8.8.8.8"` # можно указывать с портом: "8.8.8.8#53"
|
||||
|
||||
Если `ruantiblock.config.alt_nslookup="1"`, то для каждого домена в конфиге dnsmasq добавляется дополнительная запись, указывающая использовать данный DNS-сервер для этого домена.
|
||||
|
||||
|
||||
Есть и другие параметры для более тонкой настройки, часть из них имеют пояснения в самом конфигурационном файле. Также, смотрите UCI-конфиг `/etc/config/ruantiblock`.
|
||||
|
||||
|
||||
## [Способы оптимизации и сокращения количества записей в списке блокировок.](https://github.com/gSpotx2f/ruantiblock_openwrt/wiki/%D0%A1%D0%BF%D0%BE%D1%81%D0%BE%D0%B1%D1%8B-%D0%BE%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8-%D0%B8-%D1%81%D0%BE%D0%BA%D1%80%D0%B0%D1%89%D0%B5%D0%BD%D0%B8%D1%8F-%D0%BA%D0%BE%D0%BB%D0%B8%D1%87%D0%B5%D1%81%D1%82%D0%B2%D0%B0-%D0%B7%D0%B0%D0%BF%D0%B8%D1%81%D0%B5%D0%B9-%D0%B2-%D1%81%D0%BF%D0%B8%D1%81%D0%BA%D0%B5-%D0%B1%D0%BB%D0%BE%D0%BA%D0%B8%D1%80%D0%BE%D0%B2%D0%BE%D0%BA)
|
||||
|
||||
|
||||
## [Записи пользователя в блэклисте.](https://github.com/gSpotx2f/ruantiblock_openwrt/wiki/%D0%97%D0%B0%D0%BF%D0%B8%D1%81%D0%B8-%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F-%D0%B2-%D0%B1%D0%BB%D1%8D%D0%BA%D0%BB%D0%B8%D1%81%D1%82%D0%B5)
|
||||
|
||||
|
||||
## Параметры запуска:
|
||||
|
||||
ruantiblock start # Включение ruantiblock. Создаются списки ipset, правила iptables и пр.
|
||||
ruantiblock stop # Выключение ruantiblock. Очищаются все списки ipset, удаляются правила iptables. Трафик идет стандартным способом, Tor или VPN не используется
|
||||
ruantiblock destroy # То же, что и stop + удаление всех списков ipset и очистка файлов ruantiblock.dnsmasq и ruantiblock.ip
|
||||
ruantiblock restart # Рестарт
|
||||
ruantiblock reload # Пересоздание цепочки и правил iptables (а также таблицы маршутизации при VPN-конфигурации)
|
||||
ruantiblock update # Обновление блэклиста и списков ipset
|
||||
ruantiblock force-update # Принудительное обновление блэклиста (может потребоваться если предыдущее обновление выполнено некорректно или было прервано в процессе выполнения)
|
||||
ruantiblock data-files # Создание файлов ruantiblock.dnsmasq и ruantiblock.ip, без обновления сетевой конфигурации
|
||||
ruantiblock total-proxy-on # Включение режима полного прокси. Весь трафик всегда идёт через прокси (Tor или VPN), списки блокировок не используются для отбора трафика (работает при включенном ruantiblock)
|
||||
ruantiblock total-proxy-off # Выключение режима полного прокси (работает при включенном ruantiblock)
|
||||
ruantiblock status # Вывод текущего статуса, а также общей инфо (кол-во записей в списках ipset, дата последнего обновления блэклиста и пр.)
|
||||
|
||||
|
||||
Перед изменением конфигурации ruantiblock необходимо обязательно выполнить удаление всех сетов и правил iptables:
|
||||
|
||||
/usr/bin/ruantiblock destroy
|
||||
|
||||
после изменения настроек выполнить обновление:
|
||||
|
||||
/usr/bin/ruantiblock start
|
||||
/usr/bin/ruantiblock update
|
||||
|
||||
|
||||
## Отключение запуска при загрузке системы
|
||||
|
||||
/etc/init.d/ruantiblock disable
|
||||
|
||||
|
||||
## [Если после установки возникли проблемы...](https://github.com/gSpotx2f/ruantiblock_openwrt/wiki/%D0%95%D1%81%D0%BB%D0%B8-%D0%BF%D0%BE%D1%81%D0%BB%D0%B5-%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B8-%D0%B2%D0%BE%D0%B7%D0%BD%D0%B8%D0%BA%D0%BB%D0%B8-%D0%BF%D1%80%D0%BE%D0%B1%D0%BB%D0%B5%D0%BC%D1%8B...)
|
||||
|
||||
Reference in New Issue
Block a user