Добавить в корзинуПозвонить
Найти в Дзене

Настройка 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 серверам для выхода в интернет. Работать ка

В локальной сети компьютеры обращаются друг к другу по 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 с небольшими изменениями. BIND будет работать в роли кэширующего DNS сервера с поддержкой локальной зоны для офисной сети. Это позволит клиентам обращаться к серверам по именам, а также ускорит выход в интернет за счёт кэширования.

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

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

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

Ubuntu, Debian.

text

sudo apt update
sudo apt install bind9 -y

CentOS, RHEL.

text

sudo yum install bind bind-utils -y

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

text

sudo systemctl status named # Ubuntu: systemctl status bind9

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

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

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

text

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

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

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

text

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

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

text

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.

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

text

sudo named-checkconf

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

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

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

text

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

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

text

$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.

text

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

Добавьте.

text

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

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

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

text

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

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

text

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.

text

sudo nano /etc/bind/db.192.168.1

Содержимое.

text

$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.

text

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

Проверьте.

text

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 клиенте (временно).

text

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

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

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

text

nslookup www.company.local

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

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

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

text

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

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

text

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

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

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

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

text

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

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

text

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

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

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

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

text

sudo systemctl status bind9 # статус службы
sudo journalctl -u bind9 -f # просмотр логов в реальном времени

nslookup или dig для проверки резолвинга.

text

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 будет надёжно работать годами.

Настройка DNS-сервера в Linux (BIND) | Андрей Коровин | Сисадмин | IT-инженер