Материал подготовлен командой 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На этом установка завершена. Далее мы перейдем к редактированию конфигурационных файлов.
- Открываем при помощи любого текстового редактора конфигурационный файл с именем
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";
};Сохраняем и выходим из файла.
- Создаем конфигурационный файл для ранее созданной зоны
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— временный интервал который должен пройти прежде чем информация о запрашиваемом домене не будет найдена. Обозначается в секундах.
Сохраняем и выходим из файла.
- Создаем конфигурационный файл для ранее созданной обратной зоны, взяв за основу шаблон файла
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.