Инструкция по установке и настройке DNSMASQ для локального DNS-сервера
DNSMASQ — это легкий DHCP- и DNS-сервер, который можно использовать для организации локального DNS-резолвинга в вашей сети. Он кэширует DNS-запросы, ускоряя доступ к часто используемым доменам, и позволяет добавлять локальные имена хостов.
1. Установка DNSMASQ
Ubuntu/Debian
sudo apt update
sudo apt install dnsmasq
CentOS/RHEL
sudo yum install dnsmasq
Arch Linux
sudo pacman -S dnsmasq
После установки сервис запустится автоматически, но его лучше остановить до настройки:
sudo systemctl stop dnsmasq
2. Базовая настройка DNSMASQ
Основной конфигурационный файл: /etc/dnsmasq.conf
Рекомендуемые настройки
Откройте файл для редактирования:
sudo nano /etc/dnsmasq.conf
-
Настройка DNS-кэширования
# Слушать только локальный интерфейс (безопасность) listen-address=127.0.0.1,192.168.1.1 # замените на IP вашего сервера в LAN bind-interfaces # Внешние DNS-серверы для запросов (например, Cloudflare или Google) server=8.8.8.8 server=1.1.1.1 # Локальный домен для сети local=/lan/ domain=lan # Кэширование DNS-запросов cache-size=1000 # количество кэшируемых записей -
Добавление локальных имен хостов
# Статичные записи (можно также использовать /etc/hosts) address=/router.lan/192.168.1.1 address=/nas.lan/192.168.1.10 -
Опционально: настройка DHCP (если нужно раздавать IP)
# Диапазон IP и время аренды dhcp-range=192.168.1.100,192.168.1.200,24h # Шлюз и DNS-сервер для клиентов dhcp-option=3,192.168.1.1 # шлюз dhcp-option=6,192.168.1.1 # DNS (этот же сервер)
3. Запуск и проверка DNSMASQ
Запуск сервиса
sudo systemctl start dnsmasq
sudo systemctl enable dnsmasq # автозагрузка при старте системы
Проверка статуса
sudo systemctl status dnsmasq
Тестирование DNS
dig google.com @localhost # или nslookup google.com 192.168.1.1
Если добавлены локальные имена, проверьте:
ping router.lan
4. Настройка клиентов
Настройте устройства в локальной сети использовать ваш DNS-сервер:
Вручную
Прописать в настройках сети DNS 192.168.1.1 (IP вашего сервера).
Через DHCP
Если включен DHCP в dnsmasq, клиенты получат DNS автоматически.
5. Дополнительные настройки
Логирование DNS-запросов
log-queries
log-facility=/var/log/dnsmasq.log
После этого перезапустите сервис:
sudo systemctl restart dnsmasq
Блокировка рекламы и доменов
Создайте файл со списком блокируемых доменов (например, /etc/dnsmasq.blocklist) и добавьте в конфиг:
addn-hosts=/etc/dnsmasq.blocklist
Пример блокировки:
0.0.0.0 adserver.com
0.0.0.0 tracker.com
Безопасность
Firewall: Разрешите входящие подключения на порт 53 (DNS).
sudo ufw allow 53/tcp
sudo ufw allow 53/udp
Отключите рекурсивные запросы (если сервер только для локальной сети):
no-resolv
no-poll
Заключение
Теперь у вас работает локальный DNS-сервер с кэшированием и поддержкой локальных имен. Для более сложных сценариев (например, интеграции с Active Directory или Pi-hole) можно расширить конфигурацию.
Если есть проблемы, проверьте логи:
journalctl -u dnsmasq -f
Если порт 53 занят systemd-resolved, это может мешать работе dnsmasq. Решить проблему можно несколькими способами:
1. Отключите systemd-resolved (рекомендуется, если не нужен)
Остановка и отключение systemd-resolved
sudo systemctl stop systemd-resolved
sudo systemctl disable systemd-resolved
Удаление симлинка /etc/resolv.conf
sudo rm /etc/resolv.conf
Создание нового /etc/resolv.conf
echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf # или ваш локальный DNS
Перезапуск dnsmasq
sudo systemctl restart dnsmasq
2. Перенастроить systemd-resolved на другой порт (альтернатива)
Если systemd-resolved нужен (например, для работы NetworkManager), можно заставить его слушать на другом порту.
Изменение конфигурации systemd-resolved
Откройте файл:
sudo nano /etc/systemd/resolved.conf
Добавьте или раскомментируйте:
[Resolve]
DNSStubListener=no # отключает прослушку 53 порта
Перезапуск systemd-resolved
sudo systemctl restart systemd-resolved
Проверка, освободился ли порт 53
sudo ss -tulnp | grep 53
Теперь dnsmasq сможет занять порт 53.
3. Запуск dnsmasq на другом порте (если нельзя освободить 53)
Если по каким-то причинам нельзя освободить порт 53, можно заставить dnsmasq слушать на другом порте (например, 5353).
Изменение конфига dnsmasq
sudo nano /etc/dnsmasq.conf
Добавьте:
port=5353 # слушать на 5353 вместо 53
Настройка systemd-resolved или клиентов на использование dnsmasq
Теперь клиенты должны явно указывать dnsmasq как DNS-сервер с портом:
# Пример для NetworkManager (если используется)
nmcli con mod "Имя-подключения" ipv4.dns "192.168.1.1:5353"
Или вручную в /etc/resolv.conf:
nameserver 192.168.1.1:5353
(Но такой подход менее удобен, лучше освободить порт 53.)
Проверка работы DNS
После настройки проверьте:
dig google.com @localhost -p 5353 # если dnsmasq на 5353
nslookup google.com 192.168.1.1
Вывод
Лучший вариант — отключить systemd-resolved (если он не нужен) или перенастроить его, чтобы освободить порт 53. Если это невозможно, можно запустить dnsmasq на другом порте, но это менее удобно.
Если остались проблемы, проверьте логи:
journalctl -u dnsmasq -f