Logo
  • ГЛАВНАЯ
  • ОБО МНЕ
  • СЕРТИФИКАТЫ
nocip.ssh@mail.ru
Главная  >  Linux

Настройка DNS сервера bind для локальной сети


Создана 25.03.2026
Отредактирована 20.05.2026

Как правильно выбрать домен для локального использования?

- Можно ли использовать реальный домен в локальной сети?
Отличный вопрос! Например, nocip.ru — это реальный домен, и использовать его для локальной сети неправильно и опасно. Давайте разберем, как правильно выбирать доменные имена для локального использования.

Почему нельзя использовать реальные домены локально?

Проблемы с использованием nocip.ru:
  1. Конфликт с глобальным DNS: Если nocip.ru существует в интернете, ваши локальные запросы могут уйти в интернет или вызвать путаницу;
  2. SSL-сертификаты: Браузеры будут пытаться проверить реальные сертификаты;
  3. Утечка запросов: Конфиденциальная информация о вашей сети может утечь наружу;
  4. Непредсказуемое поведение: Некоторые приложения могут работать некорректно.

Правильные варианты для локальных доменов

  • для домашней сети: 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
В нашем примере мы будем использовать домен corp.local , на рисунке 1 представлена локальная сеть для малого офиса, с двумя DNS-серверами (ns1.corp.local и ns2.corp.local).
Рис. 1. Локальная сеть

Итоговая структура

# Текст 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, которые необходимы для тестирования.

Файлы конфигурации, которые нужно отредактировать

  1. named.conf.options (основные опции)
  2. named.conf.local (определение зон)
  3. db.corp.local (прямая зона для corp.local)
  4. db.10.20.20 (обратная зона для подсети 10.20.20.0/24)
  5. db.10.40 (обратная зона для подсети 10.40.0.0/24)
  6. db.192.168.20 (обратная зона для подсети 192.168.20.0/24)

Шаг 2: Основные опции

Перейдите в директорию bind и посмотрите, находящиеся в ней файлы

cd /etc/bind/ && ls -l

Отредактируйте файл named.conf.options и приведите его к виду

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; };

В данном файле добавлены DNS сервера google 8.8.8.8 и 8.8.4.4, если локальный DNS сервер не может сопоставить найти доменное имя у себя, он запрашивает у вышестоящих DNS серверов.
Также были указаны подсети 10.20.20.0/24, 10.40.0.0/24 и 192.168.20.0/24 для доступа с запросами к DNS серверам. Если нужно открыть доступ для всех, то нужно добавить запись any;

Шаг 3: Определение зон

Далее отредактируем файл named.conf.local, этот файл отвечает за определение зон (зона бывает прямая и обратная)

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

// На 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

Создайте директорию zones

sudo mkdir -p /etc/bind/zones

Создайте файл db.corp.local

sudo cp db.local /etc/bind/zones/db.corp.local cd zones/

Отредактируйте файл named.corp.local и приведите его к виду

$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.corp.local db.10.20.20

admin@ns1:/etc/bind/zones$ sudo nano 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.corp.local db.10.40

admin@ns1:/etc/bind/zones$ sudo nano 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.

admin@ns1:/etc/bind/zones$ sudo cp db.corp.local db.192.168.20

admin@ns1:/etc/bind/zones$ sudo nano 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.

Шаг 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 named.service # Включите автоматический запуск службы, если сервер/система будет перезагружен(а), # systemd будет знаеть, что эту службу нужно стартовать. sudo systemctl enable named.service # Проверьте, что служба работает sudo systemctl status named.service --no-pager

* чтобы узнать, включен ли автозапуск службы, используйте команду sudo systemctl is-enabled named
Вывод: enabled (включен) или disabled (выключен)

Рассмотрим более подробно SOA-запись:

$TTL 3h @ IN SOA ns1.corp.local. admin.corp.local. ( 2 ; Serial 3h ; Refresh 1h ; Retry 1w ; Expire 1h ) ; Negative Cache TTL

$TTL 3h

Default TTL (Time To Live)
  • Устанавливает время жизни записей по умолчанию — 3 часа.
  • Это значит: если у конкретной записи нет своего TTL, другие DNS-серверы и клиенты будут хранить её в кэше 3 часа.

@ IN SOA ...

Символ @ означает «текущая зона» (то есть corp.local).
Класс: IN (Internet).
Тип записи: SOA (Start of Authority — начало полномочий). Это самая главная запись в зоне. Она указывает, какой DNS-сервер является основным для этой зоны и содержит параметры репликации (синхронизации).

ns1.corp.local. admin.corp.local.

  • ns1.corp.local. — Primary Master сервер. Здесь хранится эталонная версия зоны.
  • admin.corp.local. — Электронная почта администратора. admin.corp.local на самом деле значит admin@corp.local (точка заменяет символ @, чтобы не путать с символом зоны).

Числа в скобках (Серийный номер и таймеры)

2 ; Serial
  • Серийный номер зоны. При каждом изменении зоны (добавлении новых компьютеров, смене IP) его нужно увеличивать (например, на 1). Вторичные DNS-серверы (slave) смотрят на этот номер, чтобы понять, изменилась ли зона и надо ли её перекачивать.
3h ; Refresh (Обновление)
  • Slave-серверы должны проверять мастер каждые 3 часа, не изменился ли серийный номер.
1h ; Retry (Повтор)
  • Если Slave не смог связаться с мастером (например, сеть упала), он будет повторять попытку каждый час.
