43
Home
gSpot edited this page 2026-02-19 18:59:40 +03:00
This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Описание

Ruantiblock - решение для обхода блокировок (при помощи Tor, VPN-соединения или других решений для проксификации трафика поддерживающих локальные прозрачные прокси (Shadowsocks + ss-redir, Redsocks, sing-box и пр.)) с выборочной проксификацией трафика к заблокированным ресурсам (при этом доступ к остальным ресурсам осуществляется напрямую). В качестве источника списка блокировок поддерживаются выгрузки с сайтов: zapret-info, https://rublacklist.net и https://antifilter.download, а также список созданный самим пользователем. Включает в себя функции управления правилами nftables и парсер списка блокировок. Доступны конфигурации с использованием доменных имен (dnsmasq) и IP адресов (включая диапазоны CIDR).

Данная версия решения предназначена для OpenWrt. В отличии от других решений подобного типа не имеет жёсткой интеграции и привязки исключительно к OpenWrt (при этом поддерживает конфигурацию через UCI, а также имеется функциональное LuCI-приложение) и может быть перенесено на другие Linux. Вся конфигурация находится в одном месте, все операции выполняются с помощью одного скрипта (/usr/bin/ruantiblock), широкие возможности конфигурации. Помимо прочего, данное решение предлагает опции для собственной тонкой настройки оптимизации списка блокировок: группировка и суммаризация IP, объединение поддоменов, фильтрация записей по шаблонам...

Текущая актуальная ветка ruantiblock v2.x (для OpenWrt >= 23.05 с использованием nftables). Предыдущая ветка v1.x более не развивается.

Основные изменения в версии 2.0

  • Главное нововведение версии 2.0 - возможность использовать разные VPN/прокси для нескольких пользовательских списков.

  • В режим прозрачного прокси добавлена возможность выбора типа прокси: redirect или tproxy. Эта опция определяет тип действия в правилах nftables. Раньше для прозрачного прокси применялся только redirect, добавление tproxy обеспечивает поддержку прокси-серверов sing-box и xray в режиме TProxy.

  • Конфигурационные файлы версии 2.0 не совместимы с предыдущими версиями! Перед установкой новой версии необходимо полностью удалить старую. Также, для предотвращения потенциальных проблем с веб-интерфейсом, можно очистить кэш браузера после установки.

Установка

Автоматическая установка с помощью скрипта - ruantiblock v2.x (OpenWrt >= 23.05)

Самостоятельная установка и настройка ruantiblock v2.x (OpenWrt >= 23.05)

Дополнительно

Настройка ruantiblock для совместной работы с прокси сервером sing‑box

Настройка ruantiblock для совместной работы с прокси сервером xray

Использование бесплатных Shadowsocks прокси проекта Outline

Режимы прокси

Доступны три режима проксификации трафика: с использованием сети Tor, клиентского VPN соединения (OpenVPN, PPTP, WireGuard, OpenConnect и прочие L3 VPN предоставляющие сетевой интерфейс для маршрутизации трафика) и прозрачного прокси (например, Shadowsocks + ss-redir, Redsocks + Socks-прокси и пр.). Режим прокси определяется парметром ruantiblock.config.proxy_mode. 1 - Tor, 2 - VPN, 3 - прозрачный прокси. Включение режима в UCI (на примере VPN):

uci set ruantiblock.config.proxy_mode="2"
uci commit ruantiblock

Данный параметр влияет, в первую очередь, на процесс создания правил nftables.

Режимы обновления блэклиста и модули-парсеры

Доступны следующие режимы обновления блэклиста:

ruantiblock-fqdn
ruantiblock-ip
zapret-info-fqdn
zapret-info-fqdn-only
zapret-info-ip
rublacklist-fqdn
rublacklist-fqdn-only
rublacklist-ip
antifilter-fqdn
antifilter-fqdn-only
antifilter-ip

Так можно задать в UCI:

uci set ruantiblock.config.bllist_preset="zapret-info-fqdn"
uci commit ruantiblock

По сути, режим обновления блэклиста является комбинацией источника и типа обхода блокировок (ip, fqdn, fqdn-only). Первые два режима обновления блэклиста (ruantiblock-fqdn, ruantiblock-ip) не требуют установки модуля-парсера (см. далее).

Типы обхода блокировок:

