Назад | Перейти на главную страницу

Настройте BIND с бэкэндом базы данных и поддержкой DLZ

Решил перенести свои DNS-серверы на базе Windows на Linux. Проблема в том, что мне нужно иметь возможность динамически обновлять файлы зоны без перезапуска привязки. Кажется, наиболее популярным решением является установка драйверов привязки для сервера базы данных (postgresql, sqlite, mysql) и последующее обновление файла зоны. Кажется достаточно простым, но я не могу заставить его работать на всю жизнь.

В настоящее время я использую дистрибутив Amazon Linux, но я тоже пробовал все в RHEL 6.2, но безуспешно.

Я пробовал несколько разных методов. Первым было скомпилировать привязку с изменениями исходного кода для поддержки mysql. http://pbraun.nethence.com/doc/net/bind-mysql.html. Это нормально компилируется с изменениями, и я не получаю ошибок, но после запуска make install все двоичные файлы копируются в / usr / local / sbin, но я не могу запустить процесс демона, который я запускаю service named start и он просто говорит мне, что нет службы с именем named (без каламбура). Во-вторых, не создается ни один из файлов конфигурации. Итак, я создал файл с именем.conf и поместил его в /etc/ named.conf, затем запустил /usr/local/sbin/named-checkconf и он сказал мне, что не может найти файл /etc/ named.conf, поэтому я понятия не имею.

Следующее, что я попробовал, - это установить пакет bind-sdb и использовать postgresql. Установленные пакеты yum -qy bind bind-sdb bind-utils postgresql postgresql-server Следуя инструкциям на http://bind-dlz.sourceforge.net/postgresql_example.html Я создал новую базу данных и таблицу postgre и т. Д. Ниже мой текущий named.conf

//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//

options {
    listen-on port 53 { 127.0.0.1; };
    listen-on-v6 port 53 { ::1; };
    directory       "/var/named";
    dump-file       "/var/named/data/cache_dump.db";
    statistics-file "/var/named/data/named_stats.txt";
    memstatistics-file "/var/named/data/named_mem_stats.txt";
    allow-query     { localhost; };
    recursion yes;

    dnssec-enable yes;
    dnssec-validation yes;
    dnssec-lookaside auto;

    /* Path to ISC DLV key */
    bindkeys-file "/etc/named.iscdlv.key";
};

logging {
    channel default_debug {
            file "data/named.run";
            severity dynamic;
    };
};

zone "." IN {
    type hint;
    file "named.ca";
};

dlz "my.zone" {
   database "postgres 1
   {host=localhost port=5432 dbname=bind user=postgre password=****}
   {select zone from dns_records where zone = '%zone%'}
   {select ttl, type, mx_priority, case when lower(type)='txt' then '\"'
         || data || '\"' when lower(type)='soa' then data || ' ' || resp_person || ' '
         || serial || ' ' || refresh || ' ' || retry || ' ' || expire || ' ' || minimum
         else data end from dns_records where zone = '%zone%' and host = '%record%'}";
};

include "/etc/named.rfc1912.zones";

Вывод из моей таблицы базы данных

    zone    |    host     |  ttl   | type | mx_priority |          data          |     resp_person      | serial | refresh | expire | minimum
------------+-------------+--------+------+-------------+------------------------+----------------------+--------+---------+--------+---------
 my.cloud   | my.cloud.   | 259200 | SOA  |           0 | dns01.my.cloud.        | it.cloud.com.        |      1 |   28800 |  86400 |   28800
 my.cloud   | my.cloud.   | 259200 | NS   |           0 | dns01.my.cloud.        |                      |      0 |       0 |      0 |       0
 my.cloud   | dns01       | 259200 | A    |           0 | 127.0.0.1              |                      |      0 |       0 |      0 |       0
(3 rows)

Открыт для любых решений, если кто-то может указать мне правильное направление. Я бы предпочел использовать MySQL в качестве базы данных, потому что у меня нет опыта использования postgresql или sqlite.

Может быть, это не совсем ответ на ваш вопрос, но все равно. (Я недавно тоже исследовал эту проблему, и вот мои выводы):

Поддержка DLZ в BIND9 больше похожа на «патч». Это плохо документировано - ни слова об этом в BIND ARM. Вроде не получил широкого распространения. Производительность запроса ужасный - согласно этому ориентир, PostgreSQL будет 30 раз (!) медленнее, чем при нормальной работе в памяти. (тест старый, но нет никаких оснований предполагать, что ситуация резко улучшилась).

Я не думаю, что это «самое популярное решение».

Другие варианты:

BIND9 поддерживает динамические обновления. Он хорошо документирован, широко используется и прост в реализации. Отсутствие потери производительности - ответы на все запросы остались от объем памяти. Настройка проще, так как база данных не требуется. Вы выполняете обновления программно, используя библиотеки протоколов DNS (которые, вероятно, существуют для большинства языков, я использую PHP) или через командную строку. nsupdate инструмент. Я рекомендую это решение.

Если вам действительно нужна база данных - PowerDNS кажется разработан для использования с базой данных. У него есть функции, которые могут помочь не полностью жертвовать производительностью при использовании базы данных, например, он может кэшировать запросы к базе данных на некоторое время вместо того, чтобы каждый раз запрашивать базу данных. Некоторые приличные DNS-хостинги используют PowerDNS.

Более экзотический вариант - BIND10, хотя разработка еще не завершена, разработчики утверждают, что люди действительно используют его в производственной среде. В настоящее время BIND10 использует серверную часть SQLITE.

Для полноты, чтобы выполнить исходное требование («динамически обновлять файлы зоны без перезапуска связывания»): отредактируйте файл (ы) зоны, отправьте SIGHUP на имя named. Демон перечитает файлы зоны.

Немного поздно, но я сделал туториал Вот.

Поддержка DLZ полностью интегрирована в bind9, вам просто нужно включить ее при запуске ./configure.
Это не сложно, на самом деле, довольно просто, но очень плохо документировано.
Мой учебник меняет это.
Теперь вам не потребуется больше 30 минут (включая время компиляции), чтобы его запустить и запустить.

К сожалению, я не могу скопировать руководство здесь, оно слишком велико.

вы можете использовать модуль bind-sdb, но, к сожалению, он поддерживает только ldap и pgsql

# yum install -y bind bind-sdb