Table of Contents

Dnsmasq DHCP-сервер

Dnsmasq — це легкий, простий у налаштуванні DNS-перенаправлювач і DHCP-сервер. Він призначений для забезпечення DNS і, за потреби, DHCP у невеликих мережах. Може обслуговувати імена локальних пристроїв, які не входять до глобальної DNS. DHCP-сервер інтегрується з DNS-сервером і дозволяє пристроям з DHCP-адресами з'являтися в DNS з іменами, заданими або на самому хості, або в центральному конфігураційному файлі.

Dnsmasq підтримує як статичні, так і динамічні DHCP-оренди, а також BOOTP для завантаження бездискових пристроїв по мережі. У OpenWrt він уже попередньо встановлений і налаштований.

Налаштування

Налаштування виконується через UCI-конфігураційний файл: /etc/config/dhcp, але також можливе спільне використання з файлом /etc/dnsmasq.conf.

Залежно від параметрів у UCI-файлі, також можна використовувати додаткові файли: /etc/ethers та /etc/hosts.

/etc/config/dhcp

/etc/config/dhcp — це UCI-конфігураційний файл, описаний у uci. Майже всі параметри можна задати саме в ньому.

/etc/dnsmasq.conf

Можна комбінувати традиційний конфігураційний файл /etc/dnsmasq.conf із параметрами з /etc/config/dhcp. Файл dnsmasq.conf за замовчуванням відсутній, але буде оброблений Dnsmasq при запуску, якщо існує.

Примітка: параметри з /etc/config/dhcp мають пріоритет над тими, що у dnsmasq.conf, оскільки перші транслюються в аргументи командного рядка.

Приклад: Типове налаштування Dnsmasq призначає домен .lan для ваших хостів. Це задається у конфігурації так:

# дозволити обробку /etc/hosts і DHCP-запитів через *.lan
local=/lan/
domain=lan

Ви можете змінити це на будь-який інший бажаний локальний домен. Якщо ви хочете, щоб ваші хости були доступні через локальний домен без необхідності вказувати домен у файлі /etc/hosts, додайте директиву expand-hosts у файл /etc/dnsmasq.conf.

Приклад: Без директиви expand-hosts доступними будуть лише router, ubuntu-desktop, ubuntu-laptop. З увімкненим expand-hostsrouter, router.lan, ubuntu-desktop, ubuntu-desktop.lan тощо. Саме це найчастіше і потрібно.

Без цієї опції вам доведеться вручну додавати записи з доменом .lan до файлу /etc/hosts.

/etc/ethers

У файлі /etc/ethers можна задати статичні DHCP-оренди. Дивіться → Статичні оренди.

/etc/hosts

У файлі /etc/hosts задаються DNS-записи, які Dnsmasq буде використовувати для відповіді на DNS-запити у вашій мережі.

Формат:

[IP-адреса] ім’я_хоста коротке_ім’я_хоста ...

Приклад:

192.168.1.1 router OpenWrt localhost
192.168.1.2 debian-server
192.168.1.3 ubuntu-laptop

Вирішення проблем

Відсутність відповіді DHCP через перевантаження мережі

Іноді, коли інтерфейс знаходиться на межі пропускної здатності (особливо Wi-Fi на великих відстанях), DHCP-запит може не отримати відповідь вчасно. Через це DHCP-клієнт не зможе отримати налаштування мережі.

Можливе рішення: використання статичних IP-адрес або дуже тривалих DHCP-оренд (понад 12 годин). Це особливо важливо, коли у вас є декілька Wi-Fi репітерів, які використовують DHCP, але розташовані на відстані один від одного чи важкодоступні.

Лог забитий DHCPINFORM/DHCPACK

Windows 7 та інші системи надсилають запити DHCP для отримання параметрів проксі. Проблема полягає в тому, що вони продовжують надсилати запити, поки не отримають відповідь. Це призводить до значного засмічення логів DHCP-запитами типу DHCPINFORM. Деталі можна знайти на вікі Excito.

Рішення:

uci add_list dhcp.lan.dhcp_option='252,"\n"'
uci commit dhcp
service dnsmasq restart

Проблеми зі статичним розподілом

Windows 7 має нову покращену функцію від Microsoft. Вона не присвоює IP-адресу, отриману через DHCP, якщо ця IP-адреса вже використовувалась раніше на іншому мережевому інтерфейсі, навіть якщо цей інтерфейс зараз неактивний (тобто кабель від’єднаний). Ця поведінка характерна лише для Windows 7 і не спостерігається в попередніх версіях Windows, а також в Mac OS чи Linux.

Якщо ви спробуєте зробити «гарячу заміну» MAC-адрес на маршрутизаторі, клієнти Windows 7 потраплять у нескінченний цикл DORA (DHCP Discover – Offer – Request – Acknowledge).

Можливі рішення:

Приклад конфігурації кількох MAC-адрес для одного хосту:

uci add dhcp host
uci set dhcp.@host[-1].name="example-host"
uci set dhcp.@host[-1].ip="192.168.1.230"
uci set dhcp.@host[-1].mac="00:a0:24:5a:33:69 00:11:22:33:44:55 02:a0:24:5a:33:69 02:11:22:33:44:55"
uci commit dhcp
service dnsmasq restart

Проблеми з AdGuard DNS та dnsmasq

Якщо ви використовуєте AdGuard DNS як форвардер (щоб реалізувати недорогий і ефективний блокувальник реклами на рівні мережі), вам потрібно вимкнути захист від Rebind-атак. Інакше виникатимуть затримки або повідомлення про недоступність сайтів.

У протилежному випадку ви побачите багато таких записів у системному журналі і помітите затримки чи проблеми з досяжністю хостів:

daemon.warn dnsmasq[xxx]: possible DNS-rebind attack detected: any.adserver.dns

Примітки