Az internet szolgáltatások alapja a névszolgáltatás, amely neveket fordít IP címmé és viszont, mindenképpen szükségünk van rá, ezért a DNS adatbázis lesz az LDAP első igazi feladata. Nos, hozzuk létre a dns jail-t (a megszokott módon), és telepítsünk egy powerdns és a powerdns-recursor csomagot (az OPENLDAP opciót válasszuk majd ki, hiszen LDAP alapon akarunk DNS-t szolgáltatni):
$ portinstall -i powerdns powerdns-recursor
---> Session started at: Sun, 18 Jan 2009 11:07:07 +0100
[Updating the pkgdb <format:bdb_btree> in /var/db/pkg ... - 71 packages found (-1 +1) (...). done]
Install 'dns/powerdns'? [yes]
[Gathering depends for dns/powerdns .......... done]
Install 'dns/powerdns-recursor'? [yes]
[Gathering depends for dns/powerdns-recursor .. done]
---> Fresh installation of devel/boost started at: Sun, 18 Jan 2009 11:07:14 +0100
[...]
+ devel/boost
+ dns/powerdns-recursor
+ dns/powerdns
---> Packages processed: 3 done, 0 ignored, 0 skipped and 0 failed
---> Session ended at: Sun, 18 Jan 2009 11:30:53 +0100 (consumed 00:23:45)
A FreeBSD alaprendszernek is része egy BINDv9, azonban jobb ezt a szolgáltatást csomagból feltenni, mivel hiba esetén könnyebb és gyorsabb frissíteni, másrészt az alaprendszeri BIND nem támogatja az LDAP-ot, tehát mindenképpen csomagból kellene telepítenünk…
Az LDAP alapból nem támogatja a DNS adatok tárolását, ezért a slapd.conf állományba (természetesen a ldap jail-ben) fel kell venni a cosine sémát, és a dnsdomain2 sémát:
include /usr/local/etc/openldap/schema/cosine.schema
include /usr/local/etc/openldap/schema/dnsdomain2.schema
Ezek után indítsuk újra az ldap jail-ben futó slapd szolgáltatást:
$ /usr/local/etc/rc.d/slapd restart
Stopping slapd.
Waiting for PIDS: 19837.
Starting slapd.
$ /usr/local/etc/rc.d/slapd status
slapd is running as pid 20045.
Lépjünk be a dns _jail_be, s kezdjük azzal, hogy adunk egy esélyt a PowerDNS számára az elindulásra:
master=yes
webserver=yes
webserver-address=192.168.2.3
webserver-password=rootpass
webserver-port=8080
launch=ldap
ldap-host=ldap.jails.javaforum.hu
ldap-starttls=no
ldap-basedn=ou=PowerDNS,dc=javaforum,dc=hu
ldap-method=tree
local-address=192.168.2.3
daemon=yes
recursor=192.168.2.3:5353
lazy-recursion=yes
allow-recursion=127.0.0.1/32,192.168.1.0/24,192.168.2.0/24,0.0.0.0/32
Az üres sor utáni rész egy kis magyarázatra szolgál: a DNS szolgáltatásunkba nem fér bele az internet össze neve és IP címe, ezért a DNS feladata az is, hogy ha ő maga nem tudja feloldani a kérést, akkor továbbkérdez. A PowerDNS a recursor után megadott IP címen lévő DNS szervert fogja megkérdezni az általa nem ismert címekről. Ez az IP többnyire a szolgáltatónk DNS szervere szokott lenni, mivel ez van “legközelebb”, de beállíthatunk egy OpenDNS szervert is, illetve megtehetjük, hogy a saját recursor címét adjuk meg, és beállítjuk a PowerDNS Recursor-t:
dn: ou=PowerDNS,dc=javaforum,dc=hu
objectClass: organizationalUnit
ou: PowerDNS
dn: dc=arpa,ou=PowerDNS,dc=javaforum,dc=hu
objectclass: top
objectclass: dnsdomain2
objectclass: domainrelatedobject
dc: arpa
associateddomain: arpa
dn: dc=in-addr,dc=arpa,ou=PowerDNS,dc=javaforum,dc=hu
objectclass: top
objectclass: dnsdomain2
objectclass: domainrelatedobject
dc: in-addr
associateddomain: in-addr.arpa
dn: dc=hu,ou=PowerDNS,dc=javaforum,dc=hu
objectClass: top
objectClass: dcObject
objectClass: domainRelatedObject
objectClass: domain
objectClass: dNSDomain
dc: hu
associatedDomain: hu
nSRecord: localhost
sOARecord: localhost root@localhost 1 604800 86400 2419200 86400
Majd a localhost domént és a hozzá tartozó reverz bejegyzést:
dn: dc=localhost,ou=PowerDNS,dc=javaforum,dc=hu
objectClass: top
objectClass: dcObject
objectClass: domainRelatedObject
objectClass: domain
objectClass: dNSDomain
dc: localhost
associatedDomain: localhost
nSRecord: localhost
sOARecord: localhost root@localhost 1 604800 86400 2419200 86400
aRecord: 127.0.0.1
dn: dc=127,dc=in-addr,dc=arpa,ou=PowerDNS,dc=javaforum,dc=hu
objectclass: top
objectclass: dnsdomain2
objectclass: domainrelatedobject
dc: 127
associateddomain: 127.in-addr.arpa
dn: dc=0,dc=127,dc=in-addr,dc=arpa,ou=PowerDNS,dc=javaforum,dc=hu
objectclass: top
objectclass: dnsdomain2
objectclass: domainrelatedobject
dc: 0
associateddomain: 0.127.in-addr.arpa
dn: dc=0,dc=0,dc=127,dc=in-addr,dc=arpa,ou=PowerDNS,dc=javaforum,dc=hu
objectclass: top
objectclass: dnsdomain2
objectclass: domainrelatedobject
dc: 0
associateddomain: 0.0.127.in-addr.arpa
dn: dc=1,dc=0,dc=0,dc=127,dc=in-addr,dc=arpa,ou=PowerDNS,dc=javaforum,dc=hu
objectclass: top
objectclass: dnsdomain2
objectclass: domainrelatedobject
dc: 1
ptrrecord: localhost
associateddomain: 1.0.0.127.in-addr.arpa
A két LDIF fájlt az LDAP részben látható módon adhatjuk hozzá az LDAP adatbázishoz.
A PowerDNS tesztelése
A jail-t újraindítva le tudjuk tesztelni a működését:
$ /etc/rc.d/jail restart dns
Stopping jails: dns.jails.javaforum.hu.
Configuring jails:.
Starting jails: dns.jails.javaforum.hu.
[root@freebsd:/]$ nslookup localhost 192.168.2.3
Server: 192.168.2.3
Address: 192.168.2.3#53
Name: localhost
Address: 127.0.0.1
[root@freebsd:/]$ nslookup 127.0.0.1 192.168.2.3
Server: 192.168.2.3
Address: 192.168.2.3#53
1.0.0.127.in-addr.arpa name = localhost.
Tökéletes… az LDAP alapú névszolgáltatás elkészült…
A jails névtér
Most, hogy működik egy LDAP alapú DNS szolgáltatás, célszerű az egész gépet átállítani a belső DNS szolgáltatásra is. Ehhez fel kell vennünk a jails.javaforum.hu domén alá azokat az aldoméneket, amelyeket már az egyes jail-ek host-neveként is használtunk.
Adjuk hozzá a javaforum.hu domént:
dn: dc=javaforum,dc=hu,ou=PowerDNS,dc=javaforum,dc=hu
objectClass: top
objectClass: dcObject
objectClass: domainRelatedObject
objectClass: domain
objectClass: dNSDomain
dc: javaforum
associatedDomain: javaforum.hu
nSRecord: ns.javaforum.hu
mxrecord: 10 mail.javaforum.hu
mxrecord: 20 mail-backup.javaforum.hu
sOARecord: javaforum.hu root@javaforum.hu 1 604800 86400 2419200 86400
aRecord: 91.83.48.130
dn: dc=ns,dc=javaforum,dc=hu,ou=PowerDNS,dc=javaforum,dc=hu
objectClass: top
objectClass: dcObject
objectClass: domainRelatedObject
objectClass: domain
objectClass: dNSDomain
dc: ns
associatedDomain: ns.javaforum.hu
nSRecord: ns.javaforum.hu
sOARecord: javaforum.hu root@javaforum.hu 1 604800 86400 2419200 86400
aRecord: 192.168.195.128
dn: dc=*,dc=javaforum,dc=hu,ou=PowerDNS,dc=javaforum,dc=hu
objectClass: top
objectClass: dcObject
objectClass: domainRelatedObject
objectClass: domain
objectClass: dNSDomain
dc: *
associatedDomain: *.javaforum.hu
nSRecord: ns.javaforum.hu
sOARecord: javaforum.hu root@javaforum.hu 1 604800 86400 2419200 86400
aRecord: 91.83.48.130
A három bejegyzés közül az első a javaforum.hu domén lesz, a második az ns.javaforum.hu aldomén, a harmadik pedig a wildcard aldomén, amely szerint a {}.javaforum.hu{*} feloldható lesz a megadott IP címre.
Ezek után vegyük fel a jails.javaforum.hu domént, a használt aldoméneket, illetve azok reverz címeit:
dn: dc=jails,dc=javaforum,dc=hu,ou=PowerDNS,dc=javaforum,dc=hu
objectClass: top
objectClass: dcObject
objectClass: domainRelatedObject
objectClass: domain
objectClass: dNSDomain
dc: jails
associatedDomain: jails.javaforum.hu
nSRecord: ns.javaforum.hu
sOARecord: javaforum.hu root@javaforum.hu 1 604800 86400 2419200 86400
aRecord: 192.168.2.254
dn: dc=logserver,dc=jails,dc=javaforum,dc=hu,ou=PowerDNS,dc=javaforum,dc=hu
objectClass: top
objectClass: dcObject
objectClass: domainRelatedObject
objectClass: domain
objectClass: dNSDomain
dc: logserver
associatedDomain: logserver.jails.javaforum.hu
nSRecord: ns.javaforum.hu
sOARecord: javaforum.hu root@javaforum.hu 1 604800 86400 2419200 86400
aRecord: 192.168.2.1
dn: dc=ldap,dc=jails,dc=javaforum,dc=hu,ou=PowerDNS,dc=javaforum,dc=hu
objectClass: top
objectClass: dcObject
objectClass: domainRelatedObject
objectClass: domain
objectClass: dNSDomain
dc: ldap
associatedDomain: ldap.jails.javaforum.hu
nSRecord: ns.javaforum.hu
sOARecord: javaforum.hu root@javaforum.hu 1 604800 86400 2419200 86400
aRecord: 192.168.2.2
dn: dc=dns,dc=jails,dc=javaforum,dc=hu,ou=PowerDNS,dc=javaforum,dc=hu
objectClass: top
objectClass: dcObject
objectClass: domainRelatedObject
objectClass: domain
objectClass: dNSDomain
dc: dns
associatedDomain: dns.jails.javaforum.hu
nSRecord: ns.javaforum.hu
sOARecord: javaforum.hu root@javaforum.hu 1 604800 86400 2419200 86400
aRecord: 192.168.2.3
dn: dc=192,dc=in-addr,dc=arpa,ou=PowerDNS,dc=javaforum,dc=hu
objectclass: top
objectclass: dnsdomain2
objectclass: domainrelatedobject
dc: 192
associateddomain: 192.in-addr.arpa
dn: dc=168,dc=192,dc=in-addr,dc=arpa,ou=PowerDNS,dc=javaforum,dc=hu
objectclass: top
objectclass: dnsdomain2
objectclass: domainrelatedobject
dc: 168
associateddomain: 168.192.in-addr.arpa
dn: dc=2,dc=168,dc=192,dc=in-addr,dc=arpa,ou=PowerDNS,dc=javaforum,dc=hu
objectclass: top
objectclass: dnsdomain2
objectclass: domainrelatedobject
dc: 2
associateddomain: 2.168.192.in-addr.arpa
dn: dc=1,dc=2,dc=168,dc=192,dc=in-addr,dc=arpa,ou=PowerDNS,dc=javaforum,dc=hu
objectclass: top
objectclass: dnsdomain2
objectclass: domainrelatedobject
dc: 1
ptrrecord: logserver.jails.javaforum.hu
associateddomain: 1.2.168.192.in-addr.arpa
dn: dc=2,dc=2,dc=168,dc=192,dc=in-addr,dc=arpa,ou=PowerDNS,dc=javaforum,dc=hu
objectclass: top
objectclass: dnsdomain2
objectclass: domainrelatedobject
dc: 2
ptrrecord: ldap.jails.javaforum.hu
associateddomain: 2.2.168.192.in-addr.arpa
dn: dc=3,dc=2,dc=168,dc=192,dc=in-addr,dc=arpa,ou=PowerDNS,dc=javaforum,dc=hu
objectclass: top
objectclass: dnsdomain2
objectclass: domainrelatedobject
dc: 3
ptrrecord: dns.jails.javaforum.hu
associateddomain: 3.2.168.192.in-addr.arpa
Az LDIF felvitele után ellenőrizzük le a működést, természetesen többé nem kell újraindítani a dns jail-t, hiszen az LDAP-ból azonnal ki tudja olvasni az újabb adatokat:
$ nslookup dns.jails.javaforum.hu 192.168.2.3
Server: 192.168.2.3
Address: 192.168.2.3#53
Name: dns.jails.javaforum.hu
Address: 192.168.2.3
[root@dns:~]$
[root@dns:~]$ nslookup 192.168.2.3 192.168.2.3
Server: 192.168.2.3
Address: 192.168.2.3#53
3.2.168.192.in-addr.arpa name = dns.jails.javaforum.hu.
Tökéletes… haladjunk tovább.
Meglévő jail-ek beállítása
Mivel most már van egy jól működő névszolgáltatásunk, vegyük fel az összes jail-ben a /etc/resolv.conf fáljba a helyi DNS szerverünket (ne felejtsük ezt beállítani az újonnan létrehozott jail-ek fájlrendszerében, illetve a template fájlrendszerében se):
search .
nameserver 192.168.2.3
Próbaképpen újraindíthatjuk a szervert, hogy mindent rendben megtalál-e, s elindulnak-e rendesen az eddig beállított jail-ek. Ezek után – ha szeretnénk publikus névszolgáltatást, akkor hozzá kell adnunk a /etc/ipnat.rules állományhoz az 53-as portot és a jail IP címét:
rdr bge0 91.83.48.130/32 port 53 -> 192.168.2.3 port 53 tcp/udp
Majd ezt a változást az ipnat tudomására kell hoznunk:
$ /etc/rc.d/ipnat reload
4 entries flushed from NAT table
6 entries flushed from NAT list