Самостоятельная установка и настройка - gSpotx2f/ruantiblock_openwrt GitHub Wiki

Начальные требования

  • Для VPN конфигурации необходимо настроенное и работающее VPN-соединение.

  • В настройках сети OpenWrt (в разделе Интерфейсы) нужно создать интерфейс с названием VPN. Протокол интерфейса зависит от типа вашего VPN: для некоторых популярных (Wireguard, OpenConnect, PPTP и др.) присутствуют соответствующие варианты в списке выбора; в случае OpenVPN - неуправляемый интерфейс, к котому привязано сетевое устройство tun0. Пример создания неуправляемого интерфейса для OpenVPN (сетевое устройство tun0) из консоли с помощью UCI:

    uci batch << EOI
    set network.VPN='interface'
    set network.VPN.proto='none'
    set network.VPN.device='tun0'
    set network.VPN.defaultroute='0'
    set network.VPN.peerdns='0'
    set network.VPN.delegate='0'
    set network.VPN.auto='1'
    EOI
    uci commit network
    service network restart
    
  • Далее нужно добавить новую зону межсетевого экрана под названием vpn (разрешить исходящий трафик и маскарадинг, запретить входящий и перенаправление) и добавить в неё созданный ранее интерфейс OpenWrt VPN:

    section_name=$(uci add firewall zone)
    uci batch << EOI
    set firewall.${section_name}.name='vpn'
    set firewall.${section_name}.input='REJECT'
    set firewall.${section_name}.output='ACCEPT'
    set firewall.${section_name}.forward='REJECT'
    set firewall.${section_name}.masq='1'
    add_list firewall.${section_name}.network='VPN'
    EOI
    section_name=$(uci add firewall forwarding)
    uci batch << EOI
    set firewall.${section_name}.src='lan'
    set firewall.${section_name}.dest='vpn'
    EOI
    uci commit firewall
    service firewall restart
    
  • Для всех видов VPN необходимо отключить маршрут по умолчанию в VPN-туннель (иначе весь трафик полностью будет заворачиваться в VPN) и использование DNS получаемых от VPN-сервера:

    uci set network.VPN.defaultroute=0
    uci set network.VPN.peerdns=0
    uci commit network
    
  • При использовании OpenVPN, в конфигурационном файле OpenVPN-клиента обязательно должен присутствовать параметр route-noexec, иначе OpenVPN будет добавлять правило маршрутизации по умолчанию на свой интерфейс и весь трафик пойдет через него.

  • В стандартной конфигурации конфиги nftset и dnsmasq со списками блокировок пишутся при обновлении в tmpfs, т.е. в оперативную память (/tmp/ruantiblock и /tmp/dnsmasq.d соответственно). При старте системы после перезагрузки происходит автоматическое обновление блэклиста. При недостаточном количестве памяти (128Мб и менее) или просто для удобства, можно перенести директории с данными на внешний носитель после установки.

Зависимости

  • dnsmasq-full
  • kmod-nft-tproxy
  • Tor конфигурация: tor, tor-geoip
  • Для VPN конфигурации необходимо заранее установить и настроить VPN-соединение
  • В конфигурации прозрачного прокси, также, нужно заранее установить и настроить все необходимые компоненты (например, Shadowsocks + ss-redir и пр.)

Установка

1. Установка зависимостей

opkg update
opkg --force-overwrite install dnsmasq-full kmod-nft-tproxy

2. Установка ruantiblock

wget --no-check-certificate -O /tmp/ruantiblock_2.1.6-r1_all.ipk https://raw.githubusercontent.com/gSpotx2f/packages-openwrt/master/current/ruantiblock_2.1.6-r1_all.ipk
opkg install /tmp/ruantiblock_2.1.6-r1_all.ipk
rm /tmp/ruantiblock_2.1.6-r1_all.ipk

3. Установка luci-app-ruantiblock

Приложение для LuCI (веб-интерфейса OpenWrt). Подробнее тут.

wget --no-check-certificate -O /tmp/luci-app-ruantiblock_2.1.6-r1_all.ipk https://raw.githubusercontent.com/gSpotx2f/packages-openwrt/master/current/luci-app-ruantiblock_2.1.6-r1_all.ipk
opkg install /tmp/luci-app-ruantiblock_2.1.6-r1_all.ipk

wget --no-check-certificate -O /tmp/luci-i18n-ruantiblock-ru_2.1.6-r1_all.ipk https://raw.githubusercontent.com/gSpotx2f/packages-openwrt/master/current/luci-i18n-ruantiblock-ru_2.1.6-r1_all.ipk
opkg install /tmp/luci-i18n-ruantiblock-ru_2.1.6-r1_all.ipk

