Хотим, чтобы наш DNS сервер хранил записи в LDAP каталоге, DHCPd так же пользовался LDAP. А при получении вдреса через DHCP DNS записи (прямая и обратная) обновлялись бы по DDNS.
Устанавливаем пропатченный bind-9.4.1-P1-ldap_patched.zip (либо пропатчить bind-9.4.1-P1.tar.gz вручную прочитав contrib/sdb/ldap )
DHCP можно использовать родной ( проверено на SUSEES10)
Создать конфиги named.conf и dhcpd.conf. Сгенерировать ключ для обновления bind (как - в комментах named.conf)
Пропатчить файл схемы dhcp.schema для LDAP (в objectclass dhcphost поменять строку: SUP top на SUP top AUXILIARY)
В LDAP-дереве создать ветки из DNS.ldif и DHCP.ldif
DDNS в bind работает только в файл-режиме. Поэтому динимическую зону, обновляемую DHCP, нужно описать файлом, а статические зоны - в LDAP
Файл dhcpd.conf
ldap-server "192.168.1.3";
ldap-port 389;
ldap-username "cn=root,dc=holding";
ldap-password "*****";
ldap-base-dn "cn=gerakl,ou=DHCP,dc=holding";
ldap-method static;
Файл named.conf
options {
directory "/var/named/zone";
};
# Os8zyMGNvxo1tJCEGHGf/Q== - это ключ, сгенерированный следующим образом:
# dnssec-keygen -a HMAC-MD5 -b 128 -n USER DHCP_UPDATE
# После выполнения этой команды создаются файлы Kdhcp_update.+157+56116.key и Kdhcp_update.+157+56116.private, из любого можно взять строку ключа.
key DHCP_UPDATE {
algorithm HMAC-MD5.SIG-ALG.REG.INT;
secret "Os8zyMGNvxo1tJCEGHGf/Q==";
};
zone "holding.lan" in {
type master;
database "ldap ldap://192.168.1.3/zoneName=holding.lan,ou=DNS,dc=holding????!bindname=cn=root%2cdc=holding,!x-bindpw=****** 178600";
forwarders {};
allow-update { key DHCP_UPDATE; };
};
zone "2.168.192.in-addr.arpa" in {
type master;
database "ldap ldap://192.168.1.3/zoneName=2.168.192.in-addr.arpa,ou=DNS,dc=holding????!bindname=cn=root%2cdc=holding,!x-bindpw=****** 178600";
forwarders {};
allow-update { key DHCP_UPDATE; };
};
Файл DHCP.ldif
dn: ou=DHCP,dc=holding
objectClass: top
objectClass: organizationalUnit
ou: DHCP
dn: cn=gerakl,ou=DHCP,dc=holding
objectClass: dhcpServer
objectClass: top
cn: gerakl
dhcpServiceDN: cn=network,cn=gerakl,ou=DHCP,dc=holding
dn: cn=network,cn=gerakl,ou=DHCP,dc=holding
objectClass: top
objectClass: dhcpService
objectClass: dhcpOptions
cn: network
dhcpPrimaryDN: cn=gerakl,ou=DHCP,dc=holding
dhcpOption: domain-name "holding.lan"
dhcpOption: domain-name-servers 192.168.2.1
dhcpStatements: default-lease-time 100
dhcpStatements: max-lease-time 200
dhcpStatements: ddns-update-style interim
dhcpStatements: ddns-domainname "holding.lan"
dhcpStatements: ddns-rev-domainname "in-addr.arpa"
dhcpStatements: ddns-updates on
dhcpStatements: key DHCP_UPDATE { algorithm HMAC-MD5.SIG-ALG.REG.INT; secret "Os
8zyMGNvxo1tJCEGHGf/Q=="
dhcpStatements: } zone holding.lan. { primary 192.168.2.1; key DHCP_UPDATE
dhcpStatements: } zone 2.168.192.in-addr.arpa. { primary 192.168.2.1; key DHCP_U
PDATE
dhcpStatements: } #
dhcpStatements: update-static-leases on
dn: cn=192.168.2.0,cn=network,cn=gerakl,ou=DHCP,dc=holding
cn: 192.168.2.0
dhcpNetMask: 24
objectClass: top
objectClass: dhcpSubnet
objectClass: dhcpOptions
dhcpOption: routers 192.168.2.1
dhcpOption: subnet-mask 255.255.255.0
dn: uid=tesla-osa-test$,cn=192.168.2.0,cn=network,cn=gerakl,ou=DHCP,dc=holding
dhcpHWAddress: ethernet 00:00:F0:78:DD:DB
objectClass: sambaSamAccount
objectClass: account
objectClass: dhcpHost
sambaAcctFlags: [W]
sambaNTPassword: 080E93FCFF40799B6965B6EFEF68F74B
sambaPwdCanChange: 1190704435
sambaPwdLastSet: 1190704435
sambaPwdMustChange: 2147483647
sambaSID: S-1-5-21-3664569750-2989616798-3203036106-20001
dhcpStatements: fixed-address 192.168.2.101
cn: tesla-osa-test
uid: tesla-osa-test$
Файл DNS.ldif
dn: ou=DNS,dc=holding
objectClass: top
objectClass: organizationalUnit
ou: DNS
dn: zoneName=holding.lan,ou=DNS,dc=holding
zoneName: holding.lan
objectClass: dNSZone
relativeDomainName: holding.lan
dn: relativeDomainName=gw,zoneName=holding.lan,ou=DNS,dc=holding
relativeDomainName: gw
dNSClass: IN
objectClass: dNSZone
zoneName: holding.lan
aRecord: 192.168.2.1
dn: relativeDomainName=@,zoneName=holding.lan,ou=DNS,dc=holding
relativeDomainName: @
objectClass: dNSZone
dNSClass: IN
zoneName: holding.lan^
sOARecord: holding.lan. root.holding.lan. 1 8H 2H 1W 1D
nSRecord: gw.holding.lan.
aRecord: 192.168.2.1
dn: zoneName=2.168.192.in-addr.arpa,ou=DNS,dc=holding
zoneName: 2.168.192.in-addr.arpa
objectClass: dNSZone
relativeDomainName: 2.168.192.in-addr.arpa
dn: relativeDomainName=@,zoneName=2.168.192.in-addr.arpa,ou=DNS,dc=holding
relativeDomainName: @
objectClass: dNSZone
sOARecord: holding.lan. root.holding.lan. 1 8H 2H 1W 1D
nSRecord: gw.holding.lan.
zoneName: 2.168.192.in-addr.arpa
dn: relativeDomainName=1,zoneName=2.168.192.in-addr.arpa,ou=DNS,dc=holding
relativeDomainName: 1
objectClass: dNSZone
pTRRecord: gw.holding.lan.
zoneName: 2.168.192.in-addr.arpa
dn: relativeDomainName=2,zoneName=2.168.192.in-addr.arpa,ou=DNS,dc=holding
relativeDomainName: 2
objectClass: dNSZone
zoneName: 2.168.192.in-addr.arpa
pTRRecord: gw2.holding.lan.
dn: relativeDomainName=3,zoneName=2.168.192.in-addr.arpa,ou=DNS,dc=holding
relativeDomainName: 3
objectClass: dNSZone
zoneName: 2.168.192.in-addr.arpa
pTRRecord: www.holding.lan.