В этой статье я расскажу как установить и настроить DNS-сервер для небольшой локальной сети. Потребность в своем DNS-сервере возникла из-за необходимости одновременно отправлять запросы на два различных DNS-сервера. Первый будет обслуживает ресурсы внутри локальной сети, а второй доменные имена в интернете.
С помощью PDNSD мы сможем одновременно отправлять запросы на два различных DNSсервера. Запросы, которые не относятся к внутрисетевым ресурсам будут переадресовываться на Google DNS.
Для локального DNS-сервера, мы будем использовать быстрый и легкий в настройке PDNSD. Кроме простого кэширования, умеет разделять запросы по условию, одновременно отправлять их на несколько DNS-серверов и отдавать клиенту первый вернувшийся ответ.
Установка и настройка PDNSD
Установим PDNSD командой в терминале:
apt-get install pdnsd
В процессе необходимо будет выбрать один из шаблонов настроек, выбираем пункт «Manual».
Открываем файл:
nano /etc/default/pdnsd
Настраиваем параметры запуска PDNSD, для этого нужно изменить значение параметра START_DAEMON
как указано в примере ниже:
START_DAEMON=yes
Открываем конфиг PDNSD:
nano /etc/pdnsd.conf
Добавим в него следующие параметры:
global { perm_cache=10240; // Максимальный размер кэша в килобайтах cache_dir="/var/cache/pdnsd"; // Директория кэша записей DNS server_ip = 0.0.0.0; // Слушать запросы на всех сетевых интерфейсах status_ctl = on; // Разрешить утилиты pdnsd-ctl для управления кэшем min_ttl=15m; // Минимальное время жизни записи в кэше max_ttl=1w; // Максимальное время жизни записи в кэше timeout=10; // Тайм-аут DNS-запроса par_queries=2; // Количество одновременно опрашиваемых DNS-серверов } // DNS-отвечающий за локальные ресурсы server { label = ".localdomain"; // Метка секции server ip = 10.0.1.2, 10.0.1.3; // Адреса локальных DNS timeout = 10; // Тайм-аут DNS-запроса uptest = query; // Метод проверки доступности сервера interval = 10m; // Интервал для теста доступности сервера ping_timeout = 300; // Тайм-аут для теста ping } // Google DNS server { label = "recurse"; root_server=on; randomize_servers = on; ip = 8.8.8.8, 8.8.8.4, 77.88.8.8, 77.88.8.1; // Метка секции server timeout = 10; // Тайм-аут DNS-запроса uptest = query; // Метод проверки доступности сервера interval = 10m; // Интервал для теста доступности сервера ping_timeout = 300; // Тайм-аут для теста ping exclude = .localdomain; // Исключить запросы по доменному имени policy = included; // Включающие/исключающие списки для секции server preset = off; // Состояние удаленного сервера после запуска }
Чтобы PDNSD слушал запросы на всех интерфейсах, необходимо установить значение параметра server_ip
равным 0.0.0.0
. Как вариант можно указать имя или ip отдельного интерфейса.
Управление сервером PDNSD
Проверить статус DNS-сервера выполните команду:
pdnsd-ctl status
Чтобы очистить кэш PDNSD:
pdnsd-ctl empty-cache
Открыть доступ к DNS в iptables
Добавьте в iptables правила:
# Открываем DNS для всех пользователей iptables -A INPUT -p udp --dport 53 -j ACCEPT iptables -A INPUT -p tcp --dport 53 -j ACCEPT # Ограничиваем доступ по MAC iptables -A INPUT -i eth0 -m mac --mac-source 00:00:00:00:00:00 -j ACCEPT