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-hosts
— router, 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).
Можливі рішення:
- Створіть мережевий міст (bridge) з бездротового і дротового інтерфейсів на клієнтському ПК:
- Додайте MAC-адресу мосту в файл
/etc/config/dhcp
- Оскільки міст, найімовірніше, візьме MAC-адресу дротового інтерфейсу, ви втратите підтримку SLAAC для Wi-Fi, і ноутбук не матиме IPv6 при використанні лише бездротового з'єднання.
- Альтернативне IPv6-сумісне рішення (не потребує створення мосту та внесення MAC-адрес у dnsmasq):
- Коли підключаєте ethernet-кабель, вимикайте бездротовий інтерфейс через Панель керування (просте вимкнення живлення бездротової карти не підходить).
- Коли витягуєте ethernet-кабель, увімкніть Wi-Fi та вимкніть ethernet.
Приклад конфігурації кількох 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
Примітки
- Домашня сторінка проєкту: http://thekelleys.org.uk/dnsmasq/doc.html