Сегодня мы поговорим о настройке, пожалуй, самого популярного DNS сервера bind9. Следуйте инструкции, и у Вас всё получится, в этом нет ничего сложного. В этом примере Вы увидите как формируются файлы зон и проследите процесс простой настройки, не вдаваясь при этом в подробности. Это лишь небольшое HowTo, призванное помочь Вам понять принцип работы DNS сервера. Если же Вы настраиваете DNS сервер на шлюзе в сегменте Вашей локальной сети, то в конце статьи Вы увидите как сделать Ваш DNS сервер кэширующим, что позволит существенно сократить время повторного запроса к NS серверам, ведь посещённые адреса будут браться из Вашего локального кэша. Ну что ж, приступим.

Если у Вас ещё не установлен bind9, проделаем это:

apt-get install bind9

Отредактируем файл /etc/init.d/sysklogd, он должен выглядеть следующим образом:

#
# Top configuration file for syslogd
#

#
# Full documentation of possible arguments are found in the manpage
# syslogd(8).
#

#
# For remote UDP logging use SYSLOGD="-r"
#
SYSLOGD="-u syslog"

Перезапустим демона sysklogd:

/etc/init.d/sysklogd restart

Приступим к настройке файла зоны для нашего домена. В качестве примера будет выступать домен zerolab.net. Создаём файл конфигурации для наших зон myzones.conf в папке /etc/bind, содержимое файла:

zone "zerolab.net" {
type master;
file "/etc/bind/zerolab.net";
};

Теперь непосредственно создадим наш файл зоны zerolab.net в той же папке /etc/bind:

$ORIGIN zerolab.net.
$TTL 86400 ; 1 day
@ IN SOA zerolab.net. root.zerolab.net. (
2008082859 ; serial
14400 ; refresh (4 h)
3600 ; retry (1 h)
2592000 ; expire (4w2d)
600 ; minimum (10 minute)
)
NS ns1.zerolab.net.
NS ns2.bla-bla-bla.com.
zerolab.net. A 192.168.0.1
*.zerolab.net. CNAME @
zerolab.net. MX 10 mail.zerolab.net.
mail.zerolab.net. A 192.168.0.1
ns1 A 192.168.0.1

Где 192.168.0.1 — IP Вашего сервера, MX запись нам нужна если Вы поднимаете на своем сервере почтовый сервер. ns1.zerolab.net — наш DNS сервер. Так как для функционирования DNS сервера требуется помимо master ns сервер и slave, прописываем его — ns2.bla-bla-bla.com. Естественно у Вас он должен быть на стороннем сервере, либо если у Вас есть ещё выделенный IP для Вашего сервера, то задача упрощается. Для сервера, находящегося в локальной сети и выдающего имена только в локальную сеть (к примеру у Вас установлен web-сервер, обслуживающий Вашу сеть и настроены виртуальные хосты), достаточно лишь прописать ns1, т.е. адрес Вашего DNS сервера. 2008082859 — смените на текущую дату.

Выставим нужные права на файл зоны zerolab.net:

chown bind:bind /etc/bind/zerolab.net

Отредактируем файл конфигурации bind /etc/bind/named.conf, включив в него конфигурацию для наших зон, добавим в конец файла:

... //Вырезано для экономии места...

include "/etc/bind/myzones.conf";

Ну и обновим конфигурацию bind командой:

rndc reload

Если у Вас DNS сервер установлен на шлюзе в Вашей локальной сети, сделаем его кэширующим. Открываем файл /etc/bind/named.conf.options и раскомментируем следующую строку:

forwarders {
...
};

Добавим в неё IP адреса DNS серверов к которым будет обращаться наш сервер, с большой долей вероятности у Вашего провайдера есть свои DNS сервера, укажем их первыми, тем самым экономя трафик:

forwarders {
10.0.0.x; //Первый адрес DNS сервера моего провайдера
10.0.0.x; //Второй адрес DNS сервера моего провайдера
x.x.x.x;
x.x.x.x;
x.x.x.x;
};

Перезапускаем наш DNS сервер:

/etc/init.d/bind9 restart

Ну а далее не забудьте поменять DNS адрес в /etc/resolv.conf на свой.

Вернёмся к особенностям настройки DNS сервера на выделенном сервере, когда нам необходимо прописать два ns адреса. myzones.conf примет немного другой вид:

zone "zerolab.net" {
type master;
file "/etc/bind/zerolab.net";
allow-trasfer {x.x.x.x;}; //Указываем IP адрес нашего slave ns сервера
};

При настройке на slave сервере myzones.conf примет такой вид:

zone "zerolab.net" {
type slave;
file "/etc/bind/zerolab.net";
masters { 192.168.0.1; };
allow-notify { address_match_list; }; //allow-notify { список-шаблонов-адресов }; (первичный сервер зоны, от кого наш сервер как вторичный уполномоченный сервер будет принимать извещения об изменениях зоны. Замените address_match_list
};

На этом всё, настройка закончена. ;) Удачи!