Установка DNS Bind на CentOS7
Однажды надо было сделать простой DNS для внутренней сети (10.0.0.0/16, мастер-сервер под именем nsm 10.0.0.10, slave с именем nss - 10.0.0.20), а так же разрешить компьютерам сети запрашивать записи внешних серверов. Снаружи эти DNS должны быть закрыты для левых запросов, дабы не участвовали в DDoS. (Был ещё вариант FreeIPA поставить, но об этом в следующий раз.)
Master server 10.0.0.10
Итак, установка BIND на CentOS 7:
yum -y install bind bind-utils
Редактируем конфиг:
vim /etc/named.conf
options {
listen-on port 53 { any; };
listen-on-v6 port 53 { ::1; }; // добавляем ipv6
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; 10.0.0.0/16; }; //разрешаем запросы для сети
allow-transfer { localhost; 10.0.0.0/16; }; //разрешаем slave для сети
recursion yes;
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;
};
channel main {
file "/var/log/query.log";
severity info;
print-time yes;
print-category yes;
print-severity yes;
};
category queries { main; };
category xfer-in { main; };
category xfer-out { main; };
category security { main; };
category resolver { main; };
category client { main; };
category unmatched { main; };
category database { main; };
};
//теперь для сети внутри часть
view "internal" {
match-clients {
localhost;
127.0.0.0/8;
10.0.0.0/16;
};
zone "." IN {
type hint;
file "named.ca";
};
zone "wikiadmin.local" IN {
type master;
file "wikiadmin.local";
allow-update { none; };
};
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
};
//эта часть конфига для внешней части интернета
view "external" {
match-clients { any; };
allow-query { any; };
recursion no; //тут мы запрещаем запросы внешним компам
};
Файл зоны wikiadmin.local
Теперь создаём файл зоны (ниже наш пример):
vim /var/named/wikiadmin.local
$TTL 8640
@ IN SOA nsm.wikiadmin.local. mail.wikiadmin.local. (
2018042801 ;Serial
360 ;Refresh
180 ;Retry
60480 ;Expire
8640 ;Minimum TTL
)
IN NS nsm.wikiadmin.local.
IN NS nss.wikiadmin.local.
IN A 10.0.0.10
IN MX 10 mail.wikiadmin.local.
nsm IN A 10.0.0.10
nss IN A 10.0.0.20
mail IN A 10.0.0.50
portal IN A 10.0.1.10
crm IN A 10.0.1.20
mantisbt IN A 10.0.1.30
www IN CNAME crm
bt IN CNAME mantisbt
Теперь запуск сервиса, автозагрузка и добавление в firewall, если он включен:
systemctl start named systemctl enable named firewall-cmd --add-service=dns --permanent firewall-cmd --reload
Slave server 10.0.0.20
Теперь давайте настроим slave. Один сервер хорошо, а если будет и второй - лучше (мало ли, потребуется первый перегрузить, он остановится по какой-либо ошибке и т.д.)
Установка:
yum -y install bind bind-utils
Теперь настраиваем конфиг:
vim /etc/named.conf
options {
listen-on port 53 { 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; 10.0.0.0/16; };
allow-transfer { localhost; 10.0.0.0/16; };
recursion yes;
dnssec-enable yes;
dnssec-validation yes;
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";
};
view "internal" {
match-clients {
localhost;
127.0.0.0/8;
10.0.0.0/16;
};
zone "wikiadmin.local" IN {
type slave;
masters { 10.0.0.10; };
file "slaves/wikiadmin.local";
notify no;
};
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
};
//эта часть конфига для внешней части интернета
view "external" {
match-clients { any; };
allow-query { any; };
recursion no; //тут мы запрещаем запросы внешним компам
};
Немного проще, не так ли? :)
Теперь рестарт, автозапуск и firewall
systemctl start named systemctl enable named firewall-cmd --add-service=dns --permanent firewall-cmd --reload
В логах должно будет появится что-то типа такого:
Apr 28 17:33:32 nss named[12135]: all zones loaded Apr 28 17:33:32 nss named[12135]: running Apr 28 17:33:32 nss named[12135]: zone wikiadmin.local/IN: Transfer started. Apr 28 17:33:32 nss named[12135]: transfer of 'wikiadmin.local/IN' from 10.0.0.10#53: connected using 10.045.194#36408 Apr 28 17:33:32 nss named[12135]: zone wikiadmin.local/IN: transferred serial 2018042708 Apr 28 17:33:32 nss named[12135]: transfer of 'wikiadmin.local/IN' from 10.0.0.10#53: Transfer completed: 1 messages, 21 records, 523 bytes, 0.001 secs (523000 bytes/sec)