Перевод статьи подготовлен для студентов курса «Безопасность Linux»
. Интересно развиваться в данном направлении? Смотрите запись трансляции мастер-класса Ивана Пискунова «Безопасность в Linux в сравнении с Windows и MacOS»

В этой статье я расскажу о шагах по настройке DNS-сервера на RHEL 7 или CentOS 7. Для демонстрации я использовал Red Hat Enterprise Linux 7.4. Наша цель — создать одну A-запись и одну PTR-запись для зоны прямого и обратного просмотра соответственно.
Сначала установите необходимые rpm-пакеты для DNS-сервера.
ПРИМЕЧАНИЕ: Для RHEL у вас должна быть активная подписка на RHN
, или вы можете настроить локальный автономный репозиторий
, с помощью которого менеджер пакетов «yum» сможет установить необходимые rpm-пакеты и зависимости.
# yum install bind bind-chroot caching-nameserver # hostname
golinuxhub-client.example
Мой IP-адрес 192.168.1.7
# ip address | egrep 'inet.*enp0s3' inet 192.168.1.7/24 brd 192.168.1.255 scope global dynamic enp0s3 Поскольку мы будем использовать chroot, нужно отключить службу.
# systemctl stop named
# systemctl disable named Затем скопируйте необходимые файлы в каталог chroot.
ПРИМЕЧАНИЕ. Используйте аргумент -p
в команде cp
для сохранения прав и владельцев.
[root@golinuxhub-client ~]# cp -rpvf /usr/share/doc/bind-9.9.4/sample/etc/* /var/named/chroot/etc/
‘/usr/share/doc/bind-9.9.4/sample/etc/named.conf’ -> ‘/var/named/chroot/etc/named.conf’
‘/usr/share/doc/bind-9.9.4/sample/etc/named.rfc1912.zones’ -> ‘/var/named/chroot/etc/named.rfc1912.zones’ Затем скопируйте файлы, связанные с зоной, в новое место.
[root@golinuxhub-client ~]# cp -rpvf /usr/share/doc/bind-9.9.4/sample/var/named/* /var/named/chroot/var/named/
‘/usr/share/doc/bind-9.9.4/sample/var/named/data’ -> ‘/var/named/chroot/var/named/data’
‘/usr/share/doc/bind-9.9.4/sample/var/named/my.external.zone.db’ -> ‘/var/named/chroot/var/named/my.external.zone.db’
‘/usr/share/doc/bind-9.9.4/sample/var/named/my.internal.zone.db’ -> ‘/var/named/chroot/var/named/my.internal.zone.db’
‘/usr/share/doc/bind-9.9.4/sample/var/named/named.ca’ -> ‘/var/named/chroot/var/named/named.ca’
‘/usr/share/doc/bind-9.9.4/sample/var/named/named.empty’ -> ‘/var/named/chroot/var/named/named.empty’
‘/usr/share/doc/bind-9.9.4/sample/var/named/named.localhost’ -> ‘/var/named/chroot/var/named/named.localhost’
‘/usr/share/doc/bind-9.9.4/sample/var/named/named.loopback’ -> ‘/var/named/chroot/var/named/named.loopback’
‘/usr/share/doc/bind-9.9.4/sample/var/named/slaves’ -> ‘/var/named/chroot/var/named/slaves’
‘/usr/share/doc/bind-9.9.4/sample/var/named/slaves/my.ddns.internal.zone.db’ -> ‘/var/named/chroot/var/named/slaves/my.ddns.internal.zone.db’
‘/usr/share/doc/bind-9.9.4/sample/var/named/slaves/my.slave.internal.zone.db’ -> ‘/var/named/chroot/var/named/slaves/my.slave.internal.zone.db’
```bash
Теперь давайте посмотрим на основной файл конфигурации.
```bash
# cd /var/named/chroot/etc/ Очистите содержимое named.conf и вставьте следующее.
[root@golinuxhub-client etc]# vim named.conf
options { listen-on port 53 { 127.0.0.1; any; };
# listen-on-v6 port 53 { ::1; }; directory "/var/named"; dump-file "/var/named/data/cache_dump.db"; statistics-file "/var/named/data/named_stats.txt"; memstatistics-file "/var/named/data/named_mem_stats.txt"; allow-query { localhost; any; }; allow-query-cache { localhost; any; };
};
logging { channel default_debug { file "data/named.run"; severity dynamic; };
};
view my_resolver { match-clients { localhost; any; }; recursion yes; include "/etc/named.rfc1912.zones";
}; Информация, относящаяся к зоне, должна быть добавлена в /var/named/chroot/etc/named.rfc1912.zones
. Добавьте записи, приведенные ниже. Файл example.zone — это файл зоны прямого просмотра, а example.rzone
— файл обратной зоны.
zone "example" IN { type master; file "example.zone"; allow-update { none; };
};
zone "1.168.192.in-addr.arpa" IN { type master; file "example.rzone"; allow-update { none; };
}; Файлы, связанные с зонами, находятся здесь:
# cd /var/named/chroot/var/named/ Далее создадим файлы для прямой и обратной зоны. Имена файлов будут такими же, как выше в файле named.rfc1912.zones
. У нас уже есть несколько шаблонов по умолчанию, которые мы можем использовать.
# cp -p named.localhost example.zone
# cp -p named.loopback example.rzone Как видите, текущие разрешения на все файлы и каталоги принадлежат root
.
[root@golinuxhub-client named]# ll
total 32
drwxr-xr-x. 2 root root 6 May 22 2017 data
-rw-r--r--. 1 root root 168 May 22 2017 example.rzone
-rw-r--r--. 1 root root 152 May 22 2017 example.zone
-rw-r--r--. 1 root root 56 May 22 2017 my.external.zone.db
-rw-r--r--. 1 root root 56 May 22 2017 my.internal.zone.db
-rw-r--r--. 1 root root 2281 May 22 2017 named.ca
-rw-r--r--. 1 root root 152 May 22 2017 named.empty
-rw-r--r--. 1 root root 152 May 22 2017 named.localhost
-rw-r--r--. 1 root root 168 May 22 2017 named.loopback
drwxr-xr-x. 2 root root 71 Feb 12 21:02 slaves Измените права всех файлов, указав в качестве владельца пользователя root
и группу named
.
# chown root:named * Но для data владелец должен быть named:named
.
# chown -R named:named data
# ls -l
total 32
drwxr-xr-x. 2 named named 6 May 22 2017 data
-rw-r--r--. 1 root named 168 May 22 2017 example.rzone
-rw-r--r--. 1 root named 152 May 22 2017 example.zone
-rw-r--r--. 1 root named 56 May 22 2017 my.external.zone.db
-rw-r--r--. 1 root named 56 May 22 2017 my.internal.zone.db
-rw-r--r--. 1 root named 2281 May 22 2017 named.ca
-rw-r--r--. 1 root named 152 May 22 2017 named.empty
-rw-r--r--. 1 root named 152 May 22 2017 named.localhost
-rw-r--r--. 1 root named 168 May 22 2017 named.loopback
drwxr-xr-x. 2 root named 71 Feb 12 21:02 slaves Добавьте приведенное ниже содержимое в файл прямой зоны. Здесь мы создаем A-запись для localhost (golinuxhub-client) и еще одну для сервера (golinuxhub-server).
# vim example.zone
$TTL 1D
@ IN SOA example. root ( 1 ; serial 3H ; refresh 15M ; retry 1W ; expire 1D ) ; minimum IN NS example. IN A 192.168.1.7
golinuxhub-server IN A 192.168.1.5
golinuxhub-client IN A 192.169.1.7 Далее добавьте содержимое в файл обратной зоны. Здесь мы создаем PTR-запись для golinuxhub-client и для сервера golinuxhub-server.
# vim example.rzone
$TTL 1D
@ IN SOA example. root.example. ( 1997022700 ; serial 28800 ; refresh 14400 ; retry 3600000 ; expire 86400 ) ; minimum IN NS example.
5 IN PTR golinuxhub-server.example.
7 IN PTR golinuxhub-client.example. Прежде чем мы запустим сервис named-chroot
, проверим конфигурацию файла зоны.
[root@golinuxhub-client named]# named-checkzone golinuxhub-client.example example.zone
zone golinuxhub-client.example/IN: loaded serial 1
OK
[root@golinuxhub-client named]# named-checkzone golinuxhub-client.example example.rzone
zone golinuxhub-client.example/IN: loaded serial 1997022700
OK Все выглядит хорошо. Теперь проверьте файл конфигурации, используя следующую команду.
[root@golinuxhub-client named]# named-checkconf -t /var/named/chroot/ /etc/named.conf Итак, все выполнено успешно.
[root@golinuxhub-client named]# echo $?
0 ВАЖНОЕ ПРИМЕЧАНИЕ: у меня SELinux находится в режиме permissive
# getenforce
Permissive Все выглядит хорошо, так что пора запускать наш сервис named-chroot
.
[root@golinuxhub-client named]# systemctl restart named-chroot [root@golinuxhub-client named]# systemctl status named-chroot
● named-chroot.service - Berkeley Internet Name Domain (DNS) Loaded: loaded (/usr/lib/systemd/system/named-chroot.service; disabled; vendor preset: disabled) Active: active (running) since Mon 2018-02-12 21:53:23 IST; 19s ago Process: 5236 ExecStop=/bin/sh -c /usr/sbin/rndc stop > /dev/null 2>&1 || /bin/kill -TERM $MAINPID (code=exited, status=0/SUCCESS) Process: 5327 ExecStart=/usr/sbin/named -u named -c ${NAMEDCONF} -t /var/named/chroot $OPTIONS (code=exited, status=0/SUCCESS) Process: 5325 ExecStartPre=/bin/bash -c if [ ! "$DISABLE_ZONE_CHECKING" == "yes" ]; then /usr/sbin/named-checkconf -t /var/named/chroot -z "$NAMEDCONF"; else echo "Checking of zone files is disabled"; fi (code=exited, status=0/SUCCESS) Main PID: 5330 (named) CGroup: /system.slice/named-chroot.service └─5330 /usr/sbin/named -u named -c /etc/named.conf -t /var/named/chroot
Feb 12 21:53:23 golinuxhub-client.example named[5330]: managed-keys-zone/my_resolver: loaded serial 0
Feb 12 21:53:23 golinuxhub-client.example named[5330]: zone 0.in-addr.arpa/IN/my_resolver: loaded serial 0
Feb 12 21:53:23 golinuxhub-client.example named[5330]: zone 1.0.0.127.in-addr.arpa/IN/my_resolver: loaded serial 0
Feb 12 21:53:23 golinuxhub-client.example named[5330]: zone 1.168.192.in-addr.arpa/IN/my_resolver: loaded serial 1997022700
Feb 12 21:53:23 golinuxhub-client.example named[5330]: zone example/IN/my_resolver: loaded serial 1
Feb 12 21:53:23 golinuxhub-client.example named[5330]: zone localhost/IN/my_resolver: loaded serial 0
Feb 12 21:53:23 golinuxhub-client.example named[5330]: zone 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa/IN/my_resolver: loaded serial 0
Feb 12 21:53:23 golinuxhub-client.example named[5330]: zone localhost.localdomain/IN/my_resolver: loaded serial 0
Feb 12 21:53:23 golinuxhub-client.example named[5330]: all zones loaded
Feb 12 21:53:23 golinuxhub-client.example named[5330]: running
```bash
Убедитесь, что resolv.conf содержит ваш IP-адрес, чтобы он мог работать в качестве DNS-сервера.
```bash
# cat /etc/resolv.conf
search example
nameserver 192.168.1.7
```bash
Давайте проверим наш DNS-сервер для обратной зоны, используя dig.
```bash
[root@golinuxhub-client named]# dig -x 192.168.1.5
; <<>> DiG 9.9.4-RedHat-9.9.4-50.el7 <<>> -x 192.168.1.5
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 40331
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;5.1.168.192.in-addr.arpa. IN PTR
;; ANSWER SECTION:
5.1.168.192.in-addr.arpa. 86400 IN PTR golinuxhub-server.example.
;; AUTHORITY SECTION:
1.168.192.in-addr.arpa. 86400 IN NS example.
;; ADDITIONAL SECTION:
example. 86400 IN A 192.168.1.7
;; Query time: 1 msec
;; SERVER: 192.168.1.7#53(192.168.1.7)
;; WHEN: Mon Feb 12 22:13:17 IST 2018
;; MSG SIZE rcvd: 122 Как вы видите, мы получили положительный ответ (ANSWER) на наш запрос (QUERY).
[root@golinuxhub-client named]# dig -x 192.168.1.7
; <<>> DiG 9.9.4-RedHat-9.9.4-50.el7 <<>> -x 192.168.1.7
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 55804
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;7.1.168.192.in-addr.arpa. IN PTR
;; ANSWER SECTION:
7.1.168.192.in-addr.arpa. 86400 IN PTR golinuxhub-client.example.
;; AUTHORITY SECTION:
1.168.192.in-addr.arpa. 86400 IN NS example.
;; ADDITIONAL SECTION:
example. 86400 IN A 192.168.1.7
;; Query time: 1 msec
;; SERVER: 192.168.1.7#53(192.168.1.7)
;; WHEN: Mon Feb 12 22:12:54 IST 2018
;; MSG SIZE rcvd: 122 Точно так же мы можем проверить прямую зону.
[root@golinuxhub-client named]# nslookup golinuxhub-client.example
Server: 192.168.1.7
Address: 192.168.1.7#53
Name: golinuxhub-client.example
Address: 192.169.1.7
[root@golinuxhub-client named]# nslookup golinuxhub-server.example
Server: 192.168.1.7
Address: 192.168.1.7#53
Name: golinuxhub-server.example
Address: 192.168.1.5 Эта статья немного устарела, так как в RHEL 7 теперь не нужно копировать файлы конфигурации bind в chroot. Step-by-Step Tutorial: Configure DNS Server using bind chroot (CentOS/RHEL 7)
.

