DNS настройка · 11 min read · Sep 08, 2025
Как настроить локальный DNS с Dnsmasq на Debian 12

Dnsmasq — это небольшой и легковесный сетевой сервис для вашей локальной среды (LAN). Он предоставляет сетевые услуги, такие как DNS, DHCP и TFTP. Dnsmasq может использоваться как DNS-ретранслятор, рекурсивный DNS-сервер и система кэширования DNS. Он также загружает содержимое DNS из файла /etc/hosts, что позволяет вам настраивать доменные имена для локальных хостов.
Dnsmasq разработан так, чтобы быть легковесным с небольшим объемом памяти, что делает его подходящим для устройств с низкими ресурсами, таких как маршрутизаторы и брандмауэры. Dnsmasq может работать на Linux, BSD, Android и macOS.
Этот учебник установит и настроит локальный DNS-сервер с Dnsmasq на сервере Debian 12. Мы настроим локальный DNS-сервер, который можно использовать для вашей локальной сети, добавив локальные доменные имена, включив кэш DNS и включив DHCP-сервер через Dnsmasq. Вы также узнаете, как настроить и добавить клиентскую машину для использования локального DNS-сервера. После завершения этого учебника вы сможете получить доступ ко всем вашим приложениям через локальное доменное имя, а ваши DNS-запросы будут быстрее, потому что вы включили кэш DNS.
Предварительные требования
Перед тем как начать, у вас должны быть следующие требования для завершения этого учебника:
- Сервер Debian 12 - В этом примере используется сервер Debian с именем хоста ‘ dnsmasq-server ‘ и IP-адресом 192.168.5.20.
- Непользователь с правами администратора sudo/root.
Для клиентской машины вы можете использовать любое дистрибутив Linux, так как конфигурация DNS аналогична для каждого дистрибутива.
Подготовка системы
На этом этапе вы подготовите ваш сервер Debian, который будет использоваться как локальный DNS-сервер. Вы обновите индекс пакетов, остановите и отключите службу ‘ systemd-resolved ‘, затем создадите и определите конфигурацию статического DNS-резолвера через файл ‘ /etc/resolv.conf ‘.
На системе Debian резолвер DNS управляется службой ‘systemd-resolved’, которая предоставляет разрешение сетевых имен через интерфейс D-BUS. Чтобы настроить программное обеспечение DNS-сервера, такое как Dnsmasq, вы должны отключить службу ‘ systemd-resolved ‘.
Перед тем как начать, выполните следующую команду apt для обновления и обновления индекса пакетов Debian.
sudo apt updateЗатем выполните следующую команду, чтобы остановить и отключить службу ‘ systemd-resolved ‘. На системе Debian конфигурация DNS управляется NetworkManager и службой systemd-resolved.
sudo systemctl disable --now systemd-resolved
sudo systemctl stop systemd-resolvedУдалите файл ссылки конфигурации резолвера DNS ‘/etc/resolv.conf’ с помощью следующей команды.
sudo unlink /etc/resolv.confПосле этого создайте новый файл конфигурации резолвера DNS ‘ /etc/resolv.conf ‘ с помощью следующей команды редактора nano.
sudo nano /etc/resolv.confДобавьте следующие строки в файл. Это добавит публичные DNS Cloudflare и Google в качестве резолвера для вашего сервера Debian.
nameserver 1.1.1.1
nameserver 8.8.8.8Сохраните файл и выйдите из редактора, когда закончите. Теперь перейдите к следующим шагам для установки и настройки Dnsmasq.

Установка и настройка Dnsmasq
На этом этапе вы установите и настроите локальный DNS-сервер с использованием Dnsmasq. Вы настроите Dnsmasq для работы на стандартном DNS-порту 53 и внутреннем IP-адресе ‘ 192.168.5.20 ‘. Вы также определите доменное имя для службы Dnsmasq, включите кэш DNS и, наконец, включите DHCP-сервер через Dnsmasq.
Стандартный пакет ‘ dnsmasq ‘ доступен в репозитории Debian. Выполните следующую команду apt для установки пакета Dnsmasq.
sudo apt install dnsmasqКогда будет предложено, введите y для подтверждения и нажмите ENTER для продолжения.

