Мы — долго запрягаем, быстро ездим, и сильно тормозим.
www.lissyara.su —> статьи —> FreeBSD —> программы —> named 9.7.0

Теория и настройка named 9.7.0.


Система доменных имен (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 (для автозапуска после ребута) и дописываем в него:

named_enable="YES"
named_program="/usr/sbin/named"
named_flags="-u bind -c /etc/namedb/named.conf"

Откроем файл /etc/syslog.conf и допишем в него:

!named
*.* /var/log/named.log

Создадим пустой файл /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



Если мы видим сообщение похожее на:

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. Чтобы не появлялась такая запись, нужно сменить владельца:

# 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. Подробное руководство"



McD, 2010-03-22 в 13:53:50

Уместно будет добавить про ACL-и
allow-recursion
allow-transfer
allow-notify

baloon, 2010-03-22 в 14:12:41

Было бы неплохо написать, что такое форвардинг.

Krotchy, 2010-03-22 в 14:30:44

пару слов о view?

Roman, 2010-03-22 в 23:19:17

В 8ке что бы не было сообщения (если менять, то при каждом перезапуске будет это сообщение, не годится при DDNS, автор можешь исправить)
Mar 10 08:43:18 named[711]: the working directory is not writable
нужно в файле /etc/mtree/BIND.chroot.dist исправить первую строчку на

/set type=dir uname=bind gname=bind mode=0755
И тогда chown & chmod не понадобятся после рестарта сервиса

ban, 2010-03-27 в 0:52:04

ни в коем случае не делайте по совету Roman'а
а для зон DDNS лучше пользуйтесь папкой /etc/namedb/dynamic

olenevod, 2010-04-30 в 9:57:42

при первом же перезапуске bind-a владельцы каталога master меняются на root:wheel  и снова \"working directory is not writable\"

xinn, 2010-05-04 в 11:53:18

У меня, запущенный named -u bind, ругается на невозможность забиндить 53й порт ни одном из IP'шников.
Как выяснилось, это из-за запрета на бинд портов <1023 касающихся обычных юзеров, но не касающихся root'а.
Выход нагуглился в модуле MAC portacl http://www.freebsd.org/doc/ru/books/handbook/mac-portacl.html
Смысл в том, что этот модуль ядра заменяет собой штатное средство защиты FreeBSD, но в отличии от него, позволяет устанавливать правила исключений.
Вкратце:
Загружаем модуль на лету
#kldload mac_portacl.ko

Чтобы загружался при загрузке
#echo "mac_portacl_load="YES" >>loader.conf

Прописываем правило разрешающее слушать udp:53 и tcp:53 для юзера с uid:53.
Замечание: Поскольку набор правил интерпретируется непосредственно ядром, для ID пользователя, группы и номера порта могут быть использованы только числовые значения.
#sysctl security.mac.portacl.rules="uid:53:tcp:53,uid:53:udp:53"


Чтобы пересобрать ядро с встроенным модулем добавляем
option MAC_PORTACL
в файл конфигурации ядра

phantom, 2011-06-22 в 10:30:09

так то же делать нельзя:
xinn, 2010-05-04 в 11:53:18

У меня, запущенный named -u bind, ругается на невозможность забиндить 53й порт ни одном из IP'шников.
Как выяснилось, это из-за запрета на бинд портов <1023 касающихся обычных юзеров, но не касающихся root'а.
Выход нагуглился в модуле MAC portacl http://www.freebsd.org/doc/ru/books/handbook/mac-portacl.html
...

Для этого bind запускается в песочнице. Ищите по словам jail и chroot



 

  Этот информационный блок появился по той простой причине, что многие считают нормальным, брать чужую информацию не уведомляя автора (что не так страшно), и не оставляя линк на оригинал и автора — что более существенно. Я не против распространения информации — только за. Только условие простое — извольте подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой, незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
  Если соизволите поставить автора в известность — то вообще почёт вам и уважение.

© lissyara 2006-10-24 08:47 MSK

Время генерации страницы 0.0508 секунд
Из них PHP: 42%; SQL: 58%; Число SQL-запросов: 76 шт.
Исходный размер: 49046; Сжатая: 10685