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

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


bind

Настройка DNS -сервера BIND

Основная цель DNS — это отображение доменных имен в IP адреса и наоборот — IP в DNS.

BIND (Berkeley Internet Name Domain, до этого: Berkeley Internet Name Daemon) — открытая и наиболее распространённая реализация DNS-сервера

# named -v
BIND 9.4.3-P2

Расположение файлов BIND:

> 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

Разрешаем запуск DNS сервера:

# echo 'named_enable="YES"' >> /etc/rc.conf

Файл зоны

Синтаксис файлов зон

  • ; - комментарий
  • @ - символ подставновки. Подставляется имя домена из named.conf (название файла зоны) или если задан переменная $ORIGIN
  • () - используется для переноса длинных строк.

named.root или db.root обновление

Файл named.root (db.root) содержит списки корневых серверов Что такое DNS. Этот файл меняется достаточно редко, но его последнюю официальную версию всегда можно скачать с ftp.internic.net (ftp.rs.internic.net). Содержимое db.root (иногда называемого named.ca для "certifying authority") носит достаточно специальный характер. Оно представляет из себя описание набора канонических корневых серверов, собственно регистрирующих домены.

> pwd
/var/named/etc/namedb
> fetch ftp://ftp.internic.net/domain/named.root
named.root                                    100% of 2994  B 4470 kBps

resolv.conf

Редактируем файл /etc/resolv.conf: первый DNS сервер это закольцовывание на ваш локальный сервер DNS (127.0.0.1), вторым ближайший к вам DNS сервер (обычно предоставляется вашим провайдером интернета), список остальных DNS на ваше усмотрение (они не являются обязательными). Файл resolv.conf, говорит нам о том, что в случае неудачного DNS запроса к вашему серверу (127.0.0.1), запрос будет автоматически переадресован ко второму по списку DNS серверу и т.д..

> 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

Резолвер(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

Данная опция разрешает изменение определенных переменных резолвера. Синтаксис такой:

options опция ...
где опция может принимать одно из следующих значений:
debug --- устанавливает RES_DEBUG в _res.options.
ndots:n --- устанавливает порог для количества точек, которое должно быть в имени, заданном в res_query (см. resolver(@LIB_NETWORK_EXT@))
перед тем как будет создан начальный абсолютный запрос (initial absolute query). По умолчанию, n ``1'', означает, что если в имени есть
хоть одна точка, будет попытка считать это имя абсолютным перед добавлением к нему элементов из списка search.
Ключевые слова domain и search являются взаимно исключающими. Если эти слова заданы оба, то будет работать то, которое задано последним.
Ключевое слово и значение должны быть в одной строке, и кроме того, ключевое слово (например, nameserver), должно быть первым в строке. Значение должно отделяться от ключевого слова пробелом.

named.conf

Настраиваем named.conf

> 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;
        };
};

Стартуем DNS нашего сервера.

> /etc/rc.d/named start
wrote key file "/var/named/etc/namedb/rndc.key"
Starting named.

Проверяем и видим ошибку "the working directory is not writable"

> 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
...

BIND изначально запускается в песочнице. За настройки в песочнице отвечает файл BIND.chroot.dist. Изменим в этом файле строки для директорий namedb и master.

> 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/

Ошибка устранена.

Логирование DNS запросов

Для логирования всего происходящего при работе BIND нужно создать раздел logging в named.conf и создать нужные директории. В разделе logging задаются 2 параметра channel (можно и больше двух - на ваше усмотрение), эти параметры дословно можно назвать "канал" записи. Каждый канал определяет имя канала и настройки параметров записи (что записывать, а что - нет и куда писать). Директива category задает какую категорию сообщений в какой канал отправлять. Исходя из этого, мы имеем: запись стандартной информации в канал misc, а приходящие запросы посылаются в канал query. При этом, если файлы журнала достигают 4Мб (size 4m), он переименовывается добавлением к имени .1 и начинается запись в новый журнал, числа в конце других журналов увеличиваются. Журналы с номером, более указанного в version (в нашем случае 4) удаляются. Параметры print* определяют заносить ли в журнал время появления, важность и категорию информации. Более подробно про настройки раздела logging можно почитать в man (5) named.conf.

// настройки логирования
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";
          };
};

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. Предусматириваются следующие типы утверждений:

    * options {
          o default-server имя-или-адрес-сервера;
          o default-key "имя-ключа";
          o default-port номер-управляющего-порта;
      }
    * server имя-или-адрес-сервера { // адрес в двойных кавычках
          o key "имя-ключа";
          o port номер-управляющего-порта;
      }
    * key "имя-ключа"
          o algorithm hmac-md5;
          o secret "base-64-кодированный-ключ";
      }

Утилита 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 (перезапустить сервер; не реализовано)

Domain Name Speed Benchmark

Правильность настройки DNS сервера и его скорость вы можете проверить при помощи Domain Name Speed Benchmark.

загрузка...
bind.txt · Последние изменения: 2018/07/31 02:32 (внешнее изменение)