Этот документ - попытка описать КАК под Linux можно упростить администрирование DNS зон сохраняя их в дирректориях openLDAP. Здесь Вы не найдете описания работы BIND, LDAP и как компилируются эти программы.
Часть 1.
Первое что необходимо - это переделать BIND чтобы он понимал LDAP дирректории, для этого необходимо скачать архив bind-sdb-ldap-0.9. К моменту написания документа последние версии программ которые я использовал это BIND-9.2.1 и bind-sdb-ldap-0.9, и я надеюсь разработчики BIND обратят внимание на такую возможность и включат ее в свой пакет в дальнейшем.
Распаковываем архивы.
Все ниже приведенные действия описаны в файле bin-sdb-ldap/INSTALL.
Копируем файлы ldapdb.c в дирректории bin/named и ldapdb.h в bin/named/include исходников BIND.
Редактируем файл bin/named/Makefile.in добавляем строки:
Все. Дальше конфигурируем и компилируем BIND так как нам это надо. Так же если выше приведенные действия Вам кажутся сложными, то уже готовый патч для версии BIND-9.2.1 лежит здесь.
Часть 2.
Следующий этап - настройка файла named.conf и заполнение дирректорий LDAP.
Для понимания LDAP сервером необходимых значений dns зон - копируем схему dnszone.schema в дирректорию схем LDAP сервера.
Разберем на примере небольшую зону (sgb мой внутренний домен):
@ IN SOA book.sgb. root.book.sgb. ( 1 8H 2H 1W 1D)
NS book.sgb.
localhost A 127.0.0.1
book A 192.168.2.1
boss A 192.168.2.11
Создаем группу DNS в дирректории LDAP (dc=sgb это root_ldap дирректория и это никак не связано с доменом sgb, просто совпадения :)
dn: ou=DNS,dc=sgb
objectClass: top
objectClass: organizationalUnit
ou: DNS
Описание самой зоны sgb:
dn: zoneName=sgb,ou=DNS,dc=sgb
objectClass: top
objectClass: dNSZone
zoneName: sgb
relativeDomainName: sgb
dn: relativeDomainName=localhost,zoneName=sgb,
ou=DNS,dc=sgb
objectClass: top
objectClass: dNSZone
zoneName: sgb
relativeDomainName: localhost
dNSClass: IN
aRecord: 127.0.0.1
Описание записи A для book и boss аналогична:
dn: relativeDomainName=book,zoneName=sgb,
ou=DNS,dc=sgb
objectClass: top
objectClass: dNSZone
zoneName: sgb
relativeDomainName: book
dNSClass: IN
aRecord: 192.168.2.1
dn: relativeDomainName=boss,zoneName=sgb,
ou=DNS,dc=sgb
objectClass: top
objectClass: dNSZone
zoneName: sgb
relativeDomainName: boss
dNSClass: IN
aRecord: 192.168.2.11
Записываем в ldif файл и добавляем в директорию командой ldapadd. Так же для управления директориями можно установить программу с графическим интерфейсом.
Разберем обратную зону 2.168.192.in-addr.arpa:
@ IN SOA book.sgb. root.book.sgb. ( 1 8H 2H 1W 1D)
NS book.sgb.
1 PTR book.sgb.
11 PTR boss.sgb.
Описание зоны 2.168.192.in-addr.arpa:
dn: zoneName=2.168.192.in-addr.arpa,ou=DNS,dc=sgb
objectClass: top
objectClass: dNSZone
zoneName: 2.168.192.in-addr.arpa
relativeDomainName: 2.168.192.in-addr.arpa
Все просто. Полный HOWTO по заполнению dns зон в LDAP с примерами здесь.
Осталось заменить запись зон в named.conf.
Если раньше было так:
zone "sgb" in {
type master;
files "db.sgb";
};
zone "2.168.192.in-addr.arpa" in {
type master;
files "db.2.168.192";
};
Заменяем:
zone "sgb" in {
type master;
database "ldap ldap://127.0.0.1/zoneName=sgb,ou=DNS,dc=sgb 178600";
};
zone "2.168.192.in-addr.arpa" in {
type master;
database "ldap ldap://127.0.0.1/zoneName=2.168.192.in-addr.arpa,ou=DNS,dc=sgb 178600";
};
Число 178600 это TTL для всех записей где неопределен dNSTTL.
Заключение.
Большинство из источников этого документа было придумано другими людьми, однако почти все примеры взяты из моей головы и протестированы на моем ноутбуке с дистрибутивом RedHat-7.2 и openldap-2.0.11. Если кому нибудь придет в голову написать более обширный документ по централизованному администрированию сетей на базе дирректорий LDAP и воспользоваться данным источником, то я невозражаю, с условием сохранения ниже перечисленных ссылок на исходную документацию.