Настройка BIND DNS сервера

dns DNS Server Documentation

Развертывание локального сервера DNS (BIND 9)

Полное руководство по настройке прямых и обратных зон для локальной инфраструктуры.

download 1. Установка и выдача прав

Установим основной пакет BIND и набор полезных утилит (например, nslookup, dig) из стандартных репозиториев:

apt-get update && apt-get install -y bind bind-utils

content_copy

info Сетевые привилегии (Linux Capabilities): В современных дистрибутивах для прослушивания портов ниже 1024 требуются особые права. Чтобы служба DNS смогла привязаться к стандартному порту 53 без работы под root, включим специальную привилегию CAP_NET_BIND_SERVICE.

control bind-caps enabled

content_copy

settings 2. Глобальные настройки (options.conf)

Перейдём в рабочую директорию BIND и приступим к редактированию главного файла настроек:

cd /etc/bind/
vim options.conf

content_copy

Добавьте или измените следующие параметры, чтобы разрешить серверу обрабатывать запросы локальной сети и пересылать неизвестные адреса во внешнюю сеть (интернет):

// Слушать запросы на всех интерфейсах маршрутизатора
listen-on { any; };

// Разрешить отправку запросов от любых клиентов
allow-query { any; };

// Если наш сервер не знает домен, переслать запрос вышестоящему серверу
forward first;

// IP-адрес вышестоящего DNS (например, публичный DNS-сервер или провайдер)
forwarders { IP_адрес_пересылки; };

// Отключение строгой проверки подписей DNSSEC (может вызывать проблемы в закрытых сетях)
dnssec-validation no;

// Частота опроса новых сетевых интерфейсов (в минутах)
interface-interval 1;

// Отключение кэширования для ускорения обновления записей при отладке
max-cache-ttl 0;
max-ncache-ttl 0;
max-cache-size 32k;

content_copy

add_location_alt 3. Регистрация локальных зон

Теперь укажем серверу, за какие домены он отвечает. Откройте файл описания локальных зон:

vim local.conf

content_copy

Добавьте прямую зону (преобразует имена в IP-адреса):

zone "ваш_домен" {
    type master;
    file "ваш_домен";
};

content_copy

Добавьте обратную зону (преобразует IP-адреса обратно в имена). Имя обратной зоны строится из первых трёх октетов вашей подсети, записанных задом наперед. Например, для сети 192.168.1.0/24 зона будет называться 1.168.192.in-addr.arpa:

zone "ваша_подсеть_в_обратном_порядке.in-addr.arpa" {
    type master;
    file "ваш_домен.rev";
};

content_copy

Создадим файлы самих зон, скопировав стандартные шаблоны:

cp zone/localhost zone/ваш_домен
cp zone/127.in-addr.arpa zone/ваш_домен.rev

content_copy

list_alt 4. Заполнение записей прямой зоны

Откройте созданный файл прямой зоны (vim zone/ваш_домен) и приведите его к следующему виду:

$TTL    1D
; Запись SOA содержит имя главного DNS сервера и email администратора (с точкой вместо @)
@       IN      SOA     имя_днс_сервера.ваш_домен. root.ваш_домен. (
        2026010100      ; Serial (рекомендуется формат ГГГГММДДXX)
        12H             ; Refresh
        1H              ; Retry
        1W              ; Expire
        1H )            ; ncache

; Указание Nameserver (NS)
        IN      NS      имя_днс_сервера.ваш_домен.

; A-запись для самого домена
@       IN      A       IP_адрес_днс_сервера

; Обязательная запись для самого DNS-сервера
имя_днс_сервера IN      A       IP_адрес_днс_сервера

; ПРИМЕР: Добавление произвольных узлов инфраструктуры
web-server      IN      A       192.168.1.50
db-server       IN      A       192.168.1.51

content_copy

swap_horiz 5. Заполнение записей обратной зоны

Аналогично заполним обратную зону (vim zone/ваш_домен.rev). Здесь вместо A-записей используются PTR-записи (Pointer), которые указывают только последний октет IP-адреса:

$TTL    1D
@       IN      SOA     имя_днс_сервера.ваш_домен. root.ваш_домен. (
        2026010100      ; Serial
        12H             ; Refresh
        1H              ; Retry
        1W              ; Expire
        1H )            ; ncache

        IN      NS      имя_днс_сервера.ваш_домен.

; Запись PTR для самого DNS-сервера (левая часть — последний октет IP)
последний_октет_сервера IN      PTR     имя_днс_сервера.ваш_домен.

; ПРИМЕР: Добавление произвольных узлов инфраструктуры
50                      IN      PTR     web-server.ваш_домен.
51                      IN      PTR     db-server.ваш_домен.

content_copy

play_circle 6. Права доступа и запуск

Вернитесь в корневую директорию пользователя. Необходимо выдать сервисному аккаунту named права на чтение файлов конфигурации, которые мы только что создали:

cd ~
chown -R :named /var/lib/bind/*
chmod -R 777 /var/lib/bind/*

content_copy

warning Примечание безопасности: Использование прав 777 является небезопасным для продакшен-систем, так как разрешает всем модифицировать файлы зон. В рамках данной конфигурации это используется исключительно для устранения проблем с доступом на этапе обучения/отладки.

Включаем автозапуск и стартуем сервис BIND:

systemctl enable --now bind

content_copy

check_circle 7. Тестирование и клиенты

Сначала убедимся, что DNS отвечает локально на самом сервере:

nslookup узел_1 127.0.0.1

content_copy

Если всё успешно, переходите к настройке клиентских машин:

  • На всех узлах сети замените внешний DNS-сервер (например, 8.8.8.8) на IP-адрес вашего нового локального DNS-сервера (IP_адрес_днс_сервера).
  • Перезагрузите клиентские машины или перезапустите сетевые интерфейсы, чтобы сбросить старый DNS-кэш.

Проверьте связность по доменному имени с любой клиентской машины:

ping узел_1

content_copy