Настройка DNS-сервера в Linux (BIND)

В локальной сети компьютеры обращаются друг к другу по IP-адресам. Это нормально, пока в сети 5-10 машин. Но когда серверов и рабочих станций становится больше, запомнить, какой IP у файлового сервера, а какой — у контроллера домена, становится сложно. К тому же при смене адресации (например, переходе на новую подсеть) придётся переписывать настройки на всех клиентах вручную.

Можно, конечно, прописывать имена в файлах hosts на каждом компьютере, но это неудобно и не масштабируется. Нужна централизованная система, которая будет преобразовывать имена в IP-адреса и обратно, обслуживать запросы клиентов и работать надёжно.

Что такое DNS

DNS (Domain Name System) это стандартный механизм разрешения имён в IP-адреса. В Linux самой популярной реализацией DNS-сервера является BIND (Berkeley Internet Name Domain). BIND позволяет:

  • обслуживать собственную зону (например, company.local) с записями для серверов и компьютеров;
  • выполнять рекурсивные запросы к внешним DNS-серверам для выхода в интернет;
  • работать как кэширующий DNS для ускорения повторных запросов;
  • разграничивать доступ к зонам (внутренние и внешние запросы).

Мы настроим BIND на Ubuntu Server (инструкции подойдут и для Debian, CentOS/RHEL с небольшими изменениями) в роли кэширующего DNS-сервера с поддержкой локальной зоны для офисной сети. Это позволит клиентам обращаться к серверам по именам, а также ускорит выход в интернет за счёт кэширования.

Пошаговая инструкция

Шаг 1. Установка BIND

Обновите систему и установите BIND:

Ubuntu/Debian:

sudo apt update
sudo apt install bind9 -y

CentOS/RHEL:

sudo yum install bind bind-utils -y

После установки служба BIND (named) запустится автоматически. Проверьте статус:

sudo systemctl status named   # Ubuntu: systemctl status bind9

Шаг 2. Базовая настройка BIND

Основной конфигурационный файл BIND /etc/bind/named.conf (Ubuntu) или /etc/named.conf (CentOS). В Ubuntu также есть отдельные файлы для опций и зон.

Сделаем резервную копию:

sudo cp /etc/bind/named.conf /etc/bind/named.conf.bak

Отредактируем файл. Для начала настроим простой кэширующий DNS-сервер, который будет перенаправлять запросы на внешние DNS (например, 8.8.8.8).

В Ubuntu файл /etc/bind/named.conf.options:

sudo nano /etc/bind/named.conf.options

Приведём к виду:

options {
    directory "/var/cache/bind";
    recursion yes;                 # разрешить рекурсивные запросы (для клиентов в локальной сети)
    allow-query { any; };          # разрешить запросы от любых клиентов (можно ограничить)
    allow-query-cache { any; };
    forwarders {
        8.8.8.8;                  # внешний DNS для нелокальных зон
        8.8.4.4;
    };
    dnssec-validation auto;
    listen-on { any; };            # слушать на всех интерфейсах
    listen-on-v6 { any; };
};

В CentOS настройки прописываются в /etc/named.conf в секции options.

Проверьте синтаксис:

sudo named-checkconf

Шаг 3. Настройка локальной зоны

Создадим зону для домена company.local (или любого другого имени, не используемого в интернете).

В Ubuntu создадим файл зоны /etc/bind/db.company.local:

sudo nano /etc/bind/db.company.local

Содержимое (пример):

$TTL    604800
@       IN      SOA     ns.company.local. admin.company.local. (
                  2025032101   ; Serial (обязательно увеличивать при изменениях)
                  604800       ; Refresh
                  86400        ; Retry
                  2419200      ; Expire
                  604800 )     ; Negative Cache TTL
;
@       IN      NS      ns.company.local.
@       IN      A       192.168.1.10
ns      IN      A       192.168.1.10
www     IN      A       192.168.1.20
files   IN      A       192.168.1.30

Пояснения:

  • SOA -начало зоны, указывает главный DNS-сервер (ns.company.local) и почту администратора (адрес с точкой вместо @).
  • Serial — номер версии зоны (обычно YYYYMMDDNN). При каждом изменении файла нужно увеличивать.
  • NS -запись, указывающая на DNS-сервер этой зоны.
  • A — запись, связывающая имя с IP-адресом.

Теперь подключим эту зону к конфигурации. В Ubuntu добавьте в файл /etc/bind/named.conf.local:

sudo nano /etc/bind/named.conf.local

Добавьте:

zone "company.local" {
    type master;
    file "/etc/bind/db.company.local";
};

В CentOS аналогичная секция добавляется прямо в /etc/named.conf.

