Гид по технологиям

Как запустить собственный DNS-сервер в локальной сети

9 min read Сеть Обновлено 20 Dec 2025
Локальный DNS‑сервер на Dnsmasq
Локальный DNS‑сервер на Dnsmasq

Как запустить собственный DNS‑сервер в локальной сети

Запустите лёгкий DNS-сервер на Linux с помощью Dnsmasq, чтобы централизовать локальные имена, ускорить разрешение DNS и повысить отказоустойчивость. Этот материал ведёт шаг за шагом: установка, конфигурация, сопоставление имён с IP, тестирование, интеграция с роутером и базовое обслуживание.

Быстрые ссылки

  • Что такое DNS?

  • Зачем запускать собственный DNS?

  • Dnsmasq

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

  • Сопоставление имён и IP

  • Тестирование сервера

  • Настройка сети

  • Типичные ошибки и устранение

  • Заключение

Что такое DNS?

DNS — система, которая переводит доменные имена (например, example.com) в числовой IP‑адрес сервера. Когда вы вводите адрес в браузере или делаете сетевой запрос по домену, система выполняет DNS‑запрос, чтобы узнать, к какому IP направлять соединение.

Пример значения в ответе DNS:

127.0.0.1

DNS добавляет небольшую задержку перед началом соединения, но большинство операционных систем кешируют результаты, поэтому повторные обращения к тем же доменам выполняются быстрее.

Краткое определение: DNS — это телефонная книга интернета, сопоставляющая имена с адресами.

Зачем запускать собственный DNS?

Причины и преимущества:

  • Централизация: управлять сопоставлениями имён с IP в одном месте (вместо редактирования /etc/hosts на каждом устройстве).
  • Локальные имена: давать осмысленные имена устройствам в локальной сети (например, web-server → 192.168.0.101).
  • Кеширование: уменьшать задержки за счёт локального кэша DNS.
  • Отказоустойчивость и контроль приватности: уменьшить зависимость от внешних провайдеров DNS и контролировать утечку информации о сети.

Когда это полезно:

  • Домашняя сеть с несколькими устройствами и «умными» девайсами.
  • Лаборатория или офис, где нужны предсказуемые локальные имена.
  • Сценарии с ограниченной конфигурацией устройств (встроенные контроллеры, IP‑камеры и т. п.).

Ограничения:

  • Если вы хотите публичный DNS в глобальном интернете — нужен полноценный авторитативный DNS и публичные записи.
  • Для очень крупных сетей могут потребоваться более мощные решения (Bind, PowerDNS, Knot).

Dnsmasq

Dnsmasq — это лёгкий DNS и DHCP‑резолвер, включённый в большинство дистрибутивов Linux. Он прост в настройке и работает на слабом железе, включая Raspberry Pi.

В этой инструкции Dnsmasq будет:

  • отвечать за локальные сопоставления имён;
  • кэшировать ответы от внешних резолверов;
  • пересылать непризнанные запросы к публичному DNS (upstream), например, 8.8.8.8.

Путь запроса при типичной конфигурации:

  1. Устройство посылает DNS‑запрос роутеру.
  2. Роутер перенаправляет запрос к хосту с Dnsmasq.
  3. Dnsmasq проверяет локальные сопоставления, затем кэш, затем внешние серверы.

Важно: Dnsmasq может работать только как DNS, только как DHCP, или вместе — настройте в соответствии с задачей.

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

Требования и предположения:

  • Linux‑хост с постоянным (статическим) IP в вашей локальной сети. В примерах используется 192.168.0.1.
  • Права root или sudo.
  • Доступ к конфигурации роутера (для установки DNS‑сервера в качестве основного).

Установка (Debian/Ubuntu):

# Предполагается Debian-подобная система
sudo apt update
sudo apt install dnsmasq

Файл конфигурации: /etc/dnsmasq.conf. По умолчанию он снабжён комментариями и настройками. Мы внесём минимальные изменения.

Откройте конфиг:

sudo nano /etc/dnsmasq.conf

