Samba (Русский)/Active Directory domain controller (Русский)
Эта статья объясняет, как настроить новый контроллер домена Active Directory. Предполагается, что после установки все файлы настроек находятся в неизменённом состоянии. Эта статья была написана и протестирована на свежей установке, без каких-либо других установок (сетевое соединение статического IPv4, назначение имени хоста, добавление OpenSSH и Vim), которые не должны иметь никакого влияния на настройки Samba. Большинство приведенных ниже команд потребует повышенных привелегий (прав суперпользователя). Несмотря на здравый смысл, проще запустить несколько этих коротких команд из сессии root, чем получать права по мере необходимости.
Установка
Полностью функциональный Samba 4 DC требует несколько программ, помимо тех, которые включенны в дистрибутив Samba. Установите пакеты bind, krb5, ntp, openldap, и samba.
Кроме того, Самба содержит свой собственный полнофункциональный DNS-сервер, но многие администраторы предпочитают использовать пакет ISC BIND. Если вам нужна поддержка DNS зон для внешних доменов, вам настоятельно рекомендуется использовать bind. Для совместного использования принтеров, воспользуйтесь cups. При необходимости, поставьте пакет(ы) bind и/или cups.
Резервирование
Первый шаг к созданию домена Active Directory является создание резервов. Если это первый контроллер домена в новом домене (как предполагает это руководство), это подразумевает создание внутреннего LDAP, Kerberos и DNS-серверов и выполнение всех базовых настроек, необходимых для каталога. Вы должны быть в курсе потенциальных ошибок, созданных этими индивидуальными компонентами и работающих, как единое целое. Причина этой трудности в том, что разработчики Samba решили не использовать сервер MIT Kerberos или Heimdal или сервер OpenLDAP в пользу выбора внутренних версих этих программ. Выше были установлены пакеты сервера только для клиентских программ. С Samba 4 резервирование проще. Выполните следующую команду:
# samba-tool domain provision --use-rfc2307 --use-xattrs=yes --interactive
Объяснение параметров (аргументов)
- --use-rfc2307
- этот параметр добавляет POSIX атрибуты (UID / GID) на схеме AD. Это понадобится при аутендификации клиентов Linux, BSD, or OS X (в том числе на локальной машине) в дополнение к Microsoft Windows.
- --use-xattrs=yes
- этот параметр включает расширенное использование атрибутов unix (ACLs) для файлов, размещенных на этом сервере. Если вы не будете открывать доступ файлов на контроллере домена, пропустите этот аргумент (но это не рекомендуется). Вы также должны убедиться, что все файловые системы, которые будут принимать открыт доступ Samba, установлены с поддержкой ACL's.
- --interactive
- этот параметр заставляет сценарий резерва запускаться в интерактивном режиме. Alternately, you can review the help for the provision step by running
samba-tool domain provision --help
.
Interactive provision explanations
- Realm
- INTERNAL.DOMAIN.COM - должен быть таким же, как и домен DNS в верхнем регистре. Является общим для использования внутреннего только суб-домена, чтобы отделить внутреннюю область от ваших внешних доменов DNS, но это не обязательно.
- Domain
- INTERNAL - тут указывается доменное имя NetBIOS, как правило, leftmost DNS-суб-домен, но может быть все что угодно. Внутреннее имя, например, будет не наглядным. Возможно, будет уместно название компании или инициалы. Это должно вводится во всех шапках, и содержать максимум 15 символов, для совместимости со старыми клиентами.
- Server Role
- dc - Этот пункт предполагает, что в новом домене установлен первый DC. Если вы выберите что-то другое, то остальная часть статьи, вероятно, будет бесполезна для вас.
- DNS Backend
- BIND9_DLZ или SAMBA_INTERNAL - This is down to personal preference of the server admin. Again, if you are hosting DNS for external domains, you are strongly encouraged to use the BIND9_DLZ backend so that flat zone files can continue to be used and existing transfer rules can co-exist with the internal DNS server. Если вы не уверены, используйте бакэнд SAMBA_INTERNAL.
- Administrator password
- xxxxxxxx - Вы должны задать сложный пароль для аккаунта администратора. Минимальным требованием являются: одна буква в верхнем регистре, одна цифра, и не менее восьми символов. Если вы попытаетесь использовать пароль, который не отвечает требованиям сложности, инициализации не удастся.
Настройка демонов
NTPD
Создайте подходящую настройку сервера времени NTP. Для пояснения и настройки дополнительных опций смотрите Ntpd. Создать резервную копию файла по умолчанию:
# mv /etc/ntp.conf{,.default}
Создайте файл /etc/ntp.conf
со следующим содержимым:
# Начало /etc/ntp.conf # Ассоцииация с публичным пулом серверов NTP server 0.pool.ntp.org server 1.pool.ntp.org server 2.pool.ntp.org # Расположение drift file driftfile /var/lib/ntp/ntpd.drift # Расположение файла log'ов logfile /var/log/ntpd # Расположение каталога обновлений ntpsigndsocket /var/lib/samba/ntp_signd/ # Ограничения restrict default kod limited nomodify notrap nopeer mssntp restrict 127.0.0.1 restrict ::1 restrict 0.pool.ntp.org mask 255.255.255.255 nomodify notrap nopeer noquery restrict 1.pool.ntp.org mask 255.255.255.255 nomodify notrap nopeer noquery restrict 2.pool.ntp.org mask 255.255.255.255 nomodify notrap nopeer noquery # Конец /etc/ntp.conf
Создайте каталог и установите права:
# install -d /var/lib/samba/ntp_signd # chown root:ntp /var/lib/samba/ntp_signd # chmod 0750 /var/lib/samba/ntp_signd
Включите и запустите службу ntpd
.
BIND
Если вы решили использовать BIND9_DLZ DNS бэкенд, установите пакет bind и создайте следующую конфигурацию BIND. Смотрите BIND для объяснения, и дополнительных опций настройки. Замените символы x на верные, подходящие значения: Для начала, создайте резервную копию файла настроек по умолчанию:
# mv /etc/named.conf{,.default}
Создайте файл /etc/named.conf
:
//Begin /etc/named.conf // Global options options { auth-nxdomain yes; datasize default; directory "/var/named"; empty-zones-enable no; pid-file "/run/named/named.pid"; tkey-gssapi-keytab "/var/lib/samba/private/dns.keytab"; forwarders { xxx.xxx.xxx.xxx; xxx.xxx.xxx.xxx; }; // Uncomment the next line to enable IPv6 // listen-on-v6 { any; }; // Add this for no IPv4: // listen-on { none; }; notify no; // Add any subnets or hosts you want to allow to use this DNS server (use "; " delimiter) allow-query { xxx.xxx.xxx.xxx/xx; 127.0.0.0/8; }; // Add any subnets or hosts you want to allow to use recursive queries allow-recursion { xxx.xxx.xxx.xxx/xx; 127.0.0.0/8; }; // Add any subnets or hosts you want to allow dynamic updates from allow-update { xxx.xxx.xxx.xxx/xx; 127.0.0.0/8; }; version none; hostname none; server-id none; }; //Root servers (required zone for recursive queries) zone "." IN { type hint; file "root.hint"; }; //Required localhost forward-/reverse zones zone "localhost" IN { type master; file "localhost.zone"; // allow-transfer { any; }; }; zone "0.0.127.in-addr.arpa" IN { type master; file "127.0.0.zone"; // allow-transfer { any; }; }; // Uncomment the following zone for IPv6 support //zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN { // type master; // file "localhost.ip6.zone"; // allow-transfer { any; }; //}; //Load AD integrated zones dlz "AD DNS Zones" { database "dlopen /usr/lib/samba/bind9/dlz_bind9_10.so"; }; //Log settings logging { channel xfer-log { file "/var/log/named.log"; print-category yes; print-severity yes; print-time yes; severity info; }; category xfer-in { xfer-log; }; category xfer-out { xfer-log; }; category notify { xfer-log; }; }; //End /etc/named.conf
Установка разрешений:
# chgrp named /var/lib/samba/private/dns.keytab # chmod g+r /var/lib/samba/private/dns.keytab # touch /var/log/named.log # chown root:named /var/log/named.log # chmod 664 /var/log/named.log
Включите и запустите службу named
.
Good values for forwarders are your ISP's DNS servers. Google (8.8.8.8, 8.8.4.4, 2001:4860:4860::8888, и 2001:4860:4860::8844) и OpenDNS (208.67.222.222, 208.67.220.220, 2620:0:ccc::2 and 2620:0:ccd::2) provide suitable public DNS servers free of charge. Соответствующие значения для подсетей характерны для вашей сети.
Клиентские утилиты Kerberos
Шаг инициализации выше, создал совершенно правильный файл krb5.conf для использования с Samba 4 DC. Установите его с помощью следующих команд:
# mv /etc/krb5.conf{,.default} # cp /var/lib/samba/private/krb5.conf /etc
DNS
Сейчас вам нужно будет начать использовать локальный сервер DNS. Если ваши файлы настройки интерфейса используют Resolvconf, перенастройте их соответствующим образом. Создайте /etc/resolv.conf.tail
(не забудьте заменить internal.domain.tld с внутреннего домена):
# Samba configuration search internal.domain.tld # If using IPv6, uncomment the following line #nameserver ::1 nameserver 127.0.0.1
Установите права и пересоздайте новый файл /etc/resolv.conf
# chmod 644 /etc/resolv.conf.tail # resolvconf -u
Samba
Включите и запустите службу samba
. Если вы намерены использовать утилиты LDB utilities, вам также понадобится создать файл /etc/profile.d/sambaldb.sh
чтобы задать LDB_MODULES_PATH:
export LDB_MODULES_PATH="${LDB_MODULES_PATH}:/usr/lib/samba/ldb"
Установка разрешения и выполнения на файл:
# chmod 0755 /etc/profile.d/sambaldb.sh # . /etc/profile.d/sambaldb.sh
Тестирование установки
DNS
Во-первых, убедитесь, что DNS-работает, как и ожидалось. Выполните следующие команды, заменяя соответствующие значения для internal.domain.com и server:
# host -t SRV _ldap._tcp.internal.domain.com. # host -t SRV _kerberos._udp.internal.domain.com. # host -t A server.internal.domain.com.
Вы должны получить результат, похожий на следующий:
_ldap._tcp.internal.domain.com has SRV record 0 100 389 server.internal.domain.com. _kerberos._udp.internal.domain.com has SRV record 0 100 88 server.internal.domain.com. server.internal.domain.com has address xxx.xxx.xxx.xxx
Аутентификация NT
Убедитесь, что проверка подлинности пароля работает, как и ожидалось:
# smbclient //localhost/netlogon -U Administrator -c 'ls'
Вам будет предложено ввести пароль (тот, который вы выбрали ранее), и после получите список каталогов:
Domain=[INTERNAL] OS=[Unix] Server=[Samba 4.1.2] . D 0 Wed Nov 27 23:59:07 2013 .. D 0 Wed Nov 27 23:59:12 2013 50332 blocks of size 2097152. 47185 blocks available
Kerberos
Проверьте раоту KDC. Замените INTERNAL.DOMAIN.COM используя заглавные буквы:
# kinit administrator@INTERNAL.DOMAIN.COM
Вам будет предложено ввести пароль и вы получите результат, похожий на следующий:
Warning: Your password will expire in 41 days on Wed 08 Jan 2014 11:59:11 PM CST
Убедитесь, что вы на самом деле получил тикет:
# klist
Вы должны получить результат, похожий на:
Ticket cache: FILE:/tmp/krb5cc_0 Default principal: administrator@INTERNAL.DOMAIN.COM Valid starting Expires Service principal 11/28/2013 00:22:17 11/28/2013 10:22:17 krbtgt/INTERNAL.DOMAIN.COM@INTERNAL.DOMAIN.COM renew until 11/29/2013 00:22:14
В качестве последнего испытания, используйте smbclient с недавно приобретенным тикетом. Замените server на правильное имя сервера:
# smbclient //server/netlogon -k -c 'ls'
Вывод должен быть такой же, как при тестировании парольной аутентификации выше.
Расширенная настройка
DNS
Вы также должны создать зону обратного просмотра для каждой подсети в вашей среде DNS. Важно, что это хранится в DNS Samba как противоположность BIND для обеспечения динамического обновления клиентов. Для каждой подсети, создайте зону обратного просмотра с помощью следующих команд. Замените server.internal.domain.tld и xxx.xxx.xxx с соответствующими значениями. Для xxx.xxx.xxx, используйте первые три байта подсети в обратном порядке (например: 192.168.0.0/24 станет 0.168.192):
# samba-tool dns zonecreate server.internal.domain.tld xxx.xxx.xxx.in-addr.arpa
Теперь добавьте запись для вашего сервера (если ваш сервер multi-homed, добавьте для каждой подсети) снова заменяя соответствующие значения, как указано выше. zzz будет замененён четвёртым октетом IP для сервера:
# samba-tool dns add server.internal.domain.tld xxx.xxx.xxx.in-addr.arpa zzz PTR server.internal.domain.tld
Перезапустите службу samba
. При использовании BIND для DNS, перезапустите также сервис named
.
Наконец, проверьте поиск. Замените xxx.xxx.xxx.xxx с IP вашего сервера:
# host -t PTR xxx.xxx.xxx.xxx
Вы должны получить результат, похожий на следующий:
xxx.xxx.xxx.xxx.in-addr.arpa domain name pointer server.internal.domain.tld.
SSL
По умолчанию, поддержка SSL не включена, однако, сертификат по умолчанию был создан когда поднимался DC. Для использования ключей по умолчанию, добавьте следующие строки в секцию "[global]" файла /etc/samba/smb.conf
:
tls enabled = yes tls keyfile = tls/key.pem tls certfile = tls/cert.pem tls cafile = tls/ca.pem
Если необходим доверенный сертификат, создайте ключ подписи и запрос на сертификат с помощью следующих команд (убедитесь, что общее имя совпадает с полным доменным именем сервера и не вводите пароль):
# cd /var/lib/samba/private/tls # openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out NETBIOS_KEY.pem # openssl req -new -key NETBIOS_KEY.pem -out NETBIOS_CSR.pem
Получите выбранной сертификации подписанный CSR, имя соответствующее (NETBIOS_CERT.pem для этого примера), и положите в этуже папку.
Если вашему сертификату авторизации также нужен сертификат интермедиа, положите его тамже, и используйте tls cafile Parmeter (иначе оставьте tls cafile пустым).
Чтобы изменения вступили в силу, перезапустите samba
.
DHCP
Следует отметить, что с помощью этого метода, повлиеяем на функциональность windows клиентов, так как они будут по-прежнему пытаться обновить DNS самостоятельно и будет отказано в разрешении сделать так, как запись будет принадлежать пользователю DHCP. Вы должны создать объект групповой политики (GPO), чтобы преодолеть это, но, к сожалению, Samba 4 еще не имеют утилиту командной строки для изменения объектов GPO, так что вам будет нужен установленный в Windows PC RSAT. Просто создайте выделенный GPO с помощью редактора групповой политики (Group Policy Editor), применяются только к подразделениям, которые содержат рабочие станции (так, что серверы можно по-прежнему обновлять с помощью 'ipconfig /registerdns') и настройте следующие параметры:
Computer Configuration Policies Administrative Templates Network DNS Client Dynamic Update = Disabled Register PTR Records = Disabled
Установите пакет dhcp.
Создайте непривилегированного пользователя в AD для выполнения обновления. При запросе пароля, используйте безопасный пароль. Достаточно 63 случайных, смешанных, буквенно-циферных символов. По желанию samba-tool также берет случайный аргумент:
# samba-tool user create dhcp --description="Unprivileged user for DNS updates via DHCP server"
Since this is a service account, disabling password expiration on the user account is recommended, but not required:
# samba-tool user setexpiry dhcp --noexpiry
Дайте пользователю привелегии администратора DNS:
# samba-tool group addmembers DnsAdmins dhcp
Экспорт учетных данных пользователей private keytab:
# samba-tool domain exportkeytab --principal=dhcp@INTERNAL.DOMAIN.TLD dhcpd.keytab # install -vdm 755 /etc/dhcpd # mv dhcpd.keytab /etc/dhcpd # chown root:root /etc/dhcpd/dhcpd.keytab # chmod 400 /etc/dhcpd/dhcpd.keytab
Теперь, когда пользователь будет создан, создайте сценарий для выполнения обновления /usr/local/sbin/samba-dnsupdate.sh
:
#!/bin/bash # Begin samba-dnsupdate.sh # Author: DJ Lucas <dj_AT_linuxfromscratch_DOT_org> # kerberos_creds() courtesy of Sergey Urushkin # http://www.kuron-germany.de/michael/blog/wp-content/uploads/2012/03/dhcpdns-sergey2.txt # DHCP server should be authoritative for its own records, sleep for 5 seconds # to allow unconfigured Windows hosts to create their own DNS records # In order to use this script you should disable dynamic updates by hosts that # will receive addresses from this DHCP server. Instructions are found here: # https://wiki.archlinux.org/index.php/Samba_4_Active_Directory_Domain_Controller#DHCP sleep 5 checkvalues() { [ -z "${2}" ] && echo "Error: argument '${1}' requires a parameter." && exit 1 case ${2} in -*) echo "Error: Invalid parameter '${2}' passed to ${1}." exit 1 ;; *) return 0 ;; esac } showhelp() { echo -e "\n"`basename ${0}` "uses samba-tool to update DNS records in Samba 4's DNS" echo "server when using INTERNAL DNS or BIND9 DLZ plugin." echo "" echo " Command line options (and variables):" echo "" echo " -a | --action Action for this script to perform" echo " ACTION={add|delete}" echo " -c | --krb5cc Path of the krb5 credential cache (optional)" echo " Default: KRB5CC=/run/dhcpd.krb5cc" echo " -d | --domain The DNS domain/zone to be updated" echo " DOMAIN={domain.tld}" echo " -h | --help Show this help message and exit" echo " -H | --hostname Hostname of the record to be updated" echo " HNAME={hostname}" echo " -i | --ip IP address of the host to be updated" echo " IP={0.0.0.0}" echo " -k | --keytab Krb5 keytab to be used for authorization (optional)" echo " Default: KEYTAB=/etc/dhcp/dhcpd.keytab" echo " -m | --mitkrb5 Use MIT krb5 client utilities" echo " MITKRB5={YES|NO}" echo " -n | --nameserver DNS server to be updated (must use FQDN, not IP)" echo " NAMESERVER={server.internal.domain.tld}" echo " -p | --principal Principal used for DNS updates" echo " PRINCIPAL={user@domain.tld}" echo " -r | --realm Authentication realm" echo " REALM={DOMAIN.TLD}" echo " -z | --zone Then name of the zone to be updated in AD. echo " ZONE={zonename} echo "" echo "Example: $(basename $0) -d domain.tld -i 192.168.0.x -n 192.168.0.x \\" echo " -r DOMAIN.TLD -p user@domain.tld -H HOSTNAME -m" echo "" } # Process arguments [ -z "$1" ] && showhelp && exit 1 while [ -n "$1" ]; do case $1 in -a | --action) checkvalues ${1} ${2} ACTION=${2} shift 2 ;; -c | --krb5cc) checkvalues ${1} ${2} KRB5CC=${2} shift 2 ;; -d | --domain) checkvalues ${1} ${2} DOMAIN=${2} shift 2 ;; -h | --help) showhelp exit 0 ;; -H | --hostname) checkvalues ${1} ${2} HNAME=${2%%.*} shift 2 ;; -i | --ip) checkvalues ${1} ${2} IP=${2} shift 2 ;; -k | --keytab) checkvalues ${1} ${2} KEYTAB=${2} shift 2 ;; -m | --mitkrb5) KRB5MIT=YES shift 1 ;; -n | --nameserver) checkvalues ${1} ${2} NAMESERVER=${2} shift 2 ;; -p | --principal) checkvalues ${1} ${2} PRINCIPAL=${2} shift 2 ;; -r | --realm) checkvalues ${1} ${2} REALM=${2} shift 2 ;; -z | --zone) checkvalues ${1} ${2} ZONE=${2} shift 2 ;; *) echo "Error!!! Unknown command line opion!" echo "Try" `basename $0` "--help." exit 1 ;; esac done # Sanity checking [ -z "$ACTION" ] && echo "Error: action not set." && exit 2 case "$ACTION" in add | Add | ADD) ACTION=ADD ;; del | delete | Delete | DEL | DELETE) ACTION=DEL ;; *) echo "Error: invalid action \"$ACTION\"." && exit 3 ;; esac [ -z "$KRB5CC" ] && KRB5CC=/run/dhcpd.krb5cc [ -z "$DOMAIN" ] && echo "Error: invalid domain." && exit 4 [ -z "$HNAME" ] && [ "$ACTION" == "ADD" ] && \ echo "Error: hostname not set." && exit 5 [ -z "$IP" ] && echo "Error: IP address not set." && exit 6 [ -z "$KEYTAB" ] && KEYTAB=/etc/dhcp/dhcpd.keytab [ -z "$NAMESERVER" ] && echo "Error: nameservers not set." && exit 7 [ -z "$PRINCIPAL" ] && echo "Error: principal not set." && exit 8 [ -z "$REALM" ] && echo "Error: realm not set." && exit 9 [ -z "$ZONE" ] && echo "Error: zone not set." && exit 10 # Disassemble IP for reverse lookups OCT1=$(echo $IP | cut -d . -f 1) OCT2=$(echo $IP | cut -d . -f 2) OCT3=$(echo $IP | cut -d . -f 3) OCT4=$(echo $IP | cut -d . -f 4) RZONE="$OCT3.$OCT2.$OCT1.in-addr.arpa" kerberos_creds() { export KRB5_KTNAME="$KEYTAB" export KRB5CCNAME="$KRB5CC" if [ "$KRB5MIT" = "YES" ]; then KLISTARG="-s" else KLISTARG="-t" fi klist $KLISTARG || kinit -k -t "$KEYTAB" -c "$KRB5CC" "$PRINCIPAL" || { logger -s -p daemon.error -t dhcpd kinit for dynamic DNS failed; exit 11; } } add_host(){ logger -s -p daemon.info -t dhcpd Adding A record for host $HNAME with IP $IP to zone $ZONE on server $NAMESERVER samba-tool dns add $NAMESERVER $ZONE $HNAME A $IP -k yes } delete_host(){ logger -s -p daemon.info -t dhcpd Removing A record for host $HNAME with IP $IP from zone $ZONE on server $NAMESERVER samba-tool dns delete $NAMESERVER $ZONE $HNAME A $IP -k yes } update_host(){ logger -s -p daemon.info -t dhcpd Removing A record for host $HNAME with IP $CURIP from zone $ZONE on server $NAMESERVER samba-tool dns delete $NAMESERVER $ZONE $HNAME A $CURIP -k yes add_host } add_ptr(){ logger -s -p daemon.info -t dhcpd Adding PTR record $OCT4 with hostname $HNAME to zone $RZONE on server $NAMESERVER samba-tool dns add $NAMESERVER $RZONE $OCT4 PTR $HNAME.$DOMAIN -k yes } delete_ptr(){ logger -s -p daemon.info -t dhcpd Removing PTR record $OCT4 with hostname $HNAME from zone $RZONE on server $NAMESERVER samba-tool dns delete $NAMESERVER $RZONE $OCT4 PTR $HNAME.$DOMAIN -k yes } update_ptr(){ logger -s -p daemon.info -t dhcpd Removing PTR record $OCT4 with hostname $CURHNAME from zone $RZONE on server $NAMESERVER samba-tool dns delete $NAMESERVER $RZONE $OCT4 PTR $CURHNAME -k yes add_ptr } case "$ACTION" in ADD) kerberos_creds host -t A $HNAME.$DOMAIN > /dev/null if [ "${?}" == 0 ]; then CURIP=$(host -t A $HNAME.$DOMAIN | cut -d " " -f 4 ) if [[ "$CURIP" != "$IP" ]]; then update_host fi else add_host fi host -t PTR $IP > /dev/null if [ "${?}" == 0 ]; then CURHNAME=$(host -t PTR $IP | cut -d " " -f 5 | rev | cut -c 2- | rev) if [[ "$CURHNAME" != "$HNAME.$DOMAIN" ]]; then update_ptr fi else add_ptr fi ;; DEL) kerberos_creds host -t A $HNAME.$DOMAIN > /dev/null if [ "${?}" == 0 ]; then delete_host fi host -t PTR $IP > /dev/null if [ "${?}" == 0 ]; then delete_ptr fi ;; *) echo "Error: Invalid action '$ACTION'!" && exit 12 ;; esac # End samba-dnsupdate.sh
Службе dhcpd нужно будет использовать быстрый выход сценария оболочки, чтобы избежать блокировки запросов и задержек. Создайте скрипт /etc/dhcpd/update.sh
со следующими командами (подставляя правильные значения для server, internal.domain.tld, и INTERNAL.DOMAIN.TLD):
#!/bin/bash # Begin /etc/dhcpd/update.sh # Variables KRB5CC="/run/dhcpd4.krb5cc" KEYTAB="/etc/dhcpd/dhcpd.keytab" DOMAIN="internal.domain.tld" REALM="INTERNAL.DOMAIN.TLD" PRINCIPAL="dhcp@${REALM}" NAMESERVER="server.${DOMAIN}" ZONE="${DOMAIN}" ACTION=$1 IP=$2 HNAME=$3 export KRB5CC KEYTAB DOMAIN REALM PRINCIPAL NAMESERVER ZONE ACTION IP HNAME /usr/local/sbin/samba-dnsupdate.sh -m & # End /etc/dhcpd/update.sh
Настройте сервер dhcpd после статьи dhcpd, и добавьте все следующие декларации подсети в файл /etc/dhcpd.conf
, который обеспечит службу DHCP:
on commit { set ClientIP = binary-to-ascii(10, 8, ".", leased-address); set ClientName = pick-first-value(option host-name, host-decl-name); execute("/etc/dhcpd/update.sh", "add", ClientIP, ClientName); } on release { set ClientIP = binary-to-ascii(10, 8, ".", leased-address); set ClientName = pick-first-value(option host-name, host-decl-name); execute("/etc/dhcpd/update.sh", "delete", ClientIP, ClientName); } on expiry { set ClientIP = binary-to-ascii(10, 8, ".", leased-address); set ClientName = pick-first-value(option host-name, host-decl-name); execute("/etc/dhcpd/update.sh", "delete", ClientIP, ClientName);
Вот полный пример файла /etc/dhcpd.conf
для образца:
# Begin /etc/dhcpd.conf # No DHCP service in the DMZ. subnet 192.168.2.0 netmask 255.255.255.0 { } # Internal subnet subnet 192.168.1.0 netmask 255.255.255.0 { range 192.168.1.100 192.168.1.199; option subnet-mask 255.255.255.0; option routers 192.168.1.254; option domain-name "internal.domain.tld"; option domain-name-servers 192.168.1.1; option broadcast-address 192.168.1.255; default-lease-time 28800; max-lease-time 43200; authoritative; on commit { set ClientIP = binary-to-ascii(10, 8, ".", leased-address); set ClientName = pick-first-value(option host-name, host-decl-name); execute("/etc/dhcpd/update.sh", "add", ClientIP, ClientName); } on release { set ClientIP = binary-to-ascii(10, 8, ".", leased-address); set ClientName = pick-first-value(option host-name, host-decl-name); execute("/etc/dhcpd/update.sh", "delete", ClientIP, ClientName); } on expiry { set ClientIP = binary-to-ascii(10, 8, ".", leased-address); set ClientName = pick-first-value(option host-name, host-decl-name); execute("/etc/dhcpd/update.sh", "delete", ClientIP, ClientName); } } # End /etc/dhcpd.conf
Установите права:
# chmod 750 /usr/local/sbin/samba-dnsupdate.sh # chmod 750 /etc/dhcpd/update.sh
Наконец, включите и запустите (или перезапустите) службу dhcpd4
.
Что делать дальше
Если вы зашли настолько далеко, что не покинули указанных выше испытаний, - вы на верном пути. Поздравляем! Вот некоторые темы, по расширению вашего сервера AD:
Active Directory integration - This article explains how to attach Linux clients to an Active Directory domain.
SOGo - The OpenChange project provides a Microsoft Exchange compatible mail server using only open source software.