BIND9
BIND - Berkeley Internet Name Daemon
bind имеет утилиты для проверки конфига и зоны:
named-checkconf
named-checkzone
rndc - утилита для управления биндом (remote name daemon control)
Зонный трансфер - один из механизмов репликации баз DNS между серверами. Бывает полным (AXFR) и инкрементальным (IXFR)
Трансфер происходит по TCP в отличие от обычных DNS-запросов
Результат работы команды
dig
выводится в формате зонного файла
Настройки корневой зоны всегда доступны по адресу ftp://ftp.internic.net/domain/named.root
Комментарии в зонном файле вводятся с помощью ;
В зонном файле можно указать переменные ORIGIN и TTL и не указывать для каждой записи TTL и ORIGIN (ориджин можно итак не указывать, но имея переменную это выглядит более очевидно)
$ORIGIN testzone.vandud.ru.
$TTL 3600
@ IN SOA (
phobos.vandud.ru.
dns-admin.dns
2020082011
7200
1200
64800
3600
)
@ IN NS phobos.vandud.ru.
web IN TXT "sosamba; nstshsnthst pidor"
test1 IN CNAME test2
test2 IN CNAME test1
Glue records
- Glue records или добавочная запись - это А-запись, в которой хранится IP-адрес, присвоенный домену или поддомену
Итак, есть существующая зона minsk.by. Мы подаем заявку на делегирование домена 3-го уровня nestor.minsk.by. В качестве неймсерверов будут выступать хосты с именами ns1.nestor.minsk.by и ns2.nestor.minsk.by. Чтобы все заработало, администратор зоны minsk.by должен прописать у себя примерно следующее:
$ORIGIN = minsk.by
nestor IN NS ns1.nestor
nestor IN NS ns2.nestor
ns1.nestor IN A 194.226.121.90
ns2.nestor IN A 194.158.200.188
Последние две записи и есть glue records, без которых запросы будут зацикливаться
Личный пример
root@phobos:/var/named/zones# cat testzone.vandud.ru
...
testns 3600 IN NS testns.testzone.vandud.ru.
testns 3600 IN A 185.176.25.117 <- без этой записи BIND не заведется
И на вот такой запрос получаем ответ:
$ dig ns testns.testzone.vandud.ru @phobos.vandud.ru.
...
;; QUESTION SECTION:
;testns.testzone.vandud.ru. IN NS
;; AUTHORITY SECTION:
testns.testzone.vandud.ru. 3600 IN NS testns.testzone.vandud.ru.
;; ADDITIONAL SECTION:
testns.testzone.vandud.ru. 3600 IN A 185.176.25.117
Как видно, на запрос в котором запрашивается только NS, сервер также подсовывает нам и additional records, в которых указан адрес сервера из NS записи, потому что иначе его получить нельзя
Простой конфиг
# cat /etc/bind/named.conf <- положение этого файла зависит от того как собран bind
# (может быть /etc/named.conf, а может быть /etc/bind/named.conf;
# посмотреть как он собран можно через named -V
options {
directory "/var/named";
};
zone testzone.vandud.ru. { <- имя зоны за которую отвечает файл из директивы file
type master;
file "zones/testzone.vandud.ru";
};
В /var/named/zones/testzone.vandud.ru имена могут быть абсолютными (с точкой на конце) или относительными, тогда к ним будет добавляться зона
Примеры:
-
web.testzone.vandud.ru.
- абсолютный -
web
- относительный -
@
- пустое относительное имя (то есть сама зона)
Чтобы запись SOA была более читаемой (ведь она очень длинная) можно разбить ее на несколько строк
Для этого нужно использовать круглые скобки@ 3600 IN SOA ( phobos.vandud.ru. dns-admin.dns 2020082002 7200 1200 64800 3600 ) @ 3600 IN NS phobos.vandud.ru. web 3600 IN A 8.8.8.8
Вторичный DNS-сервер
# cat /etc/bind/named.conf
options {directory "/var/named";};
zone testzone.vandud.ru. {
type slave;
file "zones/testzone.vandud.ru";
masters { 185.176.25.117; }; <- хз почему, но домен указать нельзя
};
Далее запускаем сервер убедившись что все окей с правами на директории и видим что файл зоны подгрузился в /var/named/zones/testzone.vandud.ru
При настройке вторичного сервера нужно учитывать права на файлы и директории в системе. Нужно чтобы процессу named была доступна запись в указанные в конфигах директории, чтобы он мог записывать туда скачанные с первичного сервера зоны
Также можно использовать setuid/setgid для дополнительной безопасности
Кэширующий DNS-сервер
Базовый конфиг кэширующего сервера
options {
directory "/var/named/zones";
forwarders { 1.1.1.1; };
allow-query { any; };
allow-query-cache { any; };
};
Или
zone "." {
type hint;
file "/etc/bind/db.root"; # <- путь к файлу с рут-зоной (с адресами корневых)
# а так же в этом варианте требуются некоторые настройки в options (мне лень искать и писать)
};
Работает)
$ dig a mail.ru @deimos.vandud.ru +short
217.69.139.202
94.100.180.201
94.100.180.200
217.69.139.200
rndc
Управление сервером BIND 9 производится с помощью специальной утилиты rndc
, которая соединяется с сервером (по умолчанию - TCP порт 953) и использует специальный протокол для передачи ему команд
Файл /etc/rndc.conf имеет тот же синтаксис что и /etc/named.conf и содержит в себе настройки подключения к BIND (адрес, порт, пароль, алгоритм, etc)
Имеет следующие команды:
- reload - перезагрузить файл настройки и зоны
- reload зона [класс [вид]] - перезагрузить зону
- refresh зона [класс [вид]] - запланировать немедленное обновление зоны
- reconfig - перезагрузить файл настройки и новые зоны
- stats - записать статистику в конец файла named.stats
- querylog - включить/выключить журнализацию запросов
- dumpdb - сбросить базу данных в файл named_dump.db
- stop - сохранить изменения в файлы зон и остановить сервер
- halt - остановить сервер без сохранения изменений
- trace - увеличить уровень отладки на 1
- trace уровень - установить уровень отладки
- notrace - отключить отладку
- flush - сбросить весь кеш
- flush вид - сбросить кеш для указанного вида
- status - показать состояние сервера
- restart - перезапустить сервер; не реализовано (?)
No Comments