Dhcp и ad/samba4
Затронутые темы: dhcp, kerberos, nsupdate, samba-tool
ВАЖНО: bind крайне желательно пересобрать по статье Samba4 named или доставить нужные пакеты (в debian - dlz-ldap-enum)
Особых проблем с установкой samba4 нет, но обновление DNS было серьезной проблемой…
(по мотивам http://blog.michael.kuron-germany.de/tag/active-directory/)
В MS AD зону предполагается обновлять используя kerberos, в samba4 это аккуратно переняли.
В samba4 можно теоретически создать обратную зонуsamba-tool dns zonecreate <server> 1.168.192.in-addr.arpa(https://lists.samba.org/archive/samba/2012-April/166820.html).
ISC DHCP по умолчанию не умеет работать с kerberos, но этому не сложно его научить.
- переназначим действия для новых хостов в dhcp.conf:
subnet x.x.x.x netmask x.x.x.x { ... on commit { set noname = concat("dhcp-", binary-to-ascii(10, 8, "-", leased-address)); set ClientIP = binary-to-ascii(10, 8, ".", leased-address); set ClientMac = binary-to-ascii(16, 8, ":", substring(hardware, 1, 6)); set ClientName = pick-first-value(option host-name, host-decl-name, config-option host-name, noname); log(concat("Commit: IP: ", ClientIP, " Mac: ", ClientMac, " Name: ", ClientName)); execute("/usr/local/sbin/dhcp-dyndns.sh", "add", ClientIP, ClientName, ClientMac); } ################# on release { set ClientIP = binary-to-ascii(10, 8, ".", leased-address); set ClientMac = binary-to-ascii(16, 8, ":", substring(hardware, 1, 6)); log(concat("Release: IP: ", ClientIP, " Mac: ", ClientMac)); # cannot get a ClientName here, for some reason that always fails execute("/usr/local/sbin/dhcp-dyndns.sh", "delete", ClientIP, "", ClientMac); } ################# on expiry { set ClientIP = binary-to-ascii(10, 8, ".", leased-address); # cannot get a ClientMac here, apparently this only works when actually receiving a packet log(concat("Expired: IP: ", ClientIP)); # cannot get a ClientName here, for some reason that always fails execute("/usr/local/sbin/dhcp-dyndns.sh", "delete", ClientIP, "", "0"); } ... }
пишем /usr/local/etc/dhcp-dyndns.conf
server=сервер samba4 realm=REALM samba4 (тот же domain, но REALM - большими буквами) domain=домен (domain пишется меленькими буквами) keytab=/var/lib/samba/private/dns.keytab time=3600 kname=dns-$hostname (имя создается по приципу dns-<host>, но кго можно увидеть командой ktutil -k /var/lib/samba/private/dns.keytab list)
/var/lib/samba/private/dns.keytab - это файл появляется после создания домена (samba-tool domain provides ....), специально для этих целей
пишем /usr/local/sbin/dhcp-dyndns.sh:
#!/bin/sh action=$1 ip=$2 host=$(echo $3 | awk -F '.' '{print $1}') mac=$4 . /usr/local/etc/dhcp-dyndns.conf ptr=$(echo $ip | awk -F '.' '{print $4"."$3"."$2"."$1".in-addr.arpa"}') /usr/bin/kinit -k -t $keytab $kname@$realm case "$action" in add) echo "server $server update delete $host.$domain $time A update add $host.$domain $time A $ip send"|nsupdate -g echo "server $server update delete $ptr $time PTR update add $ptr $time PTR $host.$domain send"|nsupdate -g ;; delete) echo "server $server update delete $host.$domain $time A send"|nsupdate -g echo "server $server update delete $ptr $time PTR send"|nsupdate -g ;; esac
получаем keytab (нужно создать пользователя dhcp c правами DnsUpdateProxy):
/usr/local/samba/bin/samba-tool user add dhcp --random-password /usr/local/samba/bin/samba-tool group addmembers DnsUpdateProxy dhcp /usr/local/samba/bin/samba-tool domain exportkeytab --princ 'dhcp@REALM' -N /var/lib/dhcp/dhcp.keytab # вместо REALM укажите свой ls -l /var/lib/dhcp/dhcp.keytab chown dhcpd:dhcpd /var/lib/dhcp/dhcp.keytab
PS: если что не так, то лучше проверить права и пути к файлам для пользователя dhcpd - проделать всё от dhcp (su dhcpd - -s /bin/sh)