DNS локальной сети средствами DD-WRT

Задача

Есть локальная сеть, роутер D-Link DIR-300 (прошит DD-WRT), сервер. Нужно обращаться к серверу по доменным именам без изменения файлов/настроек на клиентских компьютерах.

Решение

В DD-WRT уже установлен DNS-сервер DNSMasq (включается на вкладке Services), он умеет раздавать IP-адреса, прописаные в /etc/hosts маршрутизатора.

Поскольку у маршрутизатора файловая система только на чтение - написан скрипт 📖 Expect для ежеминутного прописывания новых настроек. После обновления файла DNSMasq нужно отправить сигнал для обновления настроек.

Скрипт:

#!/usr/bin/expect
spawn telnet 192.168.3.1

expect "login:"

send "root\n"

expect "Password:"

send "ROUTER_PASSWORD\n"

expect "DD-WRT:~#"

send "echo \"127.0.0.1 localhost\n192.168.1.1 DD-WRT\n192.168.1.2 torrents.local\n\" > /etc/hosts\n" # желаемое содержимое /ets/hosts маршрутизатора

send "killall -HUP dnsmasq\n" # сигнал на обновление настроек

send "exit\n"

expect eof