Задача: установить и выполнить начальную настройку DNS-сервера bind (так-же известного как named) на ОС Linux Debian.
Устанавливаем
$ sudo aptitude install bind9 dnsutils
Настраиваем
Свои настройки bind хранит по пути /etc/bind. Переходим в эту директорию — все действо отныне будет разворачиваться там.
$ cd /etc/bind
Предполагается, что это у нас мастер-сервер (т.е. primary, основной).
1) Создаем каталог, в котором будут хранится конфигурации наших DNS зон.
$ sudo mkdir master
2) Открываем на редактирование файл named.conf.options и приводим его к такому виду (все опции прокомментированы, Вам необходимо их значения указывать верными для себя, а не копировать примеры):
options {
directory «/var/cache/bind»
# Здесь указываются сервера DNS, к которым будет обращаться этот сервер в случае,
# если он сам не является хозяином домена, который резолвит. Обычно указываются
# DNS-сервера Вашего провайдера и/или DNS-сервера контроллеров домена.
# ..Например, если этот сервер спросить — какой IP у yandex.ru — то он сам не
# будет знать, зато сможет спросить у выше-стоящего сервера DNS провайдера.
forwarders {
99.77.55.33;
99.77.55.34;
192.168.0.1;
};
# Откуда принимать DNS запросы. «any» означает — со всех интерфейсов от любого
# компьютера
allow-query { any; };
# Здесь указываются slave-сервера DNS, которым дозволено передавать информацию
# при обновлении DNS-зон на текущем сервере.
allow-transfer {
11.22.33.45;
192.168.0.2;
};
# Здесь указываются адреса или подсети, с которых допускаются рекурсивные запросы.
allow-recursion {
127.0.0.1;
192.168.0.0/24;
};
# При включении этой опции и изменении какой-либо DNS-зоны на этом сервере — он
# самостоятельно известит все slave-сервера о том, что зона поменялась и ее
# необходимо перезагрузить.
notify yes;
# По-умолчанию извещается только тот сервер (сервера), которые указаны как slave-
# сервера внутри описания самой зоны. Если у Вас slave-сервер(а) один и тот же —
# то логично прописать его(их) как сервера, которые всегда стоит уведомлять об
# изменении зон. При этом, даже если эти сервера не являются носителями этих зон —
# ничего страшного не произойдет — они просто «пропустят мимо ушей» информацию об
# изменении.
# Данная опция и предоставляет такую возможность — указать slave-DNS-сервера,
# которые всегда извещяются об изменениях зон.
also-notify {
11.22.33.45;
192.168.0.2;
};
auth-nxdomain no;
# Ожидать ли запросы по IPv6 протоколу и откуда? «none» означает — не ожидать и
# игнорировать; «any» означает ожидать от всех компьютеров.
listen-on-v6 { none; };
};
Сохраняем файл.
3) Теперь открываем файл named.conf и видим, что в нем указаны 3 ссылки на наши конфигурации:
...
include "/etc/bind/named.conf.options";
include "/etc/bind/named.conf.local";
include "/etc/bind/named.conf.default-zones";
Мы добавим еще одну ссылку — на файл с описаниями наших DNS-зон:
...
include "/etc/bind/named.conf.options";
include "/etc/bind/named.conf.local";
include "/etc/bind/named.conf.default-zones";
# Тут будут наши зоны:
include "/etc/bind/named.conf.zones«;
И сохраним данный конфиг-файл.
4) Теперь создадим файл /etc/bind/named.conf.zones и запишем в него тестовую зону. Выглядеть этот файл будет как-то так:
zone «test.int» {
type master;
file "/etc/bind/master/test.int«;
};
Мы видим здесь, что я указал заведомо несуществующую в интернете зону «test.int». Ее тип на данном сервере — мастер (т.е. она является master-зоной, соответственно, если ее обновление должно вестись на данном сервере) и ее описание надо брать из указанного файла.
5) Ну что-ж, давайте создадим такой файл:
$ cd /etc/bind/master
$ sudo touch test.int
И положим в него примерно такой конфиг (опять-же, правильные значения IP-адресов и имен зависят от Вашей сети):
$ORIGIN .
$TTL 3600
test.int. IN SOA ns1.mydomain.ru. webadmin.mydomain.ru. (
2011080901 ; serial
28800 ; refresh (8 hours)
7200 ; retry (2 hours)
604800 ; expire (1 week)
86400 ; minimum (1 day)
)
NS ns1.mydomain.ru.
NS ns2.mydomain.ru.
A 192.168.0.50
MX 10 mail.mydomain.ru.
$ORIGIN test.int.
ftp A 192.168.0.51
mail A 192.168.0.3
www CNAME test.int.
Как видно, все значения я в этой зоне накидал совершенно от балды.
Теперь сохраняем наш файл.
6) Просим bind перечитать наши конфиги:
$ sudo rndc reload
7) Проверяем:
$ nslookup test.int 127.0.0.1
И смотрим результат. Сервер должен ответить, что test.int находится по адресу 192.168.0.50 (как указано в конфигурации зоны выше, или же другой адрес- какой ввели Вы).
Дальнейшая жизнь DNS-сервера
Аналогичным образом создаются все остальные зоны, уже с реальными реквизитами (например, из зон .ru, .com и т.д.) Файл named.conf.zones выглядит примерно так:
zone «mydomain.ru» {
type master;
file "/etc/bind/master/mydomain.ru«;
};
zone «anothersite.com» {
type master;
file "/etc/bind/master/anothersite.com«;
};
PS. Совет. НЕ забывайте ставить «;» в конфиге named везде, где это нужно! Отсутствие одной такой точки-с-запятой обломит запуск всего bind.
PPS. НЕ забывайте ставить конечную точку «.» в конце зон, которые являются абсолютными (рекомендуется вообще везде). Т.е., например, если вместо «test.int.» в конфиге зоны написать «test.int» — получите Вы совсем не то, что ожидали! Ну и, соответственно, работать нифига не будет.
PPPS. При изменении (любом) зоны — не забывайте увеличивать ее сервийный номер (serial). Причем не просто менять — а именно увеличивать. В данном случае запись виде YYYYMMDDNN, где YYYY — год 4 цифры, MM — месяц 2 цифры, DD — 2 цифры дня и NN — это «какой раз я за этот день меняю зону» — вполне удобна, т.к. по течению времени ее числовое значение будет только увеличиваться.
Ведомые DNS-сервера
В случае, если Вам нужно сразу же настроить ведомые (slave) сервера DNS — вот ссылка на статью, в которой описано — как это делать: ссылка.