Настройка DNS сервера bind для локальной сети
Отредактирована 27.03.2026
Как правильно выбрать домен для локального использования?
Почему нельзя использовать реальные домены локально?
- Конфликт с глобальным DNS: Если nocip.ru существует в интернете, ваши локальные запросы могут уйти в интернет или вызвать путаницу;
- SSL-сертификаты: Браузеры будут пытаться проверить реальные сертификаты;
- Утечка запросов: Конфиденциальная информация о вашей сети может утечь наружу;
- Непредсказуемое поведение: Некоторые приложения могут работать некорректно.
Правильные варианты для локальных доменов
- для домашней сети: home.arpa , local.lan , myhome.internal;
- для малого офиса: office.internal , corp.local , company.private
- для предприятия с реальным доменом, например для домена nocip.ru: internal.nocip.ru , corp.nocip.ru , lan.nocip.ru
- для лаборатории/тестов: lab.internal , test.local , dev.private
Итоговая структура
# Текст DNS-серверы: 10.20.20.0/24 ├── ns1 (10.20.20.4) // Основной DNS (master) └── ns2 (10.20.20.5) // Резервный DNS (slave) Сервера: 192.168.20.0/24 └── srv1 (192.168.20.4) // Физический сервер 1 Сервера: 10.40.0.0/24 └── srv2 (10.40.0.4) // Физический сервер 2
Настройка Master-сервера (ns1) — 10.20.20.4
Шаг 1: Установка BIND9
sudo apt update sudo apt install bind9 bind9utils dnsutils -y
- bind9 — это сам DNS-сервер.
- bind9utils — содержит полезные утилиты для проверки конфигурации, такие как named-checkconf.
- dnsutils — предоставляет инструменты для диагностики, например, dig и nslookup, которые необходимы для тестирования.
Файлы конфигурации, которые нужно отредактировать
- named.conf.options (основные опции)
- named.conf.local (определение зон)
- db.corp.local (прямая зона для corp.local)
- db.10.40 (обратная зона для подсети 10.40.0.0/24)
- db.192.168.20 (обратная зона для подсети 192.168.20.0/24)
Шаг 2: Основные опции
cd /etc/bind/ && ls
sudo nano /etc/bind/named.conf.options
options { directory "/var/cache/bind"; listen-on { any; }; allow-query { 127.0.0.1; 10.20.20.0/24; 10.40.0.0/24; 192.168.20.0/24; // any; такой директивой можно дать доступ всем хостам к локальным DNS-серверам }; allow-recursion { 127.0.0.1; 10.20.20.0/24; 10.40.0.0/24; 192.168.20.0/24; }; forwarders { 8.8.8.8; 8.8.4.4; }; dnssec-validation auto; };
Шаг 3: Определение зон
// На ns1.corp.local (10.20.20.4) zone "corp.local" { type master; file "/etc/bind/zones/db.corp.local"; // Файл с записями A, MX, CNAME и т.д. allow-transfer { 10.20.20.5; }; // Разрешаем трансфер на ns2 also-notify { 10.20.20.5; }; // Уведомляем ns2 об изменениях }; zone "20.20.10.in-addr.arpa" { type master; file "/etc/bind/zones/db.10.20.20"; // Файл с PTR-записями для reverse DNS, подсеть 10.20.20/24 allow-transfer { 10.20.20.5; }; also-notify { 10.20.20.5; }; }; zone "40.10.in-addr.arpa" { type master; file "/etc/bind/zones/db.10.40"; // Файл с PTR-записями для reverse DNS, подсеть 10.40.0.0/24 allow-transfer { 10.20.20.5; }; also-notify { 10.20.20.5; }; }; zone "20.168.192.in-addr.arpa" { type master; file "/etc/bind/zones/db.192.168.20"; // Файл с PTR-записями для reverse DNS, подсеть 192.168.20.0/24 allow-transfer { 10.20.20.5; }; also-notify { 10.20.20.5; }; };
Шаг 4: Прямая зона для corp.local
sudo mkdir -p /etc/bind/zones
sudo cp db.local /etc/bind/zones/db.corp.local cd zones/
$TTL 3h @ IN SOA ns1.corp.local. admin.corp.local. ( 2 ; Serial 3h ; Refresh 1h ; Retry 1w ; Expire 1h ) ; Negative Cache TTL ; NS record @ IN NS ns1.corp.local. @ IN NS ns2.corp.local. ; DNS servers ns1 IN A 10.20.20.4 ns2 IN A 10.20.20.5 ; Servers srv1 IN A 192.168.20.4 srv2 IN A 10.40.0.4
Шаг 5: Обратные зоны
admin@ns1:/etc/bind/zones$ sudo cp db.local db.10.20.20
// Обратная зона для DNS (10.20.20.0/24) $TTL 3h @ IN SOA ns1.corp.local. admin.corp.local. ( 2 ; Serial 3h ; Refresh 1h ; Retry 1w ; Expire 1h ) ; Negative Cache TTL IN NS ns1.corp.local. IN NS ns2.corp.local. 4 IN PTR ns1.corp.local. 5 IN PTR ns2.corp.local.
admin@ns1:/etc/bind/zones$ sudo cp db.local db.192.168.20
// Обратная зона для серверов (192.168.20.0/24) $TTL 3h @ IN SOA ns1.corp.local. admin.corp.local. ( 2 ; Serial 3h ; Refresh 1h ; Retry 1w ; Expire 1h ) ; Negative Cache TTL IN NS ns1.corp.local. IN NS ns2.corp.local. 4 IN PTR srv1.corp.local.
admin@ns1:/etc/bind/zones$ sudo cp db.local db.10.40
// Обратная зона для серверов (10.40.0.0/24) $TTL 3h @ IN SOA ns1.corp.local. admin.corp.local. ( 2 ; Serial 3h ; Refresh 1h ; Retry 1w ; Expire 1h ) ; Negative Cache TTL IN NS ns1.corp.local. IN NS ns2.corp.local. 4.0 IN PTR srv2.corp.local.
Шаг 5: Проверка и запуск
# Проверка конфигурации sudo named-checkconf sudo named-checkzone corp.local /etc/bind/zones/db.corp.local sudo named-checkzone 20.20.10.in-addr.arpa /etc/bind/zones/db.10.20.20 sudo named-checkzone 40.10.in-addr.arpa /etc/bind/zones/db.10.40 sudo named-checkzone 20.168.192.in-addr.arpa /etc/bind/zones/db.192.168.20
# Запуск sudo systemctl restart bind9 sudo systemctl enable bind9 sudo systemctl status bind9 --no-pager
Настройка Slave-сервера (ns2) — 10.20.20.5
Шаг 1: Установка BIND9
sudo apt update sudo apt install bind9 bind9utils dnsutils -y
Файлы конфигурации, которые нужно отредактировать
- named.conf.options (основные опции)
- named.conf.local (определение зон)
Шаг 2: Основные опции
sudo nano /etc/bind/named.conf.options
options { directory "/var/cache/bind"; listen-on { any; }; allow-query { 127.0.0.1; 10.20.20.0/24; 10.40.0.0/24; 192.168.20.0/24; // any; такой директивой можно дать доступ всем хостам к локальным DNS-серверам }; allow-recursion { 127.0.0.1; 10.20.20.0/24; 10.40.0.0/24; 192.168.20.0/24; }; forwarders { 8.8.8.8; 8.8.4.4; }; dnssec-validation auto; };
Шаг 3: Определение зон (Slave)
// На ns2.corp.local (10.20.20.5) zone "corp.local" { type slave; file "/var/lib/bind/db.corp.local"; // Куда сохранять копии masters { 10.20.20.4; }; // Master-сервер }; zone "20.20.10.in-addr.arpa" { type slave; file "/var/lib/bind/db.10.20.20"; masters { 10.20.20.4; }; }; zone "40.10.in-addr.arpa" { type slave; file "/var/lib/bind/db.10.40"; masters { 10.20.20.4; }; }; zone "20.168.192.in-addr.arpa" { type slave; file "/var/lib/bind/db.192.168.20"; masters { 10.20.20.4; }; };
/var/lib/bind/, а не в /etc/bind/zones/. Шаг 4: Настройка прав
# Создаем директорию для кэша (если её нет) sudo mkdir -p /var/lib/bind sudo chown bind:bind /var/lib/bind
Итоговая структура
# Текст Master (ns1) 10.20.20.4 Slave (ns2) 10.20.20.5 ├── named.conf.local ├── named.conf.local │ ├── type master │ ├── type slave │ ├── allow-transfer { ns2 } │ └── masters { ns1 } │ └── also-notify { ns2 } │ └── /etc/bind/zones/ └── /var/lib/bind/ ├── db.corp.local (ручное) ├── db.corp.local (авто) ├── db.10.20.20 (ручное) ├── db.10.20.20 (авто) ├── db.10.40 (ручное) ├── db.10.40 (авто) └── db.192.168.20 (ручное) └── db.192.168.20 (авто)