Перед началом установки мы рекомендуем вам обновить информацию о пакетах, содержащихся в репозиториях:

sudo apt-get update

Установка bind9


BIND (Berkeley Internet Name Domain) является реализацией протокола Domain Name System (DNS) с открытым исходным кодом (Open-source), и обеспечивает реализацию основных компонентов системы доменных имен.

Вы можете установить Bind9 используя команду:

sudo apt-get install bind9 dnsutils

Настройка Bind для протокола IPv4

После установки необходимо отредактировать файл 'named.conf.local'

sudo nano /etc/bind/named.conf.local

В этот файл добавьте информацию о ваших зонах. В качестве примера будем использовать доменное имя dnstest.root.lu и подсеть 94.242.218.160/28 (94.242.218.162 основной IP сервера, на котором настраивается DNS).

zone "dnstest.root.lu" {
    type master;
    file "/etc/bind/zones/db.dnstest.root.lu";
};

zone "218.242.94.in-addr.arpa" {
    type master;
    file "/etc/bind/zones/db.94";
};

Нажмите 'Ctrl+X' чтобы сохранить файл и выйти из редактора.

Теперь необходимо отредактировать файл опций Bind9.

sudo nano /etc/bind/named.conf.options

Укажите forwarders - адреса вышестоящих DNS серверов, куда ваш DNS сервер будет перенаправлять запросы которые не сможет обработать самостоятельно.

forwarders {
    8.8.8.8; # Google Public DNS IPv4 address
    8.8.4.4; # Google Public DNS IPv4 address
};

Далее, добавляем файл зоны прямого просмотра:

sudo mkdir /etc/bind/zones
sudo nano /etc/bind/zones/db.dnstest.root.lu

Вносим в файл информацию о нашей зоне, и адреса/имена хостов, которые будут определяться нашим DNS сервером.

$TTL 604800
@ IN SOA ns.dnstest.root.lu. admin.dnstest.root.lu. (
    2 ; Serial
    604800 ; Refresh
    86400 ; Retry
    2419200 ; Expire
    604800 ) ; Negative Cache TTL
    
;dnsserver
@   IN NS ns.dnstest.root.lu.
@   IN A  94.242.218.162
ns  IN A  94.242.218.162

;clients
subdomain1 IN A  94.242.218.163
subdomain2 IN A  94.242.218.164
subdomain3 IN A  94.242.218.165

Теперь создадим файл обратной зоны просмотра (reverse DNS zone).

sudo nano /etc/bind/zones/db.94

Добавим в файл следующую информацию:

$TTL 604800
@ IN SOA ns.dnstest.root.lu. admin.dnstest.root.lu. (
    1 ; Serial
    604800 ; Refresh
    86400 ; Retry
    2419200 ; Expire
    604800 ) ; Negative Cache TTL
;
@   IN NS  ns.dnstest.root.lu.
162 IN PTR dnstest.root.lu.

163 IN PTR subdomain1.dnstest.root.lu.
164 IN PTR subdomain2.dnstest.root.lu.
165 IN PTR subdomain3.dnstest.root.lu.

Теперь проверим правильность синтаксиса конфигурационных файлов BIND.

named-checkconf

Если конфигурационные файлы не содержат ошибок, вывод этой программы будет пуст.

Далее, необходимо перезапустить сервис Bind.

sudo service bind9 restart

И проверить статус Bind на наличие ошибок.

service bind9 status
● bind9.service - BIND Domain Name Server
   Loaded: loaded (/lib/systemd/system/bind9.service; enabled; vendor preset: enabled)
  Drop-In: /run/systemd/generator/bind9.service.d
           └─50-insserv.conf-$named.conf
   Active: active (running) since Sat 2016-04-23 21:00:17 CEST; 2min 52s ago

Если в результате выполнения вы увидите ошибки, ещё раз перепроверьте правильность данных в конфигурационных файлах Bind и в директории /etc/bind/zones/

Теперь проверим работу вашего DNS сервера. Для начала изменим содержимое файла resolv.conf

sudo nano /etc/resolvconf/resolv.conf.d/head

Вставьте в файл следующие строки с данными вашего DNS сервера и сохраните файл.

search dnstest.root.lu
nameserver 94.242.218.162

Выполните команду 'resolvconf' чтобы сгенерировать новый файл resolv.conf.

sudo resolvconf -u

И наконец, протестируем ваш DNS при помощи одной из двух приведённых ниже команд.

Резолв зоны 'dnstest.root.lu':

dig @94.242.218.162 dnstest.root.lu
;; ANSWER SECTION:
dnstest.root.lu.	604800	IN	A	94.242.218.162

;; AUTHORITY SECTION:
dnstest.root.lu.	604800	IN	NS	ns.dnstest.root.lu.

;; ADDITIONAL SECTION:
ns.dnstest.root.lu.	604800	IN	A	94.242.218.162

1. Обратный резолв IPv4:

dig @94.242.218.162 -x 94.242.218.162
;; ANSWER SECTION:
162.218.242.94.in-addr.arpa. 604800 IN  PTR     dnstest.root.lu.

;; AUTHORITY SECTION:
218.242.94.in-addr.arpa. 604800 IN      NS      ns.dnstest.root.lu.

