Налаштування 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 — як загальні параметри роботи, так і параметри 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.
:!: Розширена функція доступна з версії 18.06 з опцією add_local_fqdn.
add_local_fqdn ціле число 1 Додає записи A, AAAA та PTR лише для цього маршрутизатора в локальній мережі з DHCP.
0: Вимкнено.
1: Ім’я хоста за основною адресою.
2: Ім’я хоста за всіма адресами.
3: Повне доменне ім’я (FQDN) за всіма адресами.
4: iface.host.domain за всіма адресами.
:!: Доступно з версії 18.06
add_wan_fqdn ціле число 0 Маркує інтерфейси WAN подібно до add_local_fqdn, замість стандартного імені від ISP, яке може бути нечитабельним. WAN визначається як будь-який розділ config dhcp з option ignore 1.
:!: Доступно з версії 18.06
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.
:!: Стандартні збірки OpenWrt зазвичай не містять підтримки DBus.
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.
:!: Потрібен dnsmasq-full пакет. Багато сучасних додатків вимагають DNSSEC: наприклад, Gmail/Maps на iOS, Windows Update та активація облікових записів Windows.
dnsseccheckunsigned булевий 0 --dnssec-check-unsigned Перевіряє зони для непідписаних відповідей, щоб упевнитися, що такі відповіді дозволені в цих зонах. Це захищає від атак, коли зловмисник підробляє непідписані відповіді для підписаних DNS-зон. Повільніше та вимагає, щоб сервери DNS вище по ланцюгу підтримували DNSSEC.
:!: Потрібен пакет dnsmasq-full.
:!: Попередження: Якщо ця опція використовується на пристрої без апаратного годинника, то DNS-резолюція може не працювати після перезавантаження через неправильний системний час.
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'
:!: Потрібен пакет dnsmasq-full.
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.100
  • 150 — максимальна кількість адрес, які можуть бути надані; у типовій конфігурації — до 192.168.1.249
  • 12h — час життя оренди 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 будуть надіслані незалежно від того, чи запитував їх клієнт.
:!: Доступно починаючи з версії 18.06
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-сервіс.
:!: Доступно з версії 21.02
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. :!: Якщо ви вказуєте цю опцію, обов'язково також вкажіть 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 Чи надсилати додаткові опції клієнтам, що їх не запитували

:!: Потребує встановлення пакета 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 не передається між інтерфейсами маршрутизатора.

Цю проблему можна вирішити без налаштування окремого 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-адресу.

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:04
  • by vazaz