###### 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;» Это может выглдить так:
``` bind9
listen-on {10.0.0.1; 192.168.1.10}
```
- `allow-query` - указывает, кому разрешено выполнять запросы. BIND9 по умолчанию разрешает только локальные запросы, поэтому добавьте необходимые IP-адреса или пропишите «any;», чтобы разрешить все запросы. Для удобства вы можете перед блоком `options` создать `acl` лист:
```bind
acl "corpnets" {192.168.1.0/24};
options{
allow-query {"corpnets";};
}
```
- `forwarders` - cерверы пересылки содержат IP-адреса DNS-серверов, на которые перенаправляется запрос в случае, если наш сервер не содержит необходимых данных.
Расскоментируйте блок `forwarders` и добавьте адреса DNS серверов гугла.
```bind
forwarders {
8.8.8.8;
8.8.4.4;
};
```
Что бы сервер мог отвечать на запросы из любых сетей нужно добавить в блок `optinos` запись:
```bind9
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`. Для добавления зоны существует следующий синтаксис:
```bind
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
;
; 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. Ее стоит описать отдельно. Она хранит общие настройки для зоны.
:::danger
Точки в конце доменных имен являються обязательными и указывают на корневой домен. [Подробнее можно узнать тут.](https://habr.com/ru/post/137587/)
:::
:::info
:::spoiler Подробнее про настройки зоны
>
- Serial — порядковый номер изменения. Его необходимо каждый раз менять вручную при редактировании файла. С помощью него вторичный сервер (если такой есть), может определить, что были изменения и начать процесс копирования настроек.
- Refresh указывает вторичным серверам, через какой промежуток времени они должны сделать запрос на обновление зоны.
- Retry говорит вторичным серверам, как часто повторять попытки на обновление зоны, если первичный сервер не смог дать ответ (сервис был недоступен).
- Expire — время в секундах, которое может работать вторичный сервер, если недоступен первичный. Если данный период истечет, а вторичный сервер так и не смог обновить зону, он должен прекратить отвечать на запросы.
Что касаеться самой записи:
```
mpt.xuz. IN SOA ns.mpt.xuz. root.localhost.
```
В начале вы указываете название обслуживаемой зоны после запись типа ns.название_обслуживаемой_зоны а дальше пользователя который обслуживает зону можно оставить `root` по умолчанию.
:::
Как записываються записи которые обслуживает зона:
- `@; srv` - Собственно доменное имя хоста. Может записываться без домена (как в данном примере) — он будет дописан автоматически. Также может быть записан полностью с доменом — в таком случае необходимо поставить точку на конце, например, mail.test.local. Если не указывается или обозначается знаком собаки (@), запись создается для имени зоны (в данном случае, mpt.xuz.).
- `класс` Всегда используется IN (Internet). Указывает на тип сети.
Далее указываеться тип записи.
:::info
:::spoiler Основные типы записей, использующиеся в DNS:
>
- A — сопоставляет имени узла соответствующий IP-адрес.
- NS — указатель на DNS-сервера, которые обслуживают данную зону.
- MX — почтовая запись. Указывает на почтовые сервера, которые обслуживают домен. Поддерживает приоритизацию — при указании нескольких записей, клиент будет ориентироваться на значение той, для которой указано меньшее число.
- CNAME — aliase или псевдоним. Перенаправляет запрос на другую запись.
- TXT — произвольная запись. Чаще всего используется для настройки средств повышения качества отправки почтовых сообщений.
:::
Ну и конце пишеться значение для записи обычно это: IP-адрес, имя узла или текстовая запись.
Давайте проверим обслуживает ли сервер созданную зону:

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