Покрытие сайтов контроллерами домена
При построении, изменении или эксплуатации топологии сети возможны ситуации, когда в сайте, входящем в состав домена, по тем или иным причинам могут отсутствовать контроллеры. Например, такая ситуация возможна, когда размещение контроллеров в сайте связано с высокими издержками на репликацию или все работающие в сайте контроллеры выходят из строя.
Чтобы клиенты, работающие в сайте без контроллеров домена, могли продолжать получать ответы на свои запросы на аутентификацию и авторизацию в рамках домена, Эллес поддерживает как механизм автоматического покрытия сайтов контроллерами домена (Auto Site Coverage), так и возможность настройки обслуживания сайтов контроллерами вручную.
Механизм автоматического покрытия сайтов включается на сервере, вводимом в домен в роли контроллера домена, по умолчанию. При необходимости он может быть явно отключен как в процессе выполнения операции ввода, так и в процессе его дальнейшей эксплуатации.
В рамках механизма по определенному алгоритму работающие в домене контроллеры регистрируют набор SRV-записей таким образом, чтобы клиенты в сайтах без контроллеров могли обнаруживать необходимые им службы (LDAP, KDC) и выполнять запросы к ним. Таким образом, контроллер домена может обслуживать не только тот сайт, в котором он непосредственно находится, но и другие сайты в том случае, если в них отсутствуют собственные контроллеры и они подпадают под заложенные в алгоритме критерии отбора.
Чтобы обеспечить полноценное покрытие всех сайтов при построении или изменении топологии сети и развертывании контроллеров домена, важно понимать и учитывать алгоритм работы данного механизма.
Наряду с поддержкой автоматического механизма Эллес позволяет настраивать покрытие контроллером домена сайтов вручную с учетом особенностей существующей топологии сети.
Алгоритм автоматического покрытия сайтов
При определении сайтов без серверов, которые должны автоматически покрываться контроллером домена, учитываются связи (site link) между сайтом, в котором находится контроллер, и непокрытыми сайтами, стоимости таких связей между сайтами (site link cost) и количество серверов в других сайтах.
Алгоритм состоит из следующих шагов:
-
Инициализация списка: создается пустой список для заполнения именами сайтов, которые будут покрываться текущим контроллером домена.
-
Поиск серверов и сайтов: выполняются запросы к базе данных службы каталогов для определения списка всех серверов, выполняющих функции контроллеров домена, и списка всех сайтов.
-
Определение непокрытых сайтов:
-
на основании списка серверов подсчитывается количество серверов в каждом сайте;
-
подсчитывается количество серверов в текущем сайте, то есть сайте, к которому относится текущий сервер;
-
путем анализа полного списка сайтов и исключения из него сайтов с серверами формируется список сайтов без серверов (непокрытых сайтов).
-
Для каждого непокрытого сайта выполняются проверки для определения возможности его включения в список для покрытия:
-
Поиск связей между сайтами:
-
определяется список всех связей непокрытого сайта с другими сайтам и выбирается связь с наименьшей стоимостью;
-
определяется список всех связей между непокрытым сайтом и текущим сайтом, после чего выбирается связь с наименьшей стоимостью.
-
-
Сравнение стоимости связей: стоимости связей сравниваются и, если они совпадают, непокрытый сайт рассматривается для добавления в список сайтов для покрытия.
-
Сравнение количества контроллеров в сайтах: если в связи между рассматриваемым непокрытым сайтом и текущим сайтом участвуют несколько сайтов:
-
выбирается сайт с наибольшим количеством контроллеров;
-
если количество контроллеров в сайтах одинаковое, то имена сайтов сравниваются в алфавитном порядке и выбирается первый из них.
-
-
Формирование списка сайтов для покрытия: если в результате сравнения выбирается текущий сайт, то непокрытый сайт добавляется в список сайтов для покрытия контроллером домена.
Описанный алгоритм позволяет понять, какие сайты будут автоматически покрываться сервером, вводимым в домен в роли контроллера домена, исходя из существующей топологии сети и при необходимости выполнить дополнительные шаги по настройке работы механизма или изменению топологии.
Пример применения алгоритма автоматического покрытия сайтов
В качестве примера рассмотрим домен со следующими параметрами:
-
в домене присутствуют сайты А, Б, В и Г;
-
в сайте А отсутствуют контроллеры домена;
-
в сайтах Б, В и Г работает следующее количество серверов в роли контроллеров домена: Б = В < Г;
-
между сайтами созданы связи (site link);
-
исходя из стоимости передачи данных по соединениям между сайтами администратор назначил следующую стоимость связям между ними (site link cost):
-
стоимость связи АБ = 100;
-
стоимость связи АВ = 50;
-
стоимость связи АГ = 50.
-
При включенном механизме автоматического покрытия сайтов вабор контроллеров домена для обслуживания клиентов в сайте А будет выполняться следующим образом:
-
Контроллеры домена в сайте Б не будут регистрировать SRV-записи для обслуживания клиентов в домене А, так как стоимость связи АБ не является минимальной для сайта А.
-
Контроллеры в сайте В не будут регистрировать SRV-записи для обслуживания клиентов в домене А, так как, несмотря на то, что стоимость связи АВ для сайта А является минимальной, в другом сайте с такой же стоимостью связи работает большее количество серверов.
-
Контроллеры в сайте Г зарегистрируют 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
Сервер, выполняющий функции полноценного контроллера домена (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>