rm /tmp/luci-app-ruantiblock_2.1.6-r1_all.ipk /tmp/luci-i18n-ruantiblock-ru_2.1.6-r1_all.ipk

rm -f /tmp/luci-modulecache/* /tmp/luci-indexcache*
/etc/init.d/rpcd restart
/etc/init.d/uhttpd restart

4. Полное выключение сервиса перед изменением конфигурации

Необходимо для корректного удаления правил nftables и других данных предыдущей конфигурации!

/usr/bin/ruantiblock destroy

5.1 Настройка Tor-конфигурации

  • Установка Tor:

    opkg install tor tor-geoip
    /etc/init.d/tor enabled
    
  • Бэкап текущего конфига Tor:

    cp -f /etc/tor/torrc /etc/tor/torrc.bak
    
  • Установка конфига Tor для ruantiblock:

    wget --no-check-certificate -O /etc/tor/torrc https://raw.githubusercontent.com/gSpotx2f/ruantiblock_openwrt/master/tor/etc/tor/torrc
    
  • В конфиге Tor (/etc/tor/torrc), в параметре TransPort необходимо задать IP адрес локального интерфейса роутера (по умолчанию 192.168.1.1):

    TransPort 192.168.1.1:9040
    

    Получить IP адрес локального интерфейса можно следующей командой: uci get network.lan.ipaddr.

  • Если у вас недоступны входные узлы Tor, то необходимо настроить мосты. Далее, пример конфигурации с маскировкой Tor-трафика с помощью утилиты obfs4proxy. Установка obfs4proxy:

    opkg install obfs4proxy
    

    Получить адреса мостов можно на странице https://bridges.torproject.org/options/. Выберите вариант obfs4 в выпадающем списке. Каждая строка является адресом входного узла. Нужно добавить их в конфиг Tor (/etc/torrc), предварив каждую директивой Bridge, включить использование мостов и подключить obfs4proxy. Пример записи в /etc/torrc:

    Bridge obfs4 217.160.214.85:8080 B90D1A479D416987DE8CE14BD80B22C0B90917CE cert=A2NvKQ6Fb/sovF+i3qmZqCN8WJsYtupPKltQbmFCLmm4CyMD0LSkN6J+i+E04rUJzAY0DQ iat-mode=0
    Bridge obfs4 51.158.146.93:9003 74EEC1AA79F664B6827D092A44C69FF6738A8F58 cert=JySUZrPCrLEVNm9O/oMV2EGueXyJlqNjHRm6ie6FBOAti/nA4arWKAM30PRi/5EFZSXieA iat-mode=0
    Bridge obfs4 185.177.207.179:8443 35B6556F164FB4568F90A9570428724B2C77D353 cert=Zdsd5ZgCxGV/ok/GwRFLN/6zIVVTdBbhJ3f7AhO1fvJ370nENc2Z7wk3lRJE07tgLK2FZg iat-mode=0
    UseBridges 1
    ClientTransportPlugin obfs4 exec /usr/bin/obfs4proxy
    
  • Включение режима Tor:

    uci set ruantiblock.config.proxy_mode='1'
    
  • Настройки dnsmasq для прямого доступа к .onion ресурсам:

    uci add_list dhcp.@dnsmasq[0].rebind_domain='onion'
    
  • Сохранение изменений в uci:

    uci commit
    
  • Перезапуск Tor:

    /etc/init.d/tor restart
    

5.2 Настройка VPN-конфигурации

  • Включение режима VPN:

    uci set ruantiblock.config.proxy_mode='2'
    
  • Установка параметра с именем VPN-интерфейса (для OpenVPN обычно tun0, для Wireguard, OpenConnect, PPTP и пр. имя определяет сам пользователь при создании интерфейса):

    uci set ruantiblock.config.if_vpn='tun0'
    uci commit ruantiblock
    

    VPN-интерфейс можно задать и в веб-приложении: Ruantiblock -> Настройки -> Режим VPN.

5.3 Настройка конфигурации прозрачного прокси

  • Включение режима прозрачного прокси:

    uci set ruantiblock.config.proxy_mode='3'
    
  • Выбор типа прозрачного прокси. Тип определяется действием в правилах nftables для перенаправления пакетов в прокси. Поддерживается два типа прозрачного прокси: redirect (t_proxy_type='0') для shadowsocks-libev, redsocks и пр.; tproxy (t_proxy_type='1') для sing-box в режиме TProxy.

    uci set ruantiblock.config.t_proxy_type='1'
    
  • Задайте значение TCP-порта на котором принимает соединения прозрачный прокси:

    uci set ruantiblock.config.t_proxy_port_tcp='1100'
    uci commit ruantiblock
    
    • На примере Shadowsocks с использованием ss-redir: значение TCP-порта должно соответствовать локальному порту указанному в корфигурации ss-redir (значение параметра запуска ss-redir -l <порт> или параметр local_port в конфиге Shadowsocks /etc/shadowsocks.json или параметр local_port в UCI-конфиге /etc/config/shadowsocks-libev в блоке соответствующего сервера). Если вам необходимо, чтобы трафик локальных приложений роутера также обходил блокировки, то параметр конфигурации Shadowsocks local_address (или значение параметра запуска ss-redir -b <ip адрес>) должен быть установлен в 0.0.0.0. В такой конфигурации Shadowsocks будет принимать соединения на всех доступных адресах (включая localhost 127.0.0.1, необходимый для редиректа локального трафика роутера). Также необходимо отключить перенаправление трафика в shadowsocks:

      uci set shadowsocks-libev.ss_rules.disabled="1"
      uci commit shadowsocks-libev
      /etc/init.d/shadowsocks-libev restart
      
    • На примере Redsocks: в конфигурационном файле (/etc/redsocks.conf) параметр local_port в блоке redsocks. Также, прозрачный прокси должен принимать входящие подключения на LAN-адресе роутера (в примере 192.168.0.1) или на всех адресах (0.0.0.0), но не на localhost (127.0.0.1)!

      redsocks {
          ...
          local_ip = 192.168.0.1;
          local_port = 1100;
          ...
      }
      

      Если Redsocks подключен к локальному сервису, т.е. работающему на роутере, то необходимо в настройках ruantiblock отключить проксификацию трафика локальных приложений роутера:

      uci set ruantiblock.config.proxy_local_clients="0"
      uci commit ruantiblock
      

      иначе Redsocks не сможет подключиться к локальному сервису!

6. Добавление IP адреса VPN-сервера или прокси в список IP адресов исключаемых из обхода блокировок

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

uci set ruantiblock.config.bypass_ip_mode="1"
uci add_list ruantiblock.config.bypass_ip_list="217.23.3.91"
uci commit ruantiblock

7. Выбор списка блокировок

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

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

8. Включение запуска ruantiblock при старте системы

/etc/init.d/ruantiblock enable

9. Добавление задания в cron для регулярного обновления блэклиста

/etc/init.d/cron enable
echo "0 3 */3 * * /usr/bin/ruantiblock update" >> /etc/crontabs/root
/etc/init.d/cron restart

