Установка и настройка DNS сервера на Centos 7

DNS сервер на базе Bind (named)

Установка bind:

yum -y install bind bind-utils

Запустить:

systemctl start named

Добавление в автозапуск:

systemctl enable named

Открыть порт 53:

firewall-cmd --zone=public --add-port=53/tcp --permanent
firewall-cmd --zone=public --add-port=53/udp --permanent
firewall-cmd --reload

Настройка разрешений, прав доступа и SELinux

chgrp named -R /var/named
chown -v root:named /etc/named.conf
restorecon -rv /var/named
restorecon /etc/named.conf

Открыть для правки /var/named/chroot/etc/named.conf и заполнить:

options {
	// По каким IP и порту работает
	listen-on port 53 { any; };
	// По каким IP6 и порту работает
	//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-cache { any; };
	// Разрешение запросов
	allow-query { any; };
	// Перечисление серверов DNS, с которыми разрешен обмен информацией о зонах (синхронизация).
	allow-transfer { 1.2.3.5; };
	// DNS, если не нашло в своей базе
	forwarders { 8.8.8.8;8.8.4.4; };
	
	/* 
     - If you are building an AUTHORITATIVE DNS server, do NOT enable recursion.
     - If you are building a RECURSIVE (caching) DNS server, you need to enable 
    recursion. 
     - If your recursive DNS server has a public IP address, you MUST enable access 
    control to limit queries to your legitimate users. Failing to do so will
    cause your server to become part of large scale DNS amplification 
    attacks. Implementing BCP38 within your network would greatly
    reduce such attack surface 
    */
    recursion yes;
	
	// Извещать останльные сервера DNS из связки (мастер-вторые) при изменении 
	// зоны DNS на этом сервере (если он по-совместительству является мастером 
	// для каких-то зон)
	notify yes;
	
	// Извещать следующие сервера об изменениях в зонах DNS.
	also-notify { 1.2.3.5; };
	
	dnssec-enable yes;
    dnssec-validation yes;
	
	/* Path to ISC DLV key */
    bindkeys-file "/etc/named.iscdlv.key";
	
	managed-keys-directory "/var/named/dynamic";
	
	pid-file "/run/named/named.pid";
    session-keyfile "/run/named/session.key";
};

logging {
	channel default_debug {
		file "data/named.run";
		severity dynamic;
	};
};

zone "." IN {
	type hint;
	file "named.ca";
};

// Основной домен
zone "example.com" IN {
	type master;
	file "example.com.zone";
	allow-update { none; };
};

// Обратная зона
zone "4.3.2.1.in-addr.arpa" IN {
	type master;
	file "reverse.zone";
	allow-update { none; };
};

include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

вместо 1.2.3.4 ставим IP сервера
вместо example.com ставим основной домен
вместо 1.2.3.5 ставим IP вторичного DNS сервера

Создать файл настроек для основного домена /var/named/example.com.zone:

$TTL 86400
@   IN  SOA     example.com. root.example.com. (
	2022052108  ;Serial ВАЖНО !!! серийный номер должен меняться в большую строну при каждом изменении, иначе slave сервера не обновят данные
	3600        ;Refresh
	1800        ;Retry
	604800      ;Expire
	86400       ;Minimum TTL
)

; Указываем два name сервера
@       IN  NS          ns1.example.com.
@       IN  NS          ns2.example.com.

; Определяем IP адреса name серверов
ns1       IN  A   1.2.3.4
ns2    IN  A   1.2.3.5

; Define hostname -> IP нашего сервера для этого домена
@       IN  A           1.2.3.4
www		IN	A		1.2.3.4

; MX почтового сервера на Yandex
@	IN  MX 10  mx.yandex.ru.

; Предоставление управления поддоменом mail на Yandex
mail		IN	CNAME		domain.mail.yandex.net

; Чтобы письма отправляемые через SMTP сервер Yandex не попадали в спам
@		IN	TXT		"v=spf1 redirect=_spf.yandex.net"

Создать файл настроек для обратной зоны /var/named/reverse.zone:

