Работа с samba_dnsupdate

Скрипт samba_dnsupdate (полный путь к скрипту после установки пакета inno-samba: /app/inno-samba/sbin/samba_dnsupdate) отвечает за проверку и изменение записей DNS. Он автоматически запускается на контроллере домена при старте процесса 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]

Скрипт samba_dnsupdate не предназначен для запуска вручную в условиях повседневной штатной эксплуатации Эллес.

Запускать его вручную с использованием доступных опций следует исключительно в диагностических целях при получении явных указаний от сотрудников сопровождения или разработчиков ГК «Иннотех».

Формат вызова

Общий формат вызова скрипта:

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 \
    --ip-current=<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

Диагностический режим

В диагностическом режиме осуществляется вывод сообщений с уровнем логирования DEBUG, формируемых скриптом samba_dnsupdate в процессе работы, в стандартный лог-файл Эллес /app/inno-samba/var/log.samba или в отдельные лог-файлы в каталоге /app/inno-samba/logs/samba_dnsupdate/.

Формат сообщений

Сообщения формируются из следующих атрибутов:

Атрибут Формат Описание Пример

asctime

%(asctime)s.%(msecs)03d

Время в формате ГГГГ.ММ.ДД ЧЧ:ММ:СС.мс

2024.07.04 14:03:38.386

process

%(process)d

PID процесса

1132

name

%(name)s:

Имя процесса

samba_dnsupdate

lineno

%(lineno)d:

Номер строки в скрипте samba_dnsupdate

448

funcName

%(funcName)s

Имя вызываемой функции

check_one_dns_name

levelname

%(levelname)-8s

Уровень логирования

DEBUG

message

%(message)s

Текст сообщения

. . 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/:

  1. Создайте целевой каталог.

    Например:

    sudo mkdir -pv /app/logs/
  2. Замените каталог /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'