10. Дополнительно, установка модуля-парсера блэклиста

Для создания собственной конфигурации списка блокировок из любого доступного источника (zapret-info, rublacklist, antifilter) необходимо установить модуль-парсер блэклиста. Стандартный: Lua-модуль ruantiblock-mod-lua. Дополнительный ruantiblock-mod-py делает всё то же, что и ruantiblock-mod-lua, но написан на Python.

11. После установки

Стоит упомянуть, что при вызове скрипта /usr/bin/ruantiblock с параметрами: start, update или destroy - всегда выполняется перезапуск dnsmasq.

Также, необходимо настроить шифрование DNS-трафика (dnscrypt-proxy, https-dns-proxy и пр.). В режиме обхода блокировок fqdn, все хосты в локальной сети (для которых будет работать обход блокировок) должны использовать DNS-сервер роутера. Поэтому в настройках мобильных устройств и браузеров, нужно отключить опцию "безопасный DNS" (т.е. конфигурацию при которой устройство или программа использует сторонние шифрованные DNS-серверы, игнорируя роутер).

Первый запуск

По завершении настройки перезагрузите устройство, затем проверьте включен ли ruantiblock и обновился ли список блокировок при старте:

/usr/bin/ruantiblock status

Если не возникло никаких ошибок, попробуйте выполнить обновление списка блокировок:

/usr/bin/ruantiblock update

После всего выше проделанного, попробуйте зайти на какой-нибудь заблокированный сайт с вашего ПК или др. устройства в локальной сети. Обратите внимание, что после запуска Tor может инициализироваться на протяжении нескольких минут...

Можно проверить идут ли пакеты через правила nftables в выводе статуса ruantiblock в консоли:

/usr/bin/ruantiblock status

Блок Nftables rules: содержит счётчики правил для IP адресов, CIDR-диапазонов и IP адресов, которые добавляет dnsmasq. При запросе заблокированного сайта или IP соответствующие счётчики растут.

Если возникли проблемы, смотрите здесь...

⚠️ **GitHub.com Fallback** ⚠️