Хостинг SpaceWeb
Серверы Дизайн Сайты Безопасность Домены PHP Кейсы клиентов

Создание локального домена с помощью BIND9 в Ubuntu

Локальный домен – это собственное доменное пространство внутри закрытой сети, которое используется для удобного именования серверов, рабочих станций и сервисов без обращения к публичным DNS-зонам.

Вместо того чтобы запоминать сложные IP-адреса вроде 192.168.1.10, администраторы и пользователи могут использовать простые и понятные имена хостов – так сеть становится удобнее, прозрачнее и проще в управлении. Локальный домен не регистрируется в интернете – он работает только внутри вашей локальной или корпоративной сети.

В этом руководстве разберем, как новичку создать локальный домен в Ubuntu с помощью DNS-сервера BIND9.

Если вы хотите углубиться в тему, рекомендуем ознакомиться со статьей «Настройка DNS-сервера BIND».

Что такое BIND9

BIND9 – это один из самых распространенных DNS-серверов, который используется для управления доменными именами в локальных и публичных сетях. Он отвечает за преобразование доменных имен в IP-адреса и обратно, позволяя устройствам находить друг друга по понятным адресам вместо числовых значений.

BIND9 подходит как для небольших локальных доменов, так и для сложных корпоративных инфраструктур. Он поддерживает работу с прямыми и обратными зонами, кэширование DNS-запросов, а также может выступать в роли основного или вторичного DNS-сервера. За счет гибкой конфигурации администратор получает полный контроль над тем, как обрабатываются запросы внутри сети.

Требования

Для настройки локального DNS-сервера вам понадобится машина с установленной операционной системой Ubuntu 22.04 или 24.04. Это может быть физический сервер, виртуальная машина или облачный сервер. На этой машине вы установите BIND9 – программу для работы DNS-сервера – и настроите свой внутренний домен. Проверять, как все работает, тоже будете на этом же компьютере.

Если у вас нет под рукой подходящего оборудования, можно использовать виртуальный сервер. Например, сервер VPS от SpaceWeb – это хороший выбор для практики или тестовой настройки. Он быстро запускается, легко настраивается и подходит для обучения.

Установка BIND9

Установить BIND9 в Ubuntu очень просто – пакет есть в стандартных репозиториях, поэтому не нужно искать сторонние источники или собирать программу вручную. Перед установкой стоит обновить список доступных пакетов, чтобы система знала о последних версиях ПО:

sudo apt update

Обновив репозитории, установите сам DNS-сервер и дополнительные утилиты, которые пригодятся для диагностики и проверки работы домена:

sudo apt install bind9 bind9utils bind9-dnsutils -y

По завершении установки служба BIND9 автоматически добавится в автозагрузку и запускается. Проверить ее состояние можно командой:

systemctl status bind9

Если служба активна и работает без ошибок, значит DNS-сервер успешно установлен и готов к дальнейшей настройке. Он уже может обрабатывать DNS-запросы, но для работы локального домена потребуется создать собственные зоны и задать параметры конфигурации, к чему и перейдем в следующих разделах.

Создание локальной доменной зоны

В качестве примера возьмем домен lab.local, а DNS-сервер назовем dns1.
IP-адрес сервера в примерах: 192.168.50.10. Если у вас другой IP – замените его в файлах зоны.

Шаг 1. Проверка IP-адреса сервера

Сначала узнайте, какой IP-адрес назначен серверу (того, где установлен BIND9). Пропишите:

ip a

Или:

hostname -I

Допустим, у сервера IP 192.168.50.10 и подсеть 192.168.50.0/24.
Эти значения понадобятся для прямой и обратной зоны.

Шаг 2. Заполнение файла зоны

Файл /etc/bind/named.conf.local – это место, где перечисляются локальные зоны, которые обслуживает DNS-сервер.

Откройте файл любым редактором (например, nano):

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

Важно! Если файл уже содержит какие-то зоны (например, вы настраивали DNS раньше), не удаляйте их. Добавляйте новые блоки ниже существующих.

Добавьте в конец файла блок прямой зоны:

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

Где:

Теперь добавим обратную зону (Reverse DNS). Для подсети 192.168.50.0/24 обратная зона будет 50.168.192.in-addr.arpa.

