gSpotx2f / ruantiblock_openwrt

Обход блокировок в OpenWrt с помощью Tor или VPN
GNU General Public License v3.0
204 stars 19 forks source link

Data on network folder? #6

Closed flurmind closed 2 years ago

flurmind commented 2 years ago

Как заставить хранить данные только на сетевом диске, смонтированном в /opt (из вашего примера по переносу данных на внешний диск) для устройств с малым объемом памяти (128 и меньше)? Есть роутер без портов, есть NAS, смонтировал сетевую папку. Но при обновлении больших списков - zapret-info, съедает оперативку (50 мб) и получаю ошибку (пробовал по инструкции через _mount --bind, так же через символические ссылки). Все равно первоначально качает в RAM, потом уже попадает в каталог. Как и стоит ли работать только с внешним хранилищем, минуя RAM, или будет очень медленно?

P.s. Еще момент: после остановки из Luci (Полное выключение службы) в памяти висит процесс lua /usr/libexec/ruantiblock/ruab_parser.lua, так и задумано?

gSpotx2f commented 2 years ago

Когда парсер (ruab_parser.lua) качает реестр и обрабатывает его, то данные во время работы хранятся в оперативной памяти, а потом записываются в файлы. Поэтому для работы парсера с полным реестром (из источников zapret-info и rublacklist) необходимо достаточное количество оперативки (128Мб врядли хватит, нужно минимум 256). При стандартной установке, когда файлы со списком блокировок хранятся в /tmp (т.е. в оперативке), в момент обновления блэклиста данные реестра, фактически, дублируются в памяти два раза: 1. файлы в /tmp, 2. память которую занимает парсер во время работы, до момента перезаписи старых файлов. Именно поэтому я предлагаю, если есть возможность, переносить файлы на внешний носитель. Тема с сетевой папкой, в принципе, должна работать, если всё правильно настроить. Эти файлы читаются только один раз при старте или обновлении блэклиста. Кстати, вы можете перенести обработку блэклиста с роутера на другую машину, в этом варианте роутер будет получать уже готовые файлы, а вся тяжёлая обработка реестра выполняется на другой машине.

По поводу процесса lua /usr/libexec/ruantiblock/ruab_parser.lua... Он висит в памяти только когда выполняется обновление блклиста, он не должен висеть постоянно. Просто этот процесс может выполняться достаточно долго, если вы используете полный реестр (zapret-info или rublacklist) и роутер имеет слабое железо. Кнопки в веб-морде или команды ruantiblock stop, ruantiblock destroy его не убивают.

flurmind commented 2 years ago

Спасибо за пояснения. Сетевая папка работает, проверил через smb (в /etc/config/fstab добавил _mount.cifs //путь_в_сетевуюпапку /mnt/share -o rw,username=X,password=XXX,vers=2.0), через nfs тоже должно. Формирование блэклиста на другой машине-отличная идея (как раз можно на NAS с linux организовать, а роутером подхватывать)! Но хватает и вашего _ruantiblockblacklist!

Осталась одна проблема: Одно устройство в сети упорно (андроид телефон) не работает (очистку кэша DNS пробовал), никак не добавляет IP адрес ресурса из блеклиста или своего в ipset (изменение любых настроек ruantiblock не влияет). Стоит зайти на этот сайт с другого устройства (причем тоже адндроид, пк, не важно), IP адрес сайта попадает в ipset и тогда на проблемном устройстве начинает работать. В логах роутера проблем нет, ошибок нигде нет, правил firewall'а тоже нет, ничего видимого нет). Если пустить весь трафик через VPN - все работает. Есть ли у вас идеи как можно найти причину?

P.s. бывает такое и с 2мя устройствами одновременно с определенными ресурсами: с пк и телефона не заходит, захожу с 3го телефона, добавляется ip, начинают работать и другие 2. Нет взаимосвязи (на пк с windows очистку пробовал- ipconfig /flushdns, без результата), ранее на эти ресурсы не входил никогда, т.е. в кэше их не может быть, просто для теста проверил десяток из листа РКН. Не могу найти взаимосвязь (https-dns-proxy на это не влияет, пробую и с ним и без)!

gSpotx2f commented 2 years ago

Все устройства в сети должны обязательно использовать DNS-сервер роутера. Может в настройках сети у устройств это не задано явно? Смартфоны, планшеты (и даже некоторый софт на ПК) могут делать DNS-запросы к сторонним DNS-серверам в обход роутера (кстати, именно android-девайсы лезут к гугловским DNS). Добавьте правила для перехвата стороннего DNS-трафика.

Есть ещё вариант: попробуйте режим обхода блокировок *-ip. Все IP-адреса из реестра сразу добавляются в ipset и DNS-сервер, как-бы, не участвует в схеме:

uci set ruantiblock.config.bllist_preset="ruantiblock-ip"
uci commit ruantiblock
flurmind commented 2 years ago

Разобрался, подсказали - виноват андроид и его браузеры (DNS роутера был указан, перехват DNS тоже настроен), оказывается у браузеров (яндекс и хром) есть фича типа "безопасный интернет", они лезут в сеть через свои днс игнорируя любые настройки роутера + в андроидах появилась такая фича (искать в: Android -> Настройки -> Подключение и общий доступ -> Частный DNS сервер и/или его браузера Chrome -> Настройки -> Конфиденциальность и безопасность -> Использовать безопасный DNS-сервер). Может кому-то будет полезно. Спасибо за приложение, работает отлично на роутере АС2100 со 128 мб ОП, c вашим блэклистом ruantiblock - fqdn и Python‑модулем занимает до 20 мб в ОП даже без переноса конфига на внешний диск. А в режиме своего листа вообще пушинка)