Обход блокировок может выполняться в одном из двух вариантов:

  1. ip - модули загружают из блэклиста все IP адреса и диапазоны CIDR, которые содержатся в записях, и они сразу помещаются в соответствующие nftset'ы. Данный вариант не задействует в своей работе dnsmasq, т.е список блокировок статичен и формируется только при обновлении. Нужно отметить, что nftables имеет проблемы с большими сетами IP адресов. Даже на избыточно мощном железе эта проблема приводит к существенным подтормаживаниям утилиты nft при работе с таблицей в которой находится такой сет. Для устройств с ограниченными ресрсами (CPU, RAM) эта проблема может привести к существенной утечке памяти в моменты обновления блэклиста. Количество записей при котором проблема становится заметной - около 100000 записей, но всё зависит от количества доступной оперативной памяти. Поэтому использовать режим ip нужно лишь понимая к чему это может привести на вашем устройстве.

  2. fqdn - из блэклиста извлекаются доменные имена (FQDN). Из записей, в которых отсутствует доменное имя, извлекаются IP адреса и CIDR диапазоны. Домены заносятся в конфиг dnsmasq и, далее, dnsmasq формирует временный список nftset по мере обращения к этим доменам, записи добавляются и удаляются динамически на основе DNS-запросов и таймаута. Т.е. домены обрабатывает dnsmasq, а CIDR диапазоны и IP адреса помещаются сразу в nftset. В этом варианте разрешение доменного имени в IP адрес происходит при обращении к заблокированному сайту, следовательно IP адрес сайта всегда будет актуальным (даже если устарел в самом списке блокировок).

  3. fqdn-only - то же, что и fqdn, но из записей, в которых отсутствует доменное имя, НЕ извлекаются IP адреса и CIDR диапазоны, т.е. извлекаются только домены. Этот вариант может быть полезен, если заблокированные IP адреса и CIDR диапазоны берутся из другого источника через записи пользователя.

Источники блэклиста:

ruantiblock - https://github.com/gSpotx2f/ruantiblock_blacklist. Заранее созданные конфиги для nftables и dnsmasq. Загружаются уже готовые файлы, без выполнения каких-либо оптимизаций и обработок. Обновляется раз в сутки. Этот источник даёт блэклист для стандартной конфигурации ruantiblock и ваш роутер не выполняет никакой тяжёлой работы по обработке данных. Включен по умолчанию и не требует установки модуля-парсера. Можно организовать собственный источник заранее подготовленных конфигов со своими настройками, которые формируются вне роутера (например, на выделенном сервере или ПК и загружаются на GitHub). Это может быть полезно при наличии нескольких роутеров (использующих данное решение для обхода блокировок), где формирование конфигов nftables и dnsmasq происходит один раз на одной машине, а другие получают уже готовые сформированные конфиги (не выполняя повторно одну и ту же работу).

zapret-info - https://github.com/zapret-info/z-i. Реестр в формате csv, что делает его очень удобным для разбора. Очень надёжный источник, сбои бывают редко, расположен на GitHub (есть зеркала). Существует с самого начала блокировок в РФ, с 2012 года!

rublacklist - https://rublacklist.net. Блэклист от Роскомсвободы. В режиме fqdn, также, содержит много лишних данных и огромный размер выгрузки, но имеет удобный API. Бывают проблемы с надёжностью (недоступность сайта и пр). Можно использовать в случае недоступности других источников. Обновление из этого источника выполняется довольно долго из-за размера выгрузки.

antifilter - https://antifilter.download. Довольно надёжный источник, существует много лет. Очень удобный формат в виде простого списка. Также, отсюда можно взять оптимизированный список IP адресов (все адреса приведены к маске /24) для устройств, которым не хватает оперативной памяти для полных списков блокировок (очень компактен в размере, но покрывает большое количество лишних IP адресов в диапазонах). URL оптимизированного списка можно добавить в список удалённых записей пользователя и получать IP адреса напрямую, без установки парсера, отключив основной блэклист. Файл имеет простой формат совместимый с форматом файла записей пользователя.

Модули-парсеры:

Установка модуля необходима для самостоятельного формирования списка блокировок силами роутера. Модуль выкачивает данные из источника, выполняет их преобразование (включая оптимизации) в необходимый для работы формат. Модуль требуется для всех источников блэклиста (zapret-info, rublacklist, antifilter), кроме ruantiblock, который предоставляет уже готовые и оптимизированные конфиги.

/usr/libexec/ruantiblock/ruab_parser.lua - стандартный модуль, написан на Lua. Работает быстро, когда достаточно свободной оперативной памяти. Установка.

/usr/libexec/ruantiblock/ruab_parser.py - дополнительный модуль, написан на Python3 и не имеет проблем с кириллицей, кодировкой CP1251 и пр. Работает медленнее, но аккуратнее раcходует оперативную память. Недостаток в том, что нужно много свободного места в ПЗУ для установки Python3. Установка.

Установленный модуль можно включить в UCI:

uci set ruantiblock.config.bllist_module="/usr/libexec/ruantiblock/ruab_parser.lua"
uci commit ruantiblock

Дополнительные настройки

Далее описаны некоторые опции доступные через UCI, они переопределяют часть переменных конфигурационного файла /etc/ruantiblock/ruantiblock.conf.

  • Запись событий в syslog (ENABLE_LOGGING=1):

Опция включает запись событий в системный лог. Отключить:

uci set ruantiblock.config.enable_logging="0"
  • Проксификация трафика локальных клиентов (PROXY_LOCAL_CLIENTS=1):

Эта опция включает обработку трафика локальных приложений роутера в ruantiblock. Т.е. различные сетевые утилиты установленные на самом роутере ходят на заблокированные сайты через Tor или VPN. Отключить:

uci set ruantiblock.config.proxy_local_clients="0"
  • Очистка сетов nftables перед обновлением блэклиста (NFTSET_CLEAR_SETS=1):

Включение этой опции позволяет освободить некоторое количество оперативной памяти (зависит от текущего размера списка блокировок) перед обновлением блэклиста. Недостаток в том, что во время обновления не применяются правила отбора трафика в Tor или VPN, т.е. обход блокировок не работает до завершения обновления блэклиста. Следует применять лишь в случае проблем со свободной оперативной памятью. Включить:

uci set ruantiblock.config.nftset_clear_sets="1"
  • Режим фильтра хостов (ALLOWED_HOSTS_MODE=0):

Параметр позволяет ограничить хосты, которым разрешено обходить блокировки. Может иметь три значения: 0 - выключено (все хосты обходят блокировки); 1 - обход блокировок работает только для хостов указанных в переменной ALLOWED_HOSTS_LIST; 2 - обход блокировок работает для всех хостов кроме указанных в переменной ALLOWED_HOSTS_LIST. Изменение режима фильтра хостов:

uci set ruantiblock.config.allowed_hosts_mode="1"
  • Список IP адресов для фильтра хостов (ALLOWED_HOSTS_LIST=""):

Добавление хостов в список:

uci add_list ruantiblock.config.allowed_hosts_list="192.168.0.10"
uci add_list ruantiblock.config.allowed_hosts_list="192.168.0.15"
и т.д.
  • VPN интерфейс (IF_VPN="tun0"):

Параметр нужен для правил маршрутизации в VPN конфигурации основного блэклиста. Должен содержать интерфейс L3 VPN. По умолчанию (OpenVPN): tun0

ruantiblock.config.if_vpn="tun0"
  • IP адрес шлюза для VPN конфигурации (VPN_GW_IP=""):

Если не задан, используется адрес VPN интерфейса (или адрес пира для протоколов PPP)

IP адрес шлюза VPN, который используется в правиле маршрутизации для отправки пакетов в VPN. Если значение пустое (по умолчанию), то используется адрес VPN интерфейса (или адрес пира для протоколов PPP). Задать шлюз:

ruantiblock.config.vpn_gw_ip="10.0.0.1"
  • Тип прозрачного прокси (T_PROXY_TYPE=0):

Тип прозрачного прокси. Эта опция определяет тип действия в правилах nftables: redirect (0) или tproxy (1). Изменить:

uci set ruantiblock.config.t_proxy_type="1"
  • UDP-порт прозрачного прокси (T_PROXY_PORT_UDP=10053):

В режиме проксификации трафика с использованием прозрачного прокси, определяет порт на который может перенаправляться UDP-трафик. Прозрачный прокси должен поддерживать UDP! Изменить порт:

uci set ruantiblock.config.t_proxy_port_udp="10053"
  • Отправлять в прозрачный прокси UDP-трафик (T_PROXY_ALLOW_UDP=0):

В режиме проксификации трафика с использованием прозрачного прокси, UDP-трафик также отправляется в прокси. Прозрачный прокси должен поддерживать UDP! При отключении этой опции в прокси попадает только TCP, а UDP идёт напрямую, без обхода блокировок. Включить:

uci set ruantiblock.config.t_proxy_allow_udp="1"
  • Включение режима полного прокси (ENABLE_FPROXY=0):

При включении этой опции, весь трафик хостов заданных в переменной FPROXY_LIST будет отправляться в прокси, без применения правил блэклиста. Включить:

uci set ruantiblock.config.enable_fproxy="1"
  • Список IP адресов для режима полного прокси (FPROXY_LIST=""):

Добавление хостов в список:

uci add_list ruantiblock.config.fproxy_list="192.168.0.10"
uci add_list ruantiblock.config.fproxy_list="192.168.0.15"
и т.д.
  • Режим безопасного обновления блэклиста (ENABLE_TMP_DOWNLOADS=0):

