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
С этими настройками ваш DNS-резолвер не будет изменен службой NetworkManager, и вы сможете добавлять или изменять DNS-резолвер в любое время.
На следующих этапах вы начнете установку и настройку Dnsmasq на Rocky Linux.
Установка Dnsmasq на Rocky Linux
На этом этапе вы установите пакет Dnsmasq на сервер Rocky Linux. Затем вы запустите и включите службу Dnsmasq, чтобы она запускалась при загрузке системы.
По умолчанию пакет ‘ dnsmasq ‘ доступен в репозитории AppStream Rocky Linux. Выполните команду dnf ниже, чтобы получить информацию о пакете ‘ dnsmasq ‘.
sudo dnf info dnsmasqDnsmasq v2.85 доступен на Rocky Linux 9 на момент написания этой статьи.

Теперь выполните команду ниже, чтобы установить 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 ‘ в настоящее время работает, включена и будет запущена автоматически при загрузке.

С 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-сервер авторитетным.

Далее откройте файл ‘ /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
На этом этапе вы завершили настройку 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, и статус службы в настоящее время работает. Также он включен, что позволит ему автоматически запускаться при загрузке.

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

Теперь выполните команду dig ниже, чтобы проверить доменное имя для сервера Dnsmasq ‘ howtoforge.local ‘. Вы должны увидеть, что ‘ howtoforge.local ‘ указывает на IP-адрес сервера ‘ 192.168.5.50 ‘.
dig howtoforge.local
Наконец, выполните команду ниже, чтобы проверить поддомены, которые вы определили через файл ‘ /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.

С этими результатами вы завершили настройку 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
Проверьте firewalld с помощью следующей команды. Вы должны увидеть, что служба DNS добавлена в firewalld, и IP-адрес источника сети также добавлен в firewalld.
sudo firewall-cmd --list-allВывод:

Настройка клиента (на основе 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
Далее выполните команду dnf ниже, чтобы установить пакет ‘bind-utils’ на вашу систему.
sudo dnf 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
Далее проверьте поддомены, которые вы настроили через файл ‘/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.

Таким образом, локальное доменное имя и поддомены успешно настроены. Теперь, как насчет публичных доменных имен, таких как Github.com и т.д.?
Выполните команду ниже, чтобы проверить интернет-доменные имена с вашей клиентской машины. Это обеспечит вам возможность подключаться к интернету, даже с локальным DNS, разрешенным на сервере Dnsmasq.
dig github.comВы получите вывод, подобный этому - Запрос dig к github.com подключен через локальный DNS-сервер, который работает на IP-адресе 192.168.5.50 с портом по умолчанию 53.

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

Заключение
В этом учебнике вы создали свой собственный локальный DNS-сервер с Dnsmasq. Вы настроили свой собственный DNS-сервер для вашей локальной среды с Dnmasq на сервере Rocky Linux 9. Также это включало конфигурацию Dnsmasq с локальными доменными именами и поддоменами, включение кэша DNS для ускорения работы и также включение DHCP-сервера через Dnsmasq.
Наконец, вы также добавили и настроили клиентские машины (дистрибуции на основе Debian и RHEL) для использования локального DNS-сервера, который вы создали. В этом процессе вы также узнали, как устранять неполадки DNS-сервера с помощью команды dig и как настроить DNS-резолвер на системе Linux.
Get new posts in your inbox
No spam. Unsubscribe anytime.