После установки Dnsmasq выполните следующую команду systemctl, чтобы проверить службу ‘dnsmasq’ и убедиться, что служба включена и работает.
sudo systemctl is-enabled dnsmasq
sudo systemctl status dnsmasqВы получите вывод, похожий на этот - Служба dnsmasq включена и будет запущена автоматически при загрузке. А текущее состояние службы dnsmasq - работает.

С Dnsmasq, работающим на вашей системе Debian, вы теперь начнете конфигурацию Dnsmasq через файл ‘/etc/dnsmasq.conf ‘.
Для начала выполните следующую команду, чтобы создать резервную копию файла конфигурации Dnsmasq по умолчанию.
sudo cp /etc/dnsmasq.conf{,.orig}Теперь откройте файл конфигурации Dnsmasq ‘ /etc/dnsmasq.conf ‘ с помощью следующей команды редактора nano.
sudo nano /etc/dnsmasq.confДобавьте следующие строки в файл.
# dnsmasq работает на UDP-порту 53
# с IP-адресом localhost и 192.168.5.20
# и сетевым интерфейсом eth1
port=53
listen-address=127.0.0.1,192.168.5.20
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.20
# включить кэш DNS и настроить размер кэша
cache-size=1000
# включить DHCP через dnsmasq
# определить файл базы данных аренды
# сделать DHCP-сервер авторитетным
dhcp-range=192.168.5.80,192.168.5.150,12h
dhcp-leasefile=/var/lib/misc/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.20.
- cache-size: включить кэш DNS на Dnsmasq. Обязательно настройте размер, чтобы увеличить производительность и скорость.
- dhcp-range: включить DHCP-сервер через Dnsmasq. Настройте пул IP-адресов для вашей сети и время аренды.
- dhcp-leasefile: определить файл, который будет использоваться для хранения аренды DHCP.
- dhcp-authoritative: сделать DHCP-сервер авторитетным.

Далее откройте файл конфигурации ‘/etc/hosts’ с помощью следующей команды редактора nano. Вы можете определить поддомен для ваших внутренних приложений, и он будет автоматически настроен с доменным именем Dnsmasq ‘ howtoforge.local ‘.
sudo nano /etc/hostsДобавьте следующие строки в файл. В этом примере вы определите поддомены app1, db1 и files. Корневой домен для этих поддоменов - сам сервер Dnsmasq ‘ howtoforge.local ‘.
С помощью следующих строк ‘ app1.howtoforge.local ‘ будет разрешен в IP-адрес ‘ 192.168.5.10 ‘, поддомен ‘ db1.howtoforge.local ‘ будет указывать на IP-адрес сервера ‘ 192.168.5.25 ‘, а поддомен ‘files.howtoforge.local ‘ будет указывать на IP-адрес ‘192.168.5.50 ‘.
192.168.5.10 app1
192.168.5.25 db1
192.168.5.50 files Сохраните файл и выйдите из редактора, когда закончите.
Далее откройте файл ‘ /etc/resolv.conf ‘ с помощью следующей команды редактора nano и добавьте IP-адрес сервера Dnsmasq в качестве ‘ nameserver ‘.
sudo nano /etc/resolv.confДобавьте следующие строки в верхнюю часть файла. Обязательно измените IP-адрес на IP-адрес вашего сервера Dnsmasq.
nameserver 127.0.0.1
nameserver 192.168.5.20Сохраните файл и выйдите из редактора, когда закончите.
Теперь выполните команду ‘dnsmasq’ ниже, чтобы проверить конфигурацию Dnsmasq и убедиться, что у вас правильный формат конфигурации. Вы должны получить вывод, такой как ‘ dnsmasq - синтаксическая проверка ОК ‘.
sudo dnsmasq --testНаконец, выполните следующую команду systemctl, чтобы перезапустить службу ‘ dnsmasq’ и применить изменения.
sudo systemctl restart dnsmasq
На этом этапе вы завершили настройку локального DNS-сервера через Dnsmasq на системе Debian. Вы также настроили локальное доменное имя и поддомены, включили кэш DNS и включили DHCP-сервер через Dnsmasq.
На следующих этапах вы проверите установку и конфигурацию вашего сервера Dnsmasq.
Проверка установки Dnsmasq
На этом этапе вы проверите установку Dnsmasq, проверив службу Dnsmasq и порт LISTEN на вашей системе. Затем вы проверите локальное доменное имя и поддомены, которые вы настроили через файл ‘/etc/hosts’.
Выполните следующую команду, чтобы убедиться, что служба Dnsmasq работает на порту 53. Затем проверьте статус службы Dnsmasq с помощью утилиты команд systemctl.
ss -tulpn | grep 53
sudo systemctl status dnsmasqВы получите вывод, похожий на этот - Служба Dnsmasq работает на стандартном порту 53, и она включена и будет запущена автоматически при загрузке.