В процессе обновления блэклиста скачивание данных осуществляется во временный файл и затем, в случае успешного получения данных, заменяется основной файл. При такой схеме, если обновление завершилось ошибкой, старая конфигурация блэклиста будет сохранена и продолжит работать. Негативный момент в том, что увеличивается потребление памяти (для хранения временного файла в процессе обновления блэклиста). Включить:

uci set ruantiblock.config.enable_tmp_downloads="1"
  • Скачивание блэклиста через прокси при обновлении (ENABLE_BLLIST_PROXY=0):

Во время обновления блэклист скачивается через прокси. Необходимо, если источник блэклиста заблокирован. Включить:

uci set ruantiblock.config.enable_bllist_proxy="1"
  • Оптимизации записей в итоговых конфигах nftables и dnsmasq: группировка субдоменов и IP адресов, суммаризация IP адресов (BLLIST_SD_LIMIT, BLLIST_IP_LIMIT, BLLIST_GR_EXCLUDED_SLD_FILE, BLLIST_GR_EXCLUDED_NETS_FILE, BLLIST_SUMMARIZE_IP, BLLIST_SUMMARIZE_CIDR):

Подробнее здесь...

  • Фильтрация записей блэклиста по шаблонам (BLLIST_IP_FILTER, BLLIST_IP_FILTER_TYPE, BLLIST_FQDN_FILTER, BLLIST_FQDN_FILTER_TYPE):

Переменные определяют параметры функции предварительной фильтрации записей блэклиста. Подробнее здесь...

  • Преобразование кириллических доменов в punycode (BLLIST_ENABLE_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.bllist_enable_idn="1"
  • Разрешение DNS-имен через альтернативный DNS-сервер (BLLIST_ALT_NSLOOKUP=0):

Добавление записи DNS-сервера для каждого домена в конфиге dnsmasq (очень существенно увеличивает размер конфига dnsmasq!):

uci set ruantiblock.config.bllist_alt_nslookup="1"

Если провайдер блокирует сторонние DNS-серверы, то необходимо использовать dnscrypt-proxy (или https-dns-proxy и пр.) на роутере. На сегодняшний день, лучший вариант - применять полное шифрование DNS, вообще без использования этой опции.

Tor также имеет свой собственный резолвер, который вполне можно использовать...

  • Альтернативный DNS-сервер (BLLIST_ALT_DNS_ADDR="8.8.8.8"):

Альтернативный DNS-сервер для предыдущего пункта.

uci set ruantiblock.config.bllist_alt_dns_addr="8.8.8.8"`  # можно указывать с портом: "8.8.8.8#53"

Если ruantiblock.config.bllist_alt_nslookup="1", то для каждого домена в конфиге dnsmasq добавляется дополнительная запись, указывающая использовать данный DNS-сервер для этого домена.

Есть и другие параметры для более тонкой настройки, часть из них имеют пояснения в самом конфигурационном файле (/etc/ruantiblock/ruantiblock.conf). Также, смотрите UCI-конфиг /etc/config/ruantiblock.

Способы оптимизации и сокращения количества записей в списке блокировок

Записи пользователя

Параметры запуска:

ruantiblock start           # Включение ruantiblock. Создаются правила nftables и пр.
ruantiblock stop            # Выключение ruantiblock. Очищаются все списки nftset, удаляются правила nftables. Трафик идет стандартным способом, Tor или VPN не используется
ruantiblock destroy         # То же, что и stop + удаление всех списков nftset, удаление таблицы nftables и очистка файлов ruantiblock.dnsmasq и ruantiblock.ip
ruantiblock restart         # Рестарт
ruantiblock reload          # Пересоздание цепочки и правил nftables (а также таблицы маршутизации при VPN-конфигурации)
ruantiblock update          # Обновление блэклиста и списков nftset
ruantiblock force-update    # Принудительное обновление блэклиста (может потребоваться если предыдущее обновление выполнено некорректно или было прервано в процессе выполнения)
ruantiblock data-files      # Создание файлов ruantiblock.dnsmasq и ruantiblock.ip, без обновления сетевой конфигурации
ruantiblock status          # Вывод текущего статуса, а также общей инфо (кол-во записей в списках nftset, дата последнего обновления блэклиста и пр.)

Перед изменением конфигурации ruantiblock необходимо обязательно выполнить удаление всех сетов и правил nftables:

/usr/bin/ruantiblock destroy

после изменения настроек выполнить обновление:

/usr/bin/ruantiblock start
/usr/bin/ruantiblock update

Отключение запуска при старте системы

/etc/init.d/ruantiblock disable

Если после установки возникли проблемы...