3.5.2.4 Настройка кеширования DNS с помощью dnsmasq
Предварительная подготовка
Установка пакетов
Настройка кеширующего DNS-сервера
Локальная проверка работоспособности
Проверка работоспособности с других хостов
Окружение
- Версия ОС: 8
- Конфигурация ОС: Рабочая станция, Сервер графический, Сервер минимальный
- Редакция ОС: Стандартная
- Архитектура: x86_64
- Версия ПО: dnsmasq-2.90-2
DNS-кеширование — это процесс временного хранения записей DNS в операционной системе, браузере, устройстве или сети.
Цель кеширования — ускорить доступ к веб-ресурсам, храня ранее разрешенные доменные имена и их соответствующие IP-адреса, что позволяет уменьшить необходимость в повторных запросах к внешним DNS-серверам.
Для настройки кеширования в РЕД ОС доступна утилита dnsmasq.
Предварительная подготовка
Назначьте доменное имя хосту, на котором будет разворачиваться dnsmasq командой вида:
hostnamectl set-hostname <имя_хоста>.<домен>
В рассматриваемом примере хосту будет назначено имя test.redos
:
hostnamectl set-hostname test.redos
В файл /etc/hosts добавьте имя домена и его IP-адрес:
nano /etc/hosts
192.168.122.83 test.redos
Обратите внимание, что доменные имена, состоящие из одного имени (например, test
), не передаются на DNS-сервер. Запросы по таким именам по умолчанию обрабатываются только через локальный файл /etc/hosts. Поэтому если в файл /etc/hosts на хосте с сервисом dnsmasq прописать строку:
1.2.3.4 test
то IP-адрес домена test будет определяться только на хосте с сервисом dnsmasq. На других хостах IP-адрес данного домена определяться не будет, поскольку запросы на хост с dnsmasq отправляться не будут.
Также необходимо отключить службу systemd-resolved. Для этого откройте файл /etc/systemd/resolved.conf.
nano /etc/systemd/resolved.conf
Установите параметр DNSStubListener
в значение no
, как показано в примере. Это необходимо, чтобы отключить прослушивание systemd-resolved на порту 53, который используется dnsmsq по умолчанию.
После внесения изменений в файл необходимо перезапустить службу systemd-resolved командой:
systemctl restart systemd-resolved.service
Установка пакетов
Для установки утилиты dnsmasq перейдите в сеанс суперпользователя root:
su -
и выполните команду:
dnf install dnsmasq
Здесь и далее команды выполняются с правами суперпользователя root, если не указано иное.
Настройка кеширующего DNS-сервера
Для настройки dnsmasq в качестве кеширующего DNS-сервера необходимо выполнить следующий алгоритм действий:
1. Настройка брандмауэра.
По умолчанию для пересылки сетевого трафика dnsmasq использует порт 53. Если в системе используется брандмауэр, для обеспечения корректной работы сервиса необходимо открыть данный UDP-порт:
firewall-cmd --permanent --add-port=53/udp firewall-cmd --reload
Подробную информацию о работе и настройке брандмауэра см. в нашей инструкции «Настройка брандмауэра Firewall».
2. Редактирование файла конфигурации.
Основная настройка поведения dnsmasq производится в файле конфигурации /etc/dnsmasq.conf. Для обеспечения работы dnsmasq в качестве кеширующего DNS-сервера отредактируйте следующие параметры:
nano /etc/dnsmasq.conf
resolv-file=/etc/resolv.dnsmasq
no-resolv
no-poll
server=8.8.8.8
interface=ens3
no-dhcp-interface=ens3
all-servers
log-queries
log-facility=/var/log/dnsmasq-queries.log
где:
resolv-file
– файл для считывания адресов DNS-серверов;no-resolv
– отключение загрузки настроек из /etc/resolv.conf, все настройки будут считываться из редактируемого файла /etc/dnsmasq.conf;no-poll
– отключение отслеживания изменений файла /etc/resolv.conf или другого файла, выполняющего его функцию;server
– адреса внешних DNS-серверов;interface
– интерфейс, на котором должен отвечать DNS-сервер;no-dhcp-interface
– блокировка использования DHCP-сервера;all-servers
– перенаправление DNS-запросов всем доступным DNS-серверам и возвращение ответа от первого откликнувшегося сервера (параметр необходимо указать вручную);log-queries
– включить ведение журнала;log-facility
– файл журнала.
Сохраните изменения и закройте файл.
3. Настройка файла DNS-адресов.
Далее необходимо создать файл, указанный в параметре resolv-file
файла конфигурации /etc/dnsmasq.conf, с необходимыми DNS-адресами:
nano /etc/resolv.dnsmasq
nameserver 127.0.0.1
Сохраните изменения и закройте файл.
4. Запустите службу dnsmasq.service и добавьте ее в автозагрузку:
systemctl enable dnsmasq.service --now
Проверьте статус службы:
systemctl status dnsmasq.service
В статусе должно отображаться active (running).
Для сброса кеша используйте команду перезапуска службы:
systemctl restart dnsmasq.service
Локальная проверка работоспособности
Для проверки корректности работы dnsmasq непосредственно на хосте с развернутым сервисом необходимо убедиться, что в файле /etc/resolv.conf прописан адрес 127.0.0.1.
Для этого рекомендуется использовать графическую утилиту NetworkManager. В системном трее кликните ПКМ по иконке сетевых соединений. В контекстном меню выберите пункт «Параметры соединений...».
В открывшемся окне «Сетевые соединения» необходимо выбрать нужный сетевой адаптер и нажать кнопку «Изменить выбранное соединение».
На вкладке «Параметры IPv4» в поле «Дополнительные серверы DNS» впишите адрес 127.0.0.1.
Редактирование файла /etc/resolv.conf с помощью текстовых редакторов не рекомендуется. Файл автоматически перезаписывается с каждым перезапуском системы.
Перезапустите службу NetworkManager:
systemctl restart NetworkManager
Проверьте, что указанный DNS-сервер используется:
cat /etc/resolv.conf # Generated by NetworkManager search redos nameserver 127.0.0.1
Проверьте, что порт 53 занят службой dnsmasq:
netstat -ntlp | grep :53 tcp 0 0 0.0.0.0:53 0.0.0.0:* LISTEN 4672/dnsmasq tcp6 0 0 :::53 :::* LISTEN 4672/dnsmasq
Выполните обращение к какому-либо сайту с помощью утилиты dig:
dig reds.red-soft.ru | grep "Query time" ;; Query time: 30 msec
При первом обращении будет выведено затраченное на запрос время.
Если кеширование работает корректно, при повторных обращениях к указанному сайту время запроса будет минимальным, приближено к значению 0 или равно ему:
;; Query time: 0 msec
Допустимым временем ответа на кешированный запрос считается до 100 msec, идеальным – от 0 до 20 msec.
Проверка работоспособности с других хостов
Для проверки корректности работы dnsmasq с других хостов сети необходимо в файл /etc/resolv.conf прописать адрес хоста с настроенным dnsmasq.
Для этого рекомендуется использовать графическую утилиту NetworkManager. В системном трее кликните ПКМ по иконке сетевых соединений. В контекстном меню выберите пункт «Параметры соединений...».
В открывшемся окне «Сетевые соединения» необходимо выбрать нужный сетевой адаптер и нажать кнопку «Изменить выбранное соединение».
На вкладке «Параметры IPv4» в поле «Дополнительные серверы DNS» впишите адрес хоста с настроенным dnsmasq (в примере 192.168.122.83).
Редактирование файла /etc/resolv.conf с помощью текстовых редакторов не рекомендуется. Файл автоматически перезаписывается с каждым перезапуском системы.
Перезапустите службу NetworkManager:
systemctl restart NetworkManager
Проверьте, что указанный DNS-сервер используется:
cat /etc/resolv.conf
# Generated by NetworkManager
search redos
nameserver 192.168.122.83
Выполните обращение к DNS-серверу с помощью утилиты dig:
dig test.redos
; <<>> DiG 9.18.28 <<>> test.redos
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 17957
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;test.redos. IN A
;; ANSWER SECTION: test.redos. 0 IN A 192.168.122.83
;; Query time: 0 msec
;; SERVER: 192.168.122.83#53(192.168.122.83) (UDP)
;; WHEN: Tue Apr 08 15:03:13 MSK 2025
;; MSG SIZE rcvd: 55
При корректной настройке в выводе должна присутствовать строка с именем DNS-сервера и его IP-адресом примерно следующего вида:
test.redos. 0 IN A192.168.122.83
Дата последнего изменения: 28.04.2025
Если вы нашли ошибку, пожалуйста, выделите текст и нажмите Ctrl+Enter.