Однажды надо было сделать простой 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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
$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, если он включен:

1
2
3
4
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
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

1
2
3
4
systemctl start named
systemctl enable named
firewall-cmd --add-service=dns --permanent
firewall-cmd --reload

В логах должно будет появится что-то типа такого:

1
2
3
4
5
6
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)