Установка DNS Bind на CentOS7

Материал из Викиадмин
Версия от 16:40, 11 ноября 2018; Aleksdem (обсуждение | вклад) (Новая страница: «Однажды надо было сделать простой DNS для внутренней сети (10.0.0.0/16, мастер-сервер под имене…»)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к навигации Перейти к поиску

Однажды надо было сделать простой 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)