Быстро, доступно, безопасно!
Магазин готовых сайтов

Настройка 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-зону.
  • MXMail 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%)