Покрытие сайтов контроллерами домена

При построении, изменении или эксплуатации топологии сети возможны ситуации, когда в сайте, входящем в состав домена, по тем или иным причинам могут отсутствовать контроллеры. Например, такая ситуация возможна, когда размещение контроллеров в сайте связано с высокими издержками на репликацию или все работающие в сайте контроллеры выходят из строя.

Чтобы клиенты, работающие в сайте без контроллеров домена, могли продолжать получать ответы на свои запросы на аутентификацию и авторизацию в рамках домена, Эллес поддерживает как механизм автоматического покрытия сайтов контроллерами домена (Auto Site Coverage), так и возможность настройки обслуживания сайтов контроллерами вручную.

Механизм автоматического покрытия сайтов включается на сервере, вводимом в домен в роли контроллера домена, по умолчанию. При необходимости он может быть явно отключен как в процессе выполнения операции ввода, так и в процессе его дальнейшей эксплуатации.

В рамках механизма по определенному алгоритму работающие в домене контроллеры регистрируют набор SRV-записей таким образом, чтобы клиенты в сайтах без контроллеров могли обнаруживать необходимые им службы (LDAP, KDC) и выполнять запросы к ним. Таким образом, контроллер домена может обслуживать не только тот сайт, в котором он непосредственно находится, но и другие сайты в том случае, если в них отсутствуют собственные контроллеры и они подпадают под заложенные в алгоритме критерии отбора.

Чтобы обеспечить полноценное покрытие всех сайтов при построении или изменении топологии сети и развертывании контроллеров домена, важно понимать и учитывать алгоритм работы данного механизма.

Наряду с поддержкой автоматического механизма Эллес позволяет настраивать покрытие контроллером домена сайтов вручную с учетом особенностей существующей топологии сети.

Алгоритм автоматического покрытия сайтов

При определении сайтов без серверов, которые должны автоматически покрываться контроллером домена, учитываются связи (site link) между сайтом, в котором находится контроллер, и непокрытыми сайтами, стоимости таких связей между сайтами (site link cost) и количество серверов в других сайтах.

Алгоритм состоит из следующих шагов:

auto site coverage algorithm
  1. Инициализация списка: создается пустой список для заполнения именами сайтов, которые будут покрываться текущим контроллером домена.

  2. Поиск серверов и сайтов: выполняются запросы к базе данных службы каталогов для определения списка всех серверов, выполняющих функции контроллеров домена, и списка всех сайтов.

  3. Определение непокрытых сайтов:

    • на основании списка серверов подсчитывается количество серверов в каждом сайте;

    • подсчитывается количество серверов в текущем сайте, то есть сайте, к которому относится текущий сервер;

    • путем анализа полного списка сайтов и исключения из него сайтов с серверами формируется список сайтов без серверов (непокрытых сайтов).

Для каждого непокрытого сайта выполняются проверки для определения возможности его включения в список для покрытия:

  1. Поиск связей между сайтами:

    • определяется список всех связей непокрытого сайта с другими сайтам и выбирается связь с наименьшей стоимостью;

    • определяется список всех связей между непокрытым сайтом и текущим сайтом, после чего выбирается связь с наименьшей стоимостью.

  2. Сравнение стоимости связей: стоимости связей сравниваются и, если они совпадают, непокрытый сайт рассматривается для добавления в список сайтов для покрытия.

  3. Сравнение количества контроллеров в сайтах: если в связи между рассматриваемым непокрытым сайтом и текущим сайтом участвуют несколько сайтов:

    • выбирается сайт с наибольшим количеством контроллеров;

    • если количество контроллеров в сайтах одинаковое, то имена сайтов сравниваются в алфавитном порядке и выбирается первый из них.

  4. Формирование списка сайтов для покрытия: если в результате сравнения выбирается текущий сайт, то непокрытый сайт добавляется в список сайтов для покрытия контроллером домена.

Описанный алгоритм позволяет понять, какие сайты будут автоматически покрываться сервером, вводимым в домен в роли контроллера домена, исходя из существующей топологии сети и при необходимости выполнить дополнительные шаги по настройке работы механизма или изменению топологии.

Пример применения алгоритма автоматического покрытия сайтов

В качестве примера рассмотрим домен со следующими параметрами:

  • в домене присутствуют сайты А, Б, В и Г;

  • в сайте А отсутствуют контроллеры домена;

  • в сайтах Б, В и Г работает следующее количество серверов в роли контроллеров домена: Б = В < Г;

  • между сайтами созданы связи (site link);

  • исходя из стоимости передачи данных по соединениям между сайтами администратор назначил следующую стоимость связям между ними (site link cost):

    • стоимость связи АБ = 100;

    • стоимость связи АВ = 50;

    • стоимость связи АГ = 50.

auto site coverage example
Рис. 1. Пример домена с сайтами А, Б, В и Г

