Сервер имён DNS на ОС Linux без панели ISPmanager | ISPserver Перейти к основному содержанию

Помощь

Сервер имён DNS на ОС Linux без панели ISPmanager

Собственный сервер имен DNS может пригодиться в случае, если ваш провайдер или регистратор не предоставляет DNS сервер, либо предоставляет на платной основе и вам не подходит вариант сторонних бесплатных DNS серверов, например yandex. 

В данной инструкции будет рассмотрена установка и первоначальная настройка DNS-сервера bind9, установленного на ОС Linux 

Подготовка

Установка DNS-сервера

Настройка DNS-сервера

Проверка работы

Подготовка

Перед выполнением настройки сервера имён предварительно нужно обзавестись дополнительным IP на сервере, так как для настройки DNS-сервера необходимо как минимум 2 IP, привязанных к серверу.  Если вы еще не приобрели дополнительный IP или не добавили его на сетевой интерфейс, вам поможет следующая статья о том, как его заказать.

Далее необходимо обновить систему и открыть UDP порт 53 для работы сервера имён.

Для CentOS

Устанавливаем все обновления:

yum update

Открываем порт 53 в firewall:

firewall-cmd --permanent --add-port=53/udp

И сохраняем настройки сетевого экрана:

firewall-cmd --reload

Для Debian и Ubuntu

Обновляем доступный список пакетов для установки:

apt update

Если в системе настроен брандмауэр, добавляем правило на разрешение входящих пакетов на 53 UDP-порт:

iptables -I INPUT -p udp --dport 53 -j ACCEPT

iptables-save

* данной командой мы вставляем первое правило на разрешение 53 порта по протоколу UDP.

Установка DNS-сервера

Для CentOS

Устанавливаем DNS-сервер следующей командой:

yum install bind bind-utils -y

Разрешаем автозапуск:

systemctl enable named

Запускаем сервис имен:

systemctl start named

И проверяем, что он работает корректно:

systemctl status named

Для Debian и Ubuntu

Устанавливаем DNS-сервер следующей командой:

apt install bind9 bind9-utils -y

Добавляем сервис в автозапуск:

systemctl enable named

Запускаем сервис имен:

systemctl start bind9

И проверяем, что он работает корректно:

systemctl status bind9

Проверяем, что сервис работает:

dig ya.ru @127.0.0.1

Получаем, примерно такой вывод:

dig ya.ru @127.0.0.1


; <<>> DiG 9.16.1-Ubuntu <<>> ya.ru @127.0.0.1

;; global options: +cmd

;; Got answer:

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 21930

;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1


;; OPT PSEUDOSECTION:

; EDNS: version: 0, flags:; udp: 4096

; COOKIE: 7c870dc41e9aefc10100000061e543a2ac5d7acf2e534a22 (good)

;; QUESTION SECTION:

;ya.ru. IN A


;; ANSWER SECTION:

YA.ru. 546 IN A 87.250.250.242


;; Query time: 0 msec

;; SERVER: 127.0.0.1#53(127.0.0.1)

;; WHEN: Mon Jan 17 13:23:30 MSK 2022

;; MSG SIZE  rcvd: 81

* в секции "ANSWER SECTION" видим, что домен YA.ru привязан к IP-адресу 87.250.250.242

Если в секции ANSWER SECTION домену ya.ru не найдено соответствие IP-адресу, значит DNS-сервер работает не верно и требуются дополнительные манипуляции по подготовке к его работе.

Настройка DNS-сервера

Для CentOS

Откроем файл /etc/named.conf

Отредактируем следующие строки:

listen-on port 53 { 127.0.0.1; localhost; 192.168.0.1; 192.168.0.2 };
...
allow-query     { any; };

*где 192.168.0.1, 192.168.0.2 — это IP ваших NS-адресов

И добавляем информацию о доменной зоне в конец конфигурационного файла:

zone "mydomens.ru" {
    type master;
    file "master/mydomens.ru";
    allow-transfer { none; };
    allow-update { none; };
};

* где mydomens.ru — имя зоны, которую будет обслуживать наш DNS-сервер. Это и есть домен, для которого bind будет хранить записи.

Для Ubuntu/Debian

Откроем файл /etc/bind/named.conf.options

Добавляем строку:

allow-query { any; };
 
В файл /etc/bind/named.conf.local добавляем информацию о доменной зоне:
zone "mydomens.ru" {
    type master;
    file "master/mydomens.ru";
    allow-transfer { none; };
    allow-update { none; };
};

* где mydomens.ru — имя зоны, которую будет обслуживать наш DNS-сервер. Это и есть домен, для которого bind будет хранить записи.

Описание опций настройки зоны:

Опция

Описание

type

тип зоны (в нашем случае первичная — значит master). Другие варианты — slave, stub, forward.

file

