DNS настройка · 11 min read · Sep 08, 2025

Как установить локальный DNS-резолвер с Dnsmasq на Rocky Linux

Dnsmasq — это небольшой и легковесный DNS-сервер для вашей локальной среды. Он может использоваться для предоставления DNS-сервера, DHCP-сервера и TFTP-сервера. Что касается DNS-сервера, Dnsmasq может использоваться как пересылающий, рекурсивный DNS-сервер и система кэширования DNS. Он также загружает содержимое DNS из файла /etc/hosts, что позволяет вам настраивать доменные имена для локальных имен хостов.

Dnsmasq разработан так, чтобы быть легковесным с небольшим объемом памяти, подходящим для устройств с низкими ресурсами, таких как маршрутизаторы и брандмауэры. Dnsmasq имеет низкие системные требования и потребляет мало ресурсов. Он может работать на Linux, BSD, Android и macOS.

Этот учебник охватывает установку и настройку локального DNS-сервера с Dnsmasq на сервере Rocky Linux 9. Вы установите Dnsmasq и настроите локальный DNS-сервер с некоторыми дополнительными функциями, такими как включение локальных доменных имен, настройка поддоменов через файл /etc/hosts и включение кэша DNS для более быстрого доступа. Наконец, вы включите DHCP-сервер через Dnsmasq.

Вы также узнаете, как настроить клиентские машины для использования локального DNS-сервера в качестве основного резолвера DNS.

Предварительные требования

Существуют несколько предварительных требований, которые вы должны выполнить перед началом. Ниже приведены списки предварительных требований:

  • Сервер Rocky Linux 9 — в этом примере используется Rocky Linux с именем хоста ‘ dnsmasq-rocky ‘ и IP-адресом ‘ 192.168.5.50 ‘.
  • Непривилегированный пользователь с правами администратора sudo/root.
  • SELinux работает в режиме ‘ permissive ‘.

Для клиентских машин вы можете использовать любую дистрибуцию Linux. Вы можете использовать дистрибуции на основе Debian или RHEL в качестве клиентских машин.

Подготовка системы

На операционных системах на базе RHEL файл DNS-резолвера по умолчанию ‘/etc/resolv.conf’ создается службой NetworkManager. Перед установкой Dnsmasq вы настроите статический DNS-резолвер через файл /etc/resolv.conf и отключите DNS-резолвер от службы NetworkManager.

Для начала откройте конфигурационный файл NetworkManager /etc/NetworkManager/NetworkManager.conf с помощью команды редактора nano ниже.

sudo nano /etc/NetworkManager/NetworkManager.conf

Добавьте строку ‘ dns=none ‘ в секцию ‘ [section] ‘.

[main]  
dns=none

Сохраните файл и выйдите из редактора, когда закончите.

Далее откройте файл конфигурации DNS-резолвера ‘/etc/resolv.conf’ с помощью команды редактора nano ниже.

sudo nano /etc/resolv.conf

Удалите все доступные строки и замените их следующими строками. С этим вы будете использовать публичные DNS-серверы Cloudflare и Google в качестве основного DNS-сервера.

nameserver 1.1.1.1  
nameserver 8.8.8.8

Сохраните файл и выйдите, когда закончите.

Наконец, выполните команду systemctl ниже, чтобы перезапустить NetworkManager и применить изменения.

sudo systemctl restart NetworkManager

prepare the system

С этими настройками ваш DNS-резолвер не будет изменен службой NetworkManager, и вы сможете добавлять или изменять DNS-резолвер в любое время.

На следующих этапах вы начнете установку и настройку Dnsmasq на Rocky Linux.

Установка Dnsmasq на Rocky Linux

На этом этапе вы установите пакет Dnsmasq на сервер Rocky Linux. Затем вы запустите и включите службу Dnsmasq, чтобы она запускалась при загрузке системы.

По умолчанию пакет ‘ dnsmasq ‘ доступен в репозитории AppStream Rocky Linux. Выполните команду dnf ниже, чтобы получить информацию о пакете ‘ dnsmasq ‘.

