BIND как DNS компонент сборки Samba 4
(Оригинал)
Содержание
- 1 Введение
- 2 Выполнение базовой установки BIND
- 2.1 Установка BIND
- 2.1.1 Загрузка
- 2.1.2 Компиляция BIND
- 2.2 Настройка
- 2.2.1 Создание базового named.conf
- 2.2.2 Добавление пользователей и группы для BIND
- 2.2.3 Получение списка корневых серверов имен
- 2.2.4 Создание файла зоны localhost
- 2.2.5 Создание файла зоны 0.0.127.in-addr.arpa
- 2.2.6 Установка разрешений для файлов зон
- 2.3 Запуск BIND
- 2.4 Проверка Вашей зоны
- 2.1 Установка BIND
- 3 Настройка BIND как компонента среды Самба Active Directory
- 3.1 Bind 9.8 / 9.9
- 3.2 Bind 9.7
- 3.3 Динамическое обновление DNS через Kerberos (опционально, но рекомендуется)
- 3.3.1 Bind 9.8 / 9.9
- 3.3.2 Bind 9.7
- 3.3.3 Проверка/отладка динамического обновления DNS
- 4 Интеграция с AppArmor или SELinux
- 5 Отладка BIND как компонента Самба AD
- 6 Известные дыры и пути их устранения/обхода
1 Введение
Эта инструкция описывает как скомпилировать и настроить базовую установку Bind, которая сможет быть использована как DNS компонент Самба DC.
Bind как DNS компонент рекомендуется если Вы планируете сложнейшую установку DNS чем возможно с встроенным DNS Самба 4.
2 Выполнение базовой установки BIND
Пропустите эту часть если у Вас уже есть установленный Bind, который можно использовать как компонент Самба AD.
2.1 Установка BIND
Bind как компонент для Вашего контроллера домена Самба Active Directory на данный момент может использоваться только в версиях 9.8 и 9.9. Пользователям Bind 9.7 всячески рекомендуется сделать модернизацию! Если это не возможно, читайте часть динамическое обновление DNS через Kerberos для Bind 9.7 для получения инструкций по настройке Bind 9.7.
Если Вы устанавливаете Bind из репозиториев Вашего дистрибутива можно пропустить следующих два шага. Следующих два шага. Но убедитесь что Ваш производитель скомпилировал Bind с опциями '–with-gssapi' и '–with-dlopen' (смотри ниже) прежде чем использовать его как DNS компонент Самбы. В нашем случае (Ubuntu 14.04 LTS DVD) можно переходить сразу к параграфу 2.2 .
2.1.1 Загрузка
Загрузите выбранную Вами и совместимую с Самба 4 версию с https://www.isc.org/software/bind.
2.1.2 Компиляция Bind
Для использования Bind 9.8.1 или новее как компонента Самба AD, как минимум требуется настройка двух следующих опций:
# ./configure –with-gssapi=/usr/include/gssapi –with-dlopen=yes
Проверьте пожалуйста не требуются ли другие опции в Вашем окружении. Для сборки Bind 9.8.0 используйте '–with-dlz-dlopen=yes' вместо '–with-dlopen=yes'.
Сборка и установка:
# make
# make install
2.2 Настройка
2.2.1 Создание базового named.conf
В следующем примере показан базовый ‘named.conf’ из чистой минимальной установки Bind без каких-либо частей Самба AD. Добавим требуемые Самба параметры позднее.
# Global options options { auth-nxdomain yes; directory "/var/named"; forwarders { 8.8.8.8; 8.8.4.4; }; allow-transfer { none; }; notify no; empty-zones-enable no; allow-query { 192.168.0.0/24; ...other networks you want to allow to query your DNS...; }; allow-recursion { 192.168.0.0/24; ...other networks you want to allow to do recursive queries...; }; }; # Root servers (required zone for recursive queries) zone "." { type hint; file "named.root"; }; # Required localhost forward-/reverse zones zone "localhost" { type master; file "master/localhost.zone"; }; zone "0.0.127.in-addr.arpa" { type master; file "master/0.0.127.zone"; };
Мы указываем ‘/var/named’ как директорию в ‘named.conf’ для размещения там наших фалов зон и т.д. Если Вы захотите расположить их в другом месте, пожалуйста учтите все дополнительные инструкции.
Больше деталей о параметрах использованных в шаблоне ‘named.conf’ смотри в ‘man 5 named.conf’.
2.2.2 Добавление пользователей и группы для BIND
Если Вы не хотите запускать bind от рута (и, уверен, Вы не хотите этого!), мы добавим учетку и группу (приспособим UID/GID если потребуется):
# groupadd –g 25 named
# useradd –g named –u 25 –d /var/named –M –s /sbin/nologin named
2.2.3 Получение списка корневых серверов имен
Загрузите список корневых серверов имен с InterNIC:
# wget –q –O /var/named/named.root http://www.internic.net/zones/named.root
# chown named:named /var/named/named.root
Чтобы обеспечить актуальность файлу можно добавить задание крону для автоматической загрузки.
2.2.4 Создание файла зоны localhost
Создайте файл зоны пересылки (‘/var/named/master/localhost.zone’) для Вашей ‘localhost’ зоны:
$TTL 3D $ORIGIN localhost. @ 1D IN SOA @ root ( 2013050101 ; serial 8H ; refresh 2H ; retry 4W ; expiry 1D ; minimum ) @ IN NS @ IN A 127.0.0.1
2.2.5 Создание файла зоны 0.0.127.in-addr.arpa
Создайте файл обратной зоны (‘/var/named/master/0.0.127.zone’) для Вашей ‘0.0.127.in-addr.arpa’ зоны:
$TTL 3D @ IN SOA localhost. root.localhost. ( 2013050101 ; Serial 8H ; Refresh 2H ; Retry 4W ; Expire 1D ; Minimum TTL ) IN NS localhost. 1 IN PTR localhost.
2.3 Запуск BIND
# named –u named
Если конфигурация приемлема, Вы не увидите ошибок ни в консоли ни в системном логфайле.
Чтобы Bind запускался автоматически при старте системы, что рекомендуется, создайте init.d скрипт или стартуйте его system.
2.4 Проверка Вашей зоны
Теперь мы попробуем просмотреть записи нашей зоны. Мы скажем команде ‘host’ использовать DNS с 127.0.0.1, так наш запрос не уйдет на сторонний DNS сервер, это можно настроить также в ‘/etc/resolv.conf’.
Сначала проверьте прямой просмотр для ‘localhost’:
# host localhost. 127.0.0.1 Using domain server: Name: 127.0.0.1 Address: 127.0.0.1#53 Aliases: localhost has address 127.0.0.1
И затем обратный просмотр для ‘127.0.0.1’:
# host 127.0.0.1 127.0.0.1 Using domain server: Name: 127.0.0.1 Address: 127.0.0.1#53 Aliases: 1.0.0.127.in-addr.arpa domain name pointer localhost.
3 Настройка BIND как компонента среды Самба Active Directory
- Примечание: BIND должен быть инсталлирован на одной машине с Контроллером домена Самба AD. Чтобы BIND DLZ модуль имел доступ к базе данных AD непосредственно, BIND для зон AD должен быть на той же машине.
3.1 Bind 9.8 / 9.9
В процессе развертывания, модернизации создается файл (‘/usr/local/samba/private/named.conf’), который должен быть включен в Ваш Bind named.conf:
include "/usr/local/samba/private/named.conf";
Если вы развернулись со встроенным DNS, сначала требуются следующие несколько шагов для переключения на BIND.
В зависимости от запускаемой Вами версии Bind, нужно отредактировать ‘/usr/local/samba/private/named.conf’ и активизировать нужную версию модуля DLZ.
Перепустите Bind чтобы задействовать включенный файл. Проверьте логи на ошибки и проблемы. Если возможно можно ‘run named-checkconf’ для помощи в устранении проблем с настройками Вашего Bind.
3.2 Bind 9.7
Пользователям Bind 9.7 всячески советуем модернизацию! Если это не возможно, ознакомьтесь с частью Динамическое обновление DNS через Kerberos для Bind 9.7 для получения инструкций по настройке Bind 9.7.
3.3 Динамическое обновление DNS через Kerberos (опционально, но рекомендуется)
Самба имеет возможность автоматического обновления зон Bind через Kerberos.
Для установки динамического обновления DNS Вам нужно установить современную версию Bind. Поэтому рекомендуется запускать как минимум версию 9.8.0 в которую включены заплатки от Команды Самба делающие динамическое обновление DNS более устойчивым и простым в конфигурировании. Используйте пожалуйста 9.8 или 9.9 если возможно!
Чтобы определить какая версия Bind у Вас запущена используйте:
# named -V
Если в Вашей операционной системе нет Bind 9.8 или 9.9, пожалуйста обдумайте получение их из пакета предоставляемого 3-ими поставщиками (например, в Ubuntu доступен ppa с обновленной версией Bind) или компилируйте его самостоятельно.
3.3.1 Bind 9.8 / 9.9
DNS keytab файл автоматически генерируется в процессе развертывания/модернизации. Добавьте следующую ‘tkey-gssapi-keytab’ опцию в секцию ‘option’ Вашего named.conf (только скорректируйте путь в соответствии с реалиями Вашего дистрибутива - в Ubuntu 14.04 путь будет /var/lib/samba/private/):
options { [...] tkey-gssapi-keytab "/usr/local/samba/private/dns.keytab"; [...] };
Если у Вас Bind 9.7.х (а именно 9.7.2 или более поздний), то возможно Вы сможете перейти на 9.8 или 9.9. Этим Вы сильно убавите свои проблемы! Иначе, следуйте этой инструкции:
Развертывание Самбы создаст пользовательский файл настроек ‘/usr/local/samba/private/named.conf.update’ (в нашем случае /var/lib/samba/private/named.conf.update). Вам нужно включить этот файл в ‘named.conf’ для задействования обновления Самба/Kerberos DNS в автоматическом режиме.
include "/usr/local/samba/private/named.conf.update";
Учтите что если Вы включите этот файл в версии Bind которая не поддерживает этого, Bind не удастся запустить!
Вам необходимо установить дополнительные переменные среды для использования 9.7 (как обычно, корректируем путь в Ubuntu 14.04 на /var/lib/samba/private/ ) :
KEYTAB_FILE="/usr/local/samba/private/dns.keytab" KRB5_KTNAME="/usr/local/samba/private/dns.keytab" export KEYTAB_FILE export KRB5_KTNAME
Это нужно поместить в файл настроек Вашего Bind. На Debian-системах (включая Ubuntu) это в ‘/etc/default/bind9’. На RedHat и SuSE производных системах он в ‘/etc/sysconfig/named’. Пожалуйста уточните корректное место расположение установко переменных окружения в документации по Вашему дистрибутиву. Строго говоря, нужна только одна из двух KEYTAB_FILE или KRB5_KTNAME, но какая именно зависит от Вашего дистрибутива, поэтому проще просто установить обе.
‘dns.keytab’ должен быть доступен на чтение процессам сервера Bind (в Ubuntu путь заменим на /var/lib/samba/private/ ) :
# chown named:named /usr/local/samba/private/dns.keytab
В норме, развертывание/модернизация должно установить права для Вас автоматически.
В заключении, нужно добавить следующую секцию опций в Ваш named.conf:
options { [...] tkey-gssapi-credential "DNS/smbsrv01.domain.lan"; tkey-domain "DOMAIN.LAN"; [...] };
Последняя часть credential в первой строке должна соответствовать DNS имени сервера который Вы устанавливаете.
3.3.3 Проверка/отладка динамического обновления DNS
Способом добиться автоматического обновления DNS в работе Самбы является, создаваемый при развертывании, файл ‘/usr/local/samba/private/dns_update_list’, содержащий список DNS записей которые Самба пытается динамически обновить при запуске и каждые 10 минут сообразно использованию утилиты ‘samba_dnsupdate’. Обновления будут успешными только если DNS записи еще не существуют. Помните что Вам нужна утилита ‘nsupdate’ из дистрибутива Bind чтобы все это заработало.
Если Вы хотите проверить, или отладить этот процесс, пожалуйста запустите от рута (корректируйте путь под себя) :
# /usr/local/samba/sbin/samba_dnsupdate --verbose --all-names
Указанные опции командной строки будут принудительно обновлять все записи в ‘dns_update_list’, а также выводить детальную информацию о ходе выполнения.
4 Интеграция с AppArmor или SELinux
Если Вы получаете ошибки от samba_dnsupdate и nsupdate ‘return dns_tkey_negotiategss: TKEY is unacceptable’ попробуйте следующее:
Если используется AppArmor или SElinux, Вам нужно обеспечить возможность для процессов Bind доступ на чтение к следующим файлам (скорректируйте пути - в Ubuntu 14.04 - /var/lib/samba/private/ ) :
/usr/local/samba/private/dns.keytab
/usr/local/samba/private/named.conf
А также доступ на чтение-запись к
/usr/local/samba/private/dns/
директории и расположенным в ней файлам зон.
Развертка Самбы пытается установить корректные права для этих файлов, но Вам может понадобиться внести изменения в настройки AppArmor или SELinux если один из них запущен. Если используется AppArmor, то команда ‘aa-logprof’ может помочь Вам добавить потерянные разрешения которые нужно добавить после первого запуска Самбы и Bind после их настройки.
Разрешения, SELinux Маркировка и Политики
Эти инструкции предполагают RHEL6, но могут использоваться как руководство для других дистрибутивов/версий.
Остается выполнить больше работы в отношении создания Самба 4 заточенной SELinux политики, но теперь необходимо обеспечить работоспособность всех компонентов без отключения SELinux.
Для всех команд ниже убедитесь, что установлена следующая переменная окружения:
MYREALM="domain.lan"
Установите разрешения (SELinux) (откорректируйте пути под себя):
chown named:named /usr/local/samba/private/dns chgrp named /usr/local/samba/private/dns.keytab chmod g+r /usr/local/samba/private/dns.keytab chmod 775 /usr/local/samba/private/dns
Файлы Меток (SELinux):
chcon -t named_conf_t /usr/local/samba/private/dns.keytab chcon -t named_conf_t /usr/local/samba/private/named.conf.update chcon -t named_var_run_t /usr/local/samba/private/dns chcon -t named_var_run_t /usr/local/samba/private/dns/${MYREALM}.zone
Установка Стойкости Метки (SELinux):
semanage fcontext -a -t named_conf_t /usr/local/samba/private/dns.keytab semanage fcontext -a -t named_conf_t /usr/local/samba/private/named.conf semanage fcontext -a -t named_conf_t /usr/local/samba/private/named.conf.update semanage fcontext -a -t named_var_run_t /usr/local/samba/private/dns semanage fcontext -a -t named_var_run_t /usr/local/samba/private/dns/${MYREALM}.zone semanage fcontext -a -t named_var_run_t /usr/local/samba/private/dns/${MYREALM}.zone.jnl
Настройка AppArmor:
Добавьте следующее в конец '/etc/apparmor.d/local/usr.sbin.named (создайте если его нет).
# Samba4 DLZ and Active Directory Zones (default source installation) /usr/local/samba/lib/** rm, /usr/local/samba/private/dns.keytab r, /usr/local/samba/private/named.conf r, /usr/local/samba/private/dns/** rwk,
5 Отладка BIND как компонента Самба AD
Для включения отладки в Bind DLZ модуле измените следующую строку в ‘/usr/local/samba/private/named.conf’ с
database "dlopen .../bin/modules/bind9/dlz_bind9.so";
на
database "dlopen .../bin/modules/bind9/dlz_bind9.so -d 3";
Если запускаете Bind 9.9 то добавьте ‘-d 3’ в соответствующую строку.
Остановите Bind и запустите сервис вручную с захватом логов:
# /usr/sbin/named -u named -f -g 2>&1 | tee named.log
6 Известные дыры и пути их устранения/обхода
6.1 Chroot Bind
Если используется Bind как компонент Вашего Самба AD не должен использоваться chroot, поскольку это предоставит доступ к открытым файлам и базам данных из Самбы.
Для отключения chroot для Bind смотрите документацию Вашего дистрибутива. В некоторых можно установить
NAMED_RUN_CHROOTED="no"
в ‘/etc/sysconfig/named’ и перепустить сервис.
6.2 Debian: Bind слушает на ошибочных IP адресах
На Debian системах автогенерация зоны AD может обнаружить и использовать ‘127.0.1.1’ как IP адрес контроллера домена. Это станет причиной проблем при попытках подключения с клиентских машин к серверу. Для устранения этого нужно подстроить ‘/usr/local/samba/private/named.conf’ изменением ‘127.0.1.1’ на актуальный IP адрес устанавливаемого сервера.
6.3 Debian Sid: Named не стартует
На Debian Sid (Bind 9 пакет), отсутствует ‘/etc/bind/named.conf.options’ и это причина неудачи при запуске демона named. Лечится созданием пустого файла, или комментированием соответствующей строки в ‘/etc/bind/named.conf’. Больше информации смотри сообщения в syslog.
6.4 Вновь добавляемые DNS записи не разрешаются
Если Вы испытываете проблемы с разрешением вновь добавленных DNS записей используя Bind9 DLZ интерфейс, возможно захотите проверить следующее:
Файлы в ‘/usr/local/samba/private/dns/sam.ldb.d/’ это хардлинки (жесткие ссылки) на ‘/usr/local/samba/private/sam.ldb.d/’. Возможно Вы копировали/перемещали их помимо файловой системы и хардлинки потеряны, а вы теперь работаете с двумя разными копиями баз данных одновременно (Вы можете проверить это добавлением новой DNS записи, например из ‘samba-tool’. Если ее невозможно разрешить, проверьте различающиеся айноды (inodes)).
Если выполнить ‘ls –I’ на обеих директориях, Вы должны увидеть, что следующие файлы имеют одинаковые айноды (что индицирует, что они жестко связаны):
# ls -lai .../samba/private/sam.ldb.d/ 17344368 -rw-rw---- 2 root named 4251648 11. Nov 18:27 DC%3DDOMAINDNSZONES,DC%3DSMBSRV01,DC%3DDOMAIN,DC%3DLAN.ldb 17344370 -rw-rw---- 2 root named 4251648 11. Nov 18:27 DC%3DFORESTDNSZONES,DC%3DSMBSRV01,DC%3DDOMAIN,DC%3DLAN.ldb 17344372 -rw-rw---- 2 root named 421888 11. Nov 17:53 metadata.tdb # ls -lai .../samba/private/dns/sam.ldb.d/ 17344368 -rw-rw---- 2 root named 4251648 11. Nov 18:27 DC%3DDOMAINDNSZONES,DC%3DSMBSRV01,DC%3DDOMAIN,DC%3DLAN.ldb 17344370 -rw-rw---- 2 root named 4251648 11. Nov 18:27 DC%3DFORESTDNSZONES,DC%3DSMBSRV01,DC%3DDOMAIN,DC%3DLAN.ldb 17344372 -rw-rw---- 2 root named 421888 11. Nov 17:53 metadata.tdb
Если файлы в обеих директориях имеют различные номера айнодов, значит они не хардлинки. Чтобы исправить запустите
# samba_upgradedns --dns-backend=BIND9_DLZ
Это создаст файлы DNS с корректными хардлинками и разрешениями.
Затем перепустите Bind.
6.5 DDNS обновления не работают
Проверьте, что Bind может читать файл ‘/etc/krb5.conf’.