Путь к файлу с записями зоны. В данном примере указан относительный путь — то есть файл находится по пути master/mydomens.ru, который начинается относительно рабочей директории (для CentOS это /var/named/, для Ubuntu/Debian /var/cache/bind/).

allow-transfer

Список других DNS-серверов (вторичных) для передачи им зоны. В нашем случае зонные передачи разрешены серверу 192.168.0.15. Можно указывать подсети.

allow-update

Список хостов, с которых разрешено обновление записей в зоне (для DDNS). Можно указать подсети.

Далее создадим папку master и создадим файл зоны.

CentOS

mkdir /var/named/master

touch /var/named/master/mydomens.ru

Ubuntu/Debian

mkdir /var/cache/bind/master

touch /var/cache/bind/master/mydomens.ru

Отредактируем созданный файл зоны, добавив в него DNS-записи:

$TTL 14400

mydomens.ru.    IN      SOA     ns1.mydomens.ru. admin.mydomens.ru. (

        2019121812      ;Serial

        3600            ;Refresh

        3600            ;Retry

        604800          ;Expire

        86400           ;Negative Cache TTL

)

        IN      NS      ns1.mydomens.ru.

        IN      NS      ns2.mydomens.ru.

        IN      MX      10       mail

@       IN      A       192.168.0.1

ns1     IN      A       192.168.0.1

ns2     IN      A       192.168.0.2

www     IN      A       192.168.0.1

mail    IN      A       192.168.0.1

Формат записей: <имя узла> <класс (всегда ставится IN)> <тип записи> <значение>.

Немного подробнее:

Параметр

Описание

$TTL

Время жизни (TTL) представляет собой продолжительность кэширования записи *каждым звеном* цепочки DNS-серверов. Слишком малое значение увеличит нагрузку на сервер, а большое приведет к слишком длительному процессу изменения записи.

SOA-запись

Указание на авторитетность информации, используется для указания на новую зону.

Первой переменной указывается сервер имен, который был оригинальный или первичный источник данных для этой зоны. Т.е. первый сервер в цепочке DNS серверов, на котором лежит всегда актуальная информация о зоне. В нашем случае это ns1.mydomens.ru.

Второй переменной указываем почтовый ящик лица, ответственного за данную зону. Знак @ следует заменить точкой: admin.mydomens.ru.

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

 

где ## счетчик изменений в этот день.

Refresh — интервал времени перед тем, как зона должна быть обновлена.

Retry — интервал времени, который должен пройти после неудачной попытки обновления зоны перед повторным обновлением.

Expire — интервал времени, который должен пройти после того, как первичный сервер имен стал недоступен. Если в течение указанного времени первичный сервер не станет доступен, вторичный перестанет отдавать информацию о зоне.

<имя узла>

Собственно, доменное имя хоста. Может записываться без домена (как в данном примере) — он будет дописан автоматически. Также может быть записан полностью с доменом — в таком случае необходимо поставить точку на конце, например, mail.mydomens.ru. Если не указывается или обозначается знаком собаки (@), запись создается для имени зоны (в данном случае, mydomens.ru).

<класс>

Всегда используется IN (Internet). Указывает на тип сети.

<тип записи>

Основные типы записей, использующиеся в DNS:

 

A — сопоставляет имя узла и соответствующий IP-адрес.

NS — указатель на DNS-серверы, которые обслуживают данную зону.

MX — почтовая запись. Указывает на почтовые серверы, которые обслуживают домен. Поддерживает приоритезацию — при указании нескольких записей, клиент будет ориентироваться на значение той, для которой указано меньшее число.

CNAME — alias или псевдоним. Перенаправляет запрос на другую запись.

TXT — произвольная запись. Чаще всего используется для настройки средств повышения качества отправки почтовых сообщений.

<значение>

Используется IP-адрес, имя узла, текстовая запись.

После выполнения всех настроек необходимо перезапустить сервер имен для применения конфигурации.

systemctl restart named && systemctl restart bind9

Проверка работы

Для выполнения проверки работоспособности с другого компьютера выполним команду dig:

# dig @192.168.0.1 mydomens.ru

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.8 <<>> @192.168.0.1 mydomens.ru

; (1 server found)

;; global options: +cmd

;; Got answer:

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 27075

;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

 
;; OPT PSEUDOSECTION:

; EDNS: version: 0, flags:; udp: 4096

;; QUESTION SECTION:

;mydomens.ru. IN A

 
;; ANSWER SECTION:

mydomens.ru. 14400 IN A 192.168.0.1

 
;; Query time: 0 msec

;; SERVER: 192.168.0.1#53(192.168.0.1)

;; WHEN: Mon Jan 17 13:28:07 MSK 2022

;; MSG SIZE  rcvd: 56

* после @ идёт адрес сервера, с которого запрашивается информация о доменном имени.

Если в секции ANSWER SECTION видим свой домен и соответствующий ему IP, настроенный нами в А записи, значит настройка выполнена корректно и DNS-сервер работает.

Назад к категории