DNS настройка · 5 min read · Oct 01, 2025

Как настроить локальный DNS-резолвер с помощью Dnsmasq на Ubuntu 20.04

Dnsmasq, сокращение от “DNS masquerade”, является простым, легковесным и простым в использовании DNS-прокси, используемым для небольшой сети. Он может быть настроен как DNS-кэш и DHCP-сервер и поддерживает как протокол IPv4, так и IPv6. Когда он получает любые DNS-запросы, он отвечает на них из своего кэша или перенаправляет на другой DNS-сервер.

Dnsmasq состоит из трех подсистем:

  • Подсистема DNS: Используется для кэширования различных типов записей, включая A, AAAA, CNAME и PTR.
  • Подсистема DHCP: Поддерживает DHCPv4, DHCPv6, BOOTP и PXE.
  • Подсистема объявления маршрутизатора: Обеспечивает базовую автоконфигурацию для хостов IPv6. Может использоваться отдельно или в сочетании с DHCPv6.

В этом руководстве мы покажем вам, как настроить локальный DNS-сервер с Dnsmasq на сервере Ubuntu 20.04.

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

  • Сервер с установленной Ubuntu 20.04.
  • Настроенный root-пароль на сервере.

Начало работы

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

apt-get update -y

После обновления всех пакетов вам нужно будет отключить службу Systemd-resolved в вашей системе. Служба Systemd-resolved используется для разрешения сетевых имен для локальных приложений.

Вы можете отключить ее, выполнив следующую команду:

systemctl disable --now systemd-resolved

После отключения службы вам нужно будет удалить файл resolv.conf по умолчанию и создать новый с вашими данными о DNS-сервере.

Вы можете удалить файл resolv.conf по умолчанию с помощью следующей команды:

rm -rf /etc/resolv.conf

Затем добавьте DNS-сервер Google в файл resolv.conf с помощью следующей команды:

echo "nameserver 8.8.8.8" > /etc/resolv.conf

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

Установка Dnsmasq

По умолчанию Dnsmasq доступен в стандартном репозитории Ubuntu 20.04. Вы можете установить его, просто выполнив следующую команду:

apt-get install dnsmasq dnsutils ldnsutils -y

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

systemctl status dnsmasq

Вы должны получить следующий вывод:

dnsmasq.service - dnsmasq - Легковесный DHCP и кэшированный DNS-сервер
     Loaded: loaded (/lib/systemd/system/dnsmasq.service; enabled; vendor preset: enabled)
     Active: active (running) since Tue 2020-11-02 11:02:01 UTC; 15s ago
   Main PID: 17726 (dnsmasq)
      Tasks: 1 (limit: 2282)
     Memory: 868.0K
     CGroup: /system.slice/dnsmasq.service
             ??17726 /usr/sbin/dnsmasq -x /run/dnsmasq/dnsmasq.pid -u dnsmasq -7 /etc/dnsmasq.d,.dpkg-dist,.dpkg-old,.dpkg-new --local-service --trust-anchor=.,20326,8,2,e>

Nov 02 11:02:12 ubuntu2004 systemd[1]: Starting dnsmasq - Легковесный DHCP и кэшированный DNS-сервер...
Nov 02 11:02:12 ubuntu2004 dnsmasq[17705]: dnsmasq: синтаксическая проверка ОК.
Nov 02 11:02:12 ubuntu2004 dnsmasq[17726]: запущен, версия 2.80, размер кэша 150
Nov 02 11:02:12 ubuntu2004 dnsmasq[17726]: DNS-сервис ограничен локальными подсетями
Nov 02 11:02:12 ubuntu2004 dnsmasq[17726]: параметры времени компиляции: IPv6 GNU-getopt DBus i18n IDN DHCP DHCPv6 no-Lua TFTP conntrack ipset auth DNSSEC loop-detect inotify dumpfi>
Nov 02 11:02:12 ubuntu2004 dnsmasq[17726]: чтение /etc/resolv.conf
Nov 02 11:02:12 ubuntu2004 dnsmasq[17726]: использование nameserver 8.8.8.8#53
Nov 02 11:02:12 ubuntu2004 dnsmasq[17726]: прочитано /etc/hosts - 7 адресов
Nov 02 11:02:12 ubuntu2004 systemd[1]: Запущен dnsmasq - Легковесный DHCP и кэшированный DNS-сервер.

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

Настройка Dnsmasq

Далее вам нужно будет настроить Dnsmasq как локальный DNS-сервер. Вы можете сделать это, отредактировав основной конфигурационный файл Dnsmasq:

nano /etc/dnsmasq.conf

Измените следующие строки:

port=53
domain-needed
bogus-priv
listen-address=127.0.0.1,your-server-ip
expand-hosts
domain=dns-example.com
cache-size=1000

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

Затем вам нужно будет добавить IP-адрес вашего сервера в качестве основного nameserver в файл resolv.conf. Вы можете добавить его с помощью следующей команды:

nano /etc/resolv.conf

Добавьте следующую строку выше строки “nameserver 8.8.8.8”:

nameserver your-server-ip

Сохраните и закройте файл, когда закончите. Затем проверьте сервер на наличие ошибок конфигурации с помощью следующей команды:

dnsmasq --test

Если все в порядке, вы должны получить следующий вывод:

dnsmasq: синтаксическая проверка ОК.

Наконец, перезапустите службу Dnsmasq, чтобы применить изменения:

systemctl restart dnsmasq

На этом этапе Dnsmasq запущен и слушает на порту 53. Вы можете проверить это с помощью следующей команды:

ss -alnp | grep -i :53

Вы должны получить следующий вывод:

udp     UNCONN   0        0                                             0.0.0.0:53                                                0.0.0.0:*                      users:(("dnsmasq",pid=41051,fd=4))                                              
udp     UNCONN   0        0                                                [::]:53                                                   [::]:*                      users:(("dnsmasq",pid=41051,fd=6))                                              
tcp     LISTEN   0        32                                            0.0.0.0:53                                                0.0.0.0:*                      users:(("dnsmasq",pid=41051,fd=5))                                              
tcp     LISTEN   0        32                                               [::]:53                                                   [::]:*                      users:(("dnsmasq",pid=41051,fd=7))                                              

Добавление DNS-записей на сервер Dnsmasq

Далее вам нужно будет отредактировать файл /etc/hosts и добавить запись локального DNS-сервера.

nano /etc/hosts

Добавьте следующую строку:

your-server-ip host1.dns-example.com

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

Проверка разрешения сервера Dnsmasq

На этом этапе Dnsmasq установлен и настроен. Теперь пришло время проверить разрешение DNS.

Вы можете использовать команду dig, чтобы проверить разрешение DNS, как показано ниже:

dig host1.dns-example.com +short

Если все в порядке, вы должны увидеть IP-адрес вашего сервера в следующем выводе:

your-server-ip

Вы также можете проверить внешнее разрешение DNS с помощью следующей команды:

dig howtoforge.com +short

Вы должны получить следующий вывод:

172.67.68.93
104.26.3.165
104.26.2.165

Настройка удаленного клиента для использования DNS-сервера Dnsmasq

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

Сначала установите инструменты DNS с помощью следующей команды:

apt-get install dnsutils ldnsutils -y

После установки вам нужно будет отредактировать файл /etc/resolv.conf и запись вашего DNS-сервера Dnsmasq.

nano /etc/resolv.conf

Добавьте следующую строку в начале файла:

nameserver your-server-ip

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

Затем проверьте локальное разрешение DNS с помощью следующей команды:

dig host1.dns-example.com

Вы должны увидеть следующий вывод:

; DiG 9.9.5-3ubuntu0.4-Ubuntu host1.dns-example.com
;; global options: +cmd
;; Got answer:
;; HEADER opcode: QUERY, status: NOERROR, id: 26401
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;host1.dns-example.com.    IN  A

;; ANSWER SECTION:
host1.dns-example.com.    0   IN  A   45.58.32.165

;; Query time: 301 msec
;; SERVER: 45.58.32.165#53(45.58.32.165)
;; WHEN: Mon Nov 02 16:49:37 IST 2020
;; MSG SIZE  rcvd: 66

Затем вам нужно будет проверить ваш DNS-сервер на наличие кэша. Вы можете проверить это с помощью утилиты drill.

Сначала выполните следующую команду:

drill google.com | grep "Query time"

Вы должны увидеть следующий вывод:

;; Query time: 290 msec

Затем выполните команду снова, чтобы проверить, работает ли кэширование:

drill google.com | grep "Query time"

Вы должны увидеть, что время запроса теперь уменьшается до 4 мс:

;; Query time: 4 msec

Заключение

Поздравляем! Вы успешно установили и настроили Dnsmasq как локальный DNS-сервер на Ubuntu 20.04. Я надеюсь, что теперь вы сможете легко внедрить его в вашу локальную сеть для разрешения имен.

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.