Создание локального домена при помощи BIND9

    Команда Simple-Server
    03.06.2026
    8 мин

    Материал подготовлен командой Simple-Server для администраторов VPS и выделенных серверов. Команды и пути проверяйте на тестовой машине перед production.

    Предварительные требования

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

    • Сервер или виртуальная машина с предустановленной ОС Ubuntu 22.04 для установки DNS-сервера BIND9. На этом же сервере будет осуществляться проверка работоспособности созданного домена.

    • Созданная и настроенная приватная сеть для сервера. Создание приватной сети описано в нашей инструкции: Управление приватными сетями.

    Сервер или виртуальная машина с предустановленной ОС Ubuntu 22.04 для установки DNS-сервера BIND9. На этом же сервере будет осуществляться проверка работоспособности созданного домена.

    Созданная и настроенная приватная сеть для сервера. Создание приватной сети описано в нашей инструкции: Управление приватными сетями.

    Все последующие шаги будут выполняться под учетной записью root.

    Обновляем индексы репозиториев и устанавливаем необходимые пакеты DNS-сервера BIND. Также дополнительно установим пакет dnsutils, который содержит в себе клиентские утилиты для диагностики работы DNS:

    apt update && apt -y install bind9 bind9utils dnsutils

    На этом установка завершена. Далее мы перейдем к редактированию конфигурационных файлов.

    1. Открываем при помощи любого текстового редактора конфигурационный файл с именем named.conf.local, в котором прописываются создаваемые DNS-зоны:
    vi /etc/bind/named.conf.local

    Создадим доменную зону с именем class.local, вписав следующий блок:

    zone "class.local" { type master; file "/etc/bind/db.class.local"; };
    • zone "class.local" — название создаваемой DNS-зоны;
    • type master — тип DNS-сервера. В нашем примере DNS-сервер будет выступать в роли мастера. Основная задача мастер-сервера состоит в хранении ресурсных записей и управлении ими. Также DNS-сервер может выступать в роли ведомого (slave) сервера. Роль slave позволяет получать и хранить информацию о доменных зонах с главного сервера (master). Также позволяет снижать нагрузку с главного DNS-сервера.
    • file "/etc/bind/db.class.local — указывается полный путь до файла, в котором хранятся настройки создаваемой доменной зоны.

    Также создадим второй блок, который будет отвечать за так называемый Reverse DNS lookup — обратный просмотр DNS, который позволяет определять доменное имя, используя IP-адрес:

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

    В итоге содержимое файла named.conf.local должно быть таким:

    zone "class.local" { type master; file "/etc/bind/db.class.local"; }; zone "126.168.192.in-addr.arpa" { type master; file "/etc/bind/db.10"; };

    Сохраняем и выходим из файла.

    1. Создаем конфигурационный файл для ранее созданной зоны class.local, взяв за основу шаблон файла db.local:
    cp /etc/bind/db.local /etc/bind/db.class.local

    Открываем на редактирование файл db.class.local:

    vi /etc/bind/db.class.local

    Приводим содержимое файла к следующему виду:

    ; ; BIND data file for class.local ; $TTL 604800 @ IN SOA class.local. root.class.local. ( 7 ; Serial 86400 ; Refresh 7200 ; Retry 3600000 ; Expire 172800 ) ; Negative Cache TTL ; @ IN NS srv1.class.local. @ IN A 192.168.126.130 @ IN AAAA ::1 srv1 IN A 192.168.126.130
    • $TTL 604800 — время жизни, которое указывает, как долго будут храниться настройки DNS в кэше, прежде чем они будут автоматически обновлены. Указывается в секундах;
    • @ IN SOA class.local. root.class.local. — SOA запись домена. В SOA указываются базовые сведения о домене. В данной записи используются следующие сведения:
    * `7 ; Serial` — серийный номер, предназначенный для маркирования файла зоны. Представлен 32-разрядным числом; * `86400 ; Refresh` — время ожидания ответа от вторичного DNS-сервера для отправки запроса на получение SOA-записи с первичных серверов. По истечении указанного времени вторичный DNS-сервер посылает запрос к первичному DNS-серверу для получения текущей копии SOA-записи. Обозначается в секундах. * `7200 ; Retry` — определяет время между попытками, если вторичный сервер не может связаться с первичным сервером, когда время обновления истекло. Обозначается в секундах. * `3600000 ; Expire` — временный промежуток, сообщающий серверу необходимость повторной попытки синхронизации информации с главным DNS-серверов. Обозначается в секундах. * `172800 ) ; Negative Cache TTL` — временный интервал который должен пройти прежде чем информация о запрашиваемом домене не будет найдена. Обозначается в секундах.
    • @ IN NS srv1.class.local, @ IN A 192.168.126.130, @ IN AAAA ::1, srv1 IN A 192.168.126.130 — ресурсные записи DNS.

    • 7 ; Serial — серийный номер, предназначенный для маркирования файла зоны. Представлен 32-разрядным числом;

    • 86400 ; Refresh — время ожидания ответа от вторичного DNS-сервера для отправки запроса на получение SOA-записи с первичных серверов. По истечении указанного времени вторичный DNS-сервер посылает запрос к первичному DNS-серверу для получения текущей копии SOA-записи. Обозначается в секундах.

    • 7200 ; Retry — определяет время между попытками, если вторичный сервер не может связаться с первичным сервером, когда время обновления истекло. Обозначается в секундах.

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

    • 172800 ) ; Negative Cache TTL — временный интервал который должен пройти прежде чем информация о запрашиваемом домене не будет найдена. Обозначается в секундах.

    Сохраняем и выходим из файла.

    1. Создаем конфигурационный файл для ранее созданной обратной зоны, взяв за основу шаблон файла db.127:
    cp /etc/bind/db.127 /etc/bind/db.10

    Открываем на редактирование файл db.10:

    И приводим его к следующему виду:

    ; ; BIND reverse data file for local 192.168.126.xxx network ; $TTL 604800 @ IN SOA srv1.class.local. root.class.local. ( 7 ; Serial 86400 ; Refresh 7200 ; Retry 3600000 ; Expire 172800 ) ; Negative Cache TTL ; @ IN NS srv1. 10 IN PTR srv1.class.local.

    Сохраняем и выходим из файла.

    Итоговая структура должна выглядеть следующим образом представленная на скриншоте ниже:

    Перезагрузка и добавление в автозагрузку сервиса bind9

    После того как все необходимые конфигурационные файлы были отредактированы, необходимо перезагрузить сервис bind9, чтобы он смог применить новые изменения. Перезагружаем сервис bind9 и добавляем его в автозагрузку с помощью команд:

    systemctl restart bind9 && systemctl enable bind9

    Для проверки статуса DNS-сервера выполним команду:

    Если в разделе Active отображается статус active (running), значит, bind9 успешно запущен и работает.

    Разрешение трафика bind9 в UFW/Iptables

    Если используется firewall, например, ufw или Iptables, то необходимо открыть 53 порт (порт по умолчанию для DNS).

    При использовании UFW (Uncomplicated Firewall) можно воспользоваться несколькими способами:

    При использовании Iptables синтаксис правил будет следующим:

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

    Проверка работоспособности DNS

    Для того чтобы проверить работоспособность DNS, необходимо прописать адрес DNS-сервера В Linux-системах адреса DNS-серверов прописываются в файле /etc/resolv.conf. Однако стоит учесть, что при перезагрузке системы файл /etc/resolv.conf автоматически пересоздается. Если прописать в файле необходимые DNS-адреса вручную, то изменения после перезагрузки хоста будут удалены. Для решения данной проблемы воспользуемся сторонним пакетом — resolvconf, который предназначен для управления информацией о серверах имен. Устанавливаем пакет при помощи команды:

    apt -y install resolvconf

    Проверяем статус службы resolvconf:

    systemctl status resolvconf.service

    Если в разделе Active отображается статус active (running), то resolvconf успешно запущен и работает. Если статус будет другой, то необходимо запустить resolvconf вручную, выполнив команду:

    systemctl start resolvconf.service

    Далее добавляем сервис resolvconf в автозагрузку:

    systemctl enable resolvconf.service

    Открываем на редактирование файл head:

    vi /etc/resolvconf/resolv.conf.d/head

    И прописываем в нем IP-адрес сервера, где находится DNS-сервер. В данном примере DNS установлен на сервере с адресом 192.168.126.130:

    nameserver 192.168.126.130

    Сохраняем изменения и выходим из файла.

    Чтобы внесенные изменения были перенесены в файл resolv.conf, необходимо выполнить две команды:

    resolvconf --enable-updates resolvconf -u

    После этого проверяем файл resolv.conf:

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

    Проверяем, что ранее созданный домен srv1.class.local успешно пингуется:

    Также воспользуемся утилитой nslookup, чтобы запросить IP-адрес, используя доменное имя:

    nslookup srv1.class.local

    В ответе вернулся IP-адрес нашего DNS-сервера.


    Нужен сервер для практики? Закажите VPS на Simple-Server — root-доступ, NVMe, DDoS-защита и поддержка 24/7.

    VPS для проекта

    VPS с root-доступом, NVMe и поддержкой 24/7 на Simple-Server.

    StarterVDS

    490

    в месяц

    1 ядро

    1 ГБ RAM

    20 ГБ NVMe

    • 1 IPv4
    • KVM
    • Root-доступ
    • Безлимитный трафик
    Заказать VPS
    Рекомендуем

    PerformanceVDS

    1190

    в месяц

    2 ядра

    4 ГБ RAM

    60 ГБ NVMe

    • 1 IPv4
    • KVM
    • Root-доступ
    • Базовая DDoS-защита
    Заказать VPS

    Нужна другая конфигурация? Посмотрите все доступные тарифы

    Все тарифы VPS

    Похожие статьи, которые могут быть вам интересны