Найдите и раскомментируйте следующие строки (уберите # в начале):

domain-needed
bogus-priv

Что это даёт:

  • domain-needed — не пересылать на внешний резолвер имена без точки (dotless), оставляя такие имена для локальной сети (например, web-server).
  • bogus-priv — не пересылать обратные запросы для приватных IP (не раскрывать внутренние адреса внешнему провайдеру).

Задайте upstream‑серверы (вставьте или отредактируйте):

server=8.8.8.8
server=4.4.4.4

Примечание: 4.4.4.4 в исходном тексте — это опечатка обычно; стандартный вторичный Google‑резолвер — 8.8.4.4. Оставляйте те серверы, которым вы доверяете.

Настройка размера кэша (рекомендуется увеличить значение по умолчанию):

cache-size=1000

Сохраните и закройте файл.

Перезагрузите сервис после правок:

sudo systemctl restart dnsmasq
sudo systemctl status dnsmasq

Вы должны увидеть статус active (running).

Важная заметка: на системах с systemd‑resolved иногда возникает конфликт за порт 53. В этом случае либо отключите systemd‑resolved, либо перенастройте его, либо измените адрес, на котором слушает Dnsmasq. Ниже раздел «Совместимость и конфликты».

Сопоставление имён и IP

Dnsmasq автоматически читает /etc/hosts. Самый простой способ назначить локальные имена — добавить строки в /etc/hosts:

192.168.0.101 web-server
192.168.0.105 gateway.lan

Строка: IP затем список имён.

Альтернативные способы управления записями:

  • Отдельный файл hosts, подключаемый через опцию addn-hosts=/etc/dnsmasq.d/hosts.custom
  • Использование DHCP‑аренд с сопоставлением имён (если Dnsmasq управляет DHCP)
  • Использование конфигурационных записей addr (например, cname, srv) — Dnsmasq поддерживает базовые типы записей

Пример подключения дополнительного файла:

Добавьте в /etc/dnsmasq.conf:

addn-hosts=/etc/dnsmasq.d/hosts.custom

Содержимое /etc/dnsmasq.d/hosts.custom имеет такой же формат, как /etc/hosts.

Тестирование сервера

  1. Перезапустите Dnsmasq после всех изменений:
sudo systemctl restart dnsmasq
  1. Проверка статуса:
sudo systemctl status dnsmasq
  1. Локальный запрос с помощью dig (пакет dnsutils):
dig google.com @localhost
dig gateway.lan @localhost

В секции ANSWER вы увидите IP. @localhost указывает, что запрос идёт к локальному серверу.

Для быстрой проверки из другого устройства в сети используйте:

dig web-server @192.168.0.1

Если всё настроено верно, браузер сможет открыть http://web-server.

Скриншот результата «service dnsmasq status» на работающем сервере

На изображении показан вывод статуса сервиса dnsmasq на сервере.

Настройка сети (роутер и DHCP)

Чтобы все устройства в вашей сети использовали Dnsmasq, укажите IP сервера как основной DNS в настройках роутера. Шаги зависят от прошивки роутера, но общая логика:

  • Найдите раздел «LAN / DHCP / DNS» в веб‑интерфейсе роутера.
  • В поле Primary DNS укажите 192.168.0.1 (пример).
  • В поле Secondary DNS укажите публичный резолвер (например, 8.8.8.8) на случай, если ваш DNS недоступен.
  • Сохраните и перезапустите роутер при необходимости.

Опция: если ваш роутер не позволяет задать DNS для всего сетевого сегмента, можно вручную прописать DNS на каждом клиенте.

DHCP + DNS интеграция:

Если Dnsmasq управляет DHCP, он может автоматически добавлять имена для DHCP‑аренд. Пример записи в /etc/dnsmasq.conf:

interface=eth0
dhcp-range=192.168.0.50,192.168.0.200,12h

При этом устройства, получившие IP по DHCP, будут отображаться по своих именам в DNS.

Совместимость и конфликты

Частые источники проблем:

  • systemd‑resolved слушает порт 53 на localhost. Решение: отключить systemd‑resolved или изменить конфигурацию (например, link /run/systemd/resolve/resolv.conf в /etc/resolv.conf и выключить).
  • firewall/ufw/iptables блокирует порт 53. Разрешите UDP и TCP порт 53 на интерфейсе.
  • Другие локальные резолверы уже работают (Unbound, stubby). Проверьте, что только один процесс слушает порт 53.

Пример команды для поиска:

sudo ss -ltnp | grep :53
sudo ss -lunp | grep :53

Если вы увидите systemd‑resolved, можно временно остановить его для проверки:

sudo systemctl stop systemd-resolved
sudo systemctl disable systemd-resolved

Отключайте только если понимаете последствия и умеете вернуть назад.

Безопасность и приватность

Советы:

  • Не открывайте ваш локальный DNS в интернет без защиты. Dnsmasq по умолчанию слушает локальные интерфейсы, но случайная настройка может сделать его доступным извне.
  • Используйте опции firewall для фильтрации входящих запросов на порт 53.
  • Подумайте о DNS‑over‑TLS/HTTPS на уровне upstream, если важно шифрование внешних запросов (Dnsmasq не шифрует upstream, для этого нужен промежуточный прокси, например, stubby или cloudflared).
  • Для конфиденциальных сетей контролируйте логирование запросов — логи DNS содержат метаданные, которые можно считать личными данными.

Заметка по GDPR/частным данным: хранение логов DNS может подпадать под правила обработки данных, если в запросах присутствуют персональные данные. Применяйте политики хранения и доступа к логам.

Типичные ошибки и способы устранения

  1. “Сервер не отвечает”
  • Проверьте, что Dnsmasq запущен: sudo systemctl status dnsmasq
  • Проверьте, что порт 53 слушается: sudo ss -ltnp | grep :53
  • Проверьте firewall: sudo ufw status или iptables -L
  1. “Имена не резолвятся как ожидалось”
  • Убедитесь, что записи присутствуют в /etc/hosts или файле addn-hosts.
  • Проверьте логи Dnsmasq в системном журнале: sudo journalctl -u dnsmasq –since “10 minutes ago”
  • Убедитесь, что domain-needed и bogus-priv настроены корректно для ожидаемого поведения.
  1. Конфликт systemd‑resolved
  • Отключите systemd‑resolved или настройте его так, чтобы он не мешал Dnsmasq.

Альтернативы и когда это не подходит

Когда не использовать Dnsmasq:

  • Нужен авторитативный публичный DNS для домена в интернете — нужен полноценный Bind/PowerDNS/Knot.
  • Необходима масштабируемость и кластеризация на уровне несколько сотен тысяч запросов в секунду — выбирайте более серьёзные решения.

Альтернативы:

  • Bind — полнофункциональный DNS‑сервер для авторитативных зон и сложных сценариев.
  • PowerDNS — подходит для интеграции с базами и API.
  • Unbound — рекурсивный резолвер с упором на безопасность и конфиденциальность.

Модель зрелости для локального DNS (уровни)

  • Уровень 0 — Без локального DNS. Все клиенты используют внешний резолвер.
  • Уровень 1 — Простой Dnsmasq, /etc/hosts маршруты, базовое кэширование.
  • Уровень 2 — Интеграция DHCP ↔ DNS, дополнительные файлы hosts, мониторинг.
  • Уровень 3 — Высокая доступность, централизованное логирование, шифрованные upstream.

Мини‑методика развертывания (шаги)

  1. Подготовка хоста: статический IP, обновление системы.
  2. Установка dnsmasq.
  3. Правка /etc/dnsmasq.conf: domain-needed, bogus-priv, server=…, cache-size.
  4. Добавление локальных записей в /etc/hosts или addn-hosts.
  5. Перезапуск и тестирование локальными dig/nslookup.
  6. Настройка роутера — указать основной DNS как IP сервера.
  7. Мониторинг и штатное обслуживание (бэкапы конфигов).

Чек-листы по ролям

Домашний пользователь

  • Установить Dnsmasq.
  • Задать static IP для хоста.
  • Добавить пару /etc/hosts записей для основных устройств.
  • Настроить роутер на использование локального DNS.
  • Проверить с телефона и ПК.

Сетевой администратор SOHO

  • Настроить addn-hosts и резервное upstream на роутере.
  • Настроить firewall, разрешить порт 53 только из LAN.
  • Включить логирование и сделать ротацию логов.
  • Настроить мониторинг (uptime, запросы в минуту).

Инженер тестовой лаборатории

  • Интегрировать DHCP → DNS для автоматического добавления имён.
  • Настроить динамические записи или использовать внутренний инструментарий для CI.
  • Описать процедуру отката и бэкапы конфигов.

План действий при инциденте (Runbook)

  1. Пользователи жалуются на невозможность резолва.
  2. Проверить статус сервиса: sudo systemctl status dnsmasq.
  3. Проверить загрузку CPU/памяти: top/htop.
  4. Проверить порт 53: sudo ss -ltnp | grep :53.
  5. Перезапустить сервис: sudo systemctl restart dnsmasq.
  6. Если не помогло — переключить клиентов на внешний DNS временно (изменить DHCP настройки роутера).
  7. Собрать логи: sudo journalctl -u dnsmasq –no-pager > /tmp/dnsmasq.log
  8. Восстановить работу и задокументировать причину.

Критерии приёмки

  • Dnsmasq запущен и активен.
  • dig web-server @192.168.0.1 возвращает ожидаемый IP.
  • Клиенты в сети при перезапуске получают DNS от роутера и резолвят локальные имена.
  • Логи не содержат критических ошибок при старте.

Тестовые сценарии (acceptance)

  • Проверить доступность веб‑интерфейса устройства по локальному имени с трёх разных клиентских устройств.
  • Отключить upstream (симулировать недоступность) — локальные имена и кэшированные ресурсы должны продолжать резолвиться.
  • Добавить новую запись в addn-hosts и проверить, что разрешение происходит без перезапуска Dnsmasq (Dnsmasq автоматически подхватывает изменения при некоторой конфигурации).

Диаграмма принятия решения (Mermaid)

flowchart TD
  A[Нужно ли локальное имя для устройств?] -->|Нет| B[Не ставить DNS]
  A -->|Да| C[Простой набор: Dnsmasq]
  C --> D{Нужна авторитативность для публичного домена?}
  D -->|Да| E[Развернуть Bind/PowerDNS]
  D -->|Нет| F[Оставаться на Dnsmasq]
  F --> G{Требуется масштаб/кластеризация?}
  G -->|Да| E
  G -->|Нет| H[Использовать Dnsmasq и мониторинг]

Заключение

Dnsmasq — быстрый и удобный способ добавить локальный DNS в домашнюю или небольшую офисную сеть. Он позволяет централизовать сопоставления имён, ускорить доступ и повысить контроль над сетевой инфраструктурой. Для большинства задач на уровне домашней/SOHO‑сети Dnsmasq обеспечивает оптимальный баланс простоты и функциональности.

Рекомендации на будущее:

  • Ведите резервные копии /etc/dnsmasq.conf и ваших hosts.
  • Автоматизируйте добавление записей, если у вас динамическая инфраструктура.
  • Подумайте о шифровании upstream‑запросов и политике логирования при необходимости соответствовать локальным требованиям по приватности.

Важно: при изменениях в сетевой инфраструктуре планируйте окно обслуживания и оповещайте пользователей о возможном кратковременном недоступности DNS.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Удалённое выключение и перезагрузка Windows‑ПК
Системное администрирование

Удалённое выключение и перезагрузка Windows‑ПК

Цветокоррекция выцветших фотографий
Реставрация

Цветокоррекция выцветших фотографий

Будильник на Python — простой скрипт
Python

Будильник на Python — простой скрипт

Gorillas: история и как играть в MS‑DOS
Ретро игры

Gorillas: история и как играть в MS‑DOS

10 лучших YouTube‑каналов для игры на гитаре
Музыка

10 лучших YouTube‑каналов для игры на гитаре

Организация почты в Outlook: правила, категории, поиск
Почта

Организация почты в Outlook: правила, категории, поиск