Проверьте конфигурацию:

sudo named-checkconf
sudo named-checkzone company.local /etc/bind/db.company.local

Если проверка прошла успешно, перезапустите BIND:

sudo systemctl restart bind9   # Ubuntu
sudo systemctl restart named   # CentOS

Шаг 4. Настройка обратной зоны (PTR-записи)

Обратные записи позволяют по IP-адресу узнать имя хоста. Это полезно для некоторых сервисов и диагностики.

Создадим зону для подсети 192.168.1.0/24. В Ubuntu файл /etc/bind/db.192.168.1

sudo nano /etc/bind/db.192.168.1

Содержимое:

$TTL    604800
@       IN      SOA     ns.company.local. admin.company.local. (
                  2025032101
                  604800
                  86400
                  2419200
                  604800 )
;
@       IN      NS      ns.company.local.
10      IN      PTR     ns.company.local.
20      IN      PTR     www.company.local.
30      IN      PTR     files.company.local.

Обратите внимание: имя зоны 1.168.192.in-addr.arpa (адрес записывается задом наперёд). Добавим её в named.conf.local:

zone "1.168.192.in-addr.arpa" {
    type master;
    file "/etc/bind/db.192.168.1";
};

Проверьте:

sudo named-checkzone 1.168.192.in-addr.arpa /etc/bind/db.192.168.1
sudo systemctl restart bind9

Шаг 5. Настройка клиентов

Чтобы клиенты использовали ваш DNS-сервер, укажите его IP (например, 192.168.1.10) в настройках DHCP или вручную на каждом клиенте.

На Windows-клиенте:

  • Откройте ПараметрыСеть и ИнтернетEthernetИзменить параметры адаптера.
  • Выберите адаптер, правой кнопкой, СвойстваIP версии 4Свойства.
  • Укажите Использовать следующие адреса DNS-серверов и введите IP вашего DNS-сервера.

На Linux-клиенте (временно):

sudo echo "nameserver 192.168.1.10" > /etc/resolv.conf

Постоянная настройка зависит от дистрибутива (например, через Netplan или systemd-resolved).

После настройки проверьте, что DNS работает:

nslookup www.company.local

Должен вернуться IP 192.168.1.20.

Шаг 6. Ограничение доступа к DNS

По умолчанию BIND отвечает на запросы от любых клиентов. Если сервер выходит в интернет, его могут использовать для DDoS-атак (открытый резолвер). Чтобы ограничить доступ только к локальной сети, измените параметр allow-query в named.conf.options:

allow-query { 192.168.1.0/24; localhost; };

Разрешить рекурсию только для локальной сети:

allow-recursion { 192.168.1.0/24; localhost; };

После изменений перезапустите BIND.

Шаг 7. Включение логов (для отладки)

Если нужно отслеживать запросы, можно настроить логирование. Добавьте в named.conf (вне секции options):

logging {
    channel query_log {
        file "/var/log/named/query.log" versions 3 size 10m;
        severity info;
        print-time yes;
    };
    category queries { query_log; };
};

Создайте папку для логов и дайте права:

sudo mkdir /var/log/named
sudo chown bind:bind /var/log/named   # Ubuntu: пользователь bind

Перезапустите BIND.

Шаг 8. Проверка и мониторинг

Основные команды для диагностики BIND:

  • sudo systemctl status bind9 — статус службы.
  • sudo journalctl -u bind9 -f — просмотр логов в реальном времени.
  • nslookup или dig для проверки резолвинга: dig @127.0.0.1 www.company.local dig @127.0.0.1 google.com

Возможные проблемы и их решение

ПроблемаПричинаРешение
Клиент не разрешает локальные именаНеправильно указан DNS-сервер или зона не настроенаПроверьте настройки клиента, выполните dig @192.168.1.10 www.company.local
Ошибка «network unreachable» при запуске BINDBIND пытается слушать на IPv6, а он отключёнВ опциях добавьте listen-on-v6 { none; };
Не удаётся разрешить внешние именаНе настроены forwarders или нет выхода в интернетПроверьте forwarders в конфиге и сеть сервера
Открытый резолвер (сервер используется в DDoS)Не ограничена рекурсияОграничьте allow-recursion и allow-query своей подсетью

BIND — мощный и гибкий DNS-сервер, который может работать как в роли локального резолвера для офисной сети, так и обслуживать собственные домены. Настроив его, вы получите централизованное управление именами, избавитесь от файлов hosts и ускорите работу интернета благодаря кэшированию. При правильной настройке безопасности BIND будет надёжно работать годами.

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest
0 комментариев
Популярные
Новые Старые

0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x
Menu