Записи пользователя в блэклисте - gSpotx2f/ruantiblock_openwrt GitHub Wiki
Добавление собственных записей для обхода блокировок (а также не заблокированных сайтов на которые необходимо всегда ходить через VPN/прокси).
Начиная с версии 2.0 в ruantiblock существует новая концепция функции записей пользователя. Теперь пользовательские записи представляют собой экземпляры с отдельными настройками прокси (Tor, VPN, прозрачный прокси), списка пользовательского блэклиста и ссылок на удалённые файлы записей. Каждый экземпляр имеет свой набор цепочек и правил в nftables, свою таблицу маршрутизации (для VPN конфигурации). Главный экземпляр (основной блэклист) имеет такой же набор цепочек и правил, но использует записи из реестра (обновляемые, как и раньше, либо с GitHub, либо с помощью модуля-парсера из поддерживаемых источников). Помимо главного экземпляра, всего доступно 5 экземпляров для записей пользователя с индивидуальными настройками. Это позволяет настроить обход блокировок с несколькими VPN/прокси по разным спискам (допустим, youtube в один VPN, какие-то избранные сайты в другой, все остальные заблокированные сайты через sing-box и т.п.). Приоритеты экземпляров уменьшаются от list1 до list5, т.е. list1 имеет наивысший приоритет, list5 - наименьший. Главный экземпляр (основной блэклист) имеет самый низкий приоритет. Эти приоритеты имеют значение при наличии дублирующихся записей в списках разных экземпляров, т.е. если сайт есть в нескольких списках, то трафик к нему пойдёт через прокси экземпляра с самым высоким приоритетом. При обновлении блэклиста в итоговые конфиги nftables и dnsmasq добавляются записи только из включенных экземпляров, поэтому всегда после изменений в конфигурации записей пользователя необходимо обновлять блэклист.
Простую конфигурацию с одним пользовательским списком (условно, как в предыдущих версиях ruantiblock) можно создать включив один из экземпляров записей пользователя (в примере это первый экземпляр list1) и указав в его настройках те же параметры, что и для основного блэклиста (тип прокси, VPN-интерфейс, порт прозрачного прокси и т.д.). Включение экземпляра list1:
uci set ruantiblock.list1.u_enabled="1"
Выбор режима прокси (VPN):
uci set ruantiblock.list1.u_proxy_mode="2"
VPN-интерфейс:
uci set ruantiblock.list1.u_if_vpn="tun0"
Сохрание настроек UCI:
uci commit ruantiblock
и т.д. Параметры аналогичны параметрам основного экземпляра с префиксом u_
.
Далее свои записи нужно добавить в текстовый файл /etc/ruantiblock/user_lists/list1
(IP, CIDR или FQDN, каждая запись в новой строке). В записях FQDN можно задать DNS-сервер для разрешения данного домена (через пробел). Также можно комментировать строки (#
- первый символ строки).
Пример файла /etc/ruantiblock/user_lists/list1
:
# FQDN
domain.net
# FQDN с DNS-сервером
sub.domain.com 8.8.8.8
# FQDN с DNS-сервером и портом. #53 - порт, не комментарий
sub.domain.com 8.8.8.8#53
# ip
74.125.131.19
# CIDR
74.125.0.0/16
В процессе обновления блэклиста можно подгружать дополнительные записи с удалённого сервера по протоколу HTTP. Файл на сервере должен иметь формат аналогичный файлу записей пользователя. Не стоит злоупотреблять этой опцией и подключать большие списки, поскольку при добавлении пользовательских записей в блэклист не производится никаких оптимизаций, проверок на повторы и пр. IP адреса и домены добавляются как есть, и нет никакого контроля над их содержимым и размером! Добавление URL удалённого файла:
uci add_list ruantiblock.list1.u_entries_remote="http://server.lan/files/user_entries_1"
uci add_list ruantiblock.list1.u_entries_remote="http://server.lan/files/user_entries_2"
uci commit ruantiblock
и т.д.
Есть возможность задать общий DNS-сервер только для пользовательских FQDN-записей:
uci set ruantiblock.list1.u_entries_dns="1.1.1.1#53" # значение в виде пустой строки отключает опцию
uci commit ruantiblock
Если в какой-либо записи (как в примере выше) указан свой DNS-сервер - то для этого домена используется исключительно он.
Для применения записей необходимо обновить блэклист:
/usr/bin/ruantiblock update
Также, желательно очистить кэш DNS в ОС вашего ПК (в Windows: ipconfig /flushdns
), и на роутере перезапустить dnsmasq /etc/init.d/dnsmasq restart
, чтобы он тоже очистил кэш.
Конфигурация с использованием только собственных записей.
Если отключить режим обновления блэклиста и модуль-парсер:
uci set ruantiblock.config.bllist_preset=""
uci set ruantiblock.config.bllist_module=""
uci commit ruantiblock
то для создания правил nftables и dnsmasq будут применяться лишь записи пользователя, без загрузки основного списка блокировок. При этом, благодаря использованию dnsmasq, записи FQDN будут всегда актуальны (ибо резолвятся в IP адреса в момент запроса). Применение правил из списка пользователя происходит при выполнении команды обновления, как описано выше (/usr/bin/ruantiblock update
). Также, можно удалить из cron задание для регулярного обновления блэклиста, ибо оно не имеет смысла при ручном формировании списка блокировок.
Тестирование конфигураций с несколькими экземплярами.
Для проверки правильного движения трафика через разные VPN/прокси можно использовать сервисы для определения публичного IP. Чтобы исключить влияние кэширования DNS далее будем использовать только записи IP адресов. Суть теста: в записи нескольких включенных экземпяров добавляем IP адреса разных сервисов для определения публичного IP адреса (IP самих сервисов получаем с помощью nslookup). Далее на ПК в браузере (или в консоли с помощью curl или wget) открываем страницы этих сервисов получая IP адрес соответствующего VPN/прокси в который ruantiblock заворачивает трафик к этому сервису.
Допустим, у нас есть 3 VPN/прокси, которые заданы в записях пользователя на 3-х инстансах: list1, list2, lis3.
-
Добавляем в файл записей первого инстанса list1 (
/etc/ruantiblock/user_lists/list1
) IPv4 адреса сервиса http://ident.me:root@OpenWrt:~# nslookup ident.me Server: 127.0.0.1 Address: 127.0.0.1:53 Non-authoritative answer: Name: ident.me Address: 49.12.234.183 Non-authoritative answer: Name: ident.me Address: 2a01:4f8:c0c:bd0a::1 root@OpenWrt:~# echo "49.12.234.183" >> /etc/ruantiblock/user_lists/list1
-
В записи второго инстанса list2 (
/etc/ruantiblock/user_lists/list2
) добавляем IPv4 адреса сервиса http://wgetip.com:root@OpenWrt:~# nslookup wgetip.com Server: 127.0.0.1 Address: 127.0.0.1:53 Non-authoritative answer: Name: wgetip.com Address: 188.114.96.3 Name: wgetip.com Address: 188.114.97.3 Non-authoritative answer: Name: wgetip.com Address: 2a06:98c1:3120::3 Name: wgetip.com Address: 2a06:98c1:3121::3 root@OpenWrt:~# echo -e "188.114.96.3\n188.114.97.3" >> /etc/ruantiblock/user_lists/list2
-
В записи третьего инстанса list3 (
/etc/ruantiblock/user_lists/list3
) добавляем IPv4 адреса сервиса http://ip.tyk.nu:root@OpenWrt:~# nslookup ip.tyk.nu Server: 127.0.0.1 Address: 127.0.0.1:53 Non-authoritative answer: Name: ip.tyk.nu Address: 95.216.101.209 Non-authoritative answer: Name: ip.tyk.nu Address: 2a01:4f9:2b:151f:80::2 root@OpenWrt:~# echo "95.216.101.209" >> /etc/ruantiblock/user_lists/list3
-
Обновляем блэклист:
ruantiblock update
-
Теперь в браузере на ПК из локальной сети загружаем страницу первого сервиса http://ident.me. IP адрес показанный сервисом должен быть выходным IP адресом VPN/прокси, который задан в первом инстансе list1. Далее аналогично с остальными сайтами: http://wgetip.com должен вернуть выходной IP VPN/прокси из второго инстанса list2, http://ip.tyk.nu - из третьего list3. Также в выводе статуса ruantiblock:
ruantiblock status
в блоке Nftables rules:
должны расти значения счётчиков Bytes
для соответствующих инстансов. Если включена опция проксификации трафика локальных приложений роутера, то можно проверить как работают эти правила для самого роутера (в его консоли с помощью wget):
wget -qO - http://ident.me
wget -qO - http://wgetip.com
wget -qO - http://ip.tyk.nu
Cчётчики соответствующих инстансов также должны расти.