Установка и настройка 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