###### tags: bind9 DNS Linux # Настройка DNS на bind9 в Linux. Установите пакет bind9. ``` apt update && apt install bind9 ``` Перейдите в каталог `/etc/bind`. Давайте разберемся с содержимым этого каталога. ![](https://i.imgur.com/400gSOx.png) - `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`. Откроем его с помощью текстового редактора: ![](https://i.imgur.com/Ia0C1a3.png) Некоторые из доступных опций: - `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 ``` Вывод будет подобный этому: ![](https://i.imgur.com/C2SOr8n.png) ## Настройка зоны. Откройте в любом редакторе файл `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` уже есть готовый шаблон: ![](https://i.imgur.com/0H3zH1u.png) Создайте на основе этого шаблона файл `/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-адрес, имя узла или текстовая запись. Давайте проверим обслуживает ли сервер созданную зону: ![](https://i.imgur.com/Nwddsn1.png) Ответ был получен согласно созданным записям.