DNS сервер BIND
DNS как служба
Основное предназначение это преобразование IP адресов в доменные имена и наоборот.
DNS сервера BIND (Berkeley Internet Name Domain, ранее: Berkeley Internet Name Daemon) самая популярная реализация данной службы. Основу BIND составляет демон named, который для своей работы использует порт UDP/53 и для некоторых запросов TCP/53.
По стандарту RFC 1035 все DNS-серверы отвечают на порту 53 TCP и UDP. Ранние версии BIND использовали 53 порт так же и при отправке исходящих запросов, более новые ведут себя как обычные DNS-клиенты, используя свободные незарегистрированные порты.
Версия BIND 9 была последней, с 10-й версии права передают сообществу, и называется Bundy.
Устанавливается для Debian подобных ОС sudo apt install bind9
. Чобы посмотреть пакеты нужные для работы bind9 apt cache search bind9
Структура DNS
-
Вершина - корневая зона “.”. Ее настройки всегда общедоступны. Информация о вершинах на серверах первого уровня.
-
Домены первого \ верхнего уровня. TDL.
-
Домены второго. N уровня.
-
Имена хостов - задаются ресурсными или хостовыми записями.
Терминология:
-
Зона - часть дерева размещаемая как единое целое на некотором DNS. Имеется как минимум один авторитарный сервер хранящий информацию о зоне. Например cisco.ru. Для большего понимания зону можно считать зоной ответственности. Целью выделения части дерева в зону является делегирования ответственности за эту ветвь другому лицу\организации.
-
Домен - узел включающий в себя все подчиненные узлы. Например для cisco.ru подчиненные узлы будут n1.cisco.ru, test.cisco.ru.
-
FQDN - полное определение доменного имени. Как абсолютный путь в файловой системе. FQDN - 256 байт с ограничением в 63 байта на каждое имя домена. Пример host.name. и “.” в конце значит корневую зону.
Сервер DNS.
-
Главный DNS (master, primary) - хранит главную копию файла доменных зон. Загружает информацию из конфигурационных файлов зоны. Авторитарен.
-
Вторичный - копирует файлы с первичного. Авторитарен.
-
Кэширующий - хранит ответы на предыдущие запросы. Не авторитарен.
Ресурсная запись. Единица хранения и передачи информации в DNS.
Символы в записях:
- ”;” - вводит комментарий
- ”#” - тоже комментарий только в версии BIND 4.9
- ”@” - имя текущего домена
- ”()” - позволяет данным занимать несколько строк
-
”*” - метасимвол, только в моле имя
-
Name - доменное имя к которому привязаня \ принадлежит данная запись, либо IP адрес. При отсутствии этого поля, запись ресурса наследуется от предыдущей записи.
-
TTL - время хранения записи в кэше. Может указываться в начале каждой записи либо в начале файла зоны и наследоваться всеми записями.
-
Class - тип сети. В 99,99% это “IN” - Internet. Поле создано из предположения, что DNS может работать в сетях отличных от TCP\IP.
- Type - тип ресурсной записи.
Type - тип записи:
A - address record
- Отображает имя хоста (доменное имя) на адрес IPv4. Для каждого сетевого интерфейся машины должна быть сделан одна A запись.
- host.name. 86400 IN A 81.111.139.32
AAAA
- Аналогично A записи только для IPv6.
CNAME - canonical name
- Отображает алиас (псевдоним) на реальное имя, для перенаправления на другое имя.
ftp 86400 IN CHAME ftp.host.name.
MX - mail exchange
- Указывает хосты для доставки почты адресованной домену. При этом поле Name - домен назначения, Data - приоритет и DN хоста ответственного за прием почты.
host.name. 86400 IN MX 10 mx.host.name.
host.name 86400 IN MX 20 mx2.host.name.
NS - name server
- Указывает DNS сервер обслуживающий зону.
name. 5772 IN NS l6.htn.com.
name. 5772 IN NS m6.htm.com.
PTR - pointer.
- Отображает IP адрес в доменное имя, т.е. обратное преобразование имен.
81.111.139.32 86400 PTR host.name.
- Имя 81.11.139.32 не заканчивается “.” поэтому является относительным а не FQDN
- Для обратного преобразования имен используется специальный домен “in-addr.arpa.”
SOA - start of authority. Определяет зону ответственности сервера.
- Имя главного DNS
- Адрес администратора зоны.
- Серийный номер файла зоны, который нужно увеличивать при каждом изменении файла зоны.
- refresh - как часто вторичные DNS опрашивают первичные
- retry - кол-во попыток
- expire - максимальное время использования полученной информации о зоне.
- Min TTL
host.name. 86400 IN SOA ns1.test.ru hostmaster.test.ru. ( 2011032003 28800 7200 604800 86400
)
SRV - server section
- Указывает на сервер обеспечивающий работу тех или иных служб. Например Jabber, AD, Proxy
Клиенты DNS (resolver)
Используют системные вызовы
- gethostbyname(2)
- gethostbyaddr(2)
Ядро на основании файла /etc/nsswitch.conf
определяет по какому пути действовать.
cat /etc/nsswitch.conf
hosts: file dns
networks: file /файл /etc/network
; Т.е. для преобразования имен хостов в IP сначало смотрим в hosts а затем запрос к DNS если там не оказалось.
Если согласно /etc/nsswitch.conf
запрос идет на DNS то исп /etc/resolv.conf
.
cat /etc/resolv.conf
nameserver 192.168.1.1
nameserver 192.168.1.2
domain example.com ; имя по умолчанию если DNS не удается найти имя хоста.
domain и search вместе не применяются.
Запросы DNS
- Итеративный (прямой) - посылает доменное имя DNS серверу и ожидает получить IP адрес домена или имя авторитарного для этого домена сервера.
- Рекурентный - посылает доменное имя и просит вернуть IP. При этом может обращатся к нескольким серверам.
- Обратны - посылает IP и просит венуть доменное имя.
Ответы DNS
Ответы DNS бывают следующего типа:
- Авторитативный ответ (authoritative response) приходит от серверов, являющихся ответственными за зону.
- Неавторитативный ответ (non authoritative response) приходит от серверов, которые не отвечают за зону (от кэширующих).
Ответ DNS можно помотреть утилитой dig
dig yandex,ru
Ответ DNS обычно содержит следующую информацию:
- Запись заголовка — служебную информацию о запросе.
- Запись запроса — повторяет отправленный запрос.
- Запись ответа — собственно, сам ответ.
- Записи авторитетных серверов — информацию об авторитетных серверах, хранящих информацию по текущему запросу.
- Дополнительную информацию — дополнительные записи, например адреса NS-серверов.
Пример ответа для яндекса dig ya.ru
; <<>> DiG 9.7.3 <<>> ya.ru (раздел заголовка)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 53499
;; flags: qr rd ra; QUERY: 1, ANSWER: 7, AUTHORITY: 2, ADDITIONAL: 3
;; QUESTION SECTION: (раздел запроса)
;ya.ru. IN A
;; ANSWER SECTION: (раздел ответа)
ya.ru. 4813 IN A 87.250.250.203
ya.ru. 4813 IN A 87.250.251.3
ya.ru. 4813 IN A 93.158.134.3
ya.ru. 4813 IN A 93.158.134.203
ya.ru. 4813 IN A 213.180.204.3
ya.ru. 4813 IN A 77.88.21.3
ya.ru. 4813 IN A 87.250.250.3
;; AUTHORITY SECTION: (авторитативные сервера)
ya.ru. 4813 IN NS ns1.yandex.ru.
ya.ru. 4813 IN NS ns5.yandex.ru.
;; ADDITIONAL SECTION: (дополнительная информация - адреса авторитативных name servers)
ns5.yandex.ru. 345565 IN A 213.180.204.1
ns1.yandex.ru. 345565 IN A 213.180.193.1
ns1.yandex.ru. 3565 IN AAAA 2a02:6b8::1
;; Query time: 7 msec
;; SERVER: 192.168.1.1#53(192.168.1.1)
;; WHEN: Sat Jul 2 23:02:45 2011
;; MSG SIZE rcvd: 238
Настройка BIND 9
База данных прямого преобразования
** Расположение ** /etc/bind/db.RS
$TTL 5D; чтобы не записывать каждый раз TTL установил время жизни записи 5 дней
@ IN SOA skynet.local. skynetadmin.local. ( 100 10h 1h 1w 1d )
local. IN NS skynet.local.
skynet IN A 192.168.0.100 ; localhost, в частнотси на нем же прокси
88 IN A 192.168.88.7 ; Компьютер в сети
База данных обратного преобразования имен для подсети 192.168.88.0
** Расположение ** /etc/bind/db.rev88.RS
$TTL 3600
88.168.192.in-addr.arpa. IN SOA skynet.local. skynetadmin.local. ( 100 10h 1h 1w 1d )
@ IN NS skynet.local
7 IN PTR 88.local. ; Компьютер c адресом 192.168.88.7
Конфигурация локальных настроек
** Расположение ** /etc/bind/named.conf.local
. Для любых локальных конфигураций.
zone "local" { type: master; file: "/etc/bind/db.RS ";}
zone "88.168.192.in-addr.arpa" { type: master; file: "/etc/bind/db.rev88.RS ";}
Глобальные настройки DNS сервера
** Расположение ** /etc/bind/named.conf.options
.
options {
directory "/var/cache/bind";
forwarders {
8.8.8.8;
4.4.4.4
};
listen-on { 127.0.0.1 };
allow-query { any };
dnssec-validation auto;
auth-nxdomain no;
};
Команды проверки работоспособности DNS
-
sudo named-checkconf -z
Проверяет файлы зон на наличие ошибок -
sudo rndc reload
обновляет информацию о зонах -
nslookup 192.168.0.100
илиnslookup skynet
проверка функционирования bind
Пример настройки прямой почтовой зоны
$TTL 5D
@ IN SOA server2.rs.local. admin.rs.local. ( 110h 1h 1w 1d )
rs.local. IN NS server2.rs.local.
rs.local. IN TXT "V=spf1 ip4:34.10.88.120 +a -all" // Т.е. письма из нашего домена считаются отправленными с ip 34.10.88.120
rs.local. IN SPF"V=spf1 ip4:34.10.88.120 -all" // Для новых DNS серверов аналогична предыдущей
server2 IN A 34.10.88.120
mail IN A 34.10.88.120
pop IN CNAME mail.rs.local.
smtp IN CNAME mail.rs.local.
\_adsp.\_domaynkey.rs.local. TXT "dkim = all" // Все письма должны быть подписаны DKIM ключем