1w ; Expire (Истечение)
  • Если Slave не может связаться с мастером в течение 1 недели, он перестаёт отвечать на запросы по этой зоне (зона истекает).
1h ; Negative Cache TTL
  • Если клиент запросил имя, которое не существует (NXDOMAIN), разрешается кэшировать отрицательный ответ на 1 час.

Настройка Slave-сервера (ns2) — 10.20.20.5

Шаг 1: Установка BIND9

sudo apt update sudo apt install bind9 bind9utils dnsutils -y

Файлы конфигурации, которые нужно отредактировать

  1. named.conf.options (основные опции)
  2. named.conf.local (определение зон)

Шаг 2: Основные опции

Отредактируйте файл named.conf.options и приведите его к виду

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)

Далее отредактируем файл named.conf.local, этот файл отвечает за определение зон (зона бывает прямая и обратная)

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

// На 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; }; };

Шаг 4:  Настройка прав

Важно: Slave хранит файлы зон в /var/lib/bind/, а не в /etc/bind/zones/

# Создаем директорию для кэша (если её нет) sudo mkdir -p /var/lib/bind sudo chown bind:bind /var/lib/bind

Шаг 5:  Проверка и запуск

# Проверка конфигурации sudo named-checkconf

# Перезапустите службу для применения изменений, после изменения конфигурационных файлов sudo systemctl restart named.service # Включите автоматический запуск службы, если сервер/система будет перезагружен(а), # systemd будет знаеть, что эту службу нужно стартовать. sudo systemctl enable named.service # Проверьте, что служба работает sudo systemctl status named.service --no-pager

Проверьте, что файлы зон были скопированы с ns1.corp.local в сервер ns2.corp.local

ls /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 (авто)

Настройка DNS, используя systemd-resolved (рекомендую для Ubuntu 18.04+)

На серверах srv1.corp.local и srv2.corp.local установлена ОС Ubuntu 24.04.4, используем стандартный способ для настройки DNS, так как большинство современных Ubuntu используют systemd-resolved по умолчанию.

# 1. Открываем конфиг sudo nano /etc/systemd/resolved.conf # 2. Приводим секцию [Resolve] к такому виду (уберите # перед строками) [Resolve] DNS=10.20.20.4 10.20.20.5 Domains=corp.local DNSSEC=no # 3. Сохраняем и перезапускаем сервис sudo systemctl restart systemd-resolved.service # 4. Проверяем, что DNS применились resolvectl status

В выводе resolvectl status вы должны увидеть ваши DNS-серверы в секции Global.
Если вывод команды показывает 127.0.0.53, это нормально — так и должно быть при использовании systemd-resolved.

Утилиты dig, host для проверки прямой и обратной зоны

Проверка прямой зоны (имя → IP)

# === DIG (рекомендую) === # Краткий вывод dig @10.20.20.4 srv1.corp.local +short # Вывод: 10.40.0.4 # Полный вывод dig @10.20.20.4 srv1.corp.local # Вывод: статус, флаги, секция ответа и т.д. # === HOST (для быстрой проверки) === host srv1.corp.local 10.20.20.4 # Вывод: srv1.corp.local has address 10.40.0.4

Проверка обратной зоны (IP → имя)

# === DIG === dig @10.20.20.4 -x 10.40.0.4 +short # Вывод: srv1.corp.local. # === HOST === host 10.30.0.4 10.20.20.4 # Вывод: 4.0.40.10.in-addr.arpa domain name pointer srv1.corp.local.

Проверка NS записей

# DIG (полный контроль) dig @10.20.20.4 corp.local NS +short # HOST (быстро) host -t NS corp.local 10.20.20.4

Проверка SOA (Start of Authority — начало полномочий) записи

# DIG dig @10.20.20.4 corp.local SOA # HOST host -t SOA corp.local 10.20.20.4

Какая утилита лучше для проверки DNS: host, nslookup или dig?

Короткий ответ: для скриптов и серьезной диагностики — dig, для быстрых простых проверок — host, nslookup лучше не использовать (устаревшая).
Сравнение утилит
Характеристика
dig
host
nslookup
Мощность
⭐⭐⭐⭐⭐
⭐⭐⭐
⭐⭐
Простота
⭐⭐⭐
⭐⭐⭐⭐⭐
⭐⭐⭐
Для скриптов
✅ Лучший
✅ Хорош
❌ Неудобен
Контроль над запросом
Полный
Ограниченный
Ограниченный
Формат вывода
Парсится легко
Для человека
Запутанный
Статус
Актуальный
Актуальный
Устаревший
Мой главный совет: Освойте dig, потратьте 15 минут на изучение его ключей (+short, +answer, +authority), и вы никогда не захотите использовать другие утилиты для серьёзной работы с DNS.

🔁

Приветствуем всех любителей ретро-игровой индустрии на канале RetraR
Сувенирная и брендированная продукция с персонажами из любимых игр.
RetraR — Компьютерные игры для Nintendo Game Boy
RetraR - Computer games for Nintendo Game Boy 🌌🛸👽👾☄️🤖
RetraR - 任天堂ゲームボーイ用コンピュータゲーム 🎮🕹️👾

RetraR в VK
Канал - RetraR в Telegram
Канал - RetraR в Telegram

Оформить заказ

Нажимая на кнопку, вы даете согласие на обработку персональных данных

Спасибо за заказ

Ваш заказ принят в обработку. 

Мы свяжемся с вами в ближайшее время.