Добавьте второй блок:

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

В итоге named.conf.local должен выглядеть примерно так:

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

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

Сохраните файл и выйдите.

Шаг 3. Создание файла прямой зоны

Чтобы не писать все с нуля, возьмите шаблон /etc/bind/db.local и создайте копию:

sudo cp /etc/bind/db.local /etc/bind/db.lab.local

Откройте новый файл:

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

Замените содержимое на:

;
; BIND data file for lab.local
;
$TTL 86400
@       IN      SOA     dns1.lab.local. admin.lab.local. (
                        2026012701 ; Serial
                        3600       ; Refresh
                        900        ; Retry
                        604800     ; Expire
                        86400 )    ; Negative Cache TTL
;
; NS – указываем DNS-сервер(а) зоны
@       IN      NS      dns1.lab.local.

; A-записи (имя -> IPv4)
dns1    IN      A       192.168.50.10
web1    IN      A       192.168.50.20

; по желанию можно назначить IP для самого домена (lab.local)
@       IN      A       192.168.50.10

Где:

Сохраните файл.

Шаг 4. Настройка обратной зоны

Обратная зона нужна, чтобы по IP можно было получить имя (PTR-запись). Это часто помогает в логах, диагностике, некоторых сервисах и при проверках.

Создайте файл на основе шаблона /etc/bind/db.127:

sudo cp /etc/bind/db.127 /etc/bind/db.192.168.50

Откройте его:

sudo nano /etc/bind/db.192.168.50

Замените содержимое на:

;
; BIND reverse data file for 192.168.50.0/24
;
$TTL 86400
@       IN      SOA     dns1.lab.local. admin.lab.local. (
                        2026012701 ; Serial
                        3600       ; Refresh
                        900        ; Retry
                        604800     ; Expire
                        86400 )    ; Negative Cache TTL
;
@       IN      NS      dns1.lab.local.

; PTR-записи (последний октет IP -> имя)
10      IN      PTR     dns1.lab.local.
20      IN      PTR     web1.lab.local.

Как читать PTR-записи, которые связывают последний октет IP-адреса с именем хоста:

Почему указывается только 10, 20? Потому что сама зона уже описывает сеть 192.168.50.0/24 (через 50.168.192.in-addr.arpa). Внутри остается лишь последний октет.

Сохраните файл.

Шаг 5. Проверка структуры файлов

После всех действий у вас должны появиться два файла зоны:

И оба должны быть прописаны в /etc/bind/named.conf.local.

Выполните команду:

ls -l /etc/bind/db.lab.local /etc/bind/db.192.168.50

В выводе команды должны отображаться оба файла без ошибок. Если один из файлов отсутствует, вернитесь к предыдущим шагам и проверьте:

Также убедитесь, что файлы принадлежат пользователю root и доступны для чтения. Если файлы присутствуют и отображаются корректно, можно переходить к проверке конфигурации и перезапуску DNS-сервера.

Перезапуск и проверка работы DNS

Теперь нужно применить изменения и убедиться, что DNS-сервер BIND9 работает корректно и успешно обслуживает созданный локальный домен.

Сначала проверьте корректность конфигурации BIND9:

sudo named-checkconf

Если команда не вывела ошибок, переходите к проверке файлов зон.

Проверьте прямую зону:

sudo named-checkzone lab.local /etc/bind/db.lab.local

Проверьте обратную зону:

sudo named-checkzone 50.168.192.in-addr.arpa /etc/bind/db.192.168.50

При отсутствии ошибок перезапустите DNS-сервер:

sudo systemctl restart bind9

Убедитесь, что служба успешно запущена:

systemctl status bind9

Статус active (running) означает, что BIND9 работает и использует новые настройки.

Проверка на клиентской машине

Чтобы убедиться, что локальный домен работает не только на DNS-сервере, проверьте разрешение имен с отдельной клиентской машины в той же сети. На клиенте сначала установите утилиты для диагностики DNS:

sudo apt update
sudo apt install dnsutils -y

Далее убедитесь, что клиент использует ваш DNS-сервер. Проверьте текущие DNS-настройки:

resolvectl status

