Настройка DNS-сервера PDNSD

Дата: 26.11.2015Метки: ,

В этой статье я расскажу как установить и настроить 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