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 — це UCI-конфігураційний файл, описаний у uci. Майже всі параметри можна задати саме в ньому.

Можна комбінувати традиційний конфігураційний файл /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 можна задати статичні DHCP-оренди. Дивіться → Статичні оренди.

У файлі /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

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

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

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 як форвардер (щоб реалізувати недорогий і ефективний блокувальник реклами на рівні мережі), вам потрібно вимкнути захист від Rebind-атак. Інакше виникатимуть затримки або повідомлення про недоступність сайтів.

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

daemon.warn dnsmasq[xxx]: possible DNS-rebind attack detected: any.adserver.dns
This website uses cookies. By using the website, you agree with storing cookies on your computer. Also you acknowledge that you have read and understand our Privacy Policy. If you do not agree leave the website.More information about cookies
  • Last modified: 2025/05/30 11:38
  • by vazaz