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