В локальной сети компьютеры обращаются друг к другу по 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 будет надёжно работать годами.