Сборка установка и настройка BIND 9.16.0 из исходников в LXC контейнере Debian 10

Здравствуйте, уважаемые читатели!Данная статья написана по большей части, как заметка по сборке DNS сервиса BIND9.16.0

Появилась она в связи с моими исследованиями работоспособности такой фишки, как RPZ (Response Policy Zone).

Он позволяет переопределять ответы DNS для доменных имен т.е. блокировать тот или иной ресурс на уровне DNS. Я планировал использовать его для блокировки различной рекламы и баннеров.

В версиях BIND9.10 и BIND9.11 он почему-то не работал корректно. А вот в BIND9.16 работает!

Но в этой статье речь пойдет не о блокировке, а о сборке последней стабильной версии BIND9.Мне также не нравилось, что в репозитории для Debian 9 доступен только BIND9.10, а для Debian 10 доступен только BIND9.11

Я решил изучить вопрос сборки и запуска из исходных кодов. Если кому-то это будет полезно, то прошу к изучению.

Сборка и установка

Скачивание

Будем работать от корня

 

cd /root

 

Скачиваем исходники BIND9

Если планируете ставить последнюю версию, то качать отсюда: https://www.isc.org/bind/

 

wget https://downloads.isc.org/isc/bind9/9.16.0/bind-9.16.0.tar.xz

 

Распаковываем

 

tar -xf bind-9.16.0.tar.xz

 

Устанавливаем необходимые зависимости

 

apt update && apt -y install build-essential pkg-config python3-pip libuv1 libuv1-dev libssl-dev libcap-dev libtool-bin

 

pip3 install ply

 

Переходим в распакованную папку

 

cd bind-9.16.0/

 

Конфигурирование

 

В рабочей системе на Debian 10 у установленного BIND выводятся вот такие параметры сборки. Частью из них я и воспользуюсь!

 

BIND 9.11.5-P4-5.1-Debian (Extended Support Version)

 

built with '--build=x86_64-linux-gnu' '--prefix=/usr' '--includedir=/usr/include' '--mandir=/usr/share/man' '--infodir=/usr/share/info' '--sysconfdir=/etc' '--localstatedir=/var' '--disable-silent-rules' '--libdir=/usr/lib/x86_64-linux-gnu' '--libexecdir=/usr/lib/x86_64-linux-gnu' '--disable-maintainer-mode' '--disable-dependency-tracking' '--libdir=/usr/lib/x86_64-linux-gnu' '--sysconfdir=/etc/bind' '--with-python=python3' '--localstatedir=/' '--enable-threads' '--enable-largefile' '--with-libtool' '--enable-shared' '--enable-static' '--with-gost=no' '--with-openssl=/usr' '--with-gssapi=/usr' '--with-libidn2' '--with-libjson=/usr' '--with-lmdb=/usr' '--with-gnu-ld' '--with-geoip=/usr' '--with-atf=no' '--enable-ipv6' '--enable-rrl' '--enable-filter-aaaa' '--enable-native-pkcs11' '--with-pkcs11=/usr/lib/softhsm/libsofthsm2.so' '--with-randomdev=/dev/urandom' '--enable-dnstap' 'build_alias=x86_64-linux-gnu' 'CFLAGS=-g -O2 -fdebug-prefix-map=/build/bind9-9ZuvGL/bind9-9.11.5.P4+dfsg=. -fstack-protector-strong -Wformat -Werror=format-security -fno-strict-aliasing -fno-delete-null-pointer-checks -DNO_VERSION_DATE -DDIG_SIGCHASE' 'LDFLAGS=-Wl,-z,relro -Wl,-z,now' 'CPPFLAGS=-Wdate-time -D_FORTIFY_SOURCE=2'

 

Производим конфигурирование. Через —help вы можете ознакомиться с опциями настройки

 

./configure --prefix=/usr --includedir=/usr/include --mandir=/usr/share/man --infodir=/usr/share/info --sysconfdir=/etc/bind --localstatedir=/var --with-python=python3 --with-libtool --enable-static --with-gost=no --enable-full-report --enable-threads --enable-largefile --with-openssl=/usr

 

 

Больше о возможных параметрах

./configure --help

 

 

 

 

По умолчанию ‘make install’ установит все файлы в «/usr/local/bin’, ‘/usr/local/lib’ и т.д.

Вы можете указать префикс установки, отличный от ‘/usr/local’ используя ‘—prefix’,

Например ‘—prefix=$HOME’

 

После завершения конфигурирования получим итоговый вывод:

Итоговый вывод ./configure

 

===============================================================================

Configuration summary:

-------------------------------------------------------------------------------

Optional features enabled:

        Mutex lock type: 

    IPv6 support (--enable-ipv6)

    Python tools (--with-python)

    Print backtrace on crash (--enable-backtrace)

    Use symbol table for backtrace, named only (--enable-symtable)

    DNSSEC validation active by default (--enable-auto-validation)

    Dynamically loadable zone (DLZ) drivers:

        None

-------------------------------------------------------------------------------

Features disabled or unavailable on this platform:

    Large-system tuning (--with-tuning)

    Allow 'dnstap' packet logging (--enable-dnstap)

    GeoIP2 access control (--enable-geoip)

    GSS-API (--with-gssapi)

    DNS Response Policy Service interface (--enable-dnsrps)

    Allow 'fixed' rrset-order (--enable-fixed-rrset)

    Using PKCS#11 for Public-Key Cryptography (--with-native-pkcs11)

    Very verbose query trace logging (--enable-querytrace)

    Use GNU libtool (--with-libtool)

    CMocka Unit Testing Framework (--with-cmocka)

    XML statistics (--with-libxml2)

    JSON statistics (--with-json-c)

    HTTP zlib compression (--with-zlib)

    LMDB database to store configuration for 'addzone' zones (--with-lmdb)

    IDN support (--with-libidn2)

-------------------------------------------------------------------------------

Configured paths:

    prefix: /usr

    sysconfdir: /etc/bind

    localstatedir: /var

-------------------------------------------------------------------------------

Compiler: gcc

    gcc (Debian 8.3.0-6) 8.3.0

    Copyright (C) 2018 Free Software Foundation, Inc.

    This is free software; see the source for copying conditions.  There is NO

    warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

    

===============================================================================

 

 

Кратко про основные опции:

    • —sysconfdir=/etc/bind: Этот параметр заставляет BIND искать файлы конфигурации в /etc/bind вместо /usr/etc

 

    • —with-libtool: Этот параметр вызывает динамическое создание библиотек и связывает установленные двоичные файлы с этими библиотеками

 

    • —enable-fetchlimit: Используйте эту опцию, если вы хотите иметь возможность ограничить частоту рекурсивных клиентских запросов. Это может быть полезно на серверах, которые получают большое количество запросов

 

    • —disable-static: Этот ключ предотвращает установку статических версий библиотек.

 

 

Сборка

 

Собираем

 

make

 

Устанавливаем

 

make install

 

Проверяем все ли установилось.

named

 

ls -l /usr/sbin/ | grep named

-rwxr-xr-x 1 root root     3801552 Mar 22 12:08 named

-rwxr-xr-x 1 root root      136288 Mar 22 12:08 named-checkconf

-rwxr-xr-x 1 root root      112056 Mar 22 12:08 named-checkzone

lrwxrwxrwx 1 root root          15 Mar 22 12:08 named-compilezone -> named-checkzone

-rwxr-xr-x 1 root root       26896 Mar 22 12:08 named-journalprint

 

rndc

 

ls -l /usr/sbin/ | grep rndc 

-rwxr-xr-x 1 root root       97728 Mar 22 12:08 rndc

-rwxr-xr-x 1 root root       54672 Mar 22 12:08 rndc-confgen

 

Обновляем разрешения библиотек

 

ldconfig -v

 

Устанавливаем документацию

 

install -v -m755 -d /usr/share/doc/bind-9.16.0/arm

 

install -v -m644 doc/arm/*.html /usr/share/doc/bind-9.16.0/arm

 

Настройка

 

Предварительная настройка

 

Добавляем группу bind

 

groupadd bind

 

Добавляем пользователя bind

 

useradd -d /var/cache/bind -g bind -s /bin/false bind

 

Создаем папки для сервиса

Папка /etc/bind/ уже должна быть создана.

 

mkdir /etc/bind/zones /etc/bind/keys /var/cache/bind /run/named /var/run/named /var/log/bind

 

Добавляем файл bind9 в папку базовых настроек /etc/default/

 

nano /etc/default/bind9

 

# run resolvconf?

RESOLVCONF=no



# startup options for the server

OPTIONS="-u bind -4"

 

Создаем systemd сервис для управления BIND9

 

nano /etc/systemd/system/bind9.service

 

[Unit]

Description=BIND Domain Name Server

Documentation=man:named(8)

After=network.target

Wants=nss-lookup.target

Before=nss-lookup.target



[Service]

Type=forking

EnvironmentFile=-/etc/default/bind9

ExecStart=/usr/sbin/named $OPTIONS

ExecReload=/usr/sbin/rndc reload

ExecStop=/usr/sbin/rndc stop



[Install]

WantedBy=multi-user.target

 

Создание конфигурации

 

Создаем ключ rndc.key

 

rndc-confgen -a

 

Переместим его в папку keys

 

mv /etc/bind/rndc.key /etc/bind/keys

 

Создаем файл rndc.conf для управления

 

nano /etc/bind/rndc.conf

 

include "/etc/bind/keys/rndc.key";



options {

	default-key "rndc-key";

        default-server 127.0.0.1;

        default-port 953;

};

 

Создадим минимальный файл конфигурации для запуска BIND9

 

nano /etc/bind/named.conf

 

include "/etc/bind/keys/rndc.key";



options {

        directory "/var/cache/bind";

        pid-file "/var/run/named/named.pid";

        statistics-file "/var/run/named/named.stats";

        dump-file "/var/log/bind/bind.dump";

        max-cache-size 241172480; // 256 Mb

};



controls {

        inet 127.0.0.1 port 953

        allow { 127.0.0.1; } keys { "rndc-key"; };

};



zone "." {

        type hint;

        file "/etc/bind/zones/db.root";

};

zone "localhost" {

        type master;

        file "/etc/bind/zones/db.local";

};

zone "127.in-addr.arpa" {

        type master;

        file "/etc/bind/zones/db.127";

};

zone "0.in-addr.arpa" {

        type master;

        file "/etc/bind/zones/db.0";

};

zone "255.in-addr.arpa" {

        type master;

        file "/etc/bind/zones/db.255";

};



logging {

        category default { bind_log; };

        category unmatched { null; };



        channel bind_log {

                file "/var/log/bind/bind.log" versions 4 size 4m;

                severity info;

                print-category  yes;

                print-severity  yes;

                print-time      yes;

        };

};

 

Добавляем базовые файлы зон

/etc/bind/zones/db.root

 

nano /etc/bind/zones/db.root

 

.                        3600000      NS    A.ROOT-SERVERS.NET.

A.ROOT-SERVERS.NET.      3600000      A     198.41.0.4

A.ROOT-SERVERS.NET.      3600000      AAAA  2001:503:ba3e::2:30

.                        3600000      NS    B.ROOT-SERVERS.NET.

B.ROOT-SERVERS.NET.      3600000      A     192.228.79.201

B.ROOT-SERVERS.NET.      3600000      AAAA  2001:500:84::b

.                        3600000      NS    C.ROOT-SERVERS.NET.

C.ROOT-SERVERS.NET.      3600000      A     192.33.4.12

C.ROOT-SERVERS.NET.      3600000      AAAA  2001:500:2::c

.                        3600000      NS    D.ROOT-SERVERS.NET.

D.ROOT-SERVERS.NET.      3600000      A     199.7.91.13

D.ROOT-SERVERS.NET.      3600000      AAAA  2001:500:2d::d

.                        3600000      NS    E.ROOT-SERVERS.NET.

E.ROOT-SERVERS.NET.      3600000      A     192.203.230.10

.                        3600000      NS    F.ROOT-SERVERS.NET.

F.ROOT-SERVERS.NET.      3600000      A     192.5.5.241

F.ROOT-SERVERS.NET.      3600000      AAAA  2001:500:2f::f

.                        3600000      NS    G.ROOT-SERVERS.NET.

G.ROOT-SERVERS.NET.      3600000      A     192.112.36.4

.                        3600000      NS    H.ROOT-SERVERS.NET.

H.ROOT-SERVERS.NET.      3600000      A     198.97.190.53

H.ROOT-SERVERS.NET.      3600000      AAAA  2001:500:1::53

.                        3600000      NS    I.ROOT-SERVERS.NET.

I.ROOT-SERVERS.NET.      3600000      A     192.36.148.17

I.ROOT-SERVERS.NET.      3600000      AAAA  2001:7fe::53

.                        3600000      NS    J.ROOT-SERVERS.NET.

J.ROOT-SERVERS.NET.      3600000      A     192.58.128.30

J.ROOT-SERVERS.NET.      3600000      AAAA  2001:503:c27::2:30

.                        3600000      NS    K.ROOT-SERVERS.NET.

K.ROOT-SERVERS.NET.      3600000      A     193.0.14.129

K.ROOT-SERVERS.NET.      3600000      AAAA  2001:7fd::1

.                        3600000      NS    L.ROOT-SERVERS.NET.

L.ROOT-SERVERS.NET.      3600000      A     199.7.83.42

L.ROOT-SERVERS.NET.      3600000      AAAA  2001:500:3::42

.                        3600000      NS    M.ROOT-SERVERS.NET.

M.ROOT-SERVERS.NET.      3600000      A     202.12.27.33

M.ROOT-SERVERS.NET.      3600000      AAAA  2001:dc3::35

 

 

 

 

/etc/bind/zones/db.local

 

nano /etc/bind/zones/db.local

 

$TTL    604800

@       IN      SOA     localhost. root.localhost. (

                              2         ; Serial

                         604800         ; Refresh

                          86400         ; Retry

                        2419200         ; Expire

                         604800 )       ; Negative Cache TTL

;

@       IN      NS      localhost.

@       IN      A       127.0.0.1

@       IN      AAAA    ::1

 

 

 

 

/etc/bind/zones/db.127

 

nano /etc/bind/zones/db.127

 

$TTL    604800

@       IN      SOA     localhost. root.localhost. (

                              1         ; Serial

                         604800         ; Refresh

                          86400         ; Retry

                        2419200         ; Expire

                         604800 )       ; Negative Cache TTL

;

@       IN      NS      localhost.

1.0.0   IN      PTR     localhost.

 

 

 

 

/etc/bind/zones/db.0

 

nano /etc/bind/zones/db.0

 

$TTL    604800

@       IN      SOA     localhost. root.localhost. (

                              1         ; Serial

                         604800         ; Refresh

                          86400         ; Retry

                        2419200         ; Expire

                         604800 )       ; Negative Cache TTL

;

@       IN      NS      localhost.

 

 

 

 

/etc/bind/zones/db.255

 

nano /etc/bind/zones/db.255

 

$TTL    604800

@       IN      SOA     localhost. root.localhost. (

                              1         ; Serial

                         604800         ; Refresh

                          86400         ; Retry

                        2419200         ; Expire

                         604800 )       ; Negative Cache TTL

;

@       IN      NS      localhost.

 

 

Обновляем права для папок и устанавливаем возможность записи для группы bind

chown -R root:bind /etc/bind /var/cache/bind /run/named /var/run/named /var/log/bind

 

chmod -R g+w /etc/bind /var/cache/bind /run/named /var/run/named /var/log/bind

 

Обновляем права для файла /etc/bind/keys/rndc.key

 

chown bind:bind /etc/bind/keys/rndc.key

 

Запуск сервиса

 

Активируем сервис BIND9 и запускаем его

 

systemctl enable bind9.service

 

systemctl start bind9.service

 

Проверяем работу

 

service bind9 status

 

gost-bind-endstatus

Итоговый статус работы BIND9.16.0

Дополнительно процесс запуска можно просмотреть в лог файле /var/log/syslog и /var/log/bind/bind.log

 

starting BIND 9.16.0 (Stable Release) <6270e60/>

 

Далее
настройки конфигурации и файлы зон можно реализовать по примеру статьи Домашний Сервер Часть–Внутренний сервис на или свои доменные имена в локальной сети

Обновление версии из исходников

Конечно встает вопрос о том а как потом это дело обновлять Ведь гораздо проще запустить &&
Вслучае сборки По из исходных кодов обновляться нам такжепридется из исходных кодов но тут уже может быть чуть проще
Качаем более новую версию распаковываем конфигурируем собираем и устанавливаем
Незабываем заранее остановить работающий Все должно работать как и раньше а возможно что то и лучше тк мы ставили версию с какимито и справлениями
Историю изменений можно найти здесь

Заключение

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

Благодарю за ваше время
Всего хорошего напросторах Интернета😉