Довольно часто возникает вопрос о внедрении своего ДНС сервера, который мог бы не только обслуживать запросы внешних пользователей к приобретенным ДНС именам, но и обслуживать запросы пользователей в локальной сети. Такая задача относительно просто решается средствами ОС FreeBSD.
Настроить DNS сервер Bind под управлением FreeBSD для обслуживания запросов клиентов внутренней сети и обслуживания прямой и обратной зон DNS с функцией их пересылки на вторичный DNS сервер. Тип всех зон на сервере — Master, то есть данный сервер предоставляет авторитетные ответы за все зоны.
1. Внутренний IP адрес DNS сервера — 192.168.0.1/24
2. Внешний IP адрес DNS сервера — 10.10.10.1/24
3. I P адрес вторичного сервера — 10.10.10.2/24
4. Прямая DNS зона — test.dom
5. Обратная DNS зона — 10.10.10.in-addr.arpa
1. В файле /etc/rc.conf
прописываем запуск DNS сервера при старте системы
2. Приводим конфигурационный файл /etc/namedb/named.conf
к следующему виду:
acl
— список доступа с именем ACCESS и описанием в нем сетей, которым разрешено использовать наш DNS сервер.
directory
– Рабочая директория Bind
pid-file
— Место размещения PID файла
dump-file
– Место размещения DUMP файла
statistics-file
– Место размещения файла статистики
listen-on
– Указываем IP адреса интерфейсов, на которых Bind будет «слушать» запросы
allow-recursion
– Указываем списки доступа, кому разрешены рекурсивные запросы к серверу
allow-transfer
– Указываем IP адрес вторичного DNS сервера, которому будем пересылать наши зоны
transfer-source
– Указываем IP интерфейса, через который будет разрешено проведение трансфера зон
version
– Указываем свою версию DNS сервера
logging
– Указываем ограничение журналирования
zone «.»
— Зона, описывающая корневые DNS сервера, необходима для работы. Хранится в файле /etc/namedb/named.root
zone «localhost»
— Прямая зона, описывающая локальный сервер, необходима для работы. Хранится в файле /etc/namedb/master/localhost
zone «0.0.127.in-addr.arpa»
— Обратная зона, описывающая локальный сервер, необходима для работы. Хранится в файле /etc/namedb/master/0.0.127.in-addr.arpa
zone «test.dom»
— Наша прямая зона. Хранится в файле /etc/namedb/master/test.dom Так как на нашем сервере хранится мастер копия зоны, при помощи allow-query, разрешаем всем ее опрос.
zone «10.10.10.in-addr.arpa»
— наша обратная зона. Хранится в файле /etc/namedb/master/10.10.10.in-addr.arpa. Так как на нашем сервере хранится мастер копия зоны, при помощи allow-query, разрешаем всем ее опрос.
3. Настраиваем файлы зон
3.1. Зона «.»
— оставляем по умолчанию
3.2. Зона «localhost»
. Конфигурационный файл /etc/namedb/master/localhost
приводим к следующему виду:
IN NS localhost.
IN A 127.0.0.1
3.3. Зона «0.0.127.in-addr.arpa»
. Конфигурационный файл /etc/namedb/master/0.0.127.in-addr.arpa
приводим к следующему виду:
IN NS localhost.
1 IN PTR localhost.
3.4. Зона «test.dom»
. Конфигурационный файл /etc/namedb/master/test.dom
приводим к следующему виду:
IN NS ns1.test.dom.
IN NS ns2.test.dom.
ns1 IN A 10.10.10.1
ns2 IN A 10.10.10.2
3.5. Зона «10.10.10.in-addr.arpa»
. Конфигурационный файл /etc/namedb/master/10.10.10.in-addr.arpa
приводим к следующему виду:
IN NS ns1.test.dom.
IN NS ns2.test.dom.
1 IN PTR ns1.test.dom.
2 IN PTR ns2.test.dom.
Где, например, для зоны test.dom сверху вниз:
4. Управляем DNS сервером при помощи следующих команд:
Наиболее часто используемые типы записей в DNS:
A
– запись на IP адрес узла в сети
NS
— запись на DNS сервер
CNAME
– запись на каноническое имя для узла
PTR
– запись указатель на доменное имя, используется в обратных зонах
MX
— запись для определения маршрутизации почты
Для проверки работоспособности можно использовать такие средства как dig
или nslookup
Пример использования dig:
Команда означает — вывести записи типа ANY в зоне test.dom, используя сервер localhost
;; QUESTION SECTION:
;test.dom. В ЛЮБОМ
;; РАЗДЕЛ ОТВЕТОВ:
тест.дом. 3600 В А 10.10.10.1
тест.дом. 3600 В SOA ns1.test.dom. хостмастер.тест.дом. 2009082801 3600 600 2419200 86400
тест.дом. 3600 IN NS ns1.test.dom.
тест.дом. 3600 IN NS ns2.test.dom.
;; ДОПОЛНИТЕЛЬНЫЙ РАЗДЕЛ:
ns1.test.дом. 3600 В А 10.10.10.1
ns2.test.дом. 54886 В 10.10.10.2
;; Время запроса: 1 мс
;; СЕРВЕР: 127.0.0.1#53(127.0.0.1)
;; КОГДА: воскресенье, 30 августа, 23:04:41 2009
;; РАЗМЕР MSG rcvd: 330
Пример использования nslookup:
freebsd# nslookup
> test.dom
Сервер: 127.0.0.1
Адрес: 127.0.0.1#53
Имя: test.dom
Адрес: 10.10.10.1
>
На мой взгляд, использование dig для диагностики более гибко, хотя и не знает полностью, как использовать nslookup. Также рекомендуется замечательное пособие по настройке DNS
.
За все время работы не требовалось устанавливать DNS на сервер, а тут возникла зависимость Slave DNS на новом клиенте. Думаю, что порядок действий будет полезен, как администраторам, так и веб-разработчикам.
Установка Master DNS
Заходим на сервер (для примера Master DNS будет ставиться на сервер с IP 10.10.10.10, Slave DNS — IP 20.20.20.20)
В начале убеждаемся, что система имеет все последние обновления.
yum update -y Если не указать ключ «-y», то можно разрешить все вопросы установщика, а с ним все ответы предполагаются автоматически по умолчанию.
Установите bind и bind-utils.
yum install bind bind-utils -y На основании моего домена «sibway.pro», для своего поменяйте все вхождения в примерах. Будем считать, что у master есть IP 10.10.10.10, у slave 20.20.20.20. Мастер и ведомый почему-то понимаю, что ведомый берет все данные с мастера.
Теперь отредактируем конфигурационный файл распространенным текстовым редактором, который я использую так, как он всегда есть в любой системе.
vi /etc/named.conf При установке bind файл создается автоматически и нам нужно только его отредактировать.
options { #listen-on port 53 { 127.0.0.1; }; listen-on-v6 port 53 { ::1; }; directory "/var/named"; dump-file "/var/named/data/cache_dump.db"; statistics-file "/var/named/data/named_stats.txt"; memstatistics-file "/var/named/data/named_mem_stats.txt"; allow-query { any; }; allow-transfer { localhost; 20.20.20.20; }; recursion no; dnssec-enable yes; dnssec-validation yes; dnssec-lookaside auto; /* Path to ISC DLV key */ bindkeys-file "/etc/named.iscdlv.key"; managed-keys-directory "/var/named/dynamic";
}; #listen-on port 53 { 127.0.0.1; }; Комментируем строку, чтобы сервер мог слушать эфир со всех адресов и портов (наверное можно просто указать IP 10.10.10.10, но руки не дошли поэкспериментировать. Извне все равно все закрывает брандмауэр).
allow-query { any; }; Позволяем запросить сервер с любым адресом.
allow-transfer { localhost; 20.20.20.20; }; Позволяем собрать информацию о доменах подчиненных серверов.
Добавляем доменную зону в тот же конфигурационный файл, который прописываем.
zone "sibway.pro" IN { type master; file "sibway.pro.zone"; allow-update { none; }; }; Конфигурирование доменных зон
В файле заданы нами файл sibway.pro.zone как файл конфигурации дома sibway.pro.
Проще всего взять какой-либо Существующий и отредактировать до нужной сборки. Файлы можно ссылаться в поддиректории.
vi /var/named/sibway.pro.zone Вот простой пример того, что необходимо прописать в доменной зоне.
$TTL 86400
@ IN SOA ns1.sibway.pro. root.sibway.pro. ( 2014120801 ;Serial ВАЖНО !!! серийный номер должен меняться в большую строну при каждом изменении, иначе slave сервера не обновят данные 3600 ;Refresh 1800 ;Retry 604800 ;Expire 86400 ;Minimum TTL
)
; Указываем два name сервера IN NS ns1.sibway.pro. IN NS ns2.sibway.pro.
; Определяем IP адреса name серверов
ns1 IN A 10.10.10.10
ns2 IN A 20.20.20.20
; Define hostname -> IP нашего сервера для этого домена
@ IN A 213.133.100.77
www IN A 213.133.100.77 Делаем рестар название сервера
service named restart Определяем, чтобы имя сервера стартовало при загрузке системы.
chkconfig named on Теперь проверим, как работает наш name server.
dig @10.10.10.10 sibway.pro В ответ должен быть указан правильный IP-адрес запрошенного домена. Теперь сконфигурируем подчиненный сервер.
Конфигурация сервера ведомых имен
Конфигурация ведомого имени сервера проходит так же, как и ведущее за исключением двух моментов:
- При редактировании файла набора named.conf необходимо указать какие доменные зоны подчиненные
- Не нужно включать доменные зоны, так как они автоматически обновляются с мастер-сервером
В конфигурационном файле необходимо указать тип ведомого и указать IP мастер сервера.
zone "sibway.pro" IN { type slave; masters { 10.10.10.10; }; file "sibway.pro.zone";
}; Не забываем запускать сервер и включать его в автоматический запуск при включении системы.
service named start
chkconfig named on Теперь у нас есть два сконфигурированных сервера имен.
Осталось открыть порт в брандмауэре
Отредактируем файл /etc/sysconfig/iptables:
# vi /etc/sysconfig/iptables Добавим возможные правила для 53 порта.
-A INPUT -p udp -m udp --dport 53 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 53 -j ACCEPT
-A INPUT -m state --state NEW -m udp -p udp --dport 53 -j ACCEPT # /etc/init.d/iptables restart Не забудьте обновить этот файл на обоих серверах.
Теперь у нас есть два работающих name сервера.
Используемые термины: DNS
, BIND
, Linux
, CentOS
, Rocky Linux
.
Мы рассмотрим небольшой обзор по установке DNS-сервера bind на системы типа RPM (Rocky Linux, CentOS, Oracle Linux и так далее).
Подготовка сервера
Установка и запуск
Базовая настройка
Описание глобальных опций
Зоны bind
Решение проблем с помощью log-файлов
Подготовка сервера
Устанавливаем все обновления:
Устанавливаем утилиту для синхронизации времени:
yum install chrony
Настраиваем временную зону:
timedatectl set-timezone Europe/Moscow
* в данном примере выбрано московское время.
Разрешаем и запускаем сервис для синхронизации времени:
systemctl enable chronyd —now
Открываем порт в firewall:
firewall-cmd —permanent —add-port=53/udp
И перечитываем настройки сетевого экрана:
Установка и запуск BIND
Устанавливаем DNS-сервер следующей командой:
yum install bind
systemctl enable named
Запускаем сервис имен:
systemctl start named
И проверяем, что он работает корректно:
systemctl status named
Базовая настройка DNS-сервера
Открываем на редактирование конфигурационный файл bind:
и редактируем следующее:
Для применения настроек выполните команду:
systemctl restart named
Для начала проверим работу сервиса с локального компьютера. Для этого установим nslookup и выполним команду:
nslookup dmosk.ru 127.0.0.1
Если вы предпочитаете использовать dig, то:
Для проверки работоспособности сервера с другого компьютера сети (например, на Windows) выполняем команду:
nslookup dmosk.ru 192.168.166.155
Должно получиться, примерно, следующее:

Описание глобальных опций
Пример глобальных настроек
Зоны bind
Для возможности искать соответствия в собственной базе доменов, необходимо создать и настроить зоны. Существуют следующие типы зон:
- Первичная, она же master, она же локальная. База, которая пополняется и редактируется на текущем сервере. Подробнее как настроить первичную зону bind
. - Вторичная или slave. База копирует настройки с первичной зоны на другом сервере. Подробнее как настроить вторичную зону bind
. - Заглушка или stub. Хранит у себя только записи NS, по которым все запросы переводятся на соответствующие NS-серверы.
- Кэширующая или hint. Не хранит на сетбе никаких записей — только результаты уже обработанных запросов для ускорения ответов на повторные обращения.
Решение проблем с помощью log-файлов
По умолчанию, сервер Bind под CentOS хранит логи в файле /var/named/data/named.run
.
Для его непрерывного просмотра вводим следующую команду:
tail -f /var/named/data/named.run
Степень детализации логов можно настроить в конфигурационном файле:
* где file
— путь к log-файлу; severity
— уровень чувствительности к возникающим событиям. Возможны следующие варианты для severity:
- critical
— критические ошибки. - error
— ошибки и выше (critical). - warning
— предупреждения и выше. Предупреждения не говорят о наличии проблем в работе сервиса, однако это такие событтия, которые могут привести с ошибкам, поэтому не стоит их игнорировать. - notice
— уведомления и выше. - info
— информация. - debug
— отладка (подробный лог). - dynamic
— тот же debug.
Напротив, чтобы отключить ведение лога, в конфигурационном файле должна быть настройка:
После изменения конфигурационного файла перезапускаем сервис:
systemctl restart named
Лог запросов
Если мы хотим также видеть в логе все запросы, которые приходят на bind, в командной строке вводим:
Для отключения еще раз повторяем команду:
Читайте также
Дополнительная информация по bind:
1. Создание и настройка первичной зоны в BIND
.
2. Как создать и настроить вторичную (slave) зону в BIND сервере
.
3. Настройка Stub зоны на сервере Bind
.
4. Настройка DNSSEC на BIND
.
5. Настройка Split DNS на одном сервере Bind
.