sudo dnf info dnsmasq

Dnsmasq v2.85 доступен на Rocky Linux 9 на момент написания этой статьи.

dnsmasq info

Теперь выполните команду ниже, чтобы установить Dnsmasq. Введите y, когда будет предложено подтвердить, затем нажмите ENTER, чтобы продолжить.

sudo dnf install dnsmasq dnsmasq-utils

Установка Dnsmasq должна быть начата.

После установки Dnsmasq выполните команду systemctl ниже, чтобы запустить и включить службу ‘ dnsmasq ‘. После выполнения команды служба ‘ dnsmasq ‘ должна теперь работать и быть включенной, что позволит ей автоматически запускаться при загрузке.

sudo systemctl start dnsmasq  
sudo systemctl enable dnsmasq

Проверьте службу ‘ dnsmasq ‘ с помощью утилиты командной строки systemctl ниже.

sudo systemctl status dnsmasq

Вы получите вывод, подобный этому - Служба ‘ dnsmasq ‘ в настоящее время работает, включена и будет запущена автоматически при загрузке.

verify dnsmasq

С Dnsmasq установленным и работающим, вы далее начнете конфигурацию Dnsmasq для работы в качестве локального DNS-сервера.

Настройка Dnsmasq

На этом этапе вы настроите Dnsmasq как локальный DNS-сервер с некоторыми включенными функциями, такими как кэш DNS и DHCP-сервер, а также настроите доменное имя и поддомены для локальных приложений. Это позволит вашим приложениям быть доступными через локальные доменные имена/поддомены, такие как ‘ db1.howtoforge.local ‘, ‘ app.howtoforge.local ‘ и многие другие.

Для начала выполните команду ниже, чтобы скопировать файл конфигурации Dnsmasq по умолчанию в ‘/etc/dnsmasq.conf.orig’, затем откройте оригинальный файл конфигурации Dnsmasq ‘/etc/dnsmasq.conf’ с помощью команды редактора nano ниже.

sudo cp /etc/dnsmasq.conf{,.orig}  
sudo nano /etc/dnsmasq.conf

Добавьте следующие строки в файл.

# dnsmasq работает на UDP-порту 53  
# с IP-адресом localhost и 192.168.5.50  
# и сетевым интерфейсом eth1  
port=53  
listen-address=127.0.0.1,192.168.5.50  
interface=eth1  
  
# отключить пересылку непроходимых адресов  
# отключить пересылку имен без основного домена.com  
# автоматически добавлять часть домена к простым именам  
# отключить dnsmasq для чтения файла /etc/resolv.conf  
domain-needed  
bogus-priv  
expand-hosts  
no-resolv  
  
# верхний DNS-сервер для не локальных доменов  
# с использованием публичных DNS Cloudflare и Google  
server=1.1.1.1  
server=8.8.8.8  
  
# определить домен для dnsmasq  
domain=howtoforge.local  
address=/howtoforge.local/192.168.5.50  
  
# включить кэш DNS и настроить размер кэша  
cache-size=10000  
  
# включить dhcp через dnsmasq  
# определить файл базы данных аренды  
# сделать DHCP-сервер авторитетным  
dhcp-range=192.168.5.100,192.168.5.150,12h  
dhcp-leasefile=/var/lib/dnsmasq/dnsmasq.leases  
dhcp-authoritative

Сохраните файл и выйдите из редактора, когда закончите.

