Локальный домен – это собственное доменное пространство внутри закрытой сети, которое используется для удобного именования серверов, рабочих станций и сервисов без обращения к публичным 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";
};
Где:
zone "lab.local"– имя создаваемой зоны (ваш локальный домен);type master– тип сервера. В учебной и тестовой конфигурации почти всегда используют именно master. Альтернатива –slave, когда зона копируется с 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
Где:
- $TTL 86400. TTL – время жизни записи в кеше (в секундах). 86400 = 24 часа. Если вы часто меняете записи – можно поставить меньше (например, 300).
- SOA-запись содержит базовую информацию о зоне:
dns1.lab.local.– основной DNS-сервер домена;admin.lab.local.– адрес администратора в формате DNS (admin@lab.local);Serial– номер версии зоны, который необходимо увеличивать при каждом изменении файла;Refresh,Retry,Expire,Negative Cache TTL– тайминги обновления и кэширования зоны.
- NS-запись указывает DNS-сервер, который обслуживает домен – dns1.
- A-записи хостов связывают имена хостов внутри домена с их IPv4-адресами.
- A-запись для домена позволяет обращаться к домену lab.local напрямую, без указания имени хоста.
Сохраните файл.
Шаг 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соответствует адресу192.168.50.10;20соответствует адресу192.168.50.20.
Почему указывается только 10, 20? Потому что сама зона уже описывает сеть 192.168.50.0/24 (через 50.168.192.in-addr.arpa). Внутри остается лишь последний октет.
Сохраните файл.
Шаг 5. Проверка структуры файлов
После всех действий у вас должны появиться два файла зоны:
/etc/bind/db.lab.local– прямая зона/etc/bind/db.192.168.50– обратная зона
И оба должны быть прописаны в /etc/bind/named.conf.local.
Выполните команду:
ls -l /etc/bind/db.lab.local /etc/bind/db.192.168.50
В выводе команды должны отображаться оба файла без ошибок. Если один из файлов отсутствует, вернитесь к предыдущим шагам и проверьте:
- правильность имен файлов;
- соответствие путей тем, что указаны в
/etc/bind/named.conf.local; - успешность выполнения команд копирования.
Также убедитесь, что файлы принадлежат пользователю 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
Что произойдет дальше:
dns1.lab.localвернет IP DNS-сервера (например,192.168.50.10);web1.lab.localвернет IP хоста, который вы добавляли в зону (например,192.168.50.20);lab.localвернет IP, заданный для домена (если вы добавляли запись@ IN A ...).
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-серверу только доверенными сетями или IP-адресами;
- не публиковать локальный DNS во внешнюю сеть без необходимости;
- использовать приватную сеть для серверов и клиентов, если домен предназначен для внутреннего использования.
Это обеспечит корректную работу DNS и снижает риски несанкционированного доступа.
Заключение
Настройка локального домена с помощью BIND9 в Ubuntu – это важный шаг к созданию удобной и управляемой сети. В этой статье мы разобрали процесс от установки до проверки работы DNS-сервера. Теперь вы можете обращаться к устройствам по именам, а не по IP-адресам, и управлять своими зонами самостоятельно.
FAQ
Как проверить статус службы BIND9?
Чтобы проверить статус службы BIND9, выполните команду:
systemctl status bind9
В выводе будет указано, запущена ли служба и есть ли ошибки в работе.
Какие еще команды можно использовать для настройки BIND9?
Чтобы настроить BIND9, полезно использовать команды:
named-checkconf– проверяет синтаксис основного конфигурационного файла/etc/bind/named.conf.named-checkzone <зона> <файл>– проверяет файл зоны.systemctl restart bind9– перезапускает службу DNS-сервера после изменений.rndc reload / rndc reload <зона>– перезагружает настройки или отдельную зону без полной остановки сервера.rndc status– показывает, работает ли сервер, сколько зон загружено, когда запускался.rndc flush– очищает DNS-кеш.
Какие преимущества дает использование BIND9 для локального домена?
Плюсы BIND9:
- Вы полностью управляете своими именами и адресами, не зависите от интернета и внешних сервисов.
- Работает даже в закрытой сети, подходит для обучения, тестов и небольших офисов.
- Можно настроить, как по имени находить IP, так и по IP – имя, что полезно для диагностики.
- Все настраивается через простые текстовые файлы, которые легко править.
- При необходимости можно добавить дополнительные серверы (например, резервный) или ускорить работу с помощью кэширования.
- BIND9 – проверенное решение, которое давно и надежно работает даже в больших компаниях.
- Легко проверять и исправлять ошибки с помощью обычных команд, таких как dig или nslookup.