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

Запустите лёгкий DNS-сервер на Linux с помощью Dnsmasq, чтобы централизовать локальные имена, ускорить разрешение DNS и повысить отказоустойчивость. Этот материал ведёт шаг за шагом: установка, конфигурация, сопоставление имён с IP, тестирование, интеграция с роутером и базовое обслуживание.
Быстрые ссылки
Что такое DNS?
Зачем запускать собственный DNS?
Dnsmasq
Начало работы
Сопоставление имён и IP
Тестирование сервера
Настройка сети
Типичные ошибки и устранение
Заключение
Что такое DNS?
DNS — система, которая переводит доменные имена (например, example.com) в числовой IP‑адрес сервера. Когда вы вводите адрес в браузере или делаете сетевой запрос по домену, система выполняет DNS‑запрос, чтобы узнать, к какому IP направлять соединение.
Пример значения в ответе DNS:
127.0.0.1DNS добавляет небольшую задержку перед началом соединения, но большинство операционных систем кешируют результаты, поэтому повторные обращения к тем же доменам выполняются быстрее.
Краткое определение: 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.
Путь запроса при типичной конфигурации:
- Устройство посылает DNS‑запрос роутеру.
- Роутер перенаправляет запрос к хосту с Dnsmasq.
- 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.
Тестирование сервера
- Перезапустите Dnsmasq после всех изменений:
sudo systemctl restart dnsmasq- Проверка статуса:
sudo systemctl status dnsmasq- Локальный запрос с помощью dig (пакет dnsutils):
dig google.com @localhost
dig gateway.lan @localhostВ секции ANSWER вы увидите IP. @localhost указывает, что запрос идёт к локальному серверу.
Для быстрой проверки из другого устройства в сети используйте:
dig web-server @192.168.0.1Если всё настроено верно, браузер сможет открыть http://web-server.

На изображении показан вывод статуса сервиса 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 может подпадать под правила обработки данных, если в запросах присутствуют персональные данные. Применяйте политики хранения и доступа к логам.
Типичные ошибки и способы устранения
- “Сервер не отвечает”
- Проверьте, что Dnsmasq запущен: sudo systemctl status dnsmasq
- Проверьте, что порт 53 слушается: sudo ss -ltnp | grep :53
- Проверьте firewall: sudo ufw status или iptables -L
- “Имена не резолвятся как ожидалось”
- Убедитесь, что записи присутствуют в /etc/hosts или файле addn-hosts.
- Проверьте логи Dnsmasq в системном журнале: sudo journalctl -u dnsmasq –since “10 minutes ago”
- Убедитесь, что domain-needed и bogus-priv настроены корректно для ожидаемого поведения.
- Конфликт 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.
Мини‑методика развертывания (шаги)
- Подготовка хоста: статический IP, обновление системы.
- Установка dnsmasq.
- Правка /etc/dnsmasq.conf: domain-needed, bogus-priv, server=…, cache-size.
- Добавление локальных записей в /etc/hosts или addn-hosts.
- Перезапуск и тестирование локальными dig/nslookup.
- Настройка роутера — указать основной DNS как IP сервера.
- Мониторинг и штатное обслуживание (бэкапы конфигов).
Чек-листы по ролям
Домашний пользователь
- Установить Dnsmasq.
- Задать static IP для хоста.
- Добавить пару /etc/hosts записей для основных устройств.
- Настроить роутер на использование локального DNS.
- Проверить с телефона и ПК.
Сетевой администратор SOHO
- Настроить addn-hosts и резервное upstream на роутере.
- Настроить firewall, разрешить порт 53 только из LAN.
- Включить логирование и сделать ротацию логов.
- Настроить мониторинг (uptime, запросы в минуту).
Инженер тестовой лаборатории
- Интегрировать DHCP → DNS для автоматического добавления имён.
- Настроить динамические записи или использовать внутренний инструментарий для CI.
- Описать процедуру отката и бэкапы конфигов.
План действий при инциденте (Runbook)
- Пользователи жалуются на невозможность резолва.
- Проверить статус сервиса: sudo systemctl status dnsmasq.
- Проверить загрузку CPU/памяти: top/htop.
- Проверить порт 53: sudo ss -ltnp | grep :53.
- Перезапустить сервис: sudo systemctl restart dnsmasq.
- Если не помогло — переключить клиентов на внешний DNS временно (изменить DHCP настройки роутера).
- Собрать логи: sudo journalctl -u dnsmasq –no-pager > /tmp/dnsmasq.log
- Восстановить работу и задокументировать причину.
Критерии приёмки
- 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.
Похожие материалы
Удалённое выключение и перезагрузка Windows‑ПК
Цветокоррекция выцветших фотографий
Будильник на Python — простой скрипт
Gorillas: история и как играть в MS‑DOS
10 лучших YouTube‑каналов для игры на гитаре