Dhcp и ad/samba4 — различия между версиями

Материал из OpenWiki
Перейти к: навигация, поиск
Строка 1: Строка 1:
 
Затронутые темы: dhcp, kerberos, nsupdate, samba-tool  
 
Затронутые темы: dhcp, kerberos, nsupdate, samba-tool  
  
'''ВАЖНО: bind крайне желательно пересобрать по статье [[Samba4 named]]'''
+
'''ВАЖНО: bind крайне желательно пересобрать по статье [[Samba4 named]] или доставить нужные пакеты (в debian - dlz-ldap-enum)'''
 
+
'''ВАЖНО: Проблем с прямой зоной нет, а обратная плохо обновляется (если keytab сделать администким, то проблем не будет, но это не безопасно). Проблема прав - прошу дополнить!'''
+
  
 
Особых проблем с установкой samba4 нет, но обновление DNS было серьезной проблемой…
 
Особых проблем с установкой samba4 нет, но обновление DNS было серьезной проблемой…
Строка 10: Строка 8:
  
 
В MS AD зону предполагается обновлять используя kerberos, в samba4 это аккуратно переняли.
 
В MS AD зону предполагается обновлять используя kerberos, в samba4 это аккуратно переняли.
В samba4 можно теоретически создать обратную зону <pre>samba-tool dns zonecreate <server> 1.168.192.in-addr.arpa</pre> (https://lists.samba.org/archive/samba/2012-April/166820.html), но это у меня не работает.
+
В samba4 можно теоретически создать обратную зону <pre>samba-tool dns zonecreate <server> 1.168.192.in-addr.arpa</pre> (https://lists.samba.org/archive/samba/2012-April/166820.html).
 
ISC DHCP по умолчанию не умеет работать с kerberos, но этому не сложно его научить.
 
ISC DHCP по умолчанию не умеет работать с kerberos, но этому не сложно его научить.
 
*переназначим действия для новых хостов в dhcp.conf:
 
*переназначим действия для новых хостов в dhcp.conf:
Строка 48: Строка 46:
 
пишем  /usr/local/etc/dhcp-dyndns.conf
 
пишем  /usr/local/etc/dhcp-dyndns.conf
 
  server=сервер samba4
 
  server=сервер samba4
  realm=REALM samba4
+
  realm=REALM samba4 '''(тот же domain, но REALM - большими буквами)'''
  domain=домен '''(REALM меленькими буквами)'''
+
  domain=домен '''(domain пишется меленькими буквами)'''
  keytab=/var/lib/dhcp/dhcp.keytab
+
  keytab=/var/lib/samba/private/dns.keytab
 
  time=3600
 
  time=3600
  kname=dhcp
+
  kname=dns-root
 +
/var/lib/samba/private/dns.keytab - это файл появляется после создания домена (samba-tool domain provides ....), специально для этих целей
  
 
пишем  /usr/local/sbin/dhcp-dyndns.sh:
 
пишем  /usr/local/sbin/dhcp-dyndns.sh:
Строка 94: Строка 93:
 
  chown dhcpd:dhcpd /var/lib/dhcp/dhcp.keytab
 
  chown dhcpd:dhcpd /var/lib/dhcp/dhcp.keytab
 
   
 
   
PS: если что не так, то лучше проделать всё от dhcp (su dhcpd - -s /bin/sh)
+
PS: если что не так, то лучше проверить права и пути к файлам для пользователя dhcpd - проделать всё от dhcp (su dhcpd - -s /bin/sh)
  
 
[[Категория:Samba4]]
 
[[Категория:Samba4]]

Версия 06:12, 7 июня 2014

Затронутые темы: 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-root

/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)