Настройка DNS-сервера (bind) в CentOS/RHEL
BIND (Berkeley Internet Name Daemon) так же известен как named – это самый известный и самый используемый DNS-сервер в интернете. Я постараюсь описать процесс установки и настройки этого сервиса в chroot-окружении (chroot – операция изменения корневого каталога в Unix-подобных операционных системах. Программа, запущенная с изменённым корневым каталогом, будет иметь доступ только к файлам, содержащимся в данном каталоге. Поэтому, если нужно обеспечить программе доступ к другим каталогам или файловым системам (например, /proc), нужно заранее примонтировать в целевом каталоге необходимые каталоги или устройства.).
- Сначала установим сам сервис и сопутствующие утилиты:
1
|
$ yum -y install bind bind-utils bind-chroot
|
- Теперь подготовим chroot-каталог, подмонтировав необходимые файлы и папки, и проведём первоначальную настройку DNS-сервера:
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
|
$ /usr/libexec/setup-named-chroot.sh /var/named/chroot on
$ chcon -u system_u /var/named/chroot/etc/localtime
$ chcon -u system_u /var/named/chroot/dev/null
$ chcon -u system_u /var/named/chroot/dev/random
$ chcon -u system_u /var/named/chroot/dev/zero
$ chmod g+w /var/named/chroot/var/named/
$ setsebool -P named_write_master_zones=1
$ nano -w /etc/sysconfig/named
OPTIONS="-4"
$ nano -w /var/named/chroot/etc/named.conf
acl "trusted" {
/*
* You might put in here some ips which are allowed to use the cache or
* recursive queries
*/
127.0.0.0/8;
::1/128;
};
acl "xfer" {
/*
* Deny transfers by default except for the listed hosts.
* If we have other name servers, place them here.
*/
// relcom.ru and nic.ru
31.177.66.192/28;
91.217.20.0/26;
91.217.21.0/26;
193.124.22.65/32;
193.232.86.0/24;
194.226.96.192/28;
195.253.51.22/32;
195.253.54.22/32;
};
options {
listen-on port 53 { any; };
listen-on-v6 port 53 { none; };
...
allow-query {
/*
* Accept queries from our "trusted" ACL. We will
* allow anyone to query our master zones below.
* This prevents us from becoming a free DNS server
* to the masses.
*/
trusted;
};
allow-query-cache {
/* Use the cache for the "trusted" ACL. */
trusted;
};
allow-recursion {
/* Only trusted addresses are allowed to use recursion. */
trusted;
};
allow-transfer {
/* Zone tranfers are denied by default. */
xfer;
};
allow-update {
/* Don't allow updates, e.g. via nsupdate. */
none;
};
...
}
|
Note: в acl «xfer» я добавил IP-адреса серверов, которые будут secondary-серверами для моих зон. Если вы на своём DNS-сервере никакие зоны хостить не собираетесь – этот блок можно оставить пустым, иначе впишите туда IP-адреса secondary-серверов для ваших зон.
- Настраиваем firewall для работы DNS-сервера:
1
2
|
$ firewall-cmd --permanent --zone=public --add-service=dns
$ firewall-cmd --reload
|
- Включаем автозапуск DNS-сервера и запускаем сервис:
1
2
3
4
5
6
7
8
9
|
$ systemctl start named-chroot.service
$ systemctl enable named-chroot.service
$ nano -w /etc/sysconfig/network-scripts/ifcfg-eth0
PEERDNS=no
DOMAIN="example.com example.org"
DNS1=127.0.0.1
DNS2=8.8.8.8
DNS3=8.8.4.4
$ systemctl restart network
|
Note: в качестве 2-го и 3-го DNS-сервера лучше вписать IP-адрес DNS-серверов вашего провайдера, так резолвинг будет проходить чуть быстрее.
- Проверяем работоспособность:
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
|
$ systemctl status named-chroot.service
named-chroot.service - Berkeley Internet Name Domain (DNS)
Loaded: loaded (/usr/lib/systemd/system/named-chroot.service; enabled)
Active: active (running) since Thu 2014-11-20 13:45:06 MSK; 1h 32min ago
Process: 31335 ExecReload=/bin/sh -c /usr/sbin/rndc reload > /dev/null 2>&1 || /bin/kill -HUP $MAINPID (code=exited, status=0/SUCCESS)
Main PID: 24627 (named)
CGroup: /system.slice/named-chroot.service
└─24627 /usr/sbin/named -u named -t /var/named/chroot -4
Nov 20 14:28:09 example.com named[24627]: automatic empty zone: 8.B.D.0.1.0.0.2.IP6.ARPA
Nov 20 14:28:09 example.com named[24627]: reloading configuration succeeded
Nov 20 14:28:09 example.com named[24627]: reloading zones succeeded
Nov 20 14:28:09 example.com systemd[1]: Reloaded Berkeley Internet Name Domain (DNS).
Nov 20 14:28:09 example.com named[24627]: all zones loaded
Nov 20 14:28:09 example.com named[24627]: running
$ cat /etc/resolv.conf
# Generated by NetworkManager
search example.com example.org
nameserver 127.0.0.1
$ dig ya.ru @localhost
; <<>> DiG 9.9.4-RedHat-9.9.4-14.el7 <<>> ya.ru @localhost
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 29241
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 2, ADDITIONAL: 5
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;ya.ru. IN A
;; ANSWER SECTION:
ya.ru. 1706 IN A 213.180.193.3
ya.ru. 1706 IN A 213.180.204.3
ya.ru. 1706 IN A 93.158.134.3
;; AUTHORITY SECTION:
ya.ru. 340105 IN NS ns1.yandex.ru.
ya.ru. 340105 IN NS ns2.yandex.ru.
;; ADDITIONAL SECTION:
ns1.yandex.ru. 340105 IN A 213.180.193.1
ns1.yandex.ru. 340105 IN AAAA 2a02:6b8::1
ns2.yandex.ru. 340105 IN A 93.158.134.1
ns2.yandex.ru. 340105 IN AAAA 2a02:6b8:0:1::1
;; Query time: 1 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Thu Nov 20 15:17:55 MSK 2014
;; MSG SIZE rcvd: 213
|
- Если в предыдущем пункте никаких ошибок не возникло – добавим функционала, настроим сервер как master для нескольких зон (если сервер нужно настроить как slave для зон, этот пункт пропускаем и читаем следующий):
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
81
82
83
84
|
$ nano -w /var/named/chroot/etc/named.conf
...
include "/etc/named.zones";
$ nano -w /var/named/chroot/etc/named.zones
zone "example.com" {
type master;
file "named.example.com.zone";
/* Anybody is allowed to query but transfer should be controlled by the master. */
allow-query { any; };
allow-transfer { xfer; };
};
zone "example.org" {
type master;
file "named.example.org.zone";
/* Anybody is allowed to query but transfer should be controlled by the master. */
allow-query { any; };
allow-transfer { xfer; };
};
$ chown root:named /var/named/chroot/etc/named.zones
$ chmod 0640 /var/named/chroot/etc/named.zones
$ chcon -u system_u -t named_conf_t /var/named/chroot/etc/named.zones
$ ln -s /var/named/chroot/etc/named.zones /etc/named.zones
$ nano -w /var/named/chroot/var/named/named.example.com.zone
$ORIGIN .
$TTL 86400 ; 1 day
example.com IN SOA mail.example.com. admin.example.org. (
2014112001 ; serial
10800 ; refresh (3 hours)
3600 ; retry (1 hour)
604800 ; expire (1 week)
86400 ; minimum (1 day)
)
NS mail.example.com.
NS ns8-l2.nic.ru.
NS ns4-l2.nic.ru.
A 10.20.30.40
MX 10 mail.example.com.
TXT "v=spf1 mx -all"
SPF "v=spf1 mx -all"
$ORIGIN example.com.
mail A 10.20.30.40
www CNAME mail
$ nano -w /var/named/chroot/var/named/named.example.org.zone
$ORIGIN .
$TTL 86400 ; 1 day
example.org IN SOA mail.example.com. admin.example.org. (
2014112001 ; serial
10800 ; refresh (3 hours)
3600 ; retry (1 hour)
604800 ; expire (1 week)
86400 ; minimum (1 day)
)
NS mail.example.com.
NS ns8-l2.nic.ru.
NS ns4-l2.nic.ru.
A 10.20.30.40
MX 10 mail.example.org.
TXT "v=spf1 a mx mx:mail.example.org ?all"
SPF "v=spf1 a mx mx:mail.example.org ?all"
$ORIGIN example.org.
mail A 83.246.72.206
www CNAME mail
$ chown root:named /var/named/chroot/var/named/named.*.zone
$ chmod 0640 /var/named/chroot/var/named/named.*.zone
$ chcon -u system_u -t named_zone_t /var/named/chroot/var/named/named.*.zone
$ named-checkconf /etc/named.conf
$ named-checkzone example.com /var/named/chroot/var/named/named.example.com.zone
zone example.com/IN: loaded serial 2014112001
OK
$ named-checkzone example.org /var/named/chroot/var/named/named.example.org.zone
zone example.org/IN: loaded serial 2014112001
OK
$ systemctl reload named-chroot.service
$ systemctl status named-chroot.service
|
- Если сервер нужно настроить как slave, делаем следующее:
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
|
$ nano -w /var/named/chroot/etc/named.conf
...
include "/etc/named.zones";
$ nano -w /var/named/chroot/etc/named.zones
zone "example.com" {
type slave;
file "slaves/example.com.zone";
masters { 10.20.30.40; };
/* Anybody is allowed to query but transfer should be controlled by the master. */
allow-query { any; };
allow-transfer { xfer; };
/* The master should be the only one who notifies the slaves, shouldn't it? */
allow-notify { 10.20.30.40; };
notify no;
};
zone "example.org" {
type slave;
file "slaves/example.org.zone";
masters { 10.20.30.40; };
/* Anybody is allowed to query but transfer should be controlled by the master. */
allow-query { any; };
allow-transfer { xfer; };
/* The master should be the only one who notifies the slaves, shouldn't it? */
allow-notify { 10.20.30.40; };
notify no;
};
$ ln -s /var/named/chroot/etc/named.zones /etc/named.zones
$ named-checkconf /etc/named.conf
$ systemctl reload named-chroot.service
$ systemctl status named-chroot.service
|
Вот и всё, DNS-сервер настроен и готов к работе!