Работа с samba_dnsupdate
Скрипт samba_dnsupdate (полный путь к скрипту после установки пакета inno-samba: /app/inno-samba/sbin/samba_dnsupdate) отвечает за проверку и изменение записей DNS.
Общие сведения
Скрипт samba_dnsupdate автоматически запускается на контроллере домена при старте процесса samba и далее выполняется каждые 10 минут.
В процессе работы он использует текстовый файл dns_update_list, располагающийся в подкаталоге /app/inno-samba/private. Файл содержит шаблоны записей, которые должны быть зарегистрированы в DNS для сервера в соответствии с его ролью и режимом работы. Шаблоны могут содержать условия применения, переменные для подстановки значений и стандартные поля, соответствующие типу записи.
Скрипт приводит состав записей в DNS в соответствие с содержимым файла, добавляя новые записи, удаляя неактуальные и внося необходимые изменения в существующие записи.
Для управления работой скрипта при запуске ему могут передаваться дополнительные параметры. Чтобы изменить набор параметров, используемых при периодическом автоматическом запуске, может использоваться конфигурационный параметр dns update command в разделе [global] файла smb.conf:
[global]
...
dns update command = /app/inno-samba/sbin/samba_dnsupdate [options]
...
Также скрипт поддерживает конфигурационные параметры для управления автоматической регистрации записей DNS.
Для анализа возможных проблем в работе скрипта может быть включен диагностический режим.
|
Скрипт Запускать его вручную с использованием доступных опций следует исключительно в диагностических целях при получении явных указаний от сотрудников сопровождения или разработчиков «Т1 Иннотех». |
Формат вызова
Общий формат вызова скрипта:
samba_dnsupdate [options]
По умолчанию скрипт вызывает утилиту nsupdate и работает под машинной учетной записью контроллера домена, на котором он выполняется.
Для работы со скриптом в терминале требуются права суперпользователя.
Параметры вызова
Параметры вызова:
-
--all-interfaces— выполнять проверку для всех сетевых интерфейсов, указанных в конфигурации контроллера домена (значение параметраinterfacesв smb.conf); -
--all-names— принудительное обновление записей в DNS (во избежание дублирования записей перед вставкой выполняется проверка существования записи); -
--check-only— выполнять только проверку наличия в службе DNS записей, отражающих текущее состояние контроллера домена, без внесения каких-либо изменений;Параметр полностью отключает всю функциональность скрипта samba_dnsupdateпо изменению записей в DNS. Таким образом, при его использовании любые другие параметры, предусматривающие внесение изменений, игнорируются. -
--current-ip— использовать указанный IP-адрес в качестве адреса проверяемого контроллера домена;Допускается указывать несколько IP-адресов через запятую в значении одного параметра --current-ipлибо передавать несколько параметров--current-ipс разными значениями. -
--fail-immediately— прекратить выполнение скрипта при первой ошибке; -
--no-credentials— пропустить шаг запроса данных для аутентификации Kerberos с использованием машинной учетной записи контроллера домена; -
--no-substitutions— не выполнять подстановки в файле, указанном в параметре--update-list; -
--rpc-server-ip— IP-адрес сервера для использования при работе сsamba-tool(при отсутствии значения по умолчанию используется первый IP-адрес, указанный в параметре--current-ip); -
--update-cache— при проверке и обновлении записей использовать указанный кэш вместо /app/inno-samba/private/dns_update_cache; -
--update-list— при проверке и обновлении записей использовать указанный файл вместо /app/inno-samba/private/dns_update_list; -
--use-file— считывать DNS-записи из указанного файла и проверять текущее состояние контроллера домена по ним, а не по фактически существующим записям, полученным из DNS (может использоваться для тестирования и отладки различных конфигураций); -
--use-nsupdate— использовать утилитуnsupdateдля внесения изменений в DNS (по умолчанию при условии успешного прохождения аутентификации Kerberos с использованием машинной учетной записи контроллера домена); -
--use-samba-tool— использовать утилитуsamba-toolдля внесения изменений посредством RPC-вызовов (по умолчанию в случае невозможности использоватьnsupdateиз-за непрохождения аутентификации Kerberos); -
--verbose— выводить подробное описание выполняемых скриптом операций в stdout.
Примеры
Пример запуска скрипта в терминале для обновления записей DNS для текущего контроллера домена с выводом подробной информации:
sudo /app/inno-samba/sbin/samba_dnsupdate \
--verbose \
--all-names
Пример запуска скрипта только для проверки наличия записей DNS для нескольких контроллеров домена без внесения каких-либо изменений:
sudo /app/inno-samba/sbin/samba_dnsupdate \
--verbose \
--check-only \
--current-ip=<dc1-ip>,<dc2-ip>
Пример запуска скрипта с указанием на необходимость использования утилиты samba-tool и файла со списком записей, требующих проверки и обновления:
sudo /app/inno-samba/sbin/samba_dnsupdate \
--use-samba-tool \
--update-list /tmp/custom_dns_update_list
Пример добавления команды автоматического запуска скрипта с параметром в файл smb.conf:
[global]
...
dns update command = /app/inno-samba/sbin/samba_dnsupdate --use-samba-tool
...
Настройка
Для настройки работы скрипта samba_dnsupdate используются конфигурационные параметры в разделе [global] файла smb.conf (полный путь к файлу установки пакета inno-samba — /app/inno-samba/etc/smb.conf). Также возможно редактирование отдельных полей в шаблонах записей DNS в файле dns_update_list (полный путь после установки пакета inno-samba — /app/inno-samba/private/dns_update_list).
Применение изменений происходит без перезагрузки службы inno-samba: заданные значения будут автоматически применены samba_dnsupdate в ходе очередного цикла обновления записей DNS (по умолчанию интервал обновления составляет 10 минут).
Настройка полей приоритета, веса и TTL записей DNS
В зависимости от типа записи DNS имеют следующие поля, задающие параметры их применения:
-
приоритет (для SRV-записей);
Поле приоритета учитывается при выборе сервера для обработки клиентских запросов SRV-записей ресурсов в домене: клиенты обращаются к первому доступному серверу с наименьшим значением в поле приоритета.
-
вес (для SRV-записей);
Поле веса учитывается при выборе сервера среди серверов с одинаковым значением в поле приоритета для обработки клиентских запросов SRV-записей ресурсов в домене: клиенты обращаются к первому доступному серверу с наибольшим значением в поле веса.
-
продолжительность нахождения в кэше, TTL (для всех записей).
Поле задает интервал (в секундах), в течение которого запись может находиться в кэше до повторного ее запроса.
Способы настройки полей
Значения для полей записей DNS, определяющих их приоритет, вес и TTL, устанавливаются и используются скриптом samba_dnsupdate при обновлении записей DNS в следующей последовательности:
-
Значения по умолчанию:
-
приоритет (для SRV-записей) —
0; -
вес (для SRV-записей) —
100; -
TTL (для всех записей) —
900секунд.
-
-
Значения, установленные на уровне глобальной конфигурации контроллера домена в файле smb.conf.
-
Значения в шаблонах записей DNS в файле dns_update_list.
Настройка полей на уровне глобальной конфигурации
Для настройки глобальных значений для полей записей DNS, автоматически регистрируемых контроллером домена, используйте следующие конфигурационные параметры:
-
dns:srv record priority— значение для поля приоритета в SRV-записях (возможный диапазон значений —0–65535; значение по умолчанию —0); -
dns:srv record weight— значение для поля веса в SRV-записях (возможный диапазон значений —0–65535; значение по умолчанию —100); -
dns:record ttl— значение для поля TTL в записях DNS (значение по умолчанию —900).
Пример задания значений:
[global]
...
dns:srv record priority = 2
dns:srv record weight = 200
dns:record ttl = 3600
...
Для использования значения по умолчанию удалите соответствующий параметр из файла smb.conf.
Настройка полей на уровне шаблонов записей DNS
При необходимости значения по умолчанию и глобальные значения для полей записей DNS могут быть переопределены вручную для отдельных типов записей путем редактирования шаблонов в файле dns_update_list.
Чтобы установить значения приоритета, веса и TTL, отличные от значений по умолчанию или значений, заданных глобальными параметрами в конфигурации, для определенной SRV-записи, добавьте их в соответствующие столбцы в шаблоне, на основе которого формируется запись:
-
приоритет (priority) — столбец 5;
-
вес (weight) — столбец 6;
-
TTL — столбец 7.
Например:
${IF_MNTN}${IF_RWDC}SRV _ldap._tcp.${DNSDOMAIN} ${HOSTNAME} 389 2 200 3600
В примере:
-
${IF_MNTN}${IF_RWDC}— блок условий, управляющих формированием записи в зависимости от режима работы контроллера домена (режим обслуживания включен/выключен) и его роли (RWDC/RODC); -
SRV— тип записи DNS; -
_ldap._tcp.${DNSDOMAIN}— имя сервиса, протокол и переменная для подстановки DNS-имени домена; -
${HOSTNAME} — переменная для подстановки имени хоста сервера контроллера домена;
-
389— номер порта; -
2— приоритет; -
200— вес; -
3600— TTL.
Пример сформированной записи на контроллере RWDC с выключенным режимом обслуживания:
SRV _ldap._tcp.elles.inno.tech dc03.elles.inno.tech 389 2 200 3600
Чтобы установить значение TTL, отличное от значения по умолчанию или значения, заданного глобальным параметром в конфигурации, для определенной записи A, AAAA, CNAME или NS, добавьте его в столбец 4 в шаблоне, на основе которого формируется запись.
Пример изменения значения TTL для CNAME-записи:
${IF_DC}CNAME ${NTDSGUID}._msdcs.${DNSFOREST} ${HOSTNAME} 1800
В примере:
-
${IF_DC}— условие, управляюще формированием записи в зависимости от роли сервера (контроллер домена или рядовой сервер); -
CNAME— тип записи DNS; -
${NTDSGUID}._msdcs.${DNSFOREST}— значение GUID объекта NTDS, зона и переменная для подстановки DNS-имени леса; -
${HOSTNAME} — переменная для подстановки имени хоста сервера контроллера домена;
-
1800— TTL.
Пример сформированной записи на сервере с ролью контроллера домена:
CNAME 350efbad-9994-418d-94bd-f67ebc2f093a._msdcs.elles.inno.tech dc03.elles.inno.tech 1800
Отключение автоматической регистрации записей DNS с помощью мнемоник
Чтобы отключить автоматическую регистрацию записей DNS определенных типов скриптом samba_dnsupdate, добавьте в smb.conf следующий параметр и в качестве значения укажите список разделенных пробелами мнемоник, соответствующих требуемым типам записей DNS:
[global]
...
dns:avoid dns records list = <mnemonic> <mnemonic2> ... <mnemonicN>
...
Список мнемоник, соответствующих типам записей DNS:
| Мнемоника | Тип записи DNS | Связанная запись DNS |
|---|---|---|
|
A |
<DnsDomainName> |
|
SRV |
_ldap._tcp.<DnsDomainName> |
|
SRV |
_ldap._tcp.<SiteName>._sites.<DnsDomainName> |
|
SRV |
_ldap._tcp.pdc._msdcs.<DnsDomainName> |
|
SRV |
_ldap._tcp.gc._msdcs.<DnsForestName> |
|
SRV |
_ldap._tcp.<SiteName>._sites.gc._msdcs.<DnsForestName> |
|
SRV |
_ldap._tcp.<DomainGuid>.domains._msdcs.<DnsForestName> |
|
A |
_gc._msdcs.<DnsForestName> |
|
CNAME |
<DsaGuid>._msdcs.<DnsForestName> |
|
SRV |
_kerberos._tcp.dc._msdcs.<DnsDomainName> |
|
SRV |
_kerberos._tcp.dc._msdcs.<SiteName>._sites.<DnsDomainName> |
|
SRV |
_ldap._tcp.dc._msdcs.<DnsDomainName> |
|
SRV |
_ldap._tcp.<SiteName>._sites.dc._msdcs.<DnsDomainName> |
|
SRV |
_kerberos._tcp.<DnsDomainName> |
|
SRV |
_kerberos._tcp.<SiteName>._sites.<DnsDomainName> |
|
SRV |
_gc._tcp.<DnsForestName> |
|
SRV |
_gc._tcp.<SiteName>._sites.<DnsForestName> |
|
SRV |
_kerberos._udp.<DnsDomainName> |
|
SRV |
_kpasswd._tcp.<DnsDomainName> |
|
SRV |
_kpasswd._udp.<DnsDomainName> |
Пример задания значения:
[global]
...
dns:avoid dns records list = LdapIpAddress Ldap LdapAtSite Pdc Gc GcAtSite DcByGuid GcIpAddress DsaCname Kdc KdcAtSite Dc DcAtSite Rfc1510Kdc Rfc1510KdcAtSite GenericGc GenericGcAtSite Rfc1510UdpKdc Rfc1510Kpwd Rfc1510UdpKpwd
...
Для возобновления автоматической регистрации записей DNS определенного типа удалите соответствующую мнемонику из списка. Для возобновления автоматической регистрации всех записей, удалите параметр из файла smb.conf или задайте для него пустое значение.
По умолчанию параметр не задан; выполняется автоматическая регистрация всего набора записей DNS в соответствии со свойствами домена и ролями сервера (см. подробнее о наборе регистрируемых записей в разделе «Перечень записей DNS в зависимости от свойств домена и роли сервера»).
Отключение автоматической регистрации записей сервера имен (NS)
Чтобы отключить автоматическую регистрацию скриптом samba_dnsupdate записей сервера имен (NS) для интегрированных в Active Directory зон DNS домена, добавьте в файл smb.conf следующий параметр:
[global]
...
dns:disable ns records auto creation = yes
...
Параметр принимает стандартный набор значений: yes|on|1|true.
Чтобы возобновить автоматическую регистрацию записей NS, удалите параметр из файла smb.conf или задайте ему любое значение, кроме перечисленных выше.
По умолчанию парамер не задан; автоматическая регистрация записей NS выполняется.
Управление механизмом автоматического покрытия сайтов
Для настройки механизма автоматического покрытия сайтов (Auto Site Coverage) используйте следующие параметры:
-
dns:auto site coverage— отключение механизма автоматического покрытия сайтов:-
off— механизм отключен; -
onили отсутствие параметра — механизм включен (по умолчанию);
-
-
dns:all:site coverage— список сайтов через запятую, для которых в DNS должны быть зарегистрированы SRV-записи для всех доступных на сервере служб; -
dns:gc:site coverage(если контроллер домена выполняет функции сервера глобального каталога) — список сайтов через запятую, для которых в DNS должны быть зарегистрированы SRV-записи для обслуживания запросов к глобальному каталогу; -
dns:krb:site coverage— список сайтов через запятую, для которых в DNS должны быть зарегистрированы SRV-записи для обслуживания клиентских запросов к KDC; -
dns:ldap:site coverage— список сайтов через запятую, для которых в DNS должны быть зарегистрированы SRV-записи для обслуживания клиентских запросов к серверу LDAP.
Пример отключения механизма автоматического покрытия сайтов:
[global]
...
dns:auto site coverage = off
...
Пример задания параметров для настройки списка покрываемых сайтов:
[global]
...
dns:krb:site coverage = Site2,Site3
dns:ldap:site coverage = Site2,Site3
...
| См. описание механизма в разделе «Покрытие сайтов контроллерами домена». |
Диагностический режим
В диагностическом режиме осуществляется вывод сообщений с уровнем логирования DEBUG, формируемых скриптом samba_dnsupdate в процессе работы, в стандартный лог-файл Эллес /app/inno-samba/var/log.samba или в отдельные лог-файлы в каталоге /app/inno-samba/logs/samba_dnsupdate/.
Формат сообщений
Сообщения формируются из следующих атрибутов:
| Атрибут | Формат | Описание | Пример |
|---|---|---|---|
asctime |
|
Время в формате ГГГГ.ММ.ДД ЧЧ:ММ:СС.мс |
2024.07.04 14:03:38.386 |
process |
|
PID процесса |
1132 |
name |
|
Имя процесса |
samba_dnsupdate |
lineno |
|
Номер строки в скрипте |
448 |
funcName |
|
Имя вызываемой функции |
check_one_dns_name |
levelname |
|
Уровень логирования |
DEBUG |
message |
|
Текст сообщения |
. . name='_ldap._tcp.inno.local.' name_type='SRV' d='SRV _ldap._tcp.inno.local dc02.inno.local 389' |
Включение диагностического режима
Чтобы включить диагностический режим, создайте следующий файл-флаг:
-
для записи в стандартный лог-файл /app/inno-samba/var/log.samba:
sudo touch /app/inno-samba/etc/samba_dnsupdate.DEBUG
-
для записи в отдельные файлы в каталоге /app/inno-samba/logs/samba_dnsupdate/:
sudo touch /app/inno-samba/etc/samba_dnsupdate.DEBUG.FILE
При каждом запуске
samba_dnsupdateсоздается отдельный лог-файл с именем samba_dnsupdate.log. К именам ранее созданных файлов добавляются номера от 1 до 9 (ограничение на количество файлов по умолчанию) в порядке возрастания времени создания.
Отключение диагностического режима
Для отключения диагностического режима удалите соответствующий файл-флаг в каталоге /app/inno-samba/etc/.
Например:
sudo rm -f /app/inno-samba/etc/samba_dnsupdate.DEBUG.FILE
Изменение каталога логирования
Для сохранения лог-файлов в каталоге, отличном от стандартного каталога /app/inno-samba/logs/:
-
Создайте целевой каталог.
Например:
sudo mkdir -pv /app/logs/
-
Замените каталог /app/inno-samba/logs символической ссылкой на целевой каталог.
Например:
sudo rm -rf /app/inno-samba/logs sudo ln -sv /app/logs /app/inno-samba/logs '/app/inno-samba/logs' -> '/app/logs'