DNS (Domain Name System) – система доменных имён, которая связывает доменное имя сайта с IP-адресом сервера. Благодаря DNS пользователю не нужно запоминать IP-адрес, а для открытия сайта достаточно знать его доменное имя, например ruvds.com. Когда пользователь вводит в браузере адрес сайта, именно DNS-серверы определяют, на какой именно сервер нужно отправлять адресованные сайту запросы.
Чтобы сайт работал с использованием определённого доменного имени, после регистрации домена необходимо указать, к каким серверам он должен обращаться. Для этого используются DNS-записи, которые хранятся на DNS-серверах.
Обычно для сайта достаточно настроить DNS-записи у регистратора или сервиса вроде Cloudflare. При этом в ряде случаев может быть полезен собственный DNS-сервер. Например, если требуется полный контроль над DNS-записями, независимость от сторонних сервисов или возможность гибкой настройки DNS-инфраструктуры.
Настройка собственного DNS-сервера заключается в установке и настройке специального программного обеспечения, которое будет принимать DNS-запросы и хранить DNS-записи доменов. Такое ПО устанавливается на VPS или выделенный сервер и позволяет самостоятельно управлять DNS-инфраструктурой. В таких случаях, как правило, используют специализированный DNS-софт. Наиболее распространёнными вариантами являются следующие:
BIND 9– один из самых популярных DNS-серверов, который поддерживает авторитативный DNS, рекурсию и множество других дополнительных возможностей;PowerDNS– DNS-сервер с поддержкой работы через базы данных и API;NSD– лёгкий и производительный авторитативный DNS-сервер;Knot DNS– DNS-сервер с поддержкой DNSSEC;Unbound– рекурсивный DNS-резолвер, часто используется как локальный DNS-сервер;dnsmasq– DNS- и DHCP-сервер для небольших сетей и локальной инфраструктуры.
В настоящей статье разберём, как настроить DNS-сервер на VPS с использованием BIND 9.
Как настроить DNS-сервер с использованием BIND 9
В качестве основы для DNS-сервера будем использовать VPS на Ubuntu 24.04. IP-адрес виртуальной машины, используемой в данном примере, – 80.71.150.43. Так же для настройки DNS-сервера потребуется доменное имя. В нашем примере это your-domain-name.ru. При настройке DNS-сервера вместо 80.71.150.43 и your-domain-name.ru используйте свои IP-адрес и домен соответственно.
Установка BIND 9
Перед установкой нового ПО обновите списки пакетов:
$ sudo apt update
Затем запустите установку DNS-сервера BIND 9 и дополнительных утилит для его настройки и проверки:
$ sudo apt install bind9 bind9utils bind9-doc dnsutils
В данном случае в систему будут установлены:
bind9– основной DNS-сервер BIND9;bind9utils– служебные утилиты для проверки конфигурации DNS;bind9-doc– документация BIND9;- dnsutils – утилиты для проверки DNS.
По окончании инсталляции убедитесь, что служба BIND9 работает и установлена в автозагрузку:
$ systemctl status bind9

Глобальные настройки DNS-сервера BIND 9
Далее внесите изменения в глобальные настройки DNS-сервера BIND 9:
$ sudo nano /etc/bind/named.conf.options
Данный пример содержит следующие настройки:
directory– параметр указывает на рабочий каталог BIND9;recursion yes– параметр разрешает рекурсивные DNS-запросы;allow-recursion { 127.0.0.1; ::1; }– разрешает рекурсию только локально, то есть внешние клиенты не смогут использовать сервер как публичный DNS-резолвер;forwarders– указывает внешние DNS-серверы, которым будут пересылаться запросы;forward only– указывает BIND9 о необходимости использовать только DNS-серверы из параметраforwarders;listen-on { any; }– разрешает принимать DNS-запросы на всех IPv4-интерфейсах сервера;listen-on-v6 { any; }– разрешает работу DNS-сервера на всех IPv6-интерфейсах;allow-transfer { none; }– запрещает передачу DNS-зон другим DNS-серверам, что является необходимой мерой безопасности, предотвращающей получение содержимого DNS-зоны посторонними серверами;version "not disclosed"– скрывает реальную версию BIND9;dnssec-validation auto– включает автоматическую проверку DNSSEC-подписей.
options {
directory "/var/cache/bind";
recursion yes;
allow-recursion { 127.0.0.1; ::1; };
forwarders {
8.8.8.8;
1.1.1.1;
};
forward only;
listen-on { any; };
listen-on-v6 { any; };
allow-transfer { none; };
version "not disclosed";
dnssec-validation auto;
};
Настройка DNS-зон
Для настройки локальной DNS-зоны необходимо отредактировать файл named.conf.local:
$ sudo nano /etc/bind/named.conf.local
Ниже приведён пример настройки прямой и обратной DNS-зон:
// Прямая зона
zone "your-domain-name.ru" {
type master;
file "/etc/bind/zones/db.your-domain-name.ru";
allow-transfer { none; };
};
// Обратная зона
zone "150.71.80.in-addr.arpa" {
type master;
file "/etc/bind/zones/db.80.71.150";
allow-transfer { none; };
};
Прямая зона – это обычная DNS-зона домена, которая используется для преобразования доменного имени в IP-адрес:
type master– параметр указывает, что сервер является основным DNS-сервером для зоны;file "/etc/bind/zones/db.your-domain-name.ru"– файл DNS-зоны, в котором находятся DNS-записи;allow-transfer { none; }– параметр запрещает передачу DNS-зоны другим DNS-серверам, что повышает безопасность и предотвращает получение содержимого зоны посторонними серверами.
Обратная зона используется для преобразования IP-адреса в имя домена. В reverse DNS IP-адрес указывается справа налево. Поэтому зона обозначается как 150.71.80.in-addr.arpa, где 150.71.80 – это первые три октета IP-адреса сервера, указанные в обратном порядке. Файл, указанный в параметре file, содержит PTR-записи.
Создание DNS-зоны
Следующий этап – создание зоны. Для чего создайте каталог /etc/bind/zones:
$ sudo mkdir /etc/bind/zones
В каталоге /etc/bind/zones создайте файл зоны:
$ sudo nano /etc/bind/zones/db.your-domain-name.ru
Ниже приведён пример файла зоны:
$TTL 3600
; SOA — Start of Authority
@ IN SOA ns1.your-domain-name.ru. admin.your-domain-name.ru. (
2026051801 ; Serial
3600 ; Refresh
1800 ; Retry
604800 ; Expire
300 ) ; Negative TTL
; NS-записи
@ IN NS your-domain-name.ru.
; A-записи (IPv4)
ns1 IN A 80.71.150.43
@ IN A 80.71.150.43
www IN A 80.71.150.43
Данный файл зоны содержит следующие настройки:
$TTL 3600– TTL (Time To Live): определяет, сколько времени DNS-записи могут храниться в кэше DNS-серверов и клиентов (в данном случае 3600 секунд, то есть 1 час);@ IN SOA ns1.your-domain-name.ru. admin.your-domain-name.ru.– главная запись DNS-зоны: SOA (Start of Authority):ns1.your-domain-name.ru.– основной DNS-сервер зоны;admin.your-domain-name.ru.– E-mail администратора зоны (вместо символа@используется точка);Serial– версия DNS-зоны, которую увеличивают при каждом изменении DNS-записей, чтобы вторичные DNS-серверы понимали, что зона обновилась (2026051801– представляет собой дату с добавлением номера изменения в течение дня);Refresh– параметр указывает, как часто вторичные DNS-серверы будут проверять обновление зоны (в данном случае 3600 секунд, то есть 1 час);Retry– параметр указывает, через какое время следует повторить попытку обновления, если основной DNS-сервер не был доступен (в данном случае 1800 секунд, то есть 30 минут);Expire– указывает время, через которое вторичный DNS-сервер должен перестать считать данные зоны актуальными, если не сможет связаться с основным (в данном случае 604800 секунд, то есть 7 дней);Negative TTL– время кэширования отрицательных DNS-ответов;
@ IN NS your-domain-name.ru.– DNS-сервер, обслуживающий домен;- A-записи:
ns1– DNS-сервер;@– основной домен;www– поддомен.
Обратите внимание, что каждый раз при редактировании файла зоны необходимо обязательно увеличивать значение параметра Serial.
Создание обратной DNS-зоны
Далее, создайте файл обратной DNS-зоны для своей подсети по аналогии с db.80.71.150 для подсети 80.71.150.0/24:
$ sudo nano /etc/bind/zones/db.80.71.150
Пример файла обратной зоны может выглядеть следующим образом:
$TTL 3600
; SOA — Start of Authority
@ IN SOA ns1.your-domain-name.ru. admin.your-domain-name.ru. (
2026051801 ; Serial
3600 ; Refresh
1800 ; Retry
604800 ; Expire
300 ) ; Negative TTL
; NS-записи
@ IN NS ns1.your-domain-name.ru.
; PTR-записи
10 IN PTR ns1.your-domain-name.ru.
В данном примере SOA-запись и NS-запись выглядят так же, как в файле DNS-зоны. Здесь в отличие от настроек прямой зоны в файл добавляется PTR-запись, которая связывает IP-адрес с доменным именем. В приведённом примере число 10 представляет собой последний октет IP-адреса DNS-сервера.
Проверка настроек DNS-сервера
Чтобы убедиться в корректности произведённых настроек, во-первых, запустите проверку синтаксиса named.conf:
$ sudo named-checkconf
При отсутствии каких-либо ошибок вывод команды должен пустым.
Если ошибок нет, проверьте файл DNS-зоны:
$ sudo named-checkzone your-domain-name.ru /etc/bind/zones/db.your-domain-name.ru
Также проверьте обратную зону:
$ sudo named-checkzone 150.71.80.in-addr.arpa /etc/bind/zones/db.80.71.150
При отсутствии ошибок проверки должны вывести OK.
После чего перезапустите службу BIND9:
$ sudo systemctl restart bind9
Настройка брандмауэра
Поскольку DNS работает на порту 53, причём и TCP, и UDP, необходимо открыть данный порт в брандмауэре UFW:
$ sudo ufw allow 53/tcp
$ sudo ufw allow 53/udp
Настройка работоспособности DNS-сервера
В качестве проверки работоспособности DNS-сервера запросите у него A-запись:
$ dig @127.0.0.1 your-domain-name.ru A
Ожидаемый ответ должен выглядеть примерно следующим образом.

Также выполните запрос NS-записи:
$ dig @127.0.0.1 your-domain-name.ru NS

Дополнительно проверьте обратное разрешение:
$ dig @127.0.0.1 -x 80.71.150.43

Далее в панели управления у регистратора домена укажите ns1.your-domain-name.ru как NS-сервер. При этом следует учитывать, что распространение NS-записей может занять несколько часов. После обновления NS-записей проверьте A-запись вашего домена через запрос к стороннему DNS-серверу, например, публичному DNS-серверу Google:
$ dig @8.8.8.8 your-domain-name.ru A