Ниже приведены подробные параметры, которые вы будете использовать для вашей установки Dnsmasq:

  • port: какой порт вы будете использовать для работы Dnsmasq.
  • listen-address: какой IP-адрес вы будете использовать для работы Dnsmasq. Вы можете использовать несколько IP-адресов.
  • interface: на каком интерфейсе будет привязан и работать Dnsmasq.
  • domain-needed: отключить пересылку имен без основного доменного адреса. Вы можете получить доступ к хосту, как ‘mysql1’, если не укажете полное имя с локальным доменом, таким как ‘mysql1.howtoforge.local’.
  • bogus-priv: отключить пересылку для непроходимых адресов.
  • expand-hosts: автоматически добавлять часть локального домена к простым именам.
  • no-resolv: игнорировать файл ‘/etc/resolv.conf’ на сервере.
  • server: определить верхний DNS-сервер, который вы будете использовать для не локальных адресов или доменов. В этом примере используется публичный DNS-сервер от Cloudflare и Google.
  • domain: определить доменное имя для сервера Dnsmasq. В этом примере сервер Dnsmasq получит локальный домен howtoforge.local.
  • address: определить, какой IP-адрес для доменного имени на Dnsmasq. В этом примере домен howtoforge.local будет разрешен в IP-адрес 192.168.5.50.
  • cache-size: включить кэш DNS на Dnsmasq. Обязательно отрегулируйте размер, чтобы увеличить производительность и скорость.
  • dhcp-range: включить DHCP-сервер через Dnsmasq. Настройте пул IP-адресов для вашей сети и время аренды.
  • dhcp-leasefile: определить файл, который будет использоваться для хранения аренды DHCP.
  • dhcp-authoritative: сделать DHCP-сервер авторитетным.

dnsmasq config

Далее откройте файл ‘ /etc/hosts ‘ с помощью команды редактора nano ниже. Вы теперь определите некоторые поддомены для приложений в вашей локальной среде.

sudo nano /etc/hosts

Добавьте следующие строки в файл. В этом примере вы создадите три поддомена wiki, mysql и files. Каждый поддомен будет следовать основному домену сервера Dnsmasq ‘howtoforge.local’ и указывать на конкретный IP-адрес.

Поддомен wiki.howtoforge.local будет указывать на IP-адрес ‘ 192.168.5.10 ‘, поддомен ‘ mysql.howtoforge.local ‘ указывает на IP-адрес ‘ 192.168.5.25 ‘, а ‘ files.howtoforge.local ‘ будет указывать на IP-адрес ‘ 192.168.5.30 ‘.

192.168.5.10 wiki  
192.168.5.25 mysql  
192.168.5.30 files 

Сохраните файл и выйдите из редактора, когда закончите.

Теперь откройте файл конфигурации DNS-резолвера ‘ /etc/resolv.conf ‘ с помощью команды редактора nano ниже.

sudo nano /etc/resolv.conf

Добавьте следующие строки в верхнюю часть файла. Обязательно измените IP-адрес на IP-адрес сервера Dnsmasq.

nameserver 127.0.0.1  
nameserver 192.168.5.50

Сохраните файл и выйдите из редактора, когда закончите.

Теперь выполните команду ниже, чтобы проверить конфигурацию Dnsmasq и убедиться, что у вас правильная конфигурация. Вы получите вывод, такой как ‘ dnsmasq: syntax check OK ‘.

sudo dnsmasq --test

Наконец, выполните команду systemctl ниже, чтобы перезапустить службу ‘dnsmasq’ и применить изменения.

sudo systemctl restart dnsmasq

configure dnsmasq

На этом этапе вы завершили настройку Dnsmasq как локального DNS-сервера на системе Rocky Linux. Вы также настроили доменное имя для сервера Dnsmasq и некоторые поддомены через файл ‘/etc/hosts’. Наконец, вы включили кэш DNS и DHCP-сервер через Dnsmasq.

На следующих этапах вы проверите установку и конфигурацию Dnsmasq.

Проверка установки Dnsmasq

С конфигурацией Dnsmasq завершенной, вы теперь проверите саму службу Dnsmasq. Вы проверите Dnsmasq, чтобы убедиться, что он работает на порту по умолчанию 50 и служба работает. Затем вы проверите локальное доменное имя и поддомены, которые вы создали через пакет ‘ dns-utils ‘.

Выполните команду ниже, чтобы проверить открытый порт на вашей системе. Затем проверьте службу ‘ dnsmasq ‘ с помощью утилиты командной строки systemctl.

ss -tulpn | grep 53  
sudo systemctl status dnsmasq

