Данная инструкция будет состоять из двух основных частей — установка программного обеспечения и примеры по его настройки под различные задачи. Мы рассмотрим примеры работы на системах Linux Ubuntu и Rocky Linux (CentOS).
Установка, настройка системы и запуск
1. Установка выполняется немного, по-разному, в зависимости от выбранного дистрибутива Linux. Рассмотрим примеры систем на базе Deb и RPM.
а) Для Debian / Ubuntu (Deb):
apt install dnsmasq
б) Для Rocky Linux / CentOS (RPM):
yum install dnsmasq
Установка завершена.
После установки или старта сервиса мы можем увидеть ошибку:
failed to create listening socket for port 53: Address already in use
Как правило, она связана с тем, что на компьютере работает сервис systemd-resolved, который занял порт 53. Чтобы это исправить, отключаем его:
systemctl disable systemd-resolved --now
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 dmosk.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: dmosk.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.
Если мы работаем в системе с включенным SELinux и переводим запросы на нестандартный порт, то необходимо добавить правило:
semanage port -a -t dns_port_t -p tcp 8600
* где 8600 — порт, на который переводим запросы DNS.
Чтобы настройки вступили в силу, перезапускаем 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
4. Произвольный адрес
Мы можем быстро добавить любой адрес и привязать его к доменному имени. Делается это с помощью директивы address:
vi /etc/dnsmasq.d/addresses
address=/dmosk.local/127.0.0.1
address=/dmosk.local/192.168.0.15
address=/mail.dmosk.local/192.168.0.16
* в нашем примере dnsmasq будет знать о двух записях — dmosk.local и mail.dmosk.local. Первая будет разрешаться в два адреса.
Выполняем команду:
systemctl restart dnsmasq
5. Форвард запросов на другой сервер
С помощью опции server мы можем указать серверы, на которые нужно передавать запрос DNS.
vi /etc/dnsmasq.d/forwards
server=8.8.8.8
server=8.8.4.4
* в данном примере мы передадим запросы на серверы Google.
Применяем настройку:
systemctl restart dnsmasq
6. Файл hosts
В зависимости от ситуации, нам может потребоваться разрешать некоторые имена с помощью файла /etc/hosts. Или наоборот — настройки из данного файла могут нам мешать.
В dnsmasq предусмотрена директива hosts, с помощью которой мы можем манипулировать результатами с использованием файла hosts.
vi /etc/dnsmasq.d/hosts
а) Если мы хотим, чтобы данные из файла учитывались:
hosts
б) Если нам не нужны данные из файла:
no-hosts
Применяем настройку:
systemctl restart dnsmasq
Это, далеко, не все возможности dnsmasq. По мере необходимости, они будут дополняться в данной инструкции.
Диагностика и решение проблем
По умолчанию, dnsmasq пишет не очень много логов. Чтобы это исправить, необходимо отредактировать конфигурацию. Для этого создаем файл:
vi /etc/dnsmasq.d/logs
log-queries
log-facility=/var/log/dnsmasq/dnsmasq.log
* где опция log-queries разрешает логи запросов; log-facility позволяет задать путь до файла с логами.
Создаем каталог для хранения лога:
mkdir /var/log/dnsmasq
Перезапускаем dnsmasq, чтобы применить изменения:
systemctl restart dnsmasq
Прочитать лог можно командой (непрерывное чтение):
tail -f /var/log/dnsmasq/dnsmasq.log
Источник: https://www.dmosk.ru/miniinstruktions.php?mini=dnsmasq