- Хостинг
- Услуги
- Помощь
- Акции
Помощь
Сервер имён DNS на ОС Linux без панели ISPmanager
Собственный сервер имен DNS может пригодиться в случае, если ваш провайдер или регистратор не предоставляет DNS сервер, либо предоставляет на платной основе и вам не подходит вариант сторонних бесплатных DNS серверов, например yandex.
В данной инструкции будет рассмотрена установка и первоначальная настройка DNS-сервера bind9, установленного на ОС Linux
Подготовка
Перед выполнением настройки сервера имён предварительно нужно обзавестись дополнительным 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-сервер работает.