Вы получите вывод, подобный этому - Dnsmasq работает на порту по умолчанию 53, и статус службы в настоящее время работает. Также он включен, что позволит ему автоматически запускаться при загрузке.

verify dnsmasq

Далее выполните команду dnf ниже, чтобы установить пакет ‘bind-utils’ на ваш сервер Rocky Linux. Этот пакет предоставляет несколько инструментов командной строки для тестирования и устранения неполадок DNS-сервера.

sudo dnf install bind-utils

Введите y, когда будет предложено, и нажмите ENTER, чтобы продолжить.

install bind-utils

Теперь выполните команду dig ниже, чтобы проверить доменное имя для сервера Dnsmasq ‘ howtoforge.local ‘. Вы должны увидеть, что ‘ howtoforge.local ‘ указывает на IP-адрес сервера ‘ 192.168.5.50 ‘.

dig howtoforge.local

verify domain name

Наконец, выполните команду ниже, чтобы проверить поддомены, которые вы определили через файл ‘ /etc/hosts ‘.

dig wiki.howtoforge.local +short  
dig mysql.howtoforge.local +short  
dig files.howtoforge.local +short

Вы получите вывод, подобный этому - Поддомен wiki.howtoforge.local указывает на IP-адрес 192.168.5.10, поддомен mysql.howtoforge.local указывает на IP-адрес 192.168.5.25, и, наконец, поддомен files.howtoforge.local указывает на IP-адрес сервера 192.168.5.30.

verify subdomain

С этими результатами вы завершили настройку Dnsmasq как локального DNS-сервера. На следующих этапах вы настроите порт DNS через Firewalld.

Настройка Firewalld

На этом этапе вы настроите firewalld, чтобы открыть порт службы DNS и добавить IP-адреса внутренних сетей в firewalld в качестве основного источника, которому разрешен доступ к порту службы DNS.

Выполните команду firewall-cmd ниже, чтобы добавить службу DNS в firewalld. Затем добавьте внутренние сетевые IP-адреса в качестве источника.

sudo firewall-cmd --add-service=dns  
sudo firewall-cmd --add-source=192.168.5.0/24

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

sudo firewall-cmd --runtime-to-permanent  
sudo firewall-cmd --reload

setuo firewalld

Проверьте firewalld с помощью следующей команды. Вы должны увидеть, что служба DNS добавлена в firewalld, и IP-адрес источника сети также добавлен в firewalld.

sudo firewall-cmd --list-all

Вывод:

verify firewalld

Настройка клиента (на основе Debian или RHEL)

На этом этапе вы узнаете, как настроить как дистрибуции на основе Debian, так и на основе RHEL для использования локального DNS-сервера, который вы создали через Dnsmasq.

Для дистрибуций на основе RHEL

Добавьте новый конфигурационный файл для NetworkManager ‘ /etc/NetworkManager/conf.d/dns-servers.conf ‘ с помощью команды редактора nano ниже.

sudo nano /etc/NetworkManager/conf.d/dns-servers.conf

Добавьте следующие строки в файл и убедитесь, что вы изменили IP-адрес на IP-адрес службы Dnsmasq. С этой конфигурацией вы настроите резолвер DNS по умолчанию для клиента, используя IP-адрес сервера Dnsmasq. Это автоматически запишет конфигурацию резолвера DNS ‘ /etc/resolv.conf ‘.

[global-dns-domain-*]  
servers=192.168.5.50

Сохраните файл и выйдите из редактора, когда закончите.

Далее выполните команду systemctl ниже, чтобы перезапустить службу NetworkManager и применить изменения.

sudo systemctl restart NetworkManager

Вы можете показать файл ‘/etc/resolv.conf’, чтобы проверить настройки. Вы должны увидеть, что сервер имен по умолчанию — это локальный IP-адрес сервера Dnsmasq 192.168.5.50.

cat /etc/resolv.conf

setup client machine

Далее выполните команду dnf ниже, чтобы установить пакет ‘bind-utils’ на вашу систему.

sudo dnf install bind-utils

install bind utils

Для дистрибуций на основе Debian

