Bind9 это пакет создающий DNS-сервер который определяет доменное имя по IP-адресу в локальной или глобальной сети. Bind9 может также работать и в режиме кеширующего DNS-сервера. BIND использует 53/TCP, UDP порт. Настоящая статья содержит описание установки и настройки.
1. Установка BIND 9
root@srv01:~# apt -y install bind9 bind9utils dnsutils
2. Настройка BIND 9
В этом примере используются глобальные IP-адреса [172.16.0.80/29], частные IP-адреса [10.0.0.0/24], имя домена [srv.local]. Однако при настройке конфигурации на своем сервере используйте свои собственные IP-адреса и доменное имя.
root@srv01:~# vi /etc/bind/named.conf
include "/etc/bind/named.conf.options";
include "/etc/bind/named.conf.local";
include "/etc/bind/named.conf.default-zones";
include "/etc/bind/named.conf.internal-zones";
include "/etc/bind/named.conf.external-zones";
root@srv01:~# vi /etc/bind/named.conf.internal-zones
view "internal" {
match-clients {
localhost;
10.0.0.0/24;
};
zone "srv.local" {
type master;
file "/etc/bind/srv.local.lan";
allow-update { none; };
};
zone "0.0.10.in-addr.arpa" {
type master;
file "/etc/bind/0.0.10.db";
allow-update { none; };
};
include "/etc/bind/named.conf.default-zones";
};
root@srv01:~# vi /etc/bind/named.conf.external-zones
view "external" {
match-clients { any; };
allow-query { any; };
recursion no;
zone "srv.local" {
type master;
file "/etc/bind/srv.local.wan";
allow-update { none; };
};
zone "80.0.16.172.in-addr.arpa" {
type master;
file "/etc/bind/80.0.16.172.db";
allow-update { none; };
};
};
Для зон обратного разрешения, указывается адрес сети, как показано ниже:
10.0.0.0/24
Адрес сети – 10.0.0.0
Диапазон сети – 10.0.0.0 – 10.0.0.255
Как записать – 0.0.10.in-addr.arpa
172.16.0.80/29
Адрес сети – 172.16.0.80
Диапазон сети – 172.16.0.80 – 172.16.0.87
Как записать – 80.0.16.172.in-addr.arpa
3. Диапазоны ограничений, которые вы разрешаете при необходимости.
root@srv01:~# vi /etc/bind/named.conf.options
options {
directory "/var/cache/bind";
// If there is a firewall between you and nameservers you want
// to talk to, you may need to fix the firewall to allow multiple
// ports to talk. See http://www.kb.cert.org/vuls/id/800113
// If your ISP provided one or more IP addresses for stable
// nameservers, you probably want to use them as forwarders.
// Uncomment the following block, and insert the addresses replacing
// the all-0's placeholder.
// forwarders {
// 0.0.0.0;
// };
# query range you allow
allow-query { localhost; 10.0.0.0/24; };
# the range to transfer zone files
allow-transfer { localhost; 10.0.0.0/24; };
# recursion range you allow
allow-recursion { localhost; 10.0.0.0/24; };
//========================================================================
// If BIND logs error messages about the root key being expired,
// you will need to update your keys. See https://www.isc.org/bind-keys
//========================================================================
dnssec-validation auto;
auth-nxdomain no; # conform to RFC1035
# change if not use IPV6
listen-on-v6 { none; };
};
4. Создание файлов зон для разрешения IP-адреса из имени домена
4.1. Для внутренней зоны
root@srv01:~# vi /etc/bind/srv.local.lan
$TTL 86400
@ IN SOA srv01.srv.local. root.srv.local. (
2017062101 ;Serial
3600 ;Refresh
1800 ;Retry
604800 ;Expire
86400 ;Minimum TTL
)
# define name server
IN NS srv01.srv.local.
# define name server's IP address
IN A 10.0.0.30
# define mail exchanger
IN MX 10 srv01.srv.local.
# define IP address of a hostname
srv01 IN A 10.0.0.30
4.2. Для внешней зоны
root@srv01:~# vi /etc/bind/srv.local.wan
$TTL 86400
@ IN SOA srv01.srv.local. root.srv.local. (
2017062101 ;Serial
3600 ;Refresh
1800 ;Retry
604800 ;Expire
86400 ;Minimum TTL
)
# define name server
IN NS srv01.srv.local.
# define name server's IP address
IN A 172.16.0.82
# define mail exchanger
IN MX 10 srv01.srv.local.
# define IP address of a hostname
srv01 IN A 172.16.0.82
5. Создание файлов зон для разрешения
имени домена из IP-адреса
5.1. Для внутренней зоны
root@srv01:~# vi /etc/bind/0.0.10.db
$TTL 86400
@ IN SOA srv01.srv.local. root.srv.local. (
2017062101 ;Serial
3600 ;Refresh
1800 ;Retry
604800 ;Expire
86400 ;Minimum TTL
)
# define name server
IN NS srv01.srv.local.
# define the range of this domain included
IN PTR srv.local.
IN A 255.255.255.0
# define hostname of an IP address
30 IN PTR srv01.srv.local.
5.2. Для внешней зоны
root@srv01:~# vi /etc/bind/80.0.16.172.db
$TTL 86400
@ IN SOA srv01.srv.local. root.srv.local. (
2017062101 ;Serial
3600 ;Refresh
1800 ;Retry
604800 ;Expire
86400 ;Minimum TTL
)
# define name server
IN NS srv01.srv.local.
# define the range of this domain included
IN PTR srv.local.
IN A 255.255.255.248
# define hostname of an IP address
82 IN PTR srv01.srv.local.
Перезапустите BIND, чтобы изменения вступили в силу и убедитесь, что при запуске нет ошибок.
Добавьте в resolv.conf свой собственный DNS для разрешения имен.
[ens3] отличается в каждом дистрибутиве, замените его на свой
root@srv01:~# apt -y install resolvconf
root@srv01:~# vi /etc/network/interfaces
dns-nameservers 10.0.0.30
root@srv01:~# systemctl restart ifup@ens3 resolvconf bind9
Проверка работы:
root@srv01:~# dig srv01.srv.local.
; <<>> DiG 9.10.3-P4-Debian <<>> srv01.srv.local.
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 52538
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;srv01.srv.local. IN A
;; ANSWER SECTION:
srv01.srv.local. 86400 IN A 10.0.0.30
;; AUTHORITY SECTION:
srv01.local. 86400 IN NS srv01.srv.local.
;; Query time: 0 msec
;; SERVER: 10.0.0.30#53(10.0.0.30)
;; WHEN: Thu Jun 22 14:40:36 JST 2018
;; MSG SIZE rcvd: 72
root@srv01:~# dig -x 10.0.0.30
; <<>> DiG 9.10.3-P4-Debian <<>> -x 10.0.0.30
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 19468
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;30.0.0.10.in-addr.arpa. IN PTR
;; ANSWER SECTION:
30.0.0.10.in-addr.arpa. 86400 IN PTR srv01.srv.local.
;; AUTHORITY SECTION:
0.0.10.in-addr.arpa. 86400 IN NS srv01.srv.local.
;; ADDITIONAL SECTION:
srv01.srv.local. 86400 IN A 10.0.0.30
;; Query time: 0 msec
;; SERVER: 10.0.0.30#53(10.0.0.30)
;; WHEN: Thu Jun 22 14:41:46 JST 2018
;; MSG SIZE rcvd: 108
6. Установка CNAME
Если вы хотите установить другое имя для своего хоста, укажите запись CNAME в файле зоны.
root@srv01:~# vi /etc/bind/srv.local.lan
$TTL 86400
@ IN SOA srv01.srv.local. root.srv.local. (
# update serial
2017062102 ;Serial
3600 ;Refresh
1800 ;Retry
604800 ;Expire
86400 ;Minimum TTL
)
IN NS srv01.srv.local.
IN A 10.0.0.30
IN MX 10 srv01.srv.local.
srv01 IN A 10.0.0.30
# aliase IN CNAME server's name
ftp IN CNAME srv01.srv.local.
root@srv01:~# rndc reload
server reload successful
root@srv01:~# dig ftp.srv.local.
; <<>> DiG 9.10.3-P4-Debian <<>> ftp.srv.local.
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 27731
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 1, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;ftp.srv.local. IN A
;; ANSWER SECTION:
ftp.srv.local. 86400 IN CNAME srv01.srv.local.
srv01.srv.local. 86400 IN A 10.0.0.30
;; AUTHORITY SECTION:
srv.local. 86400 IN NS srv01.srv.local.
;; Query time: 0 msec
;; SERVER: 10.0.0.30#53(10.0.0.30)
;; WHEN: Thu Jun 22 14:52:35 JST 2018
;; MSG SIZE rcvd: 90
7. Настройка подчиненного DNS-сервера
В следующем примере показана среда, в которой master DNS [172.16.0.82] а Slave DNS [slave.example.host].
7.1. Настройка master DNS
root@srv01:~# vi /etc/bind/named.conf.options
options {
directory "/var/cache/bind";
// If there is a firewall between you and nameservers you want
// to talk to, you may need to fix the firewall to allow multiple
// ports to talk. See http://www.kb.cert.org/vuls/id/800113
// If your ISP provided one or more IP addresses for stable
// nameservers, you probably want to use them as forwarders.
// Uncomment the following block, and insert the addresses replacing
// the all-0's placeholder.
// forwarders {
// 0.0.0.0;
// };
allow-query { localhost; 10.0.0.0/24; };
# add a range you allow to transfer zones
allow-transfer { localhost; 10.0.0.0/24; 172.16.0.80/29; };
allow-recursion { localhost; 10.0.0.0/24; };
//========================================================================
// If BIND logs error messages about the root key being expired,
// you will need to update your keys. See https://www.isc.org/bind-keys
//========================================================================
dnssec-validation auto;
auth-nxdomain no; # conform to RFC1035
listen-on-v6 { any; };
};
root@srv01:~# rndc reload
server reload successful
7.2. Настройка slave DNS
root@slave:~# vi /etc/bind/named.conf.external-zones
zone "srv.local" {
type slave;
masters { 172.16.0.82; };
file "/etc/bind/slaves/srv.local.wan";
};
root@slave:~# mkdir /etc/bind/slaves
root@slave:~# chown bind. /etc/bind/slaves
root@slave:~# rndc reload
server reload successful
root@slave:~# ls /etc/bind/slaves
srv.local.wan # zone file in master DNS has been just transfered
На этом все !