В локальной сети компьютеры обращаются друг к другу по 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» при запуске BIND | BIND пытается слушать на IPv6, а он отключён | В опциях добавьте listen-on-v6 { none; }; |
| Не удаётся разрешить внешние имена | Не настроены forwarders или нет выхода в интернет | Проверьте forwarders в конфиге и сеть сервера |
| Открытый резолвер (сервер используется в DDoS) | Не ограничена рекурсия | Ограничьте allow-recursion и allow-query своей подсетью |
BIND — мощный и гибкий DNS-сервер, который может работать как в роли локального резолвера для офисной сети, так и обслуживать собственные домены. Настроив его, вы получите централизованное управление именами, избавитесь от файлов hosts и ускорите работу интернета благодаря кэшированию. При правильной настройке безопасности BIND будет надёжно работать годами.