Если вы используете операционную систему на основе Debian, вы можете настроить резолвер DNS вручную и отключить службу ‘systemd-resolved’ на вашей системе - особенно для системы Ubuntu.

Выполните команду ниже, чтобы остановить и отключить службу systemd-resolved.

sudo systemctl disable --now systemd-resolved

Теперь выполните команду ниже, чтобы удалить символическую ссылку файла конфигурации резолвера DNS ‘/etc/resolv.conf’. Затем создайте новый файл конфигурации резолвера ‘ /etc/resolv.conf ‘ с помощью команды редактора nano ниже.

unlink /etc/resolv.conf  
sudo nano /etc/resolv.conf

Добавьте следующую строку в файл и измените IP-адрес на IP-адрес вашего сервера Dnsmasq.

nameserver 192.168.5.50

Сохраните файл и выйдите из редактора, когда закончите.

Далее выполните команду apt ниже, чтобы установить пакет ‘ dnsutils ‘ на вашу систему.

sudo apt install dnsutils

После установки ‘bind-utils’ или ‘dns-utils’ вы можете проверить конфигурацию Dnsmasq с помощью команды dig.

Проверьте доменное имя сервера Dnsmasq ‘ howtoforge.local ‘ с помощью команды dig ниже. Вы должны увидеть, что домен ‘ howtoforge.local ‘ указывает на IP-адрес сервера Dnsmasq 192.168.5.50.

dig howtoforge.local

verify from client

Далее проверьте поддомены, которые вы настроили через файл ‘/etc/hosts’ с помощью команды ниже. Вы должны увидеть, что каждый поддомен указывает на конкретный IP-адрес, который вы настроили в файле ‘/etc/hosts’.

dig wiki.howtoforge.local +short  
dig mysql.howtoforge.local +short  
dig files.howtoforge.local +short

Вы получите вывод, подобный этому - Поддомен wiki.howtoforge.local указывает на IP-адрес 192.168.5.10, поддомен mysql.howtoforge.local указывает на IP-адрес 192.168.5.25, и, наконец, поддомен files.howtoforge.local указывает на IP-адрес сервера 192.168.5.30.

verify sub domains

Таким образом, локальное доменное имя и поддомены успешно настроены. Теперь, как насчет публичных доменных имен, таких как Github.com и т.д.?

Выполните команду ниже, чтобы проверить интернет-доменные имена с вашей клиентской машины. Это обеспечит вам возможность подключаться к интернету, даже с локальным DNS, разрешенным на сервере Dnsmasq.

dig github.com

Вы получите вывод, подобный этому - Запрос dig к github.com подключен через локальный DNS-сервер, который работает на IP-адресе 192.168.5.50 с портом по умолчанию 53.

verify dns internet

Наконец, проверьте настройки кэша DNS с помощью команды dig ниже. Это покажет вам статистику выполненного запроса, включая ‘ Время запроса ‘ к целевому доменному имени.

dig +noall +stats duckduckgo.com  
dig +noall +stats duckduckgo.com

Вы получите вывод, подобный этому - Первый запрос, который вы получите, это ‘ Время запроса ‘ в 63 мс. Но для второго и третьего запросов время запроса составляет 2 мс, что означает, что ваши запросы к одному и тому же доменному имени кэшируются через локальный DNS-сервер Dnsmasq.

verify dnscache

Заключение

В этом учебнике вы создали свой собственный локальный DNS-сервер с Dnsmasq. Вы настроили свой собственный DNS-сервер для вашей локальной среды с Dnmasq на сервере Rocky Linux 9. Также это включало конфигурацию Dnsmasq с локальными доменными именами и поддоменами, включение кэша DNS для ускорения работы и также включение DHCP-сервера через Dnsmasq.

Наконец, вы также добавили и настроили клиентские машины (дистрибуции на основе Debian и RHEL) для использования локального DNS-сервера, который вы создали. В этом процессе вы также узнали, как устранять неполадки DNS-сервера с помощью команды dig и как настроить DNS-резолвер на системе Linux.

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.