-
Notifications
You must be signed in to change notification settings - Fork 21
Записи пользователя в блэклисте
Добавление собственных записей для обхода блокировок (а также не заблокированных сайтов на которые необходимо всегда ходить через 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чётчики соответствующих инстансов также должны расти.