Try   HackMD
tags: bind9 DNS Linux

Настройка DNS на bind9 в Linux.

Установите пакет bind9.

apt update && apt install bind9

Перейдите в каталог /etc/bind. Давайте разберемся с содержимым этого каталога.

  • bind.keys - этот файл предназначен для ключей, используемых в dnssec. Для нас он пока неинтересен
  • db.{0,127,255,empty,local} - эти файлы можно назвать служебной информацией. Они определяют доменную зону локалхоста и дефолтные реверсные зоны
  • db.root - тут содержатся адреса корневых DNS-серверов.
  • named.conf - основной конфигурационный файл. При запуске сервис ищет именно его, если не указано иное. Для удобства файл разбит на несколько частей, которые добавляются в него с помощью инструкции include.
  • named.conf.default-zones - в этом файле подключаются дефолтные доменные зоны, описанные ранее.
  • named.conf.local - тут можно описать доменные зоны, которые мы заведем на нашем сервере. Сейчас он нам не нужен, хотя в ходе урока мы до него доберемся.
  • named.conf.options - тут описываются настройки самого сервера, а не доменных зон.
  • rndc.key - ключ для утилиты rndc, с помощью которой управляют DNS-сервером. Утилита может жить как на том же сервере, так и на любом другом компьютере. Главное описать параметры подключения к DNS-серверу.
  • zones.rfc1918 - тут описываются обратные зоны для серых подсетей. По умолчанию для них для всех используется empty.db, но при необходимости всегда можно переопределить.

Базовая настройка bind9.

Нас сейчас будет интересовать только файл named.conf.options. Откроем его с помощью текстового редактора:

Некоторые из доступных опций:

  • listen-on - позволяет указать интерфейсы на которых DNS-сервер будет слушать запросы. Для работы на всех интерфейсах не указывайте параметр или же задайте «any;» Это может выглдить так:
listen-on {10.0.0.1; 192.168.1.10} 
  • allow-query - указывает, кому разрешено выполнять запросы. BIND9 по умолчанию разрешает только локальные запросы, поэтому добавьте необходимые IP-адреса или пропишите «any;», чтобы разрешить все запросы. Для удобства вы можете перед блоком options создать acl лист:
acl "corpnets" {192.168.1.0/24};
options{
allow-query {"corpnets";};
}
  • forwarders - cерверы пересылки содержат IP-адреса DNS-серверов, на которые перенаправляется запрос в случае, если наш сервер не содержит необходимых данных.

Расскоментируйте блок forwarders и добавьте адреса DNS серверов гугла.

forwarders {
        8.8.8.8;
        8.8.4.4;
};

Что бы сервер мог отвечать на запросы из любых сетей нужно добавить в блок optinos запись:

allow-query { any;};

Для проверки конфигурации bind9 есть команда:

named-checkconf

Если она не чего не выводит то скорее всего все хорошо.
Перезагрузите dns сервер:

systemctl restart bind9

Для проверки работы DNS сервера можно сделать на него запрос с помощью утилиты nslookup, чтобы обратиться к конретному DNS серверу, а не тому который у вас в настройках сетевого адаптера нужно указать ip DNS сревера после команды:

nslookup yandex.ru 81.163.26.69  

Вывод будет подобный этому:

Настройка зоны.

Откройте в любом редакторе файл named.conf.local. Для добавления зоны существует следующий синтаксис:

zone "mpt.xuz"{
    type master;
    file "/etc/bind/master/mpt.xuz.zone";
    allow-query {any;}; 
};

И так что у нас тут есть:

  • zone "mpt.xuz" - собственно имя обслуживаемой зоны.
  • type - это тип зоны (в нашем случае первичная — значит master). Другие варианты — slave, stub, forward.
  • file - тут указываеться путь до файла с записями зоны.
  • allow-query {any;}; аналогично подобной записи в named.conf.options.

Что еще можно тут указать?

  • allow-transfer - Список других DNS-серверов (вторичных) для передачи им зоны. Можно указывать подсети.
  • allow-update - Список хостов, с которых разрешено обновление записей в зоне (для DDNS). Можно указать подсети.

Создаем файл с записями зоны.

И так давайте передем дальше. Создайте в каталоге /etc/bind папку master.

mkdir /etc/bind/master

Для конфигурирования зоны в директории /etc/bind уже есть готовый шаблон:

Создайте на основе этого шаблона файл /etc/bind/master/mpt.xuz.zone. Для этого можно использовать команду:

cp /etc/bind/db.local /etc/bind/master/mpt.xuz.zone 

Теперь давайте изменим файл следующим образом:

;
; BIND data file for local loopback interface
;
$TTL    604800
mpt.xuz.        IN      SOA     ns.mpt.xuz. root.localhost. (
                              2         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;
@       IN      NS      ns.mpt.xuz.
@       IN      NS      localhost.
@       IN      A       81.163.26.69
srv     IN      A       81.163.26.69

Что нужно знать:

  • $TTL 604800 - это время актуальности записей в секундах. Необходим, чтобы указать другим DNS-серверам, как долго стоит хранить запись у себя в кэше.
  • SOA-запись в данном примере эта запись идет сразу после параметра TTL. Ее стоит описать отдельно. Она хранит общие настройки для зоны.

Точки в конце доменных имен являються обязательными и указывают на корневой домен. Подробнее можно узнать тут.

Подробнее про настройки зоны
  • Serial — порядковый номер изменения. Его необходимо каждый раз менять вручную при редактировании файла. С помощью него вторичный сервер (если такой есть), может определить, что были изменения и начать процесс копирования настроек.
  • Refresh указывает вторичным серверам, через какой промежуток времени они должны сделать запрос на обновление зоны.
  • Retry говорит вторичным серверам, как часто повторять попытки на обновление зоны, если первичный сервер не смог дать ответ (сервис был недоступен).
  • Expire — время в секундах, которое может работать вторичный сервер, если недоступен первичный. Если данный период истечет, а вторичный сервер так и не смог обновить зону, он должен прекратить отвечать на запросы.

Что касаеться самой записи:

mpt.xuz.  IN   SOA   ns.mpt.xuz. root.localhost.

В начале вы указываете название обслуживаемой зоны после запись типа ns.название_обслуживаемой_зоны а дальше пользователя который обслуживает зону можно оставить root по умолчанию.

Как записываються записи которые обслуживает зона:

  • @; srv - Собственно доменное имя хоста. Может записываться без домена (как в данном примере) — он будет дописан автоматически. Также может быть записан полностью с доменом — в таком случае необходимо поставить точку на конце, например, mail.test.local. Если не указывается или обозначается знаком собаки (@), запись создается для имени зоны (в данном случае, mpt.xuz.).
  • класс Всегда используется IN (Internet). Указывает на тип сети.

Далее указываеться тип записи.

Основные типы записей, использующиеся в DNS:
  • A — сопоставляет имени узла соответствующий IP-адрес.
  • NS — указатель на DNS-сервера, которые обслуживают данную зону.
  • MX — почтовая запись. Указывает на почтовые сервера, которые обслуживают домен. Поддерживает приоритизацию — при указании нескольких записей, клиент будет ориентироваться на значение той, для которой указано меньшее число.
  • CNAME — aliase или псевдоним. Перенаправляет запрос на другую запись.
  • TXT — произвольная запись. Чаще всего используется для настройки средств повышения качества отправки почтовых сообщений.

Ну и конце пишеться значение для записи обычно это: IP-адрес, имя узла или текстовая запись.

Давайте проверим обслуживает ли сервер созданную зону:

Ответ был получен согласно созданным записям.