В выводе найдите активный сетевой интерфейс и строку DNS Servers. Там должен быть указан IP вашего сервера BIND9 (например, 192.168.50.10). Если указан другой DNS (например, роутер или публичный сервер), временно выполните запросы напрямую к BIND9, явно указав его адрес в командах ниже.

dig @192.168.50.10 dns1.lab.local +short
dig @192.168.50.10 web1.lab.local +short
dig @192.168.50.10 lab.local +short

Что произойдет дальше:

dig @192.168.50.10 -x 192.168.50.10 +short
dig @192.168.50.10 -x 192.168.50.20 +short

В ответ должны вернуться dns1.lab.local. и web1.lab.local. соответственно (с точкой в конце – это нормально для DNS-вывода).

Если вы хотите проверить работу через системный резолвер клиента (то есть без @192.168.50.10), выполните:

getent hosts web1.lab.local
ping -c 2 web1.lab.local

Если команда ping успешно преобразует имя хоста в правильный IP-адрес и соединение устанавливается, это означает, что клиентская машина действительно обращается к вашему DNS-серверу, и локальный домен работает как положено.

Однако если запрос с явным указанием вашего DNS-сервера возвращает корректный результат, а тот же запрос без указания сервера – нет, значит проблема не в настройке зоны, а в том, что клиент не использует ваш BIND9 по умолчанию. Скорее всего, в системе прописан другой DNS, например, публичный 8.8.8.8 или роутера. В этом случае нужно проверить и изменить настройки сети на клиенте, указав ваш сервер в качестве основного DNS.

Безопасность и разрешения

Чтобы DNS-сервер был доступен клиентам, ему нужно принимать входящие запросы на 53 порт. DNS работает по UDP/53 (основной трафик), а также по TCP/53 (например, для больших ответов и некоторых служебных операций). Если на сервере включен firewall, откройте оба протокола.

Если вы используете UFW, разрешите DNS-трафик одной из команд (можно выбрать удобный вариант):

sudo ufw allow dns

Либо откройте порты отдельно по протоколам:

sudo ufw allow 53/udp
sudo ufw allow 53/tcp

Проверьте, что правила применились:

sudo ufw status

Если вместо UFW используются iptables, добавьте правила для входящего трафика на 53 порт. Важно указать сетевой интерфейс, через который клиенты обращаются к серверу (в примере – eth0, при необходимости замените на ваш интерфейс, например ens3):

Для UDP:

sudo iptables -A INPUT -i eth0 -p udp --dport 53 -j ACCEPT

Для TCP:

sudo iptables -A INPUT -i eth0 -p tcp --dport 53 -j ACCEPT

Добавив правила, убедитесь, что они присутствуют:

sudo iptables -S | grep 53

Обратите внимание: правила, настроенные через iptables, по умолчанию не сохраняются после перезагрузки системы. Это значит, что если вы добавите правило для открытия порта 53 (DNS), оно будет действовать только до момента перезапуска сервера. В тестовой среде это не страшно – можно настроить заново. Но если вы разворачиваете DNS-сервер для постоянной работы, важно позаботиться о сохранении правил.

Для этого можно использовать пакет iptables-persistent, который автоматически загружает правила при старте системы, или настроить скрипт инициализации. Без этого ваш DNS-сервер после перезагрузки окажется недоступен извне, даже если сам BIND9 работает – просто соединения не будут проходить через файрвол.

С точки зрения безопасности для локального домена рекомендуется:

Это обеспечит корректную работу DNS и снижает риски несанкционированного доступа.

Заключение

Настройка локального домена с помощью BIND9 в Ubuntu – это важный шаг к созданию удобной и управляемой сети. В этой статье мы разобрали процесс от установки до проверки работы DNS-сервера. Теперь вы можете обращаться к устройствам по именам, а не по IP-адресам, и управлять своими зонами самостоятельно.

FAQ


Как проверить статус службы BIND9?

Чтобы проверить статус службы BIND9, выполните команду:

systemctl status bind9

В выводе будет указано, запущена ли служба и есть ли ошибки в работе.

Какие еще команды можно использовать для настройки BIND9?

Чтобы настроить BIND9, полезно использовать команды:

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

Плюсы BIND9:

Перейти на оригинал