Skip to content

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

gSpot edited this page Nov 7, 2024 · 13 revisions

Добавление собственных записей для обхода блокировок (а также не заблокированных сайтов на которые необходимо всегда ходить через 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.

  1. Добавляем в файл записей первого инстанса 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
    
  2. В записи второго инстанса 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
    
  3. В записи третьего инстанса 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
    
  4. Обновляем блэклист:

     ruantiblock update
    
  5. Теперь в браузере на ПК из локальной сети загружаем страницу первого сервиса 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чётчики соответствующих инстансов также должны расти.

Clone this wiki locally