Налаштування DHCP та DNS (/etc/config/dhcp)
Див. також: Приклади 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 визначаються різні типи розділів. Не всі типи мають з’являтися в конфігурації — більшість використовуються для спеціальних випадків. Найбільш уживані:
- Загальні опції (Common Options)
- DHCP-пули (DHCP Pools)
- Статичні призначення (Static Leases)
Типова конфігурація містить один розділ типу dnsmasq та один або більше розділів типу dhcp для оголошення DHCP на інтерфейсах мережі.
Загальні опції (dnsmasq)
Розділи типу 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.- Можливо, потрібно вручну вказати IP-адресу сервера на клієнті, задавши її через
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-пули адрес
Секції типу 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-адрес (Static leases)
Ви можете призначити фіксовані 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 можна позначати хости тегами на основі:
- діапазону IP-адрес DHCP (секція
dhcp), - або опцій, які клієнт надсилає у запиті 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 | Чи надсилати додаткові опції клієнтам, що їх не запитували |
IP-набори
Потребує встановлення пакета dnsmasq-full.
Dnsmasq може автоматично наповнювати Netfilter IP-набори (IP sets) розпізнаними адресами заданих доменів. Цю функцію можна увімкнути за допомогою параметра ipset у секції dnsmasq, або — зручніше — через спеціальну секцію типу ipset.
Кожна секція ipset містить:
- імена IP-наборів, яким слід надати (
name; можна вказати кілька наборів у межах однієї секції), - і домени, розпізнані адреси, яких потрібно додати до вказаних IP-наборів (
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 relay)
Якщо ви налаштовуєте маршрутизацію трафіка між двома інтерфейсами (тобто вони не об’єднані в міст), то клієнти у віддаленому сегменті мережі, які надсилають 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-адресу.