Что такое Dnsmasq
Опубликовано: 01.09.2021
легкий в настройке и использовании сервер DNS. Помимо последнего, также позволяет поднять сервисы DHCP и TFTP.
Программный продукт нашел широкое применение для следующих задач:
- Оперативный мониторинг недоступности узла, если внешнее соединение прервано.
- Переопределение IP-адреса для узла.
- Кэширование запросов к другим NS-серверам.
- Конвертация запровов из IPv4 в IPv6 и наоборот.
Может быть установлен на системы семейства UNIX — Lunux (Debian, Ubuntu, Rocky Linux, CentOS и так далее), BSD, Mac OS. Также является встроенным DNS-сервисов для некоторых прошивок роутеров (например, DD-WRT и OpenWRT). Установить dnsmasq можно из репозитория операционной системы (если поддерживается) или скачать исходник с офциальниого сайта. Также проект выложен на GitHub.
Документацию можно прочитать также на официальном сайте.
Подробнее о Dnsmasq на Википедии.
Встречается в статьях
Мини-инструкции:
- Перенаправление портов на роутере Mikrotik
- Шпаргалка по работе с Dnsmasq — установка и примеры настройки
- Как установить и настроить Consul-агента и зарегистрировать на кластере сервис
- Как работать с системой контейнеризации LXD на Linux
dnsmasq в качестве dhcp сервера
Задача была установить именно на Linux (debian) DHCP сервер.
Локальная сеть:
32 рабочих места
контроллер домена — windows 2003
сервер производства LAMP — debian
принт-сервер — debian
1С сервер — debian
сервер бэкап — debian
итого: 5 боевых машин
Решено было использовать на шлюзе dnsmasq в качестве эксперимента замены стандартного DHCP3-server
root@gw:# apt-get install dnsmasq
Открываем /etc/dnsmasq.conf
Конфигурационный файл великолепно документирован:
- #выключаем днс — сервер чтобы избежать конфликта (в качестве днс — сервера используется bind )
- port=0
- bogus-priv
- # на шлюзе два интерфейса
- # eth0 — WAN
- # eth1 — LAN
- interface =eth1
- # диапазон будет таким
- dhcp-range=10.15.0.2,10.15.0.253,12h
- # сервера прописываем статично:
- dhcp-host=00:00:00:00:00:00, 10.0.0.1 # gw — шлюз
- dhcp-host=00:00:00:00:00:00, 10.0.1.1 # PDC — контроллер домена
- dhcp-host=00:00:00:00:00:00, 10.0.1.2 # сервер для бэкапа
- dhcp-host=00:00:00:00:00:00, 10.0.1.3 # точка доступа WI-FI
- dhcp-host=00:00:00:00:00:00, 10.0.1.4 # принт-сервер
- dhcp-host=00:00:00:00:00:00, 10.0.0. 5 # сервер для производства
- # бухгалтерия директора и тд прописываем статично
- dhcp-host=00:00:00:00:00:00,10.15.0.01 # директор
- dhcp-host=00:00:00:00:00:00,10.15.0.02 # зам. директора
- dhcp-host=00:00:00:00:00:00,10.15.0.03 # начальник производства
- dhcp-host=00:00:00:00:00:00,10.15.0.04 # бухгалтер
- dhcp-host=00:00:00:00:00:00,10.15.0.05 # зам. бухгалтера
- # посылаем опции дополнительные для клиентов (полный список можно найти в RFC 2132)
- dhcp-option=1,255.240.0.0 # маска
- dhcp-option=2,10800 # время аренды в секундах
- dhcp-option=3,10.0.0.1 # шлюз по умолчанию
- dhcp-option=42,1.0.0.1 # указываем сервер времени
- dhcp-option=44,10.0.1.1 # адрес нашего контроллера домена с WINS
- dhcp-option=46,8 # Этот параметр зависит от предыдущего он сообщает клиенту должен ли тот использовать шировещательный принцип преобразования адресов или обращатся к серверу WINS. Код типа — это числовое значение от 1 до 8. Значение 1 и 2 сообщают об использовании широковещательного преобразования а значения 4 и 8 позволяет применять оба способа
- dhcp-boot=pxelinux.0,10.0.0.1 # указываем возможность загрузки по сети
- dhcp-leasefile=/ var /log/dnsmasq/dnsmasq.leases # аренду адреса логируем
- dhcp-authoritative
- log-dhcp # пишем лог
Клиенты получают адреса из 10.15.0.Х диапазона как из локальной сети так и по Wi-Fi.
MNorin.com
Блог про Linux, Bash и другие информационные технологии
Настройка dnsmasq: DHCP и DNS
Dnsmasq — это программа, поддерживающая работу сразу двух сетевых сервисов, DNS и DHCP. Dnsmasq как сервис имеет ряд преимуществ по сравнению с другими сервисами DNS и DHCP. Во-первых, настройка dnsmasq проста, во-вторых, он нетребователен к ресурсам, в-третьих, он реализует сразу два сервиса, в-четвертых, он гибок и позволяет, например, реализовать обращение по именам к компьютерам в локальной сети, причем сделать это просто и быстро. Именно поэтому он используется как на серверах, так и в embeded-системах, например, в роутерах, и отлично подходит для обеспечения работы небольших сетей.
Установка
Обычно dnsmasq устанавливается на машину, выполняющую роль сетевого шлюза, в небольших сетях обычно именно на нем работают сервисы DHCP и DNS. Поскольку dnsmasq присутствует в репозиториях многих дистрибутивов, его можно установить при помощи менеджера пакетов:
apt-get install dnsmasq
yum install dnsmasq
После этого можно приступать к настройке.
Настройка dnsmasq как DHCP
DHCP — это один из базовых сервисов в локальных сетях, благодаря которому отпадает необходимость конфигурировать настройки сети вручную. Он позволяет выдавать автоматически такие настройки как IP-адрес, адрес DNS-сервера и шлюза по-умолчанию, а также резервировать IP-адреса по MAC-адресам.
Для того, чтобы dnsmasq работал как DHCP-сервер, в конфигурационном файле /etc/dnsmasq.conf должны присутствовать следующие строки (они могут уже присутствовать в конфиге, их надо только раскомментировать и исправить):
domain=mydomain.com
Эта строка не обязательна, она нужна в том случае, если вы хотите, чтобы хосты, получающие адреса по DHCP, имели FQDN-имя, то есть полное имя, включающее имя домена.
interface=eth1
Сетевой интерфейс, на котором будет работать сервис. Обычно основной интерфейс eth0 подключен к провайдеру, поэтому его крайне нежелательно указывать в качестве интерфейса для работы сервиса.
dhcp-range=192.168.0.20,192.168.0.100,24h
Интервал выдаваемых адресов и время аренды адресов (в данном случае 24 часа).
dhcp-host=80:15:AA:BB:CC:DD,192.168.0.10
Резервация IP-адреса по MAC-адресу, чтобы устройство с указанным MAC-адресом всегда получало указанный IP-адрес.
dhcp-option=1,255.255.255.0
Задать значение опции DHCP с номером 1. Опция с номером 1 — это маска подсети (netmask).
dhcp-option=3,192.168.0.1
Задать значение опции DHCP с номером 3. Опция с номером 3 — это шлюз по умолчанию (default gateway).
Этих опций в небольшой офисной или домашней сети обычно достаточно.
Список всех опций DHCP можно посмотреть на странице IANA (Internet Assigned Numbers Authority).
После задания настроек надо рестартовать сервис:
service dnsmasq restart
Теперь можно задавать настройки на компьютерах в сети на автоматическое получение адресов по DHCP.
Настройка dnsmasq как DNS
DNS — это второй базовый сервис, без которого в локальных сетях не обойтись, если, конечно, вы не планируете обращаться к компьютерам в локальной сети и Интернете по IP-адресам, в чем я сильно сомневаюсь. Dnsmasq работает как кэширующий DNS-сервер. У него есть одна полезная особенность. Он умеет использовать файл /etc/hosts как источник информации для DNS, что может быть очень полезно. Например, если есть какой-то локальный сервис, с которым работают пользователи в локальной сети, они могут к нему обращаться по имени, а не по адресу, адрес будет запрашиваться у DNS-сервера, который будет возвращать IP-адрес, к которому необходимо обращаться.
Настройка dnsmasq как DNS по сути не отличается от настройки как DHCP, поскольку все настройки хранятся в том же файле — /etc/dnsmasq.conf
Самое первое, что необходимо, — это название домена
domain=mydomain.com
Для определенной подсети можно указать отдельное имя домена:
domain=fin.mydomain.com,192.168.1.0/24
И точно так же можно указать имя домена для интервала адресов:
domain=fin.mydomain.com,192.168.1.10,192.168.1.30
Основная функция DNS-сервера — это преобразование доменных имен в IP-адреса и наоборот, но DNS-серверов даже в локальной сети может быть несколько. Поэтому может потребоваться указать для определенных доменов адреса DNS-серверов, на которые должны отравляться запросы:
server=/remoteoffice.org/192.168.3.10
Аналогично указывается сервер для обратной зоны:
server=/3.168.192.in-addr.arpa/192.168.3.1
В конфигурационном файле также можно указать соответствие имени IP-адресу.
Запись типа A в прямой зоне DNS (сопоставляющей IP-адрес запрошенному имени):
address=/extdomain.net/127.0.0.1
На любое имя хоста *.extdomain.net возвращается адрес 127.0.0.1.
Запись типа CNAME:
cname=sambaserver,smb
Эта запись создает алиас для локального имени sambaserver, чтобы к нему можно было обращаться по более короткому имени smb.
По умолчанию dnsmasq использует файл /etc/hosts для сопоставления имен хостов IP-адресам, но это тоже можно изменить. Если вы не хотите использовать /etc/hosts, вы можете указать это при помощи опции
no-hosts
Если же вы хотите использовать совместно с /etc/hosts еще один файл аналогичной структуры, для этого есть опция
addn-hosts=/path/to/file
Кроме задания собственных записей DNS можно изменять информацию, получаемую от внешних DNS-серверов путем подмены полученного IP-адреса. Для замены одного адреса:
alias=1.2.3.4,5.6.7.8
Если при запросе доменного имени от внешнего DNS-сервера мы получим IP-адрес 1.2.3.4, то мы подменим его на адрес 5.6.7.8. Можно осуществлять подмену целыми подсетями:
alias=1.2.3.0,5.6.7.0,255.255.255.0
Такая запись подменит любой адрес из подсети 1.2.3.0/24 на адрес из подсети 5.6.7.0/24. Если же вам необходимо подменять определенный интервал адресов, то такая возможность тоже есть:
alias=10.0.0.10-10.0.0.40,192.168.0.0,255.255.255.0
Эта запись подменит адреса из интервала 10.0.0.10-10.0.0.40 на адреса 192.168.0.10-192.168.0.40
Для того, чтобы обращения к DNS шли именно на dnsmasq на том же сервере, где он сам работает, необходимо указать первой записью в /etc/resolv.conf следующую строку:
nameserver 127.0.0.1
Сам dnsmasq будет игнорировать эту запись, поскольку предполагает, что эта запись обозначает его собственный сервис, он начинает использование записей с указанием серверов имен со следующей записи, в которой указывается уже внешний DNS-сервер.
Во многих системах /etc/resolv.conf генерируется автоматически при получении адреса от провайдера по DHCP, поэтому если просто записать эту строчку руками, при переподключении основного сетевого интерфейса файл будет перезаписан и эта строка исчезнет. Этого можно избежать, если раскомментировать в файле /etc/dhcp/dhclient.conf (или /etc/dhcp3/dhclient.conf, в зависимости от системы) строчку
prepend domain-name-servers 127.0.0.1;
Тогда даже при получении списка DNS-серверов по DHCP первой строчкой в /etc/resolv.conf будет строчка «nameserver 127.0.0.1».
И еще одна опция, которая может вам пригодиться, если вы хотите использовать свой список DNS-серверов:
resolv-file=/path/to/file
Файл, который указывается в этой опции, должен иметь такую же структуру, как и /etc/resolv.conf. При наличии этой опции будет использован указанный файл вместо /etc/resolv.conf. И таких записей может быть больше одной.
А если необходимо просто указать несколько DNS-серверов, на которые будут форвардиться запросы, это можно сделать при помощи записи нескольких строчек с опцией server:
server=8.8.8.8 server=8.8.4.4 . server=208.67.222.222 server=208.67.220.220
Вот, в общем, и всё. И не забывайте после изменения настроек рестартовать dnsmasq командой
service dnsmasq reload
Похожие посты:
- Настройка bridge-интерфейса LXC в Debian 8 для NAT
- Создание сети для начинающих. Часть 2.
- whereami — автоматическая реконфигурация
- Systemd долго ждёт сеть при загрузке Debian 8
- Настройка iptables от простого к сложному. Часть 3.
- Настройка WiFi из командной строки
- Создание сети с бездисковыми станциями или новая жизнь старых компьютеров
- Настройка iptables от простого к сложному. Часть 1.
- Настройка iptables от простого к сложному. Часть 2.
- iptables: Проброс RDP наружу или форвард портов между локальными сетями
Dnsmasq
dnsmasq — это простой DHCP/DNS сервер, который можно использовать в локальной сети до 1000 клиентов. Его основные особенности — простота настройки и небольшой расход системных ресурсов. Он также поддерживает IPv6.
- 1 Установка
- 1.1 USE-флаги
- 1.2 Emerge
- 2.1 Сервис
- 2.1.1 OpenRC
- 3.1 Сервисы DNS
- 3.2 DNSSEC
- 3.3 Сервисы DHCP
- 4.1 Сброс аренды
- 4.2 Перезагрузка неосновных настроек конфигурации
Установка
USE-флаги
Выберите нужные USE-флаги:
USE flags for net-dns/dnsmasq Small forwarding DNS server
auth-dns Add support for acting as an authorative DNS server. conntrack Add support for Linux conntrack connection marking. dbus Enable dbus support for anything that needs it (gpsd, gnomemeeting, etc) dhcp Enable support for acting as a DHCP server. dhcp-tools Install extra command line tools for manually managing DHCP leases. dnssec Enable support DNSSEC validation and caching. dumpfile Include code to dump packets to a libpcap-format file for debugging id Whether report *.bind CHAOS info to clients, otherwise forward such requests upstream instead idn Enable support for Internationalized Domain Names inotify Enable inotify filesystem monitoring support ipv6 Add support for IP version 6 libidn2 Enable support for Internationalized Domain Names, via net-dns/libidn2 rather than net-dns/libidn loop Include functionality to probe for and remove DNS forwarding loops lua Enable Lua scripting support nettlehash Use hashing functions from dev-libs/nettle nls Add Native Language Support (using gettext — GNU locale utilities) script Enable support for calling scripts when leases change. selinux !!internal use only!! Security Enhanced Linux support, this must be set by the selinux profile or breakage will occur static !!do not set this during bootstrap!! Causes binaries to be statically linked instead of dynamically tftp Enables built in TFTP server for netbooting. Emerge
Затем установите пакет net-dns/dnsmasq:
root # emerge —ask net-dns/dnsmasq
Конфигурация
Поведением dnsmasq можно управлять с помощью следующих ресурсов:
- параметры командной строки, устанавливаемые в файле /etc/conf.d/dnsmasq
- основной файл конфигурации ( /etc/dnsmasq.conf )
Сервис
OpenRC
Если необходима автоматическая загрузка при старте, добавьте dnsmasq на уровень запуска по умолчанию:
root # rc-update add dnsmasq default
Чтобы запустить сервсис сейчас:
root # rc-service dnsmasq start
Настройка сервиса
В /etc/conf.d/dnsmasq можно настроить параметры командной строки, подаваемые демону dnsmasq при его запуске.
ФАЙЛ /etc/conf.d/dnsmasq Пример настройки сервиса dnsmasq
DNSMASQ_OPTS="--user=dnsmasq --group=dnsmasq -H /srv/virt/gentoo/hosts --max-cache-ttl=10"
Основной файл конфигурации
Основная настройка dnsmasq осуществляется с помощью его файла конфигурации /etc/dnsmasq.conf . Этот файл использует синтаксис вида key[=value] . Пример файла конфигурации включен в пакет; он хорошо документирован и его рекомендуется прочитать. В этом файле, либо с помощью параметров командной строки, можно обращаться к дополнительным ресурсам (например, файл DHCP hosts).
Пример файла конфигурации:
ФАЙЛ /etc/dnsmasq.conf
# Принимать соединения только на этом интерфейсе interface=eth1 # Присваивать имена по mac-адресу dhcp-host=00:1e:68:c2:ff:ee,endor,192.168.0.54,24h # Любой другой запрос DHCP получает ip из этого диапазона dhcp-range=eth1,192.168.0.100,192.168.0.120,12h # Включить TFTP-сервер и установить корневой каталог для файлов, доступных посредством TFTP. enable-tftp tftp-root=/var/lib/tftpboot dhcp-boot=/pxelinux.0
После редактирования файла конфигурации нужно перезапустить (restart) сервис — перезагрузка (reload) поддерживается, но для других ресурсов.
root # /etc/init.d/dnsmasq restart
Файл hosts
Приложение dnsmasq использует файл /etc/hosts в качестве одного из источников, предоставляющих сервисы DNS, если не указан параметр командной строки -h ( —no-hosts ).
После обновления /etc/hosts dnsmasq должен получить сигнал SIGHUP, чтобы перезагрузить настройки. Это также можно сделать с помощью команды reload из init-скрипта:
root # /etc/init.d/dnsmasq reload
Это поведение можно отключить в файле конфигурации с помощью параметра no-hosts .
Дополнительный файл hosts
Существует возможность обращения к (дополнительному) файлу hosts в качестве источника запросов DNS. Для этого нужно добавить параметр командной строки -H /path/to/hostsfile ( —addn-hosts=/path/to/hostsfile ). Также можно указать каталог; в этом случае, все файлы в этом каталоге будут рассматриваться, как дополнительные файлы hosts.
Так же как и со стандартным файлом hosts, сигнал SIGHUP перезагружает файл.
Это поведение также можно установить в файле конфигурации с помощью параметра addn-hosts .
Upstream сервера имен
По умолчанию, dnsmasq использует сервера имен, указанные в /etc/resolv.conf , в качестве upstream серверов имен.
С помощью параметра командной строки -r ( —resolv-file ) можно задать другой файл.
Это поведение также можно установить в файле конфигурации с помощью параметра resolv-file .
Возможности
Dnsmasq поддерживает DNS, TFTP, PXE, router advertisements и сервисы DHCP. Он является гибкой утилитой управления сетью для небольших и средних по размеру сетей.
Сервисы DNS
Для того, чтобы предоставить (только) сервисы DNS, сначала определите upstream nameserver. Если это тот же сервер, который указан в файле /etc/resolv.conf , то не требуется предпринимать никаких дополнительных шагов. В противном случае, укажите dnsmasq нужный файл resolv.conf с помощью параметра командной строки -r ( —resolv-file ). Синтаксис тот же, что и в файле /etc/resolv.conf , однако dnsmasq читает только определения nameserver.
root # echo «nameserver 8.8.8.8» >> /etc/dnsmasq.conf.resolv
Затем укажите этот файл dnsmasq с помощью файла конфигурации:
ФАЙЛ /etc/dnsmasq.conf Настройка пользовательского файла resolv
resolv-file=/etc/dnsmasq.conf.resolv
Чтобы удостовериться, что сервис работает (после перезапуска, поскольку файл конфигурации был изменен), воспользуйтесь командой dig (она входит в пакет net-dns/bind-tools) для того, чтобы попросить сервер DNS (запущенный на localhost в следующем примере) разрешить локальный или удаленный адрес:
user $ dig @localhost +short www.gentoo.org
www-bytemark-v4v6.gentoo.org. 89.16.167.134
DNSSEC
Dnsmasq может проверять достоверность данных DNSSEC во время передачи данных. Это можно реализовать, добавив следующие строки в файл конфигурации (не забудьте включить USE-флаг dnssec ):
ФАЙЛ /etc/dnsmasq.conf Включение DNSSEC
# Uncomment these to enable DNSSEC validation and caching: # (Requires dnsmasq to be built with DNSSEC option.) conf-file=/usr/share/dnsmasq/trust-anchors.conf dnssec # Replies which are not DNSSEC signed may be legitimate, because the domain # is unsigned, or may be forgeries. Setting this option tells dnsmasq to # check that an unsigned reply is OK, by finding a secure proof that a DS # record somewhere between the root and the domain does not exist. # The cost of setting this is that even queries in unsigned domains will need # one or more extra DNS queries to verify. dnssec-check-unsigned
После этих изменений, если проверка достоверности не удастся, dnsmasq вернет SERVFAIL и не вернет никаких данных DNS. Если проверка достоверности завершается успехом, dnsmasq устанавливает флаг ad («authenticated data»). В случае, если домен не поддерживает DNSSEC, dnsmasq ведет себя, как и раньше.
Сервисы DHCP
Для того, чтобы включить сервисы DHCP dnsmasq, используйте параметр настройки dhcp-range .
Например, для того, чтобы включить настройку адреса IPv6 посредством router advertisement (RA) с бесконечной арендой, и настройку адреса IPv4 также с бесконечной арендой:
ФАЙЛ /etc/dnsmasq.conf Включение аренды IPv6 и IPv4
dhcp-range=2001:db8:81:e2. ra-only,infinite dhcp-range=192.168.100.100,192.168.100.149,infinite
Существует возможность использования статических определений для известных хостов. Это можно реализовать либо посредством основного файла конфигурации (параметр dhcp-host= ), либо посредством отдельного файла. Если используется отдельный файл, укажите его dnsmasq с помощью параметра командной строки —dhcp-hostsfile . Преимущество последнего варианта в том, что для повторного считывания записей достаточно послать сигнал SIGHUP (или перезагрузить сервис), тогда как при использовании определений в файле конфигурации необходимо полностью перезапустить сервис.
Для получения более подробной информации о синтаксисе параметра dhcp-host , обратитесь к странице руководства или к файлу конфигурации, поскольку синтаксис этого параметра весьма пространен.
Использование
Этот раздел содержит описание различных вариантов использования (обслуживания и практических задач) сервиса dnsmasq.
Сброс аренды
Клиенты, у которых был обновлен сетевой интерфейс, что привело к изменению MAC-адреса, могут не сразу получить нужный IP-адрес. Это происходит оттого, что сервис dnsmasq предоставил этот IP-адрес старому MAC-адресу и ожидает истечения аренды этого адреса, прежде чем присвоить новый.
Сервис dnsmasq хранит свои аренды в файле /var/lib/misc/dnsmasq.leases . Если требуется быстрее удалить аренду, остановите сервис dnsmasq, удалите аренду из файла dnsmasq.leases и снова запустите сервис.
root # /etc/init.d/dnsmasq stop
root # nano -w /var/lib/misc/dnsmasq.leases
root # /etc/init.d/dnsmasq startПерезагрузка неосновных настроек конфигурации
В дополнение к файлу dnsmasq.conf , сервис dnsmasq может использовать внешние определения для следующих сервисов:
- настройки конфигурации хостов DHCP (посредством параметра командной строки —dhcp-hostsfile )
- параметры DHCP (посредством параметра командной строки —dhcp-optsfile )
После изменения этих файлов сигнал SIGHUP заставит dnsmasq перезагрузить эти настройки.
Заметка
Файлы resolv.conf по умолчанию опрашиваются dnsmasq; изменения в этих файлах вступают в силу автоматически, если не указан параметр командной строки -n ( —no-poll ) или параметр настройки no-poll .