При включенном механизме автоматического покрытия сайтов вабор контроллеров домена для обслуживания клиентов в сайте А будет выполняться следующим образом:

  1. Контроллеры домена в сайте Б не будут регистрировать SRV-записи для обслуживания клиентов в домене А, так как стоимость связи АБ не является минимальной для сайта А.

  2. Контроллеры в сайте В не будут регистрировать SRV-записи для обслуживания клиентов в домене А, так как, несмотря на то, что стоимость связи АВ для сайта А является минимальной, в другом сайте с такой же стоимостью связи работает большее количество серверов.

  3. Контроллеры в сайте Г зарегистрируют RV-записи для обслуживания клиентов в домене А, так как:

    • стоимость связи АГ является минимальной среди связей сайта А;

    • количество серверов в сайте Г превышает количество серверов в других сайтах с такой же стоимостью связи.

Таким образом, при использовании механизма автоматического покрытия запросы на аутентификацию и авторизацию от участников, находящихся в сайте А, будут обслуживаться контроллерами домена в сайте Г.

Отключение механизма автоматического покрытия сайтов

Если в силу особенностей топологии сети вводимый в домен сервер не должен использоваться службой каталогов для обслуживания других сайтов, механизм автоматического покрытия на нем может быть отключен:

  • при выполнении операции ввода в домен с помощью опции:

    --option="dns:auto site coverage = off"
  • в процессе эксплуатации с помощью конфигурационного параметра в разделе [global] в файле smb.conf:

    [global]
        dns:auto site coverage = off

При необходимости механизм может быть снова включен. Для этого достаточно удалить параметр из smb.conf либо явно задать в нем значение on.

Применение изменения происходит без перезагрузки службы inno-samba: новое значение будет автоматически считано утилитой samba_dnsupdate, которая отвечает за запуск механизма автоматического покрытия сайтов, в ходе очередного цикла обновления записей DNS (по умолчанию интервал обновления составляет 10 минут).

Настройка покрытия для определенных сайтов

Эллес позволяет явным образом задать перечень дополнительных сайтов, в которых контроллер домена может обслуживать клиентов в рамках своей роли наряду с клиентами в том сайте, где он сам находится, и для которых в DNS должны быть зарегистрированы соответствующи SRV-записи.

Для этого в раздел [global] конфигурационного файла smb.conf могут быть добавлены следующие параметры:

  • dns:all:site coverage — список сайтов через запятую, для которых в DNS должны быть зарегистрированы SRV-записи для всех доступных на сервере служб (LDAP, KDC, глобальный каталог);

  • dns:gc:site coverage (если контроллер домена выполняет функции сервера глобального каталога) — список сайтов через запятую, для которых в DNS должны быть зарегистрированы SRV-записи для обслуживания запросов к глобальному каталогу;

  • dns:krb:site coverage — список сайтов через запятую, для которых в DNS должны быть зарегистрированы SRV-записи для обслуживания клиентских запросов к KDC;

  • dns:ldap:site coverage — список сайтов через запятую, для которых в DNS должны быть зарегистрированы SRV-записи для обслуживания клиентских запросов к серверу LDAP.

По умолчанию параметры содержат пустые списки.

Пример задания параметров в smb.conf:

[global]
    dns:krb:site coverage = Site2,Site3
    dns:ldap:site coverage = Site2,Site3

Применение изменений происходит без перезагрузки службы inno-samba: заданные значения будут автоматически считаны утилитой samba_dnsupdate в ходе очередного цикла обновления записей DNS (по умолчанию интервал обновления составляет 10 минут).

Состав SRV-записей, регистрируемых контроллером домена

По умолчанию каждый контроллер домена динамически регистрирует в DNS определенный набор SRV-записей, с помощью которых клиенты в домене обнаруживают необходимые им службы (LDAP, KDC) и выполняют запросы к ним.

Состав регистрируемых SRV-записей определяется ролью сервера в домене (RWDC/RODC, GC, DNS-сервер, DPC Emulator), особенностями домена и настройками покрытия сайтов.

См. полный перечень записей DNS с примерами выгрузки в разделе «Перечень записей DNS в зависимости от свойств домена и роли сервера».

Набор SRV-записей с привязкой к сайту включает:

  • SRV-записи для сайта, в котором находится контроллер домена;

  • если включен механизм автоматического покрытия сайтов — SRV-записи для дополнительных сайтов, обслуживаемых данным контроллером домена в соответствии с алгоритмом механизма;

  • если заданы конфигурационные параметры, явно задающие списки сайтов, которые должны обслуживаться данным контроллером домена, — SRV-записи для указанных в параметрах дополнительных сайтов.

В описании наборов записей используются следующие обозначения:

  • DnsDomain — DNS-имя домена, в котором размещается сервер;

  • DnsForest — имя леса, в котором размещается домен;

  • Site — имя сайта, в котором регистрируются SRV-записи в соответствии с алгоритмом автоматического покрытия и настройками;

  • DomainGuid — уникальный глобальный идентификатор домена.

