Система доменных имен (Domain Name Service, DNS) - одна из тех
незаметных, закулисных программ, которым не уделяется и половины того внимания,
которого они заслуживают. Многие пользователи никогда не слышали о DNS, однако
именно эта система делает Интернет таким, каким мы его знаем. DNS, или служба
имен, обеспечивает отображение между именами хостов и IP-адресами. Без DNS
веб-броузеру и программам электронной почты не были бы понятны удобные имена
вроде www.lissyara.su и пришлось бы набирать числовые IP-адреса, что
значительно снизило бы популярность Интернета. Для большинства конечных
пользователей нет DNS - нет Интернета. Система DNS необходима всем сервисам
Интернета.
Самое популярное программное обеспечение для создания сервера
DNS - это BIND(Berkley Internet Name Daemon). На самом деле BIND представляет
собой набор инструментов, в состав которого входят такие программы, как host, dig и
собственно сервер DNS - named.
Прямой и обратный DNS.
Прямой и обратный DNS - это типы отображения при
разрешении имен. Метод прямого преобразования отображает имена хостов в их
IP-адреса; он поддерживает псевдонимы и прочие приятные мелочи. Метод обратного
преобразования отображает IP-адреса в имена хостов; он не такой гибкий, как
метод прямого преобразования. С одним именем хоста может быть связано несколько
IP-адресов, но каждый IP-адрес может отображаться только в одно имя
хоста.
Первичные и вторичные серверы имен.
Для обслуживания каждого домена требуется по крайней мере
два сервера имен. Только один из них может быть первичным, все остальные -
вторичные. Первичный (master) сервер имен - последняя авторитетная
инстанция для домена. Информацию о домене надо изменять на первичном сервере
имен, т.к. именно оттуда эту информацию берет вторичный (slave) сервер.
Предполагается, что оба сервера, и первичный и вторичный, являются
авторитетными, т.е. окружающий их мир считает, что информация о домене,
исходящая от этих серверов, будет верна на все сто процентов.
Конфигурационные файлы BIND
На первичном и вторичном серверах имен используются одни
и те же конфигурационные файлы демона службы имен named. В конфигурацию
FreeBSD по умолчанию уже входят настройки, необходимые для работы простейшего
сервера имен, но чтобы запустить службу имен для собственного домена, вы должны
понимать, как она настраивается. Основной каталог с конфигурационными файлами -
/var/named/etc/namedb/ или /etc/namedb/. Последняя является символической ссылкой на
первую, здесь вы найдете несколько очень важных
файлов.
named.root Файл named.root должен присутствовать
обязательно, и редактировать его не надо. В нем перечислены корневые серверы
имен. Когда сервер имен получает запрос информации о сайте, которой нет в его
кэше, он обращается к корневым серверам имен. Корневые серверы имен
идентифицируются по IP-адресам, и все сообщество Интернета стремиться изменять
эти IP-адреса как можно реже. Поэтому данный файл изменяется
нечасто.
localhost-forward.db и localhost-reverse.db Это файлы
прямой и обратной зон для хоста localhost на вашем
компьютере.
named.conf Основу конфигурации сервера DNS
составляет конфигурационный файл демона named, named.conf. Если в файле
named.conf есть ошибки, сервер имен будет неработоспособен. Именно здесь
хранятся главные настройки DNS.
Довольно теории. Переходим к практике. У
меня на работе появилась необходимость поднять dns-сервер для джабера и
локального сайта. Не охота прописывать адреса сервисов в виде ip, вдруг поменяю
ip-адрес, потом на 100 компах перенастраивать. Поэтому решил поднимать
dns.
Ставить буду на только что установленную систему.
$ uname -a
FreeBSD 8.0-RELEASE FreeBSD 8.0-RELEASE #0: Sat Nov 21 15:48:17 UTC 2009
root@almeida.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC i386
$
Проверяю версию уже установленного named:
# /usr/sbin/named -v
BIND 9.6.1-P1
Обновляю порты:
# portsnap fetch update
Looking up portsnap.FreeBSD.org mirrors... none found.
Fetching snapshot tag from portsnap.FreeBSD.org... done.
.......................................................
Building new INDEX files... done.
Ищу более новую версию в портах:
# cd /usr/ports/
# make search name=bind9
Port: bind97-9.7.0
Path: /usr/ports/dns/bind97
Info: The BIND DNS suite with updated DNSSEC and threads
Maint: dougb@FreeBSD.org
B-deps: libiconv-1.13.1_1 libxml2-2.7.6_1 pkg-config-0.23_1
R-deps: libiconv-1.13.1_1 libxml2-2.7.6_1 pkg-config-0.23_1
WWW: https://www.isc.org/software/bind
Есть более новая версия, вот ее и буду
ставить.
# cd /usr/ports/dns/bind97
# make install clean
Появилось окно конфига. Выбираем опцию REPLACE_BASE, чтобы заменить уже имеющимся в системе версию
той, что мы устанавливаем. Все программа установилась, приступаем к ее
настройке.
Итак, переходим в директорию /etc/namedb/ и редактируем конфигурационный файл
named.conf.
########################################
# Настройка named
########################################
# Параметры
options {
# directory задает каталог конфигурации, в котором
# демон named ищет и хранит файлы DNS.
# /etc/namedb - это символическая ссылка.
directory "/etc/namedb";
# pid-file - это имя файла, в котором
# хранится числовой идентификатор
# основного процесса named.
pid-file "/var/run/named/pid";
# dump-file - это кэш ответов демона named.
dump-file "/var/dump/named_dump.db";
# statistics-file сохраняет статистику и другие
# сведения о запросах
statistics-file "/var/stats/named.stats";
# Включаем форвардинг с прокси сервера
forwarders {
192.168.1.1;
};
# IP-адреса интерфейсов сервера, на котором будет запущена служба named
listen-on {
127.0.0.1;
192.168.1.250;
};
# Диапазон адресов клиентов, для которых разрешено делать запросы
allow-recursion {
127.0.0.1;
192.168.1.0/24;
};
};
logging {
category lame-servers { null; };
};
# Корневая зона
zone "." {
type hint;
file "named.root";
};
# Прямая локальная зона
zone "localhost" {
type master;
file "master/localhost-forward.db";
};
# Обратная локальная зона
zone "127.in-addr.arpa" {
type master;
file "master/localhost-reverse.db";
};
# Моя зона
zone "mydomain.local" {
type master;
file "master/mydomain.local";
};
Итак, у нас есть конфигурационный файл, который сообщает
демону named, за какой домен тот отвечает и где расположен файл с
информацией об этом домене. Но сам этот файл еще надо создать. В директории
/etc/namedb/master/ создаю файл зоны mydomain.local со следующим содержанием:
$TTL 3600
@ IN SOA ns.mydomain.local. mufanu.yandex.ru (
2010021701; Serial
3600; Refresh
900; Retry
360000; Expire
3600; Minimum
)
IN NS ns.mydomain.local.
localhost IN A 127.0.0.1
mydomain.local. IN A 192.168.1.250
ns IN A 192.168.1.250
jabber IN A 192.168.1.250
Немного поясню, что тут написано. Инструкция $TTL задает время жизни зоны (в сек.). Это значение
определяет, как долго другие серверы будут кэшировать информацию об этой
зоне:
$TTL 3600
Следующая запись - Start of Authority (SOA, начало
авторитетности).
@ IN SOA ns.mydomain.local. mufanu.yandex.ru (
2010021701; Serial
3600; Refresh
900; Retry
360000; Expire
3600; Minimum
)
Тут представлено краткое описание зоны - каково ее
поведение и как серверам следует себя с ней вести. Символ @ - это специальное сокращение для зоны, указанной в
named.conf. В моем случае это mydomain.local. IN представляет тип данных - данные Интернета. SOA означает запись Start of Authority. Следующая часть -
имя машины. Обратите внимание, что в конце имени стоит точка. Точка ставится для
того ,чтобы в конце имени не добавлялась запись домена. Например, если мы не
поставим точку в конце имени ns.mydomain.local, то фактическое имя компьютера
станет:
ns.mydomain.local.mydomain.local
Далее следует адрес электронной почты человека,
ответственного за эту зону. Первую точку в адресе электронной почты следует
рассматривать как заменитель символа @.
mufanu.yandex.ru
Ну и последнее это название DNS сервера и соответствия
имен с IP-адресами:
IN NS ns.mydomain.local.
localhost IN A 127.0.0.1
mydomain.local. IN A 192.168.1.250
ns IN A 192.168.1.250
jabber IN A 192.168.1.250
RNDC
RNDC – это утилита, позволяющая управлять
демоном named. Проста в установке. Запустим команду:
# cd /usr/local/sbin/
# rndc-confgen -a
wrote key file "/etc/namedb/rndc.key"
#
Я буду использовать rndc локально, поэтому достаточно
сделанное.
Подготовка к запуску.
Открываем файл /etc/rc.conf (для
автозапуска после ребута) и дописываем в него:
loading configuration from ‘/etc/namedb/named.conf’ zone bgap.local/IN:
loaded serial 2010021701 zone bgap.local/IN: sending notifies (serial
2010021701)
значит все сделали правильно.
У меня все
запустилось и работает.
P.S. После редактирования файла конфигурации
named.conf или файла зон, при перезапуске named появляется такая
запись:
Mar 10 08:43:18 named[711]: the working directory is not writable
Это связано с тем, что при редактировании выше указанных
файлов, меняется их владелец с bind на root. Чтобы не появлялась такая запись,
нужно сменить владельца: