Как настроить DNS-серверы с помощью Bind в AlmaLinux 9?

BIND (Berkeley Internet Name Domain) – свободно распространяемое программное обеспечение DNS-сервера, широко используемое в Unix/Linux благодаря своей надежности и отличным стандартам.

Изначально оно было создано в Калифорнийском университете в Беркли, а затем, в 1994 году, его продвижение было передано компании Internet Systems Consortium, Inc (ISC).

Он доступен на большинстве дистрибутивах Linux и предоставляет дополнительные инструменты для диагностики и тестирования DNS-сервера.

Bind может служить одновременно в качестве авторитетного DNS-сервера и DNS-резольвера. В этом руководстве мы покажем, как настроить частный DNS-сервер с Bind на AlmaLinux 9; он будет работать как локальный DNS-резольвер.

Шаг 1. Вход на сервер по SSH

Сначала необходимо войти на ваш AlmaLinux 8 VPS по SSH как пользователь root:

ssh root@IP_Address -p Port_number

Замените „IP_Address“ и „Port_number“ на соответствующие IP-адрес и номер порта SSH вашего сервера, а также замените „root“ на имя пользователя с правами sudo.

Проверить, установлена ли на вашем сервере правильная версия AlmaLinux, можно с помощью следующей команды:

cat /etc/almalinux-release

Вы должны увидеть примерно такой результат или выше:

AlmaLinux release 9.2 (Turquoise Kodkod)

В этой статье для выполнения команд мы используем „root“. Если вы хотите использовать для выполнения команд обычного пользователя с привилегиями sudo, обязательно добавьте „sudo“ перед командами.

Шаг 2. Установка Bind

Выполните следующую команду для установки Bind 9 на ваш AlmaLinux 9 из его репозитория по умолчанию. Bind 9 – это самая последняя версия, а Bind 10 – устаревший проект.

dnf update
dnf install bind bind-utils

После установки мы можем проверить информацию о версии Bind.

named -v

Пример вывода:

BIND 9.16.23-RH (Extended Support Version)

Чтобы проверить номер версии Bind и параметры сборки, выполните эту команду

named -V
BIND 9.16.23-RH (Extended Support Version)
running on Linux x86_64 5.14.0-284.11.1.el9_2.x86_64 #1 SMP PREEMPT_DYNAMIC Tue May 9 05:49:00 EDT 2023
built by make with '--build=x86_64-redhat-linux-gnu' '--host=x86_64-redhat-linux-gnu' '--program-prefix=' '--disable-dependency-tracking' '--prefix=/usr' '--exec-prefix=/usr' '--bindir=/usr/bin' '--sbindir=/usr/sbin' '--sysconfdir=/etc' '--datadir=/usr/share' '--includedir=/usr/include' '--libdir=/usr/lib64' '--libexecdir=/usr/libexec' '--sharedstatedir=/var/lib' '--mandir=/usr/share/man' '--infodir=/usr/share/info' '--with-python=/usr/bin/python3' '--with-libtool' '--localstatedir=/var' '--with-pic' '--disable-static' '--includedir=/usr/include/bind9' '--with-tuning=large' '--with-libidn2' '--with-maxminddb' '--with-dlopen=yes' '--with-gssapi=yes' '--with-lmdb=yes' '--without-libjson' '--with-json-c' '--enable-dnstap' '--enable-fixed-rrset' '--enable-full-report' 'build_alias=x86_64-redhat-linux-gnu' 'host_alias=x86_64-redhat-linux-gnu' 'CC=gcc' 'CFLAGS= -O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -march=x86-64-v2 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection' 'LDFLAGS=-Wl,-z,relro -Wl,--as-needed -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 ' 'LT_SYS_LIBRARY_PATH=/usr/lib64:' 'PKG_CONFIG_PATH=:/usr/lib64/pkgconfig:/usr/share/pkgconfig'
compiled by GCC 11.3.1 20221121 (Red Hat 11.3.1-4)
compiled with OpenSSL version: OpenSSL 3.0.1 14 Dec 2021
linked to OpenSSL version: OpenSSL 3.0.7 1 Nov 2022
compiled with libuv version: 1.42.0
linked to libuv version: 1.42.0
compiled with libxml2 version: 2.9.13
linked to libxml2 version: 20913
compiled with json-c version: 0.14
linked to json-c version: 0.14
compiled with zlib version: 1.2.11
linked to zlib version: 1.2.11
linked to maxminddb version: 1.5.2
compiled with protobuf-c version: 1.3.3
linked to protobuf-c version: 1.3.3
threads support is enabled
default paths:
named configuration: /etc/named.conf
rndc configuration: /etc/rndc.conf
DNSSEC root key: /etc/bind.keys
nsupdate session key: /var/run/named/session.key
named PID file: /var/run/named/named.pid
named lock file: /var/run/named/named.lock
geoip-directory: /usr/share/GeoIP

На данный момент Bind установлен, но не запущен автоматически. Выполним эту команду, чтобы запустить Bind и настроить его на автоматический запуск при перезагрузке.

systemctl enable --now named

Шаг 3. Настройка Bind

По умолчанию сервер BIND9 на CentOS/RHEL предлагает рекурсивную функциональность исключительно для localhost. Внешние запросы будут отклонены. Измените основной конфигурационный файл BIND, расположенный по адресу /etc/named.conf.

nano /etc/named.conf

Найдите эти две строки

listen-on port 53 { 127.0.0.1; };
listen-on-v6 port 53 { ::1; };

Затем закомментируйте их, и файл должен выглядеть так

#listen-on port 53 { 127.0.0.1; };
#listen-on-v6 port 53 { ::1; };

Вы также можете изменить эту строку

allow-query { localhost; };

на такую

allow-query { localhost; 192.168.0.0/24; 10.10.10.0/24; };

Или, если вы хотите сделать несколько тестов перед разрешением определенных диапазонов IP, просто закомментируйте строки; должно получиться так:

#allow-query { localhost; };

Сохраните файл, затем выйдите и перезапустите Bind.

systemctl restart named

Теперь служба Bind прослушивает интерфейсы вашего сервера, а не только localhost.

Шаг 4. Создание зон

Добавьте следующие строки, изменив доменное имя в соответствии с вашими потребностями в конце документа.

zone "yourdomain.com" {
    type master;
    file "/var/named/yourdomain.com";
};

Сохраните файл, затем выйдите

Теперь создайте файл конфигурации зоны BIND /var/named/yourdomain.com

nano /var/named/yourdomain.com

Добавьте эти строки.

$TTL 1d
               IN      SOA     dns1.yourdomain.com.    hostmaster.yourdomain.com. (
                1        ; serial
                6h       ; refresh after 6 hours
                1h       ; retry after 1 hour
                1w       ; expire after 1 week
                1d )     ; minimum TTL of 1 day
               IN      NS      ns1.yourdomain.com.
@IN NS ns2.yourdomain.com.
ns1             IN      A       192.168.0.1
ns2IN      A       192.168.0.1
yourdomain.com.    IN      MX      0      mail.yourdomain.com.
mail            IN      A       192.168.0.1
www             IN      CNAME       yourdomain.com.
blog            IN      A       192.168.0.1

Сохраните файл, затем выйдите.

Пожалуйста, убедитесь, что вы всегда включаете точку в конце доменного имени, когда используете его в файле зоны. Вы можете изменять или добавлять записи в соответствии с вашими требованиями, используя предоставленный шаблон.

Эта строка означает:

 – The domain mentioned in the named.conf.local file, which is yourdomain.com, will be substituted here.
IN – Records of INTERNET type in this case.
SOA – This is the Start Of Authority record, which is the authoritative record for this domain.
ns1.yourdomain.com. – The nameserver DNS record. – The server that handles the domain's DNS.
hostmaster.yourdomain.com. – The email address of the nameserver's manager. The  symbol is replaced with a dot.

Вы можете добавить больше зон и следовать шагам, описанным выше, и обратите внимание, что каждый раз, когда вы изменяете файлы конфигурации Bind, обязательно выполняйте эту команду:

named-checkconf

Если после выполнения команды нет сообщения, то конфигурация в порядке, и мы можем перезапустить службу Bind.

systemctl restart named

На данный момент вы должны иметь возможность использовать ваш сервер в качестве DNS-сервера. Например, мы можем попробовать запросить mail.yourdomain.com

dig mail.yourdomain.com @127.0.0.1

Вышеприведенная команда выдаст следующее сообщение:

; <<>> DiG 9.16.23-RH <<>> mail.yourdomain.com @127.0.0.1
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 933
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: 86b765bc5dc202110100000064a7606f61c60bf02ed52508 (good)
;; QUESTION SECTION:
;mail.yourdomain.com. IN A
;; ANSWER SECTION:
mail.yourdomain.com. 86400 IN A 192.168.0.1
;; Query time: 2 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Thu Jul 06 19:46:39 CDT 2023
;; MSG SIZE rcvd: 92

Как видно, mail.yourdomain.com указывает на 192.168.0.1

Шаг 5. Настройка Systemd

Для того чтобы служба Bind всегда работала, мы можем внести изменения в файл systemd.

systemctl edit named

Добавьте эти две строки в файл и убедитесь, что они находятся в правильном месте.

[Service]
Restart=always
RestartSec=5s

Сохраните файл, затем выйдите.

Теперь давайте перезагрузимся и попробуем убить службу Bind

systemctl daemon-reload
pkill named

Потом проверьте статус Bind. Вы увидите, что служба Bind автоматически перезапустилась.

systemctl status named

Поздравляем! Вы успешно установили частный DNS-сервер с Bind на AlmaLinux 9.

Зарубин Иван Эксперт по Linux и Windows

Парашютист со стажем. Много читаю и слушаю подкасты. Люблю посиделки у костра, песни под гитару и приближающиеся дедлайны. Люблю путешествовать.

Вдохновлен www.rosehosting.com

Похожие статьи

Комментарии (0)