Шпаргалка по работе с Dnsmasq — установка и примеры настройки

Обновлено и опубликовано Опубликовано:

Используемые термины: Dnsmasq, DNS, Linux.

Данная инструкция будет состоять из двух основных частей — установка программного обеспечения и примеры по его настройки под различные задачи. Мы рассмотрим примеры работы на системах Linux Ubuntu и Rocky Linux (CentOS).

Установка, настройка системы и запуск

1. Установка выполняется немного, по-разному, в зависимости от выбранного дистрибутива Linux. Рассмотрим примеры систем на базе Deb и RPM.

а) Для Debian / Ubuntu (Deb):

apt install dnsmasq

б) Для Rocky Linux / CentOS (RPM):

yum install dnsmasq

2. После установки разрешим автозапуск сервиса.

Вводим команду:

systemctl enable dnsmasq

Для систем на базе RPM также необходимо запустить сервис:

systemctl start dnsmasq

3. Настраиваем брандмауэр. Нам необходимо открыть UDP порт 53.

Как правило, используется 2 системы управления netfilter — iptables и firewalld. Рассмотрим обе.

а) При использовании iptables (как правило, для систем на базе Deb):

iptables -I INPUT -p udp –dport 53 -j ACCEPT

И сохраняем правило.

б) При использовании firewalld (как правило, для систем на базе RPM):

firewall-cmd –permanent –add-port=53/udp

firewall-cmd –reload

4. Проверяем работоспособность сервиса. На любом из компьютеров в сети делаем запрос при помощи nslookup:

nslookup dmoks.ru 192.168.0.15

* где 192.168.0.15 — адрес в сети нашего сервера, куда мы установили dnsmasq.

Мы должны получить ответ на подобие:

Server:        192.168.0.15
Address:    192.168.0.15#53

Non-authoritative answer:
Name:    admins24.ru
Address: 92.53.96.18

Наш dnsmasq установлен и готов к дальнейшей настройке.

Примеры настройки dnsmasq

Переходим к основной части инструкции. Приведем примеры использования и соответствующей настройки dnsmasq.

1. Перевод запросов на другой DNS-сервер для определенного домена

Предположим, у нас есть задача — переводить все запросы для имен с доменом consul на другой DNS-сервер, который находится в нашей сети. Также, данный сервер слушает не на стандартном для NS-сервера порту (53), а на порту 8600. Кстати, это реальный пример работы при настройке кластера consul.

Создаем конфигурационный файл:

vi /etc/dnsmasq.d/consul

В него добавим одну строку:

server=/consul/127.0.0.1#8600

* в данном примере мы будем переводить все запросы для домена consul на сервер 127.0.0.1 (в этом примере локальный сервер, но может быть любой) и порт 8600.

Чтобы настройки вступили в силу, перезапускаем dnsmasq:

systemctl restart dnsmasq

2. Настройка кэширования

По умолчанию, dnsmasq работает как кэширующий сервер. Мы же подредактируем настройки.

Создаем конфигурационный файл:

vi /etc/dnsmasq.d/cache

cache-size=10000
all-servers
no-negcache

* где:

  • cache-size — размер кэша (количество хостов).
  • all-servers — задает поведение, при котором наш сервер будет отправлять запрос всем доступным ему серверам DNS и принимать ответ от того, кто первый ему ответит.
  • no-negcache — не кэшировать негативные ответы.

Чтобы настройки вступили в силу, перезапускаем dnsmasq:

systemctl restart dnsmasq

3. Подмена IP-адресов

Есть несколько вариантов подмены IP-адресов в dnsmasq. Для настройки создадим файл:

vi /etc/dnsmasq.d/replacement

В зависимости от ситуации, применяем один из вариантов, описанных ниже.

а) Подмена одного адреса:

alias=1.1.1.1,2.2.2.2

* в данном примере если наш сервер получит ответ 1.1.1.1, он его заменит на 2.2.2.2.

б) Подмена адресов в подсети:

alias=1.1.1.0,2.2.2.0,255.255.255.0

* в данном примере все адреса из подсети 1.1.1.0/24 будут заменены на соответствующие адреса подсети 2.2.2.2/24.

в) Диапазоны:

alias=1.1.1.100-1.1.1.200,192.168.0.0,255.255.255.0

* в данном примере адреса в диапазоне от 1.1.1.100 до 1.1.1.200 будут переопределены в адреса в диапазоне от 192.168.0.100 до 192.168.0.200.

После внесения необходимых строк, нужно перезагрузить сервис.

Выполняем команду:

systemctl restart dnsmasq

Это, далеко, не все возможности dnsmasq. По мере необходимости, они будут дополняться в данной инструкции.