Инструменты пользователя

Инструменты сайта


bind

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

bind [2013/07/08 18:27] (текущий)
Строка 1: Строка 1:
  
 +====== Настройка DNS -сервера BIND ======
 +<​code>​
 +# named -v
 +BIND 9.4.3-P2
 +</​code>​
 +Расположение файлов BIND:
 +<​code>​
 +> tree /var/named/
 +/var/named/
 +|-- dev
 +|-- etc
 +|   `-- namedb #​Каталог,​ в котором располагается вся информация о зонах BIND
 +|       |-- dynamic
 +|       |-- master
 +|       ​| ​  |-- empty.db
 +|       ​| ​  |-- localhost-forward.db
 +|       ​| ​  `-- localhost-reverse.db
 +|       |-- named.conf #​Конфигурационный файл для даемона
 +|       |-- named.root ​
 +|       `-- slave
 +`-- var
 +    |-- dump
 +    |-- log
 +    |-- run
 +    |   `-- named
 +    `-- stats
 +</​code>​
 +Разрешаем запуск DNS сервера:​
 +  # echo '​named_enable="​YES"'​ >> /​etc/​rc.conf
 +====== Файл зоны ======
 +  * **Синтаксис файлов зон**<​file>​
 +; - коментарий
 +@ - символ подставновки. Подставляется имя домена из named.conf (название файла зоны) или если задан переменная $ORIGIN
 +() - используется для переноса длинных строк.
 +</​file>​
 +
 +====== named.root или db.root обновление ======
 +Файл **named.root** (db.root) содержит списки корневых серверов [[DNS]]. Этот файл меняется достаточно редко, но его последнюю официальную версию всегда можно скачать с ftp.internic.net (ftp.rs.internic.net). Содержимое db.root (иногда называемого named.ca для "​certifying authority"​) носит достаточно специальный характер. Оно представляет из себя описание набора канонических корневых серверов,​ собственно регистрирующих домены. ​
 +<​file>​
 +> pwd
 +/​var/​named/​etc/​namedb
 +> fetch ftp://​ftp.internic.net/​domain/​named.root
 +named.root ​                                   100% of 2994  B 4470 kBps
 +</​file>​
 +====== resolv.conf ======
 +Редактируем файл /​etc/​resolv.conf:​ первый DNS сервер это закольцовывание на ваш локальный сервер DNS (127.0.0.1),​ вторым ближайший к вам DNS сервер (обычно предоставляется вашим провайдером интернета),​ список остальных DNS на ваше усмотрение (они не являются обязательными). Файл resolv.conf,​ говорит нам о том, что в случае неудачного DNS запроса к вашему серверу (127.0.0.1),​ запрос будет автоматически переадресован ко второму по списку DNS серверу и т.д..
 +
 +<​code>​
 +> ee /​etc/​resolv.conf
 +domain ​ your.domen
 +nameserver ​     127.0.0.1
 +#DNS your ISP
 +nameserver ​     x.x.x.x
 +nameserver ​     x.x.x.x
 +</​code>​
 +
 +**Резолвер(resolver)** - это набор подпрограмм в библиотеке C, которые предоставляют доступ к Internel [[DNS]] (Domain Name System) (Системе Доменных Имен Интернет) (прим. пер. -- DNS обеспечивает возможность преобразования символьных имен машин в IP-адреса и наоборот,​ IP-адресов в символьные имена). **Файл с настройками /​etc/​resolv.conf** для резолвера содержит информацию,​ которую первым делом читают подпрограммы резолвера,​ вызванные каким-либо процессом. Данный файл устроен так, чтобы его мог читать человек и содержит список ключевых слов и значений,​ которые предоставляют резолверу различную информацию.
 +
 +В нормально настроенной системе данный файл не нужен: запросы будут обрабатываться сервером на локальном хосте, имя домена определяется из имени машины,​ а путь поиска машины по домену конструируется из имени домена.
 +
 +**Параметры конфигурации:​**
 +  * nameserver
 +адрес сервера имен в Интернет (в нотации xxx.xxx.xxx.xxx),​ который будет обрабатывать запросы от резолвера. Серверов имен может быть **максимум 3** (остальные игнорируются),​ по одному на каждой строке. Если задано несколько серверов,​ то библиотека резолвера опрашивает их в порядке перечисления. Если записей nameserver нет, то по умолчанию используется сервер имен на локальной машине. (Используемый алгоритм пытается подключиться к серверу имен и, если запрос не был обработан через некоторый промежуток времени,​ делается попытка подключиться к следующему серверу имен, и так до тех пор пока не будет обработан весь список серверов,​ затем повторить процедуру,​ пока не будет достигнуто максимальное количество повторов).
 +  * domain
 +Локальное имя домена. Большинство запросов на имена машин в этом домене смогут использовать лишь краткие имена, без указания имени домена. Если записей domain нет, то домен определяется из имени локальной машины,​ которое возвращается функцией gethostname();​ доменной частью имени считается все, что следует после первой точки `.'. Наконец,​ если имя машины не содержит доменной части, назначается корневой домен.
 +  * search
 +Список для поиска имен машин. Список обычно определяется из локального имени домена;​ по умолчанию он содержит только имя локального домена. В списке может быть задано несколько доменов,​ которые должны следовать за ключевым словом search и отделяться друг от друга пробелами или табуляциями. В большинстве случаев,​ если в запросе к резолверу задано короткое имя машины (без доменной части),​ то к нему будет поочередно добавляться каждый домен из заданного списка,​ пока не будет найдено полное совпадающее имя машины. Заметим,​ что данный процесс может быть медленным,​ и станет генерировать ощутимый сетевой траффик,​ если серверы,​ обслуживающие перечисленные в списке домены,​ не являются локальными,​ а также что запросы вернут ошибку тайм-аута,​ если сервер для одного из доменов недоступен.
 +Список в данный момент ограничен шестью доменами,​ общая длина имен которых не должна превышать 256 символов.
 +  * sortlist
 +Разрешает сортировку адресов,​ которые возвращаются вызовом gethostbyname(). Опция sortlist задается с помощью пары: IP адрес/​маска сети. Маска сети является необязательной,​ по умолчанию используется текущая маска сети. Пары из IP-адреса и необязательной маски сети разделяются прямой косой чертой. Может быть задано до 10 пар.
 +пример:​ sortlist 130.155.160.0/​255.255.240.0 130.155.0.0
 +  * options
 +Данная опция разрешает изменение определенных переменных резолвера. Синтаксис такой:
 +<​file>​
 +options опция ...
 +где опция может принимать одно из следующих значений:​
 +debug --- устанавливает RES_DEBUG в _res.options.
 +ndots:n --- устанавливает порог для количества точек, которое должно быть в имени, заданном в res_query (см. resolver(@LIB_NETWORK_EXT@))
 +перед тем как будет создан начальный абсолютный запрос (initial absolute query). По умолчанию,​ n ``1'',​ означает,​ что если в имени есть
 +хоть одна точка, будет попытка считать это имя абсолютным перед добавлением к нему элементов из списка search.
 +</​file>​
 +<note tip>​Ключевые слова domain и search являются взаимно исключающими. Если эти слова заданы оба, то будет работать то, которое задано последним.</​note>​
 +<note tip>​Ключевое слово и значение должны быть в одной строке,​ и кроме того, ключевое слово (например,​ nameserver),​ должно быть первым в строке. Значение должно отделяться от ключевого слова пробелом.</​note>​
 +====== named.conf ======
 +
 +Настраиваем named.conf
 +<​code>​
 +> ee /​etc/​namedb/​named.conf
 +...
 +options {
 +...
 +//listen-on [ port ip_port ] { список-шаблонов-адресов };  (по умолчанию - все интерфейсы,​ порт 53; адрес и порт для приема запросов;​
 +//​может быть несколько таких предложений)
 +//
 +// укажем явно, на каких интерфейсах обслуживать запросы
 +        listen-on ​      { 127.0.0.1; адрес-сервера;​ };
 +//
 +// listen-on-v6 [ port ip_port ] { список-шаблонов-адресов }; (none; для IPv6)
 +//      listen-on-v6 ​   { ::1; };
 +
 +//​allow-recursion { список-шаблонов-адресов }; (any; от кого принимать рекурсивные запросы;​ данные из кеша под запрет не попадают)
 +       ​allow-recursion { localhost; 127.0.0.1/​8;​ ваша сеть; };
 +...
 +}
 +
 +//​Описание зон
 +//master - сервер является первичным уполномоченным сервером для данной зоны, т.е. загружает содержимое зоны из файла зоны,
 +// указанного опцией file
 +//slave - сервер является вторичным уполномоченным сервером для данной зоны; содержимое зоны считывается от одного из серверов,​
 +//​указанных в опции masters; указание имени файла в опции file  позволяет сохранять резервную копию зоны в файле
 +//
 +zone "​your.com.ua"​ {
 +        type master;
 +        file "​master/​your.com.ua";​
 +        allow-transfer{
 +        127.0.0.1;
 +//IP вашего сервера DNS
 +        x.x.x.x;
 +//IP slave
 +        195.24.128.164;​
 +        };
 +};
 +
 +</​code>​
 +Стартуем DNS нашего сервера.
 +<​code>​
 +> /​etc/​rc.d/​named start
 +wrote key file "/​var/​named/​etc/​namedb/​rndc.key"​
 +Starting named.
 +</​code>​
 +Проверяем и видим ошибку "the working directory is not writable"​
 +<​code>​
 +> tail -F /​var/​log/​messages
 +...
 +Oct 25 16:12:48 ns named[59827]:​ starting BIND 9.4.3-P2 -t /var/named -u bind
 +Oct 25 16:12:48 ns named[59827]:​ command channel listening on 127.0.0.1#​953
 +Oct 25 16:12:48 ns named[59827]:​ command channel listening on ::1#953
 +Oct 25 16:12:48 ns named[59827]:​ the working directory is not writable
 +Oct 25 16:12:48 ns named[59827]:​ running
 +...
 +</​code>​
 +BIND изначально запускается в песочнице. За настройки в песочнице отвечает файл BIND.chroot.dist. Изменим в этом файле строки для директорий namedb и master.
 +<​code>​
 +> cp /​etc/​mtree/​BIND.chroot.dist /​etc/​mtree/​BIND.chroot.dist.orig
 +> ee /​etc/​mtree/​BIND.chroot.dist
 +...
 +    etc
 +        namedb uname=bind
 +            dynamic uname=bind
 +            ..
 +            master ​ uname=bind
 +...
 +> chown -R bind:wheel /​etc/​namedb/​
 +</​code>​
 +Ошибка устранена.
 +
 +
 +====== Логирование DNS запросов ======
 +Для логирования всего происходящего при работе BIND нужно создать раздел logging в named.conf и создать нужные директории. В разделе logging задаются 2 параметра channel (можно и больше двух - на ваше усмотрение),​ эти параметры дословно можно назвать "​канал"​ записи. Каждый канал определяет имя канала и настройки параметров записи (что записывать,​ а что - нет и куда писать). Директива category задает какую категорию сообщений в какой канал отправлять. Исходя из этого, мы имеем: запись стандартной информации в канал misc, а приходящие запросы посылаются в канал query. При этом, если файлы журнала достигают 4Мб (size 4m), он переименовывается добавлением к имени .1 и начинается запись в новый журнал,​ числа в конце других журналов увеличиваются. Журналы с номером,​ более указанного в version (в нашем случае 4) удаляются. Параметры print* определяют заносить ли в журнал время появления,​ важность и категорию информации. Более подробно про настройки раздела logging можно почитать в man (5) named.conf.
 +<​file>​
 +// настройки логирования
 +logging {
 +          channel "​misc"​ {
 +                    file "/​var/​log/​bind/​misc.log"​ versions 4 size 4m;
 +                    print-time yes;
 +                    print-severity yes;
 +                    print-category yes;
 +          };
 +
 +          channel "​query"​ {
 +                    file "/​var/​log/​bind/​query.log"​ versions 4 size 4m;
 +                    print-time yes;
 +                    print-severity no;
 +                    print-category no;
 +          };
 +
 +          category default {
 +                    "​misc";​
 +          };
 +
 +          category queries {
 +                    "​query";​
 +          };
 +};
 +</​file>​
 +====== rndc - управление DNS сервером BIND 9 ======
 +В то время как управление работающим сервером BIND 4 осуществлялось простой посылкой сигнала процессу (HUP - перезагрузить файл настройки и зоны; TERM - остановить;​ INT - сбросить базу данных в файл named_dump.db;​ ABRT - записать статистику в конец файла named.stats),​ управление сервером BIND 9 производится с помощью специальной утилиты rndc, которая соединяется с сервером (по умолчанию - TCP порт 953) и использует специальный протокол для передачи ему команд. Однако сигналы HUP, TERM пока действуют.
 +
 +Настраивая сервер,​ необходимо обеспечить права доступа к управляющему порту (controls) и ключ (key), смотри ниже rndc-confgen.
 +
 +Файл настройки rndc (/​etc/​rndc.conf) имеет такой же синтаксис,​ что и named.conf. Комментарии могут записываться в стиле C, C++ или sh. Файл настройки состоит из утверждений,​ завершающихся точкой с запятой. Утверждения содержат блок предложений,​ заключенный в фигурные скобки. Предложение в блоке также завершается точкой с запятой. Права на чтение этого файла должны быть только у того, кто имеет право запускать rndc. Предусматириваются следующие типы утверждений:​
 +<​code>​
 +    * options {
 +          o default-server имя-или-адрес-сервера;​
 +          o default-key "​имя-ключа";​
 +          o default-port номер-управляющего-порта;​
 +      }
 +    * server имя-или-адрес-сервера { // адрес в двойных кавычках
 +          o key "​имя-ключа";​
 +          o port номер-управляющего-порта;​
 +      }
 +    * key "​имя-ключа"​
 +          o algorithm hmac-md5;
 +          o secret "​base-64-кодированный-ключ";​
 +      }
 +</​code>​
 +Утилита rndc-confgen позволяет сгенерировать /​etc/​rndc.conf со случайным ключом (и закоментаренные предложения controls и key для /​etc/​named.conf). Следующими ключами можно модифицировать получаемый файл:
 +
 +    * -b размер-ключа (по умолчанию - 128; от 1 до 512)
 +    * -k имя-ключа (по умолчанию - rndc-key)
 +    * -p номер-управляющего-порта (по умолчанию - 953)
 +    * -s имя-или-адрес-сервера (по умолчанию - 127.0.0.1)
 +
 +Утилита rndc позволяет менять параметры соединения с сервером с помощью ключей:​
 +
 +    * -c имя-файла-настройки
 +    * -s имя-или-адрес-сервера
 +    * -p номер-управляющего-порта
 +    * -y имя-ключа
 +    * -V (трассировка исполнения для отладки)
 +
 +Если запустить rndc без указания команды,​ то она выдаст список поддерживаемых команд:​
 +
 +    * reload (перезагрузить файл настройки и зоны)
 +    * reload зона [класс [вид]] (перезагрузить зону)
 +    * refresh зона [класс [вид]] (запланировать немедленное обновление зоны)
 +    * reconfig (перезагрузить файл настройки и новые зоны)
 +    * stats (записать статистику в конец файла named.stats)
 +    * **querylog** (включить/​выключить журнализацию запросов) - после включения в логах можно будет увидеть с какого IP приходят запросы.
 +    * **dumpdb** (сбросить базу данных в файл named_dump.db,​ например:​ **rndc dumpdb -all**)
 +    * stop (сохранить изменения в файлы зон и остановить сервер)
 +    * halt (остановить сервер без сохранения изменений)
 +    * trace (увеличить уровень отладки на 1) в файле **named.run** -появятся отладочные сообщения
 +    * trace уровень (установить уровень отладки)
 +    * notrace (отключить отладку)
 +    * flush (сбросить весь кеш)
 +    * flush вид (сбросить кеш для указанного вида)
 +    * **flushname** (сбросить кеш для указанного домена,​ например,​ сбросить для домена mx.example.ru:​ **rndc flushname mx.example.ru**)
 +    * status (показать состояние сервера)
 +    * restart (перезапустить сервер;​ не реализовано)
 +====== Ссылки ======
 +  * [[http://​www.bog.pp.ru/​work/​bind.html|Bog BOS: DNS сервер BIND]]
 +  * [[http://​www.freebsd.org/​doc/​ru_RU.KOI8-R/​books/​handbook/​network-dns.html|Руководство FreeBSD: Domain Name System (DNS)]]
 +  * [[http://​www.opennet.ru/​man.shtml?​topic=resolv.conf&​category=5&​russian=0|Русский man: resolv.conf]]
 +  * [[http://​www.k-max.name/​linux/​howto-dns-server-bind/​|HOWTO DNS сервер BIND (практика)]]
 +  * [[http://​www.ibm.com/​developerworks/​ru/​edu/​l-lpic2207/​section4.html|Экзамен LPI: Domain Name System (DNS, Доменная система имен)]]
bind.txt · Последние изменения: 2013/07/08 18:27 (внешнее изменение)