Система доменных имен (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 - это типы отображения при разрешении имен. Метод прямого преобразования отображает имена хостов в их IP-адреса; он поддерживает псевдонимы и прочие приятные мелочи. Метод обратного преобразования отображает IP-адреса в имена хостов; он не такой гибкий, как метод прямого преобразования. С одним именем хоста может быть связано несколько IP-адресов, но каждый IP-адрес может отображаться только в одно имя хоста.
Для обслуживания каждого домена требуется по крайней мере два сервера имен. Только один из них может быть первичным, все остальные - вторичные. Первичный (master) сервер имен - последняя авторитетная инстанция для домена. Информацию о домене надо изменять на первичном сервере имен, т.к. именно оттуда эту информацию берет вторичный (slave) сервер. Предполагается, что оба сервера, и первичный и вторичный, являются авторитетными, т.е. окружающий их мир считает, что информация о домене, исходящая от этих серверов, будет верна на все сто процентов.
На первичном и вторичном серверах имен используются одни и те же конфигурационные файлы демона службы имен 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 – это утилита, позволяющая управлять демоном named. Проста в установке. Запустим команду:
# cd /usr/local/sbin/ # rndc-confgen -a wrote key file "/etc/namedb/rndc.key" #
Я буду использовать rndc локально, поэтому достаточно сделанное.Подготовка к запуску.Открываем файл /etc/rc.conf (для автозапуска после ребута) и дописываем в него:
Откроем файл /etc/syslog.conf и допишем в него:
Создадим пустой файл /var/log/named.log:
#touch /var/log/named.log
выставим на этот файл права:
#chown bind:bind /var/log/named.log
Перезапустим процесс syslogd для того чтобы он перечитал конфиг:
#/etc/rc.d/syslogd restart
ЗапускаемсяВыполняем команду:
#/usr/sbin/named -t /var/named -u bind -c /etc/namedb/named.conf
смотрим, что у нас в логах:
#tail -F /var/log/named.log
Если мы видим сообщение похожее на:
значит все сделали правильно.У меня все запустилось и работает.P.S. После редактирования файла конфигурации named.conf или файла зон, при перезапуске named появляется такая запись:
Это связано с тем, что при редактировании выше указанных файлов, меняется их владелец с bind на root. Чтобы не появлялась такая запись, нужно сменить владельца:
# ls -la /etc/namedb/ total 20 drwxr-xr-x 5 bind bind 512 10 мар 08:43 . drwxr-xr-x 3 root wheel 512 18 фев 10:28 .. drwxr-xr-x 2 bind wheel 512 21 ноя 19:54 dynamic drwxr-xr-x 2 root wheel 512 1 мар 16:04 master -rw-r--r-- 1 bind bind 1589 10 мар 08:43 named.conf -rw-r--r-- 1 bind bind 2969 21 ноя 19:57 named.root -r--r--r-- 1 bind bind 1439 17 фев 14:25 rndc.conf.sample -rw------- 1 bind bind 77 17 фев 14:55 rndc.key drwxr-xr-x 2 bind wheel 512 21 ноя 19:54 slave # chown -R bind:bind /etc/namedb/ # ls -la /etc/namedb/ total 20 drwxr-xr-x 5 bind bind 512 10 мар 08:43 . drwxr-xr-x 3 root wheel 512 18 фев 10:28 .. drwxr-xr-x 2 bind bind 512 21 ноя 19:54 dynamic drwxr-xr-x 2 bind bind 512 1 мар 16:04 master -rw-r--r-- 1 bind bind 1589 10 мар 08:43 named.conf -rw-r--r-- 1 bind bind 2969 21 ноя 19:57 named.root -r--r--r-- 1 bind bind 1439 17 фев 14:25 rndc.conf.sample -rw------- 1 bind bind 77 17 фев 14:55 rndc.key drwxr-xr-x 2 bind bind 512 21 ноя 19:54 slave #
Теперь все нормально.Использованная литература:1.М.Лукас "FreeBSD. Подробное руководство"