Przechowywanie informacji DNS w plikach często jest niewygodne, dość uciążliwe i trudne w administrowaniu, w szczególności gdy posiadamy wiele serwerów nazw. Dlatego też warto pomyśleć o przechowywaniu tych informacji w bazach danych. Jedną z nich jest LDAP, która daje nam szerokie możliwości, a co najważniejsze – w jednym miejscu możemy przechowywać dane o organizacji, wykorzystywane przez inne usługi, takie jak: dns, samba, dhcp czy też serwer poczty.
W tym artykule opiszę proces instalacji i konfiguracji serwera nazw (aktualnie BIND 9.4.3), który będzie korzystał z plików stref przechowywanych w katalogu LDAP.
W pierwszej kolejności musimy zainstalować BIND’a z obsługą LDAP. W tym celu skorzystamy z systemu portów.
cd /usr/ports/dns/bind9-sdb-ldap/
make install clean
edit: nowy port /usr/ports/dns/bind97-sdb
Zaznaczamy [X] REPLACE_BASE Replace base BIND with this version
Powyższy sposób zastąpi istniejącego BIND’a, jak również będzie używał standardowego katalogu konfiguracyjnego /etc/namedb.
Przejdźmy do konfiguracji serwera nazw. W tym celu musimy dodać do pliku named.conf konfiguracje strefy korzystającej z bazy LDAP. Standardowa konfiguracja strefy przechowywana w pliku tekstowym wygląda następująco:
zone "firma.local" {
type master;
file "master/firma.local";
notify yes;
};
Zamiast używania pliku do przechowywania informacji o strefie, wskażemy BIND’owi aby korzystał z bazy danych LDAP:
zone "firma.local" {
type master;
database "ldap ldap://127.0.0.1/ou=DNS,dc=firma,dc=bogus 172800";
};
Podczas wykonywania sprawdzenia, BIND dokona przeszukania w głąb (w dół) rozpoczynając od URL’a podanego w konfiguracji – w tym przypadku ou=DNS,dc=firma,dc=bogus. Liczba 172800 oznacza TTL i zostanie użyta przez wszystkie rekordy, które nie posiadają atrybutu dNSTTL.
Powyższy przykład spowoduje, ze named podłączy się anonimowo (w trybie read-only) do LDAP. Jeśli chcemy podłączyć się jako konkretny użytkownik musimy skonfigurować to w następujący sposób:
zone "firma.local" {
type master;
database "ldap ldap://127.0.0.1/ou=DNS,dc=firma,dc=bogus????! bindname=cn=admin%2cdc=firma%2cdc=bogus, !x-bindpw=secret 172800";
};
Nadszedł czas na przygotowanie LDAP. Do pliku konfiguracyjnego slapd.conf musimy dodać:
include /usr/local/etc/openldap/schema/dnszone.schema
Możemy również dodać index’y:
index relativeDomainName eq
index zoneName eq
Na sam koniec musimy wyłączyć demona slapd:
/usr/local/etc/rc.d/slapd stop
przeindexować bazy:
slapindex
i ponownie uruchomić LDAP:
/usr/local/etc/rc.d/slapd start
.
Schemat dnszone.schema można pobrać ze strony:
http://www.venaas.no/ldap/bind-sdb/dnszone-schema.txt
Teraz pozostało nam dodanie rekordów do bazy. Poniżej znajduje się przykładowy wpis dla strefy firma.local w formacie LDIF:
dn: ou=DNS,dc=firma,dc=bogus
ou: DNS
objectClass: organizationalUnit
objectClass: top
dn: zoneName=firma.local,ou=DNS,dc=firma,dc=bogus
relativeDomainName: @
zoneName: firma.local
objectClass: dNSZone
dn: relativeDomainName=@,zoneName=firma.local,ou=DNS,dc=firma,dc=bogus
dNSClass: IN
dNSTTL: 3600
objectClass: dNSZone
objectClass: top
relativeDomainName: @
zoneName: firma.local
nSRecord: firma.local.
sOARecord: firma.local. hostmaster.firma.com.pl. 2011030601 3600 900
3600000 3600
dn: relativeDomainName=hosta,zoneName=firma.local,ou=DNS,dc=firma,dc=bogus
dNSClass: IN
dNSTTL: 3600
objectClass: dNSZone
objectClass: top
relativeDomainName: hosta
zoneName: firma.local
aRecord: 192.168.1.1
Aby dodać te rekordy do bazy musimy zapisać je do pliku np: dns.ldif i wydać polecenie:
ldapadd -D "cn=admin,dc=firma,dc=bogus"-W -f dns.ldif
.
Jesteśmy już gotowi aby uruchomić i przetestować serwer DNS:
/etc/rc.d/named start
nslookup hosta.firma.local
Server: 127.0.0.1
Address: 127.0.0.1#53
Name: hosta.firma.local
Address: 192.168.1.1
Na sam koniec. Pamiętajcie, że zmieniając rekordy (dodanie, aktualizacja czy usunięcie) należy zmienić serial w rekordzie sOA. Jest to szczególnie ważne gdy posiadacie serwery slave.