Далее вы проверите доменное имя и поддомены, которые вы настроили на Dnsmasq через файл ‘ /etc/hosts ‘. Но перед этим выполните следующую команду apt, чтобы установить пакет ‘ dnsutils ‘ на вашу систему. Пакет ‘dnsutils’ предоставляет инструменты командной строки для тестирования конфигурации DNS-сервера.
sudo apt install dnsutilsВведите y, когда будет предложено, и нажмите ENTER, чтобы продолжить установку.
После установки ‘ dnsutils ‘ выполните следующую команду dig, чтобы проверить доменное имя и поддомены, которые вы настроили.
Проверьте основное доменное имя Dnsmasq ‘ howtoforge.local ‘, которое указывает на IP-адрес сервера Dnsmasq ‘192.168.5.20’.
dig howtoforge.local
Проверьте поддомены, которые вы определили через файл ‘/etc/hosts’ с помощью следующей команды dig.
dig app1.howtoforge.local +short
dig db1.howtoforge.local +short
dig files.howtoforge.local +shortПоддомен ‘ app1.howtoforge.local ‘ указывает на IP-адрес ‘ 192.168.5.10 ‘, поддомен ‘ db1.howtoforge.local ‘ указывает на IP-адрес ‘ 192.168.5.25 ‘, и, наконец, ‘ files.howtoforge.local ‘ указывает на IP-адрес ‘ 192.168.5.50 ‘.
Ниже приведен аналогичный вывод, который вы получите.

Теперь вы настроили и протестировали установку Dnsmasq как локального DNS-сервера на сервере Debian. На следующих этапах вы настроите и защитите Dnsmasq с помощью брандмауэра UFW.
Настройка брандмауэра UFW
Теперь вы настроите брандмауэр на вашем локальном DNS-сервере. Вы защитите установку Dnsmasq, ограничив доступ к DNS-серверу через брандмауэр UFW.
Выполните следующую команду apt для установки брандмауэра UFW на вашу систему Debian.
sudo apt install ufw -y
После установки UFW выполните следующую команду, чтобы добавить службу OpenSSH и DNS-порт 53 в брандмауэр UFW. В этом примере вы укажете источник сети, которому разрешен доступ к серверу Dnsmasq, который является локальной сетью с IP-адресами 192.168.5.0/24 ‘.
Обязательно измените локальные IP-адреса сети на вашу внутреннюю подсеть.
sudo ufw allow OpenSSH
sudo ufw allow from 192.168.5.0/24 to any port 53 proto udpДалее выполните следующую команду, чтобы запустить и включить брандмауэр UFW.
sudo ufw enableКогда вас спросят о конфигурации, введите y для подтверждения и нажмите ENTER, чтобы продолжить. Брандмауэр UFW теперь должен быть запущен и включен и будет автоматически запускаться при загрузке.

Наконец, выполните следующую команду, чтобы проверить статус брандмауэра UFW. Вы должны увидеть, что брандмауэр UFW ‘активен’, а служба OpenSSH и DNS-порт 53 добавлены в брандмауэр.
sudo ufw status
С настроенным брандмауэром UFW вы теперь можете добавлять клиентов для подключения к вашему локальному DNS-серверу.
Настройка клиента
На этом этапе вы настроите клиентскую машину с дистрибутивом на базе Debian и именем хоста ‘ client ‘. Вы добавите локальный DNS-сервер Dnsmasq на клиентскую машину.
Выполните следующую команду, чтобы удалить ссылку на файл конфигурации резолвера DNS ‘/etc/resolv.conf’. Затем создайте новую конфигурацию резолвера ‘ /etc/resolv.conf ‘ с помощью команды редактора nano ниже.
sudo unlink /etc/resolv.conf
sudo nano /etc/resolv.confВведите следующую строку в файл. Обязательно измените IP-адрес на IP-адрес вашего сервера Dnsmasq.
nameserver 192.168.5.20Сохраните файл и выйдите из редактора, когда закончите.
Далее выполните следующую команду, чтобы установить пакет ‘dnsutils’ на клиентскую машину.
sudo apt install dnsutils
Теперь выполните команду dig ниже, чтобы проверить доменное имя ‘ howtoforge.local ‘, которое будет указывать на IP-адрес сервера Dnsmasq.
dig howtoforge.localНиже приведен вывод, который вы получите.

Для поддоменов выполните команду dig ниже. Каждый поддомен будет указывать на IP-адрес, определенный в файле ‘ /etc/hosts ‘ на сервере Dnsmasq.
dig app1.howtoforge.local +short
dig db1.howtoforge.local +short
dig files.howtoforge.local +shortНиже приведен аналогичный вывод, который вы получите на клиентской машине.

Далее вам также нужно убедиться, что вы можете получить доступ к публичному доменному имени через локальный DNS-сервер Dnsmasq. Вы можете проверить это, проверив публичное доменное имя, такое как ‘ github.com ‘.
dig github.comВы получите вывод, похожий на этот скриншот - внизу вывода вы должны увидеть, что ваш запрос был обработан локальным DNS-сервером Dnsmasq, который работает на ‘ 192.168.5.20’ с портом по умолчанию ‘ 53 ‘. Учитывая это, вы успешно подключились к публичному доменному имени через локальный DNS-сервер Dnsmasq.

Наконец, вы проверите кэш DNS с помощью команд ‘drill’ и ‘dig’. Команда ‘ drill ‘ является частью пакета ‘ ldnsutils ‘, поэтому выполните следующую команду apt для его установки.
sudo apt install ldnsutils
После установки ldnsutils выполните следующую команду drill, чтобы проверить кэш DNS, который вы настроили на сервере Dnsmasq.
drill duckduckgo.com | grep "Query time"
drill duckduckgo.com | grep "Query time"Вы получите вывод, похожий на следующий скриншот - при первом запросе ‘ Query time ‘ составляет 60 мс. Но при втором запросе того же домена время запроса сокращается до 1 мс, что означает, что запрос DNS кэшируется на локальном DNS-сервере Dnsmasq.

Вы также можете проверить кэш DNS с помощью команды dig с опцией ‘ +stats ‘.
dig +noall +stats duckduckgo.com
dig +noall +stats duckduckgo.comТеперь вы завершили настройку клиентской машины и проверили, что локальный DNS-сервер Dnsmasq полностью работает, от локального доменного имени и поддоменов, которые вы определили через файл ‘/etc/hosts’, до кэша DNS, который вы включили на Dnsmasq.
Заключение
В этом учебнике вы создали свой собственный локальный DNS-сервер с Dnsmasq. Вы настроили свой собственный локальный DNS-сервер для вашей локальной среды с Dnmasq на сервере Debian 12. Также это включало конфигурацию Dnsmasq с локальными доменными именами и поддоменами, включение кэша DNS для получения более быстрых повторяющихся ответов DNS и включение DHCP-сервера через Dnsmasq.
Наконец, вы также добавили и настроили клиентскую машину для использования локального DNS-сервера, который вы создали. В этом процессе вы также узнали, как устранять неполадки DNS-сервера с помощью команды dig и как настроить резолвер DNS на системе Linux.
Get new posts in your inbox
No spam. Unsubscribe anytime.