Автоматическое добавление клиентов в AdguardHome из роутера Keenetic
1. Описание
AdguardHome позволяет автоматически подгружать список имен клиентов из файла /etc/hosts
в runtime клиенты. Выглядит это так:
Плюсы этого решения перед ручным добавлением клиентов в adguard - это автоматическое слежение за именами хостов, их ip адресами, и позволяет довольно просто узнать какие ipv6 адреса у устройств в сети, так как в кинетике за этим следить по умолчанию нельзя.
Минусы - нельзя навесить какие-то права на устройство, тогда все равно вручную нужно будет добавлять клиента
[в начало]
2. Логика работы скрипта
Что бы автоматически добавлять клиентов в файл /etc/hosts
(по факту этот файл является ссылкой на /var/hosts
) был написан скрипт, который:
1) выдергивает зарегистрированных клиентов из кинетика
2) добавляет их ipv4 адреса с их именем в файл /var/hosts
3) Так же скрипт ищет текущие ipv6 адреса в сети и сопоставляет по MAC адресу их с зарегистрированными клиентами и так же добавляет в /var/hosts
4) При наличии изменений в файле /var/hosts
перезапускает adguard
5) Запускается при старте роутера и раз в час по крону
[в начало]
3. Скачивание скрипта
3.1. Заходим на ssh в entware, ставим нужные пакеты:
opkg install cron curl diffutils patch
3.2. Создаем папку и скачиваем в нее файл скрипта, делаем его исполняемым
mkdir scripts curl https://raw.githubusercontent.com/DennoN-RUS/scripts/main/keenetic/add-instance-in-hosts.sh > scripts/add-instance-in-hosts.sh chmod +x scripts/add-instance-in-hosts.sh
[в начало]
4. Настройка и запуск скрипта
Перед запуском нужно внести пару изменений в сам скрипт
4.1. Открываем файл на редактирование и меняем:
local_iface=br0
Где br0
имя интерфейса локальной сети, узнать его можно выполнив команду:
ip a | grep -B2 "192.168.1.1"
Где 192.168.1.1
адрес роутера в локальной сети
router_name=S-KN-1811
Сюда пишем имя роутера, любое, без пробелов, только латиница, цифры и знак -
ipv6_enable=1
Если 1, то скрипт будет пытаться определить ipv6 адреса устройств. Если 0, то будет пропускать этот шаг
get_old=1
Можно поставить 0 - это выключено и 1 - это включено. Если включено, будет создавать файл /opt/etc/host.old
, в который будут попадать устройства, которые были разрегистрированны в кинетике или же у них пропал ipv6 адрес, если он был до этого. На функционал не влияет, но можно будет понять, что в хостах осталось что-то старое и не нужное. Можно выключть, что бы не записывать на флешку каждый раз, когда устройство пропадет из сети (актуально только для ipv6)
SCRIPT_PATH="$SYSTEM_PATH/root/scripts"
Скрипт должен лежать по пути /opt/root/scripts, если в каком-то другом месте, то можно поменять путь в этой переменной
./scripts/add-instance-in-hosts.sh
[в начало]
5. Проверка
После того, как скрипт запустился он:
1) создаст файл /opt/etc/init.d/S04user-scripts
, который будет запускаться при старте системы и заполнять файл /var/hosts
2) создаст ссылку на себя же в папке /opt/etc/cron.hourly/
для запуска раз в час
3) заполнит полными данными файл /opt/etc/host.res
, формат такой: Имя MAC IP #Дата добавления/изменения в файле этой строки
4) заполнит файл /var/hosts
, формат такой: IP Имя
5) перезапустит adguard, что бы тот перечитал файл /etc/hosts
, рестарт будет происходить каждый раз, когда в файл /var/hosts
(он же /etc/hosts
) внесены изменения
[в начало]