$TTL 86400
@   IN  SOA     ns1.example.com. root.example.com. (
	2022052108  ;Serial ВАЖНО !!! серийный номер должен меняться в большую строну при каждом изменении, иначе slave сервера не обновят данные
	3600        ;Refresh
	1800        ;Retry
	604800      ;Expire
	86400       ;Minimum TTL
)

@       IN  NS          ns1.example.com.
@       IN  NS          ns2.example.com.

@       IN  PTR         example.com.

ns1       IN  A   1.2.3.4
ns2    IN  A   1.2.3.5

101     IN  PTR         ns1.example.com.
102     IN  PTR         ns2.example.com.

Проверка стандартного файла конфигурации DNS:

named-checkconf /etc/named.conf

если возвращается пустота, значит все корректно

Проверка прямой зоны:

named-checkzone example.com /var/named/example.com.zone

пример успешной проверки:

zone example.com/IN: loaded serial 2022052108
OK

Проверка обратной зоны:

named-checkzone example.com /var/named/reverse.zone

пример успешной проверки:

zone example.com/IN: loaded serial 2022052108
OK

Перезапустить Bind:

systemctl restart named

Проверка DNS сервера:

dig @1.2.3.4 ns1.example.com

пример проверки:

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.9 <<>> @1.2.3.4 ns1.example.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 39693
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;ns1.example.com.              IN      A

;; ANSWER SECTION:
ns1.example.com.       86400   IN      A       1.2.3.4

;; AUTHORITY SECTION:
example.com.           86400   IN      NS      ns2.example.com.
example.com.           86400   IN      NS      ns1.example.com.

;; ADDITIONAL SECTION:
ns2.example.com.       86400   IN      A       1.2.3.5

;; Query time: 0 msec
;; SERVER: 1.2.3.4#53(1.2.3.4)
;; WHEN: Sat May 21 08:46:10 MSK 2022
;; MSG SIZE  rcvd: 109

Проверка основного домена:

nslookup example.com 1.2.3.4

пример проверки:

Server:         1.2.3.4
Address:        1.2.3.4#53

Name:   hoverhost.ru
Address: 1.2.3.4

 

Установка дополнительного DNS-сервера

Установка bind:

yum install bind bind-utils -y

Открыть для правки /var/named/chroot/etc/named.conf и заполнить:

options {
	// По каким IP и порту работает
	listen-on port 53 { any; };
	// По каким IP6 и порту работает
	//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-cache { any; };
	// Разрешение запросов
	allow-query { any; };
	// Перечисление серверов DNS, с которыми разрешен обмен информацией о зонах (синхронизация).
	allow-transfer { 1.2.3.4; };
	// DNS, если не нашло в своей базе
	forwarders { 8.8.8.8;8.8.4.4; };
	
	dnssec-enable yes;
    dnssec-validation yes;
	
	/* Path to ISC DLV key */
    bindkeys-file "/etc/named.iscdlv.key";
	
	managed-keys-directory "/var/named/dynamic";
	
	pid-file "/run/named/named.pid";
    session-keyfile "/run/named/session.key";
};

logging {
	channel default_debug {
		file "data/named.run";
		severity dynamic;
	};
};

zone "." IN {
	type hint;
	file "named.ca";
};

// Основной домен
zone "example.com" IN {
	type slave;
	file "slaves/example.com.zone";
	masters { 1.2.3.4; };
};

// Обратная зона
zone "132.11.109.62.in-addr.arpa" IN {
	type slave;
	file "slaves/reverse.zone";
	masters { 1.2.3.4; };
};

include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

Настройка разрешений, прав доступа и SELinux

chgrp named -R /var/named
chown -v root:named /etc/named.conf
restorecon -rv /var/named
restorecon /etc/named.conf

Проверка стандартного файла конфигурации DNS:

named-checkconf /etc/named.conf

если возвращается пустота, значит все корректно

Запустить:

systemctl start named

Добавление в автозапуск:

systemctl enable named

Открыть порт 53:

firewall-cmd --zone=public --add-port=53/tcp --permanent
firewall-cmd --zone=public --add-port=53/udp --permanent
firewall-cmd --reload

 

Для ручной синхронизации второго сервера:

rndc reload