Див. також: Приклади DHCP та DNS, dnsmasq, odhcpd
OpenWrt за замовчуванням використовує dnsmasq та odhcpd для надання послуг DNS/DHCP і DHCPv6.
| Роль | Порти | Пакети | Конфігурація |
|---|---|---|---|
| DNS-сервер | 53/UDP, 53/TCP | \[\[packages\:pkgdata\:dnsmasq]] | /etc/config/dhcp |
| DHCP-сервер | 67/UDP | ||
| DHCP-ретранслятор | 68/UDP | ||
| DHCPv6-сервер | 547/UDP | \[\[packages\:pkgdata\:odhcpd-ipv6only]] | |
| RA (Router Advertisement) | ICMPv6 |
Dnsmasq працює як кешуючий DNS-сервер для клієнтів DHCP, що рекламує себе. Це покращує продуктивність і керування DNS у локальній мережі. Усі DNS-запити, які не знайдено в кеші, пересилаються на зовнішні DNS-сервери.
У файлі конфігурації dhcp визначаються різні типи розділів. Не всі типи мають з’являтися в конфігурації — більшість використовуються для спеціальних випадків. Найбільш уживані:
Типова конфігурація містить один розділ типу dnsmasq та один або більше розділів типу dhcp для оголошення DHCP на інтерфейсах мережі.
Розділи типу dnsmasq визначають опції для кожного екземпляра dnsmasq — як загальні параметри роботи, так і параметри DHCP для всіх інтерфейсів.
Ось типовий приклад конфігурації:
config dnsmasq option domainneeded '1' option boguspriv '1' option filterwin2k '0' option localise_queries '1' option rebind_protection '1' option rebind_localhost '1' option local '/lan/' option domain 'lan' option expandhosts '1' option nonegcache '0' option cachesize '1000' option authoritative '1' option readethers '1' option leasefile '/tmp/dhcp.leases' option resolvfile '/tmp/resolv.conf.d/resolv.conf.auto' option nonwildcard '1' option localservice '1' option ednspacket_max '1232' option filter_aaaa '0' option filter_a '0'
Пояснення:
Опції:
local та domain дозволяють dnsmasq обслуговувати записи з /etc/hosts, а також імена DHCP-клієнтів, якщо вони налаштовані в домені lan. domainneeded, boguspriv, localise_queries та expandhosts забезпечують, щоб запити на локальні імена хостів не пересилалися до зовнішніх DNS-серверів. authoritative встановлює маршрутизатор єдиним DHCP-сервером у цій мережі; у такий спосіб клієнти отримують IP-оренду значно швидше. leasefile зберігає IP-оренди у файлі, щоб їх можна було відновити після перезапуску dnsmasq. resolvfile вказує dnsmasq, який файл використовувати для пошуку зовнішніх DNS-серверів; цей файл створюється DHCP- або PPP-клієнтом інтерфейсу WAN. enable_tftp та tftp_root вмикають TFTP-сервер і дозволяють обслуговування файлів з директорії tftp_root. serverip (наприклад: setenv serverip 192.168.1.10).| Назва | Тип | Типове значення | Опція | Опис |
|---|---|---|---|---|
add_local_domain | булевий | 1 | Додає локальний домен як директиву пошуку у файлі resolv.conf. |
|
add_local_hostname | булевий | 1 | Додає записи A, AAAA та PTR лише для цього маршрутизатора в локальній мережі з DHCP. add_local_fqdn. |
|
add_local_fqdn | ціле число | 1 | Додає записи A, AAAA та PTR лише для цього маршрутизатора в локальній мережі з DHCP. 0: Вимкнено.1: Ім’я хоста за основною адресою.2: Ім’я хоста за всіма адресами.3: Повне доменне ім’я (FQDN) за всіма адресами.4: iface.host.domain за всіма адресами. |
|
add_wan_fqdn | ціле число | 0 | Маркує інтерфейси WAN подібно до add_local_fqdn, замість стандартного імені від ISP, яке може бути нечитабельним. WAN визначається як будь-який розділ config dhcp з option ignore 1. |
|
addnhosts | список шляхів до файлів | (немає) | --addn-hosts | Додаткові файли хостів для обслуговування DNS-запитів. Синтаксис такий самий як у /etc/hosts. |
addnmount | список шляхів до каталогів або файлів | (немає) | Додає додаткові шляхи до файлової системи для процесу dnsmasq у ізольованому середовищі (chroot). Корисно при використанні ручних включень або символічних посилань на зовнішні файли, як у блокувальниках реклами. | |
authoritative | булевий | 1 | --dhcp-authoritative | Вмикає авторитетний режим для dnsmasq. Це прискорює отримання IP-адрес через DHCP. Використовується, якщо це єдиний DHCP-сервер у мережі. |
bogusnxdomain | список IP-адрес | (немає) | --bogus-nxdomain=<ipaddr>[/prefix] | IP-адреси, які потрібно перетворити на NXDOMAIN-відповіді. Це протидіяє “допоміжним” DNS-серверам, які ніколи не повертають NXDOMAIN. |
boguspriv | булевий | 1 | --bogus-priv | Відхиляє зворотні DNS-запити до приватних IP-адрес, якщо немає відповідного запису в /etc/hosts. |
cachelocal | булевий | 1 | Якщо встановлено 0, кожен мережевий інтерфейс буде використовувати свою DNS-адресу в /etc/resolv.conf. За замовчуванням використовується лише адреса loopback, і всі запити йдуть через dnsmasq. |
|
cachesize | ціле число | 150 | -c | Розмір кешу DNS-запитів для dnsmasq. |
dbus | булевий | 0 | -1 | Увімкнути підтримку DBus для dnsmasq. |
dhcp_boot | рядок | (немає) | --dhcp-boot | BOOTP-параметри, зазвичай лише назва файлу. Можна вказати: “ім’я файлу, ім’я TFTP-сервера, IP-адреса TFTP”. |
dhcphostsfile | шлях до файлу | (немає) | --dhcp-hostsfile | Вказує зовнішній файл з DHCP-параметрами для окремих хостів. |
dhcpleasemax | ціле число | 150 | -X | Максимальна кількість DHCP-лізингів. |
dnsforwardmax | ціле число | 150 | --dns-forward-max=<запити> | Максимальна кількість одночасних DNS-з'єднань. |
domain | доменне ім’я | (немає) | -s | Доменне ім’я, яке видається DHCP-клієнтам. |
domainneeded | булевий | 1 | -D | Змушує dnsmasq не пересилати запити на імена без крапок (простих імен) до зовнішніх DNS-серверів. Якщо таке ім’я не знайдено у /etc/hosts або DHCP — повертається “не знайдено”. |
dnssec | булевий | 0 | --dnssec | Валідує DNS-відповіді та кешує дані DNSSEC. |
dnsseccheckunsigned | булевий | 0 | --dnssec-check-unsigned | Перевіряє зони для непідписаних відповідей, щоб упевнитися, що такі відповіді дозволені в цих зонах. Це захищає від атак, коли зловмисник підробляє непідписані відповіді для підписаних DNS-зон. Повільніше та вимагає, щоб сервери DNS вище по ланцюгу підтримували DNSSEC. |
ednspacket_max | ціле число | 1232 | -P | Визначає максимальний розмір UDP-пакету EDNS.0, який підтримує DNS-перенаправник. |
enable_tftp | булевий | 0 | --enable-tftp | Увімкнути вбудований TFTP-сервер. |
expandhosts | булевий | 1 | -E | Додає частину локального домену до імен, знайдених у /etc/hosts. |
filterwin2k | булевий | 0 | -f | Не пересилати запити, які не можуть бути оброблені публічними DNS-серверами. Вимкніть, якщо потрібно вирішувати SRV-записи або використовувати SIP-телефони. |
fqdn | булевий | 0 | --dhcp-fqdn | Не обробляє неповні локальні імена хостів. Потрібна наявність параметра domain. |
listen_address | список IP-адрес | (немає) | --listen-address=<ipaddr> | Слухати лише на вказаних IP-адресах. Якщо не вказано — слухає на всіх адресах інтерфейсів. |
interface | список імен інтерфейсів | (усі інтерфейси) | --interface=<назва інтерфейсу> | Список інтерфейсів, на яких слід слухати. Якщо не вказано, слухає всі інтерфейси, окрім тих, що у notinterface. За замовчуванням слухає також loopback. |
notinterface | список імен інтерфейсів | (немає) | --except-interface=<назва інтерфейсу> | Інтерфейси, на яких dnsmasq не повинен працювати. |
ipset | список рядків | (немає) | --ipset | Синтаксис: list ipset '/example.com/example.org/example_ipv4,example_ipv6' |
leasefile | шлях до файлу | (немає) | --dhcp-leasefile=<шлях> | Файл, у якому зберігаються DHCP-лізинги. |
local | рядок | (немає) | -S | Пошук DNS-записів для цього домену у /etc/hosts. Синтаксис відповідає параметрам server. |
localise_queries | булевий | 1 | --localise-queries | Вибирає IP-адресу відповідно до інтерфейсу запиту, якщо одному імені в /etc/hosts відповідає кілька IP. Ініціально вимкнено, але увімкнено в конфігурації за замовчуванням. |
localservice | булевий | 1 | --local-service | Дозволяє обробку DNS-запитів лише з хостів у локальних підмережах, тобто таких, для яких існує інтерфейс на цьому сервері. |
local_ttl | ціле число | 0 | --local-ttl | Типове TTL значення для локально авторитетних відповідей. |
localuse | булевий | 1 | Використовувати dnsmasq як локальний системний резолвер. Залежить від опцій noresolv та resolvfile. |
|
logfacility | рядок | DAEMON | --log-facility=<facility> | Визначає, до якого facility syslog буде відправляти повідомлення від dnsmasq. Див. мануал dnsmasq для повного списку. |
logqueries | булевий | 0 | --log-queries=extra | Логувати результати DNS-запитів, дампити кеш при SIGUSR1, включати IP-адресу запитувача. |
nodaemon | булевий | 0 | -d | Не запускати процес dnsmasq як демон. |
nohosts | булевий | 0 | -h | Не зчитувати імена DNS з файлу /etc/hosts. |
nonegcache | булевий | 0 | -N | Вимкнути кешування негативних відповідей типу “немає такого домену”. |
noresolv | булевий | 0 | --no-resolv | Не зчитувати DNS-сервери з /etc/resolv.conf, який за замовчуванням вказує на resolvfile. |
nonwildcard | булевий | 1 | --bind-dynamic | Прив’язати лише до вказаних інтерфейсів, а не до всіх (wildcard). |
port | номер порту | 53 | -p | Порт, на якому слухати DNS-запити. Якщо встановлено значення 0, DNS-сервер буде вимкнено. |
queryport | ціле число | (немає) | -Q | Використовувати фіксований порт для вихідних DNS-запитів. |
readethers | булевий | 1 | --read-ethers | Зчитувати статичні DHCP-лізинги з /etc/ethers; перечитувати при сигналі SIGHUP. |
rebind_protection | булевий | 1 | --stop-dns-rebind | Увімкнути захист від DNS rebind атак, відкидаючи відповіді RFC1918 від зовнішніх серверів. |
rebind_localhost | булевий | 1 | --rebind-localhost-ok | Дозволити відповіді з діапазону 127.0.0.0/8 (localhost) від зовнішніх серверів. Необхідно для деяких DNS-чорних списків. Працює лише, якщо увімкнено захист rebind. |
rebind_domain | список доменів | (немає) | --rebind-domain-ok | Список доменів, для яких дозволено RFC1918-відповіді. Працює лише, якщо увімкнено захист rebind. Синтаксис: list rebind_domain '/example.com/' |
resolvfile | шлях до файлу | /tmp/resolv.conf.d/resolv.conf.auto | -r | Визначає альтернативний файл конфігурації резолвера. |
server | список рядків | (немає) | -S | Список DNS-серверів для перенаправлення запитів. Деталі в man-сторінці dnsmasq. |
serverlist | шлях до файлу | /etc/dnsmasq.servers | -S | Вказати DNS-сервери напряму. Можна вказувати домени для вибіркового перенаправлення. Наприклад: server=/*.mydomain.tld/192.168.100.1 |
rev_server | список рядків | (немає) | --rev-server | Список мереж із DNS-сервером для зворотних запитів. Докладно описано в man-сторінці dnsmasq. |
address | список рядків | (немає) | -A | Список IP-адрес для запитуваних доменів. Докладніше в man-сторінці dnsmasq. |
strictorder | булевий | 0 | -o | Дотримуватися порядку серверів у файлі /etc/resolv.conf. |
tftp_root | шлях до каталогу | (немає) | --tftp-root | Вказує кореневу директорію для TFTP-сервера. |
minport | ціле число | 0 | --min-port | Мінімальний порт для вихідних запитів DNS. Має бути ≥ 1024. Корисно за наявності файрволу. |
maxport | ціле число | 0 | --max-port | Максимальний порт для вихідних запитів DNS. Має бути ≤ 65535. Корисно за наявності файрволу. |
noping | булевий | 0 | --no-ping | За замовчуванням dnsmasq перевіряє IP-адресу перед видачею, надсилаючи ping. Цей параметр вимикає перевірку. |
allservers | булевий | 0 | --all-servers | За замовчуванням запити надсилаються лише до одного DNS-сервера. Ця опція надсилає всі запити до всіх серверів і повертає відповідь першого, хто відповість. |
quietdhcp | булевий | 0 | --quiet-dhcp | Придушити логування звичайної роботи DHCP. Помилки та проблеми все одно будуть записані в журнал. |
sequential_ip | булевий | 0 | --dhcp-sequential-ip | Dnsmasq зазвичай обирає IP-адреси для клієнтів DHCP, використовуючи хеш MAC-адреси клієнта. Це дозволяє зберігати стабільність IP-адрес навіть після закінчення терміну оренди. У цьому режимі адреси розподіляються псевдовипадково. Проте іноді (наприклад, на серверах) зручніше мати послідовне розподілення, починаючи з найменшої доступної адреси. Цей параметр вмикає такий режим. Зверніть увагу, що при цьому клієнти частіше отримують інші адреси після завершення оренди. |
addmac | [0,1,base64,text] | 0 | --add-mac | Додає MAC-адресу запитувача до DNS-запитів, що пересилаються на зовнішні сервери; це може використовуватися для фільтрації DNS на стороні зовнішнього сервера. MAC-адресу можна додати лише тоді, коли запитувач перебуває в тій самій підмережі, що й сервер dnsmasq. Зверніть увагу, що цей механізм (опція EDNS0) ще не стандартизовано, тому слід вважати його експериментальним. Також передача MAC-адреси може мати наслідки для безпеки та конфіденційності. |
logdhcp | булевий | 0 | --log-dhcp | Увімкнути розширене логування DHCP; журналює всі параметри, надіслані клієнтам, та мітки, які використовувалися для їх визначення. |
dhcpscript | рядок | (немає) | --dhcp-script | Запустити власний скрипт при додаванні / поновленні / видаленні оренди DHCP. |
confdir | шлях до каталогу | /tmp/dnsmasq.d | --conf-dir | Каталог із додатковими конфігураційними файлами. |
max_ttl | ціле число | (немає) | --max-ttl | Обмежити максимальний час життя (TTL) у відповіді DNS до цього значення. |
min_cache_ttl | ціле число | (немає) | --min-cache-ttl | Встановити мінімальний TTL для відповідей DNS, навіть якщо у відповіді TTL менше. |
max_cache_ttl | ціле число | (немає) | --max-cache-ttl | Встановити максимальний TTL для відповідей DNS, навіть якщо у відповіді TTL більше. |
rapidcommit | булевий | 0 | --dhcp-rapid-commit | Увімкнути DHCPv4 Rapid Commit (швидке присвоєння адреси). Див. RFC 4039. |
\
Секції типу dhcp визначають пули оренди IP-адрес для інтерфейсів та параметри для обслуговування DHCP-запитів. Зазвичай у файлі /etc/config/dhcp присутня щонайменше одна така секція для інтерфейсу lan.
Ви можете вимкнути пул оренди IP-адрес для конкретного інтерфейсу, вказавши параметр ignore у відповідній секції.
Мінімальний приклад секції dhcp:
config dhcp 'lan' option interface 'lan' option start '100' option limit '150' option leasetime '12h'
lan — інтерфейс OpenWrt, який обслуговується цим DHCP-пулом100 — зміщення від мережевої адреси; у типовій конфігурації це означає початок видачі з 192.168.1.100150 — максимальна кількість адрес, які можуть бути надані; у типовій конфігурації — до 192.168.1.24912h — час життя оренди IP-адреси, у цьому випадку 12 годинserver — визначає режим конфігурації IPv6 (RA та DHCPv6)
Нижче наведено список допустимих параметрів для секцій типу dhcp.
| Назва | Тип | Обов'язкове | Типове значення | Опис |
|---|---|---|---|---|
dhcp_option | список рядків | ні | (немає) | Ідентифікатор dhcp_option тут має бути записаний з підкресленням. OpenWrt перетворює його на --dhcp-option (з дефісом), як вимагає dnsmasq. Можна вказати кілька значень для одного network-id, розділивши їх пробілами, а весь рядок взявши у лапки. Наприклад: 26,1470 або option:mtu, 1470 — встановлює MTU через DHCP. Клієнт повинен підтримувати прийом MTU через DHCP. Або: 3,192.168.1.1 6,192.168.1.1 — для видачі шлюзу та DNS-серверів. Повний список параметрів DHCP можна знайти тут (зверніть увагу, що dnsmasq підтримує не всі). Перелік символьних назв параметрів, які підтримує dnsmasq, можна отримати, виконавши команду dnsmasq --help dhcp. |
dhcp_option_force | список рядків | ні | (немає) | Повністю аналогічний до dhcp_option (також з підкресленням), але перетворюється на --dhcp-option-force, тобто параметри DHCP будуть надіслані незалежно від того, чи запитував їх клієнт. |
dynamicdhcp | булевий | ні | 1 | Динамічна видача IP-адрес клієнтам. Якщо встановлено 0 — обслуговуються лише клієнти, зазначені у файлі ethers. |
force | булевий | ні | 0 | Примусове надання DHCP-сервісу на зазначеному інтерфейсі, навіть якщо на сегменті мережі виявлено інший DHCP-сервер. |
ignore | булевий | ні | 0 | Якщо встановлено 1, dnsmasq ігноруватиме цей пул адрес. |
dhcpv4 | рядок | ні | (немає) | Вказує, чи буде сервер DHCPv4 увімкнено (server) або вимкнено (disabled). |
dhcpv6 | рядок | ні | (немає) | Вказує, чи буде сервер DHCPv6 увімкнено (server), ретранслюватися (relay) або вимкнено (disabled). |
dns | список | ні | <локальна адреса> | DNS-сервери, які буде оголошено в мережі. Приймаються лише IPv6-адреси. Для IPv4 DNS використовуйте dhcp_option. |
dns_service | булевий | ні | 1 | Якщо список dns порожній, буде анонсовано IPv6-адресу інтерфейсу як DNS-сервіс. |
ra | рядок | ні | (немає) | Вказує, чи будуть оголошення маршрутизатора (Router Advertisements) увімкнені (server), ретранслюватися (relay) або вимкнені (disabled). |
ra_default | ціле число | ні | 0 | Тривалість життя маршрутизатора в RA повідомленнях встановлюється, якщо: є маршрут за замовчуванням і глобальна IPv6-адреса (0), або є маршрут, але немає глобальної адреси (1), або жодна умова не виконується (2). |
ra_flags | список рядків | ні | other-config | Список прапорців RA для анонсу в повідомленнях RA:managed-config — отримати адресу та інші параметри від DHCPv6-сервера. Якщо встановлено цей прапорець, other-config є зайвим.other-config — отримати додаткову конфігурацію з DHCPv6-сервера (наприклад, DNS-сервери). Див. деталі тут.home-agent — див. тут.none — нічого не анонсується.Починаючи з OpenWrt 21.02, за замовчуванням використовуються managed-config та other-config (джерело). |
ra_slaac | булевий | ні | 1 | Анонсувати SLAAC для префікса (тобто встановити прапорець A у повідомленнях RA). |
ra_management | ціле число | ні | 1 | ra_flags і ra_slaac замість нього. Режим RA-управління: без прапорця M, але з A ( 0), з обома прапорцями M та A (1), тільки з M, але без A (2). |
ra_offlink | булевий | ні | 0 | Анонсувати префікси як позамережеві (offlink) (1) у повідомленнях RA. |
ra_preference | рядок | ні | medium | Анонсувати маршрути з високим (high), середнім (medium) або низьким (low) пріоритетом у повідомленнях RA. |
ra_mininterval | ціле число | ні | 200 | Мінімальний інтервал між повідомленнями RA (у секундах). |
ra_maxinterval | ціле число | ні | 600 | Максимальний інтервал між повідомленнями RA (у секундах). |
ra_lifetime | ціле число | ні | 1800 | Тривалість життя (lifetime) маршрутизатора в RA (у секундах). |
ra_useleasetime | булевий | ні | 0 | Обмежити префікси в RA повідомленнях значенням leasetime із DHCP. |
ra_hoplimit | ціле число | ні | 0 | Поточне обмеження кількості переходів (hop limit), яке буде анонсовано (0-255). |
ra_reachabletime | ціле число | ні | 0 | Час доступності (reachable time) у мілісекундах (0-3600000). |
ra_retranstime | ціле число | ні | 0 | Час повторної передачі NS у мілісекундах (0-60000). |
ra_mtu | ціле число | ні | (не задано) | Максимальне значення MTU, що буде анонсовано. |
ra_dns | булевий | ні | 1 | Анонсувати конфігурацію DNS у повідомленнях RA (відповідно до RFC8106). |
ndp | рядок | ні | (не задано) | Визначає, чи слід ретранслювати NDP (relay) або вимкнути його (disabled). |
ndproxy_routing | булевий | ні | 1 | Вивчати маршрути за допомогою NDP. |
ndproxy_slave | булевий | ні | 0 | Ігнорувати повідомлення сусідів (neighbor messages) на інтерфейсах з увімкненим режимом підлеглого (slave) (1). |
master | булевий | ні | 0 | Визначає, чи є інтерфейс головним (master) у режимі ретрансляції DHCPv6, RA та NDP. |
interface | назва логічного інтерфейсу | так | (не задано) | Визначає інтерфейс, пов'язаний із цим пулом DHCP-адрес; має бути одним з інтерфейсів, визначених у /etc/config/network. |
leasetime | рядок | так | 12h | Вказує час дії оренди адреси, виданої клієнту, наприклад: 12h або 30m. |
limit | ціле число | так | 150 | Визначає розмір пулу адрес (наприклад, зі start=100 та limit=150, остання адреса буде .249). |
networkid | рядок | ні | (значення interface) | DHCP-функціональність, визначена в секції dhcp, обмежується інтерфейсом, вказаним через цей network-id. Якщо не задано, система намагатиметься визначити network-id за допомогою параметра interface у цій секції, через /etc/config/network. Деякі ідентифікатори призначаються динамічно, їх немає в конфігурації мережі, але їх все одно можна задати тут. |
instance | екземпляр dnsmasq | ні | (не задано) | Екземпляр dnsmasq, до якого прив’язана ця секція dhcp; якщо не вказано — дійсна для всіх екземплярів dnsmasq. |
tag | список імен тегів | ні | (не задано) | Список тегів, які має відповідати dnsmasq для використання з параметром --dhcp-range. |
Примітки:
interface — це логічна мережа або інтерфейс, наприклад: lan, wan, wifi тощо. Це імена секцій у файлі /etc/config/network, а не імена пристроїв рівня 3 (наприклад, eth0, eth1, wlan0).networkid — це якраз ім’я пристрою мережевого інтерфейсу (рівень 3), наприклад: eth0, eth1, wlan0 тощо, а не логічна назва мережі (lan, wan, wifi).
Це відрізняється від використання ifname і network у /etc/config/network та /etc/config/wireless, тож уважно перевіряйте відповідність!
Ви можете призначити фіксовані IP-адреси для пристроїв у вашій мережі на основі їхніх MAC-адрес (апаратних адрес), використовуючи секцію host.
Опції конфігурації в цій секції використовуються для створення параметра -G dnsmasq.
| Назва | Тип | Обов'язково | Типове значення | Опис |
|---|---|---|---|---|
ip | рядок | ні | (немає) | IP-адреса, яка буде закріплена за цим пристроєм, або ignore, щоб ігнорувати будь-які DHCP-запити від цього пристрою |
mac | рядок | ні | (немає) | MAC-адреса(и) пристрою, розділені пробілами |
hostid | рядок | ні | (немає) | Ідентифікатор інтерфейсу IPv6 (суфікс адреси) у шістнадцятковому форматі (макс. 16 символів, 64 біти, 8 байт) |
duid | рядок | ні | (немає) | DHCPv6-DUID цього пристрою |
name | рядок | ні | (немає) | Необов’язкове ім’я хоста, яке буде призначене пристрою |
tag | рядок | ні | (немає) | Призначити вказаний тег для відповідних хостів |
match_tag | список рядків | ні | (немає) | Якщо вказано, секція застосовується лише до запитів, які містять усі зазначені теги; ім’я вхідного інтерфейсу завжди додається автоматично, інші теги можуть бути додані через секції vendorclass/userclass/etc. |
dns | булевий | ні | 0 | Додати статичні записи прямого та зворотного DNS для цього пристрою |
broadcast | булевий | ні | 0 | Примусово надсилати DHCP-відповідь широкомовно |
leasetime | рядок | ні | (немає) | Час оренди, специфічний для хоста, напр. 2m, 3h, 5d. Примітка: додано в ревізії r48801 |
instance | dnsmasq instance | ні | (немає) | Екземпляр dnsmasq, до якого прив’язана ця секція. Якщо не вказано — секція застосовується до всіх екземплярів dnsmasq. |
Приклад призначення статичної IP-адреси у файлі /etc/config/dhcp:
config host
option name 'nas'
list mac '11:22:33:44:55:66'
option ip '192.168.1.123'
option leasetime 'infinite'
Примітка: потрібно вказати хоча б одну з опцій: mac (можна з використанням шаблонів), duid або name.
Також можна увімкнути опцію readethers у секції dnsmasq і додати записи до файлу /etc/ethers.
Деякі пристрої підтримують завантаження через мережу (PXE-завантаження).
Секції типу boot визначають, як DHCP/BOOTP повідомляє клієнту, який файл слід завантажити та з якого сервера.
Кожен клієнт може отримати лише один набір параметрів: ім’я файлу та адресу сервера.
Якщо різні пристрої повинні завантажувати різні файли або з різних серверів, можна використати tag (також відомі як network-id) для прив’язки параметрів до конкретного клієнта.
Зазвичай для наступних етапів процесу завантаження необхідно вказати додаткові параметри DHCP (через dhcp_option).
Синтаксис опції O описано в man-сторінці для dnsmasq.
Опції конфігурації в цій секції використовуються для побудови параметра -M dnsmasq.
Примітка: в odhcp наразі не можна вказувати шлях до кореня (root-path). Якщо вам потрібна ця функціональність — вимкніть odhcpd та використовуйте dnsmasq.
| Назва | Тип | Обов'язково | Типове значення | Опис |
|---|---|---|---|---|
dhcp_option | список рядків | ні | (немає) | Додаткові параметри, які додаються для цього network-id. |
filename | рядок | так | (немає) | Ім’я файлу, який клієнт має запросити у сервера завантаження. |
networkid | рядок | ні | (немає) | Тег (network-id), до якого застосовуються ці параметри завантаження. Якщо не вказано — застосовується до всіх клієнтів. |
serveraddress | рядок | так | (немає) | IP-адреса сервера завантаження. |
servername | рядок | так | (немає) | Ім’я хоста сервера завантаження. |
force | булевий | ні | (немає) | Параметри з dhcp_option завжди надсилатимуться, навіть якщо клієнт їх не запитує. Іноді це необхідно, наприклад, для PXELinux. |
instance | instance dnsmasq | ні | (немає) | Екземпляр dnsmasq, до якого прив’язана секція boot. Якщо не вказано — секція діє для всіх екземплярів dnsmasq. |
DHCP може надавати клієнтам багато різних опцій, таких як ім’я домену, сервери часу (NTP), параметри завантаження по мережі тощо. Хоча деякі параметри стосуються всіх хостів у сегменті мережі, інші є більш специфічними — наприклад, для окремих груп або навіть для одного конкретного пристрою.
dnsmasq дозволяє групувати DHCP-опції за допомогою “tag”, так званого networkid. Це буквено-цифровий ідентифікатор, за яким опції надсилаються лише хостам, що мають відповідний тег.
В OpenWrt можна позначати хости тегами на основі:
dhcp),
У кожній з таких секцій можна використати список dhcp_option, щоб додати опції, які будуть надіслані лише клієнтам з відповідним тегом (networkid).
Ви можете використовувати такі типи класифікаційних секцій:
| Назва | Опис |
|---|---|
mac | MAC-адреса клієнта |
tag | Буквено-цифрова мітка, яка позначає мережу |
vendorclass | Рядок, який клієнт надсилає для ідентифікації продюсера. dnsmasq виконує часткове порівняння. |
userclass | Рядок, який клієнт надсилає для ідентифікації споживача. Часткове порівняння. |
circuitid | Circuit ID, який надсилається relay-агентом (за RFC3046) |
remoteid | Remote ID, який надсилається relay-агентом (за RFC3046) |
subscrid | Subscriber ID, який надсилається relay-агентом (за RFC3993) |
Кожна з класифікаційних секцій (окрім tag) має одну основну опцію — networkid — тег, який буде їй призначено.
Наприклад, секція типу mac, яка містить MAC-адресу вашого пристрою та тег green, призначить цьому клієнту тег green.
| Назва | Тип | Обов'язкова | Типове значення | Опис |
|---|---|---|---|---|
<classifier> | рядок | так | (немає) | Тип секції використовується як ім’я опції, а її значення — як умова фільтрації |
networkid | рядок | так | (немає) | Тег, який буде призначено клієнту при збігу умов |
force | булевий | ні | false | Примусово надіслати клієнту додаткові опції, навіть якщо він їх не запитував |
Секції типу tag мають лише одну опцію: список опцій DHCP, які потрібно призначити клієнтам з цим тегом.
Продовжуючи попередній приклад: клієнтам з тегом green можна вибірково надіслати опцію dhcp_option, якщо існує секція типу tag зі значенням green і вказаним списком dhcp_option, а також встановленим параметром force.
| Назва | Тип | Обов'язкова | Типове значення | Опис |
|---|---|---|---|---|
<classifier> | рядок | так | (немає) | Тип секції використовується як ім’я опції, а її значення — як умова фільтрації |
dhcp_option | список рядків | ні | (немає) | Додаткові опції, які буде призначено клієнтам з відповідним тегом (networkid) |
force | булевий | ні | false | Чи надсилати додаткові опції клієнтам, що їх не запитували |
Потребує встановлення пакета dnsmasq-full.
Dnsmasq може автоматично наповнювати Netfilter IP-набори (IP sets) розпізнаними адресами заданих доменів. Цю функцію можна увімкнути за допомогою параметра ipset у секції dnsmasq, або — зручніше — через спеціальну секцію типу ipset.
Кожна секція ipset містить:
name; можна вказати кілька наборів у межах однієї секції),domain).Приклад:
config ipset list name 'ss_rules_dst_forward' list name 'ss_rules6_dst_forward' list domain 'linkedin.com' list domain 'telegram.org'
Якщо ви налаштовуєте маршрутизацію трафіка між двома інтерфейсами (тобто вони не об’єднані в міст), то клієнти у віддаленому сегменті мережі, які надсилають DHCP-запити, не отримуватимуть відповідей, оскільки трансляція DHCP не передається між інтерфейсами маршрутизатора.
Цю проблему можна вирішити без налаштування окремого DHCP-сервера для віддаленого підмережевого сегмента, налаштувавши dnsmasq як ретранслятор DHCP-запитів (DHCP relay).
У цьому режимі dnsmasq слухає DHCP-запити звичайним чином, пересилає їх на віддалений DHCP-сервер, а отримані відповіді транслює назад у початкову підмережу як broadcast.
Така конфігурація дозволяє одному DHCP-серверу обслуговувати кілька підмереж великої мережі.
Приклад конфігурації DHCP-ретранслятора:
config relay 'id' option interface 'lan' option local_addr '1.1.1.1' option server_addr '2.2.2.2'
| Назва | Тип | Обов’язково | Значення за замовчуванням | Опис |
|---|---|---|---|---|
id | рядок | так | немає | Унікальна назва секції, яка має відрізнятися від назв усіх інших секцій. |
interface | рядок | так | немає | Логічний мережевий інтерфейс, через який доступний цільовий DHCP-сервер. |
local_addr | рядок | так | немає | IP-адреса, на якій dnsmasq слухає DHCP-запити. |
server_addr | string | так | немає | IP-адреса зовнішнього (апстрімного) DHCP-сервера, що доступна через заданий інтерфейс. DHCP-відповіді, отримані у віддаленій підмережі, будуть переслані цьому серверу. Ця адреса має бути коректно маршрутизована (наприклад, має успішно пінгуватись з командного рядка OpenWrt). |
Якщо ви хочете, певний домен (або субдомен) розпізнати у конкретну IP-адресу, одним із варіантів є додати запис типу hostrecord у конфігурацію dnsmasq.
Це можна зробити за допомогою секції типу hostrecord у файлі /etc/config/dhcp.
Приклад:
config hostrecord option name 'example.com' option ip '192.168.1.2'
Згідно з цим прикладом конфігурації, домен example.com розпізнається у IP-адресу 192.168.1.2, але subdomain.example.com розпізнається звичайним способом.
Зверніть увагу, що це відрізняється від використання опції address у dnsmasq, яка наказує розпізнати весь домен, включно з усіма субдоменами, у вказану IP-адресу.