Установка и настройка DNS сервера Bind9 в Debian/Ubuntu Linux
Сервер DNS (Domain Name Services - сервис доменных имен) предназначен для преобразования доменных имен в IP адрес (прямое преобразование) и обратно (обратное преобразование, reverse DNS).
Установка DNS сервера
Этот пакет является основополагающим, и присутствует во всяческих репозиториях.
Установка производится стандартным образом:
apt install -y bind9 bind9utils
Стандартными для Debian/Ubuntu Linux расположениями файлов Bind9 являются
/etc/default/bind9- параметры запуска демона;/etc/bind/- файлы конфигурации;/var/cache/bind/- директория обслуживаемых доменных зон;/var/log/bind/- файлы журналов.
Четко установившаяся традиция разделения длинных конфигурационных файлов на части здесь может быть использована максимально эффективно при помощи директивы include, где основной файл конфигурации выглядит так
include "/etc/bind/named.conf.options"; include "/etc/bind/named.conf.local"; include "/etc/bind/named.conf.default-zones"; include "/etc/bind/named.conf.zones"; include "/etc/bind/named.conf.zones.dynamic";
Основные параметры конфигурации DNS Bind9
В разделе options определяются общие параметры DNS сервера.
directory- определяет расположение мастер-файлов зон;forwarders- вышестоящие DNS серверы (заменить 0.0.0.0 и убрать комментарий);listen-on- какие интерфейсы должны прослушиваться;version- информация о версии сервера.
options {
// forwarders { 0.0.0.0; };
directory "/var/cache/bind";
listen-on { 10.0.1.2; 10.0.2.2; 10.0.3.2; 127.0.0.1; };
version none;
};Журналирование в DNS Bind9
Для разбивки журналов можно использовать каналы, которые записывать в различные файлы.
logging {
// Общий канал для всех запросов в DNS
channel default_ch {
// Параметры ротации файла: размер 100КБ, 4 версии
file "/var/log/bind/named.log" versions 4 size 100k;
severity info; // Уровень информативности
print-time yes; // Показывать время
print-category yes; // Указывать категорию
};
// Канал для упрощенных запросов
channel lame_ch {
file "/var/log/bind/lame_servers.log" versions 4 size 100k;
severity info;
print-time yes;
print-category yes;
};
// Канал безопасности
channel security_ch {
file "/var/log/bind/security.log" versions 4 size 100k;
severity info;
print-severity yes;
print-time yes;
print-category yes;
};
// Канал передачи зон между серверами
channel xfer_ch {
file "/var/log/bind/xfer.log" versions 4 size 100k;
severity info;
print-time yes;
print-category yes;
};
// Канал отладки обновлений зон
channel update_debug {
file "/var/log/bind/update_debug.log" versions 4 size 100k;
severity debug 3;
print-category yes;
print-severity yes;
print-time yes;
print-severity yes;
print-time yes;
};
// Канал обновлений зон
channel update_log {
file "/var/log/bind/update.log" versions 4 size 100k;
severity dynamic;
print-category yes;
print-severity yes;
print-time yes;
};
// Направление категорий сообщений в соответствующие каналы
category lame-servers { lame_ch; };
category xfer-in { xfer_ch; };
category xfer-out { xfer_ch; };
category update { update_debug; update_log; };
category update-security { update_debug; };
category security { security_ch; };
category default { default_ch; };
};При необходимости отключения любой категории, направьте ее в null
category lame-servers { null; };Добавление зоны в DNS
Для добавления своей динамической в данном случае зоны воспользуемся файлом, например, named.conf.zones.dynamic.
Добавим секретный ключ для DHCP
key DHCP_UPDATER {
algorithm HMAC-MD5.SIG-ALG.REG.INT;
secret S2RoX3bfdXXkYgRlco4rMMM3KzU4MzkwCg==;
};zone "antroot.lan" {
type master;
file "antroot.lan.hosts";
masterfile-format text;
allow-update {
key DHCP_UPDATER;
10.0.3.2;
10.0.3.3;
};
notify no;
};
zone "3.0.10.in-addr.arpa" IN {
type master;
file "_db.10.0.3";
masterfile-format text;
allow-update {
key DHCP_UPDATER;
10.0.3.2;
10.0.3.3;
};
};И также необходимо создать мастер-файлы этих зон в директории /var/cache/bind
Мастер файл прямой зоны antroot.lan.hosts
$ORIGIN .
$TTL 86400 ; 1 day
antroot.lan IN SOA antroot.lan. admin.antroot.lan. (
2021100601 ; serial
600 ; refresh (10 minutes)
300 ; retry (5 minutes)
3600 ; expire (1 hour)
600 ; minimum (10 minutes)
)
NS ns.antroot.lan.
MX 10 mx.antroot.lan.
TXT "antroot.ru server"
HINFO "Pentium-III-1200" "Linux"
A 10.0.3.2
$ORIGIN antroot.lan.
ns A 10.0.3.2
mx A 10.0.3.2
$TTL 300 ; 5 minutes
nas. A 10.0.3.8Мастер файл обратной _db.10.0.3
$ORIGIN .
$TTL 600 ; 10 minutes
3.0.10.in-addr.arpa IN SOA mijor.lan. cd.mijor.lan. (
34 ; serial
600 ; refresh (10 minutes)
3600 ; retry (1 hour)
86400 ; expire (1 day)
3600 ; minimum (1 hour)
)
NS localhost.
$ORIGIN 3.0.10.in-addr.arpa.
$TTL 300 ; 5 minutes
90 PTR nas.mijor.lan.Проверка конфигурационных файлов:
named-checkconf /etc/bind/named.conf
Настройка Split DNS
Иногда требуется сделать различное отображение данных DNS для внутренних клиентов в корпоративной сети и для внешних, обращающихся через интернет. В частности, для использования машин с несколькими IP адресами, или работающими через nginx/haproxy прокси серверы.
Определим внешних и внутренних клиентов:
acl internal_nets { 172.16.72.0/24; 192.168.1.0/24; };
acl external_nets { bastion-ips-go-here; };view "internal" {
match-clients {
192.168.0.0/16;
172.16.0.0/12;
10.0.0.0/8;
127.0.0.0/8;
};
recursion yes;
zone "antroot.ru" {
type master;
file "antroot.ru.local.hosts";
...
}
include "named.conf.zones";
}
view "external" {
match-clients { any; };
zone "antroot.ru" {
type master;
file "antroot.ru.hosts";
notify yes;
allow-transfer { slave_ns; };
};
include "named.conf.zones";
};Здесь определено два отображения view, internal - внутренняя, котороая будет отдаваться только на запросы из внутренних сетей, и external - внешняя, которая будет отвечать на запросы любому клиенту. При помощи директивы include подключаются общие для всех клиентов данные.
В приведенном примере, разделяется (split) зона antroot.ru. Мы определяем адреса серверов из демилитаризованной зоны в файле antroot.ru.local.hosts
srv1 IN A 10.0.3.101 srv2 IN A 10.0.3.102
и наряду с этим задаем в файле antroot.ru.hosts белый IP адрес, на котором установлен, например, прокси сервер, перенаправляющий запросы по имени хоста на соответствующий адрес в локальной сети:
srv1 IN A 50.60.70.80 srv2 IN A 50.60.70.80
Запуск сервера DNS Bind9
Запуск, перезапуск осуществляется через утилиту systemctl
systemctl start bind9 systemctl enable bind9 systemctl status bind9
Управление DNS через утилиту rndc
Сгенерировать конфигурацию rndc:
rndc-confgen > /etc/bind/rndc.conf
key "rndc-key" {
algorithm hmac-md5;
secret "ABCDEFGHIJKLMNOPQRSTUVWXYZ==";
};
options {
default-server 127.0.0.1;
default-port 953;
default-key "rndc-key";
};Добавить в /etc/bind/named.conf
include "/etc/bind/rndc.key";
controls {
inet 127.0.0.1 port 953
allow { 127.0.0.1; } keys { "rndc-key"; };
};После перезапуска bind9 (systemctl restart bind9) можно воспользоваться:
rndc status- вывод общего состояния DNS сервера;rndc freeze antroot.lan- заморозка зоны antroot.lan для ручного внесения изменений;rndc thaw antroot.lan- вернуть возможность обновления зоны antroot.lan.
Некоторые ошибки
Ошибка синхронизации журнала изменений зоны
general: zone antroot.lan/IN: journal rollforward failed: journal out of sync with zone
Удалить файл журнала и перезапустить DNS сервер
rm var/cache/bind/antroot.lan.hosts.jnl systemctl restart bind9