Настройка bind (DNS) на AlmaLinux 8.10
Подробная информация о настройке службы DNS на базе BIND 9.11 на сервере под управлением ОС AlmaLinux с примерами и комментариями.
Настройка сервера на AlmaLinux 8.10 -> BIND 9.11
После того, как настроен веб-сервер и он открывается по IP-адресу необходимо настроить систему адресации, чтобы можно было заходить на него по имени домена.
Наш DNS сервер будет работать на IP-адресе 192.168.1.10.
Проверяем установлена ли служба: systemctl status named
Если нет - устанавливаем: dnf install bind
Проверить версию bind можно командами: named -v илиnamed -V
Редактируем конфигурацию: vim /etc/named.conf
Создаём именованный список IP-адресов — вторичных DNS-серверов, которым разрешён доступ: acl "allowed-ns" {
192.0.2.2;
192.0.2.3;
192.0.2.4;
};
Меняем строку: listen-on port 53 { 127.0.0.1; };на listen-on port 53 { 127.0.0.1; 192.168.1.10; };
Разрешаем компьютерам из нашей подсети обращаться к DNS серверу, для этого меняем строку: allow-query { localhost; };на allow-query { localhost; 192.168.1.10/24; };чтобы разрешить запросы с любых серверов строка должна выглядеть так: allow-query { any; };
Запускаем службу DNS: systemctl start named
Разрешаем брэндмауэру запросы к DNS: iptables -t filter -I INPUT 7 -p udp -m conntrack --ctstate NEW -m udp --dport 53 -j ACCEPT
Добавление доменов на Primary BIND
Создаем файл зоны для каждого домена: vim /var/named/example.com.zone
В файл example.com.zone пишем: ; Zone file for example.com
$TTL 86400
$ORIGIN example.com.
@ IN SOA ns1.example.com. hostmaster.example.com. (
2026060201 ; serial
3600 ; refresh
1800 ; retry
1209600 ; expire
86400 ; negative cache TTL
)
@ IN NS ns1.example.com.
@ IN NS ns2.example.com.
@ IN NS ns3.example.com.
@ IN MX 0 mail.example.com.
;----------------------------------------------------------------
; A-записи ниже нужны только если NS находятся в этом же домене |
;----------------------------------------------------------------
ns1 IN A 198.51.100.1 |
ns2 IN A 203.0.113.1 |
ns3 IN A 192.0.2.1 |
;----------------------------------------------------------------
mail IN A 198.51.100.1
@ IN A 198.51.100.1
www IN CNAME example.com
_dmarc IN TXT "v=DMARC1; p=none"
@ IN TXT "v=spf1 a mx ip4:198.51.100.1 -all"
default._domainkey IN TXT "v=DKIM1; k=rsa; p=PUBLIC_DKIM_KEY_HERE"
; ----- DKIM key default for example.com
Если домен не отправляет почту, DKIM-запись не нужна, достаточно запретительной SPF/DMARC-политики. Поэтому вместо последних 4-х строк остаются только две: @ IN TXT "v=spf1 -all"
_dmarc IN TXT "v=DMARC1; p=reject; sp=reject"Что означает: никто не имеет права отправлять почту от имени этого домена, а письма, не прошедшие DMARC, нужно отклонять.
Подробное разъяснение файла записей зоны:
- ; — "точка с запятой" - это комментарии. BIND игнорирует всё от ; до конца строки.
- $TTL — это время жизни в секундах DNS-записей по умолчанию в файле зоны. Если у записи не указан свой TTL, она будет кэшироваться на DNS-серверах до 86400 секунд, то есть 1 сутки.
- $ORIGIN — для BIND эта строка не обязательна, если зона загружается из zone-блока - см. ниже.
- @ — внутри данного файла означает example.com.
- IN — это DNS-класс записи, означает Internet. В обычных DNS-зонах почти всегда используется именно IN.
- SOA — это тип записи Start of Authority. Она описывает основные параметры зоны:
- ns1.example.com. — главный DNS-сервер зоны.
- hostmaster.example.com. — email администратора зоны, где первая точка заменяет @, то есть запись означает адрес эл.почты hostmaster@example.com.
- serial — версия зоны в формате ГГГГММДДNN, где NN - это номер версии, начиная от 01. При изменении зоны в эту же дату его увеличивают.
- refresh/retry/expire — параметры для вторичных DNS-серверов.
- negative cache TTL — сколько кэшировать отрицательные ответы, например когда записи не существует.
- NS — это тип DNS-записи Name Server. Запись указывает имя авторитативного DNS-сервера, обслуживающего данную DNS-зону.
- MX — Mail Exchanger, DNS-запись, которая указывает, на какой почтовый сервер должны доставляться письма для данного домена.
- A — это тип DNS-записи Address record, она связывает доменное имя с IPv4-адресом.
- CNAME — это тип DNS-записи Canonical Name, она создаёт псевдоним одного DNS-имени на другое DNS-имя.
- TXT — это тип DNS-записи Text record, хранит произвольный текст, связанный с доменным именем.
- SPF — какие серверы имеют право отправлять почту от имени домена.
- DMARC — что делать с письмами, не прошедшими проверку.
- DKIM — публичный ключ для проверки подписи писем.
- PUBLIC_DKIM_KEY_HERE — сами строки публичного DKIM-ключа, который генерируется почтовой системой. В DNS публикуется только публичный ключ; приватный ключ хранится на почтовом сервере и не публикуется.
Для Primary-зоны, которую редактируем мы, а named только читает, устанавливаем: chown root:named /var/named/example.com.zone
chmod 640 /var/named/example.com.zoneРезультат: root может менять файл, named может читать, остальные не имеют доступа.
Для того, чтобы иметь возможность автоматически создавать список зон, а не добавлять каждый домен вручную, выносим информацию о них в отдельный файл: vim /var/named/zones.conf
В файл /etc/named/zones.conf скриптом пишем: zone "example.com" IN {
type master;
file "/var/named/example.com.zone";
allow-transfer {
key ns2-key;
};
also-notify {
203.0.113.1 key ns2-key;
};
};где "203.0.113.1" - это IP-адрес вашего вторичного DNS сервера, а "ns2-key" — имя TSIG-ключа, используемого BIND для аутентификации вторичного DNS-сервера при передаче зоны и отправке уведомлений NOTIFY.
Чтобы данные о зонах загружались, добавляем в конец файла /etc/named.conf следующую строку: include "/var/named/zones.conf";
Проверка конфигурации и применение изменений
После редактирования /var/named/example.com.zone на Primary проверяем файл зоны: named-checkzone example.com /var/named/example.com.zone
Перезагружаем конкретную зону: rndc reload example.com
Проверяем, что BIND видит новый serial: rndc zonestatus example.com
Проверяем ответ: dig @127.0.0.1 example.com SOA +norecurseЕсли есть Secondary-серверы, после увеличения serial они заберут новую версию зоны через NOTIFY/refresh. Перезапускать named не нужно.
Перезагрузить файл конфигурации и зоны: systemctl reload namedперезагрузить службу: systemctl restart namedпосмотреть статус службы: systemctl status namedпроверить ответ NS сервера: nslookup example.com ns1.example.com
Проверяем файл зоны: named-checkzone example.com /var/named/example.com.zone
Настройка вторичных авторитативных DNS-серверов (Secondary DNS servers): ns2, ns3 и т.д.
Согласно RFC 1034 (раздел 4.1), каждая DNS-зона должна иметь как минимум два авторитетных сервера, чтобы обеспечить отказоустойчивость и доступность — при недоступности NS1 остальные NS продолжают обслуживать зону.
Для каждого DNS-сервера надо сгенерировать TSIG-ключ, который используется для защищённой передачи зоны (AXFR) между master и slave DNS-серверами. Файл с секретом лучше записать в файл: tsig-keygen -a hmac-sha256 ns2-2026 > /etc/named/keys/ns2-2026.key
Устанавливаем права и разрешения на созданный файл: chown root:named /etc/named/keys/ns2-2026.key
chmod 640 /etc/named/keys/ns2-2026.key
Вместо ns2-2026 можно указать любое уникальное имя ключа, по которому мы будем ссылаться в nsd.conf и "/etc/named.conf". В результате команды мы должны получить файл примерно с таким содержанием: key "ns2-example-2025" {
algorithm hmac-sha256;
secret "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFG=";
};
В файле /etc/named.conf подключаем созданный ключ: include "/etc/named/keys/ns2-2026.key";
Подстановочный SSL сертификат
Для использования в поддоменах www, mail, cpanel и т.п. требуется подстановочный (wildcard) SSL сертификат.
Создаём каталог для ключей /etc/named/keys с правами 750 (чтение/запись/выполнение для root, чтение/выполнение для группы named, остальным — запрет) и назначаем владельца root, группу named: install -d -m 750 -o root -g named /etc/named/keys Это защищённое место для TSIG-ключей.
Генерируем TSIG-ключ (алгоритм HMAC-SHA256, длина 256 бит) с именем acme-key.example.com: dnssec-keygen -a HMAC-SHA256 -b 256 -n HOST acme-key.example.comKacme-key.example.com.+*.key - публичная часть;
Kacme-key.example.com.+*.private - приватная часть; строка Key: в этом файле - секрет (base64) для named.conf и для Certbot RFC2136.
В файл /etc/named.conf перед строками "include" добавляем текст: /* TSIG для ACME */
key "acme-key.example.com" {
algorithm hmac-sha256;
secret "qwertyuiopasdfghjklzxcvbnmqwertyui/qwertyui="; // значение из файла *.private (строка Key:)
}
В конец файла /etc/named.rfc1912.zones добавляем следующий текст: zone "example.com" IN {
type master;
file "example.com.zone";
update-policy { grant acme-key.example.com. name _acme-challenge.example.com. TXT; };
};
Создаем ключ RNDC необходимый для аутентифицированного управления BIND через утилиту rndc: rndc-confgen -a -r /dev/urandomи присваиваем необходимые права и разрешения: chmod 640 /etc/rndc.key && chown root:named /etc/rndc.key
Подключаем RNDC в BIND - добавляем в файл /etc/named.conf перед include'ами следующий текст: include "/etc/rndc.key";
controls {
inet 127.0.0.1 port 953 allow { 127.0.0.1; } keys { "rndc-key"; };
};
Бывают случаи, когда в системе уже работает один DNS-сервер, например NSD и порт 53 уже занят. Тогда, при необходимости, меняем в файле /etc/named.conf порт 53 на другой, например, 5353: listen-on port 5353 { 127.0.0.1; };
listen-on-v6 port 5353 { ::1; };
Метки: bind; dns; ns
Опрос
В каком году был сделан ваш сайт? (голосов: 24)
- до 2015 года - 23 (96%)

- в 2015 - 0 (0%)

- в 2016 - 0 (0%)

- в 2017 - 0 (0%)

- в 2018 - 1 (4%)

- в 2019 - 0 (0%)