В текущей реализации Эллес имеются следующие ограничения в части работы с записями DNS при перемещении контроллера домена между сайтами:

  • для контроллера RWDC или RODC в дочернем домене в многодоменном лесу не удаляются записи _ldap._tcp.<Site>._sites.ForestDnsZones.<DnsDomain>;

  • для контроллера RODC в корневом домене в многодоменном лесу не регистрируются новые записи и не удаляются существующие записи.

RWDC

Сервер, выполняющий функции полноценного контроллера домена (RWDC), регистрирует следующий набор SRV-записей:

  • при размещении в корневом домене:

    _ldap._tcp.<DnsDomain>
    _ldap._tcp.dc._msdcs.<DnsForest>
    _ldap._tcp.<DomainGuid>.domains._msdcs.<DnsForest>
    _ldap._tcp.<Site>._sites.<DnsDomain>
    _ldap._tcp.<Site>._sites.dc._msdcs.<DnsForest>
    _kerberos._tcp.<DnsDomain>
    _kerberos._udp.<DnsDomain>
    _kerberos._tcp.dc._msdcs.<DnsForest>
    _kpasswd._tcp.<DnsDomain>
    _kpasswd._udp.<DnsDomain>
    _kerberos._tcp.<Site>._sites.<DnsDomain>
    _kerberos._tcp.<Site>._sites.dc._msdcs.<DnsDomain>
  • при размещении в дочернем домене:

    _ldap._tcp.<DnsDomain>
    _ldap._tcp.dc._msdcs.<DnsDomain>
    _ldap._tcp.<DomainGuid>.domains._msdcs.<DnsForest>
    _ldap._tcp.<Site>._sites.<DnsDomain>
    _ldap._tcp.<Site>._sites.dc._msdcs.<DnsDomain>
    _kerberos._tcp.<DnsDomain>
    _kerberos._udp.<DnsDomain>
    _kerberos._tcp.dc._msdcs.<DnsDomain>
    _kpasswd._tcp.<DnsDomain>
    _kpasswd._udp.<DnsDomain>
    _kerberos._tcp.<Site>._sites.<DnsDomain>
    _kerberos._tcp.<Site>._sites.dc._msdcs.<DnsDomain>

RODC

Сервер, выполняющий функции контроллера домена с доступом к БД только для чтения (RODC), регистрирует следующий набор SRV-записей:

  • при размещении в корневом домене леса:

    _ldap._tcp.<Site>._sites.<DnsDomain>
    _ldap._tcp.<Site>._sites.dc._msdcs.<DnsDomain>
    _ldap._tcp.<Site>._sites.dc._msdcs.<DnsForest>
    _kerberos._tcp.<Site>._sites.<DnsDomain>
    _kerberos._tcp.<Site>._sites.dc._msdcs.<DnsDomain>
  • при размещении в дочернем домене:

    _ldap._tcp.<Site>._sites.<DnsDomain>
    _ldap._tcp.<Site>._sites.dc._msdcs.<DnsDomain>
    _kerberos._tcp.<Site>._sites.<DnsDomain>
    _kerberos._tcp.<Site>._sites.dc._msdcs.<DnsDomain>

RWDC GC

Сервер, выполняющий наряду с функциями полноценного контроллера домена (RWDC) также и функции сервера глобального каталога, дополнительно регистрирует следующий набор SRV-записей:

_ldap._tcp.gc._msdcs.<DnsForest>
_gc._tcp.<DnsDomain>
_ldap._tcp.<Site>._sites.gc._msdcs.<DnsForest>
_gc._tcp.<Site>._sites.<DnsDomain>

RODC GC

Сервер, выполняющий наряду с функциями контроллера домена с доступом к БД только для чтения (RODC) также и функции сервера глобального каталога, дополнительно регистрирует следующий набор SRV-записей:

_ldap._tcp.<Site>._sites.gc._msdcs.<DnsForest>
_gc._tcp.<Site>._sites.<DnsDomain>

RWDC DNS

Сервер, выполняющий наряду с функциями полноценного контроллера домена (RWDC) также и функции DNS-сервера, дополнительно регистрирует следующий набор SRV-записей:

_ldap._tcp.DomainDnsZones.<DnsDomain>
_ldap._tcp.ForestDnsZones.<DnsDomain>
_ldap._tcp.<Site>._sites.DomainDnsZones.<DnsDomain>
_ldap._tcp.<Site>._sites.ForestDnsZones.<DnsForest>

RODC DNS

Сервер, выполняющий наряду с функциями контроллера домена с доступом к БД только для чтения (RODC) также и функции DNS-сервера, дополнительно регистрирует следующий набор SRV-записей:

_ldap._tcp.<Site>._sites.DomainDnsZones.<DnsDomain>
_ldap._tcp.<Site>._sites.ForestDnsZones.<DnsForest>

RWDC PDC

Сервер с FSMO-ролью PDC Emulator дополнительно регистрирует следующую SRV-запись:

_ldap._tcp.pdc._msdcs.<DnsDomain>