Если вы получили подобный результат, значит ваш DNS сервер сконфигурирован правильно.


Настройка Bind для IPv6


В качестве примера к серверу прикреплена IPv6 подсеть 2a01:608:ffff:a02b::/64. Основной адрес, настроеный на интерфейсе сервера - 2a01:608:ffff:a02b::2

Сначала в файле /etc/bind/named.conf.options подправим секцию forwarders, пропишем публичный IPv6 DNS сервер компании Google.

sudo nano /etc/bind/named.conf.options

Файл /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 {
              8.8.8.8; # Google Public DNS IPv4 addresses
              8.8.4.4; # Google Public DNS IPv4 addresses
              2001:4860:4860::8888; # Google Public DNS IPv6 address
              2001:4860:4860::8844; # Google Public DNS IPv6 address
        };

        //========================================================================
        // 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; };
};

Далее, добавьте следующую информацию в файл /etc/bind/zones/db.dnstest.root.lu

;dnsserver
@   IN AAAA 2a01:608:ffff:a02b::2
ns  IN AAAA 2a01:608:ffff:a02b::2

;clients
subdomain1 IN AAAA 2a01:608:ffff:a02b::3
subdomain2 IN AAAA 2a01:608:ffff:a02b::4
subdomain3 IN AAAA 2a01:608:ffff:a02b::5

Для настройки обратного просмотра нужно вписать дополнительный диапазон адресов в /etc/bind/named.conf.local. В конце файла добавьте строки, содержащие объявление диапазона (zone), и не забудьте что каждый шестнадцатиричный блок адреса нужно дополнять нулём (если необходимо), для того чтобы он содержал 4 символа:

sudo nano /etc/bind/named.conf.local
zone "b.2.0.a.f.f.f.f.8.0.6.0.1.0.a.2.ip6.arpa" {
	type master;
	notify no;
	file "/etc/bind/zones/db.b.2.0.a.f.f.f.f.8.0.6.0.1.0.a.2.ip6.arpa";
};

Теперь создадим новый файл обратной зоны для IPv6:

sudo nano /etc/bind/zones/db.b.2.0.a.f.f.f.f.8.0.6.0.1.0.a.2.ip6.arpa

Заполним его следующим содержимым:

$ORIGIN b.2.0.a.f.f.f.f.8.0.6.0.1.0.a.2.ip6.arpa.
$TTL 1d
@  IN  SOA  dnstest.root.lu. admin.dnstest.root.lu. (
        2014011501      ;Serial
        86400           ;Refresh
        7200            ;Retry
        2592000         ;Expire
        172800          ;Minimum TTL
)
   IN  NS  ns.dnstest.root.lu.

; 2a01:608:ffff:a02b::/64
2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0  IN  PTR  ns.dnstest.root.lu.

3.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0  IN  PTR  subdomain1.dnstest.root.lu.
4.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0  IN  PTR  subdomain2.dnstest.root.lu.
5.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0  IN  PTR  subdomain3.dnstest.root.lu.

В PTR записи необходимо указать только адрес хоста (без адреса подсети). Каждый блок адреса должен быть дополнен нулями.
К примеру адрес DNS сервера (2a01:608:ffff:a02b::2) имеет адрес подсети '2a01:608:ffff:a02b' и адрес хоста '2'. Адрес хоста преобразован в '0000:0000:0000:0002' и записан в обратном порядке, с разделителями в виде точек.

После этого не забудьте перезапустить сервис Bind и проверить его статус.

sudo service bind9 restart
service bind9 status
● bind9.service - BIND Domain Name Server
   Loaded: loaded (/lib/systemd/system/bind9.service; enabled; vendor preset: enabled)
  Drop-In: /run/systemd/generator/bind9.service.d
           └─50-insserv.conf-$named.conf
   Active: active (running) since Sat 2016-04-23 23:38:16 CEST; 2min 31s ago

Итак, вывод статуса без ошибок. Теперь можно проверить правильность конфигурации DNS/rDNS зоны для IPv6.

1. Резолв зоны 'dnstest.root.lu':

dig @94.242.218.162 dnstest.root.lu
;; ANSWER SECTION:
dnstest.root.lu.        604800  IN      A       94.242.218.162

;; AUTHORITY SECTION:
dnstest.root.lu.        604800  IN      NS      ns.dnstest.root.lu.

;; ADDITIONAL SECTION:
ns.dnstest.root.lu.     604800  IN      A       94.242.218.162
ns.dnstest.root.lu.     604800  IN      AAAA    2a01:608:ffff:a02b::2

3. Обратный резолв IPv6:

dig @94.242.218.162 -x 2a01:608:ffff:a02b::2
;; ANSWER SECTION:
2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.b.2.0.a.f.f.f.f.8.0.6.0.1.0.a.2.ip6.arpa. 86400 IN PTR ns.dnstest.root.lu.

;; AUTHORITY SECTION:
b.2.0.a.f.f.f.f.8.0.6.0.1.0.a.2.ip6.arpa. 86400 IN NS ns.dnstest.root.lu.
Ваш DNS сервер теперь готов к работе!