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.

prepare the system

Установка и настройка 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 для продолжения.

install dnsmasq

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

sudo systemctl is-enabled dnsmasq  
sudo systemctl status dnsmasq

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

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

dnsmasq config

Далее откройте файл конфигурации ‘/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

verify dnsmasq and configure it

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

verify dnsmasq service

Далее вы проверите доменное имя и поддомены, которые вы настроили на 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

testing with dig command

Проверьте поддомены, которые вы определили через файл ‘/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 ‘.

Ниже приведен аналогичный вывод, который вы получите.

verify sub domains

Теперь вы настроили и протестировали установку Dnsmasq как локального DNS-сервера на сервере Debian. На следующих этапах вы настроите и защитите Dnsmasq с помощью брандмауэра UFW.

Настройка брандмауэра UFW

Теперь вы настроите брандмауэр на вашем локальном DNS-сервере. Вы защитите установку Dnsmasq, ограничив доступ к DNS-серверу через брандмауэр UFW.

Выполните следующую команду apt для установки брандмауэра UFW на вашу систему Debian.

sudo apt install ufw -y

install ufw firewall

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

setup enable ufw

Наконец, выполните следующую команду, чтобы проверить статус брандмауэра UFW. Вы должны увидеть, что брандмауэр UFW ‘активен’, а служба OpenSSH и DNS-порт 53 добавлены в брандмауэр.

sudo ufw status

verify ufw

С настроенным брандмауэром 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

setup client

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

dig howtoforge.local

Ниже приведен вывод, который вы получите.

verify domain from client

Для поддоменов выполните команду dig ниже. Каждый поддомен будет указывать на IP-адрес, определенный в файле ‘ /etc/hosts ‘ на сервере Dnsmasq.

dig app1.howtoforge.local +short  
dig db1.howtoforge.local +short  
dig files.howtoforge.local +short

Ниже приведен аналогичный вывод, который вы получите на клиентской машине.

verify sub domains

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

dig github.com

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

ensure dns is working

Наконец, вы проверите кэш DNS с помощью команд ‘drill’ и ‘dig’. Команда ‘ drill ‘ является частью пакета ‘ ldnsutils ‘, поэтому выполните следующую команду apt для его установки.

sudo apt install ldnsutils

install ldns

После установки ldnsutils выполните следующую команду drill, чтобы проверить кэш DNS, который вы настроили на сервере Dnsmasq.

drill duckduckgo.com | grep "Query time"  
drill duckduckgo.com | grep "Query time"

Вы получите вывод, похожий на следующий скриншот - при первом запросе ‘ Query time ‘ составляет 60 мс. Но при втором запросе того же домена время запроса сокращается до 1 мс, что означает, что запрос DNS кэшируется на локальном DNS-сервере Dnsmasq.

verify dns cache

Вы также можете проверить кэш 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.

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.