Назад | Перейти на главную страницу

Поиск DNS-имени сервера обмена для пользователя, использующего LDAP

Следуя моим последний вопрос, как только у меня будет правильный контроллер домена, я хотел бы получить сервер обмена данного пользователя. Я могу зайти так далеко, используя ldapsearch:

ldapsearch -LLL -h dc.example.com -D user@example.com -W -b "DC=example,DC=com"-s sub -x '(sAMAccountName=someuser)' msExchHomeServerName homeMTA homeMDB

dn: CN=someuser,OU=Employees,OU=Users,DC=example,DC=com
homeMTA: CN=Microsoft MTA,CN=EXCHANGESERVER,CN=Servers,CN=First Administrative Gr
 oup,CN=Administrative Groups,CN=My Company,CN=Microsoft Exchange,CN=Servic
 es,CN=Configuration,DC=example,DC=com
homeMDB: CN=Database 1,CN=Storage Group 1,CN=InformationStore,CN=EXCHANGESERVER,C
 N=Servers,CN=First Administrative Group,CN=Administrative Groups,CN=My Company,
 CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=example,DC=com
msExchHomeServerName: /o=My Company/ou=First Administrative Group/cn=Config
 uration/cn=Servers/cn=EXCHANGESERVER

Я хотел бы преобразовать указанные выше DN (в двух совершенно разных форматах) в имена DNS. В этом случае все они должны быть переведены на exchangeserver.example.com.

В качестве альтернативы, есть ли более простой способ получить эту информацию? В моем наиболее распространенном случае пользователь, выполняющий запрос, является пользователем, который нас интересует, поэтому мой идеальный вариант - это способ, которым пользователь unix может спросить: «Какое полное доменное имя моего сервера обмена?» без необходимости присоединения unix-машины к домену AD.

РЕДАКТИРОВАТЬ: Я думал, что нашел решение, но на самом деле это не работает:

ldapsearch -x -LLL -h dc.cisco.com -D user@example.com -W -s base -b "CN=Microsoft MTA,CN=EXCHANGESERVER,CN=Servers,CN=First Administrative Group,CN=Administrative Groups,CN=My Company,CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=example,DC=com" dnsHostName

Это очень близко, но вы должны знать, что нужно убрать «CN = Microsoft MTA» в начале свойства -b, что не поддается программной работе.

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

Сценарий запрашивает атрибут «homeMDB» пользователя (чтобы получить DN базы данных почтовых ящиков, в которой находится почтовый ящик пользователя). Затем они запрашивают этот MDB, чтобы найти DN объекта сервера, который «владеет» MDB, используя значение атрибута «msExchOwningServer» MDB (BTW, вы можете игнорировать биты о группе хранения, потому что вас это не волнует).

Предполагая, что вам нужно DNS-имя, запросите свойство «networkAddress» объекта сервера (тот, который указан в атрибуте «msExchOwningServer» объекта MDB, возвращенном при запросе DN пользователя «homeMDB»), и возьмите значение, начинающееся с "nacn_ip_tcp". Это даст вам полное доменное имя сервера, на котором размещен этот MDB.

Редактировать:

Я не имел в виду, что вам нужно выполнить VBScript - просто он скажет вам, что запрашивать с помощью ldapsearch. Точно так же, когда я сказал «объект сервера», я не имел в виду, что вы создаете экземпляр какого-то объекта VBScript - только то, что вы запрашиваете DN, названный для сервера.

Итак, предполагая, что мне нужно DNS-имя сервера, на котором размещен почтовый ящик для пользователя Боба, я бы запросил с помощью фильтра поиска LDAP «(sAMAccountName = Bob)» в корне домена (или в корне глобального каталога, если я хотел найти во всех доменах леса) атрибут "homeMDB" Боба.

ldapsearch -h ad.example.com -D bind-user@ad.example.com -W -b "DC=ad,DC=example,DC=com" -s sub -x "(sAMAccountName=Bob)" homeMDB

Это возвращает атрибут homeMDB:

homeMDB: CN=Mailbox Store (EXCH-SRV),CN=First Storage Group,CN=InformationStore,CN=EXCH-SRV,CN=Servers,CN=EXAMPLE,CN=Administrative Groups,CN=Example Organization,CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=ad,DC=example,DC=com

Затем, используя этот атрибут homeMDB в качестве базового DN, запросите "msExchOwningServer":

ldapsearch -h ad.example.com -D bind-user@ad.example.com  -W -b "CN=Mailbox Store (EXCH-SRV),CN=First Storage Group,CN=InformationStore,CN=EXCH-SRV,CN=Servers,CN=EXAMPLE,CN=Administrative Groups,CN=Example Organization,CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=ad,DC=example,DC=com" msExchOwningServer

Это возвращает DN сервера, на котором размещена эта база данных почтовых ящиков:

msExchOwningServer: CN=EXCH-SRV,CN=Servers,CN=EXAMPLE,CN=Administrative Groups,CN=Example Organization,CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=ad,DC=example,DC=com

Наконец, используя DN сервера в качестве базового DN, запросите атрибут "networkAddress":

ldapsearch -h ad.example.com -D bind-user@ad.example.com -W -b "CN=EXCH-SRV,CN=Servers,CN=EXAMPLE,CN=Administrative Groups,CN=Example Organization,CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=ad,DC=example,DC=com" networkAddress

Это возвращает все сетевые адреса, из которых вас интересует тот, который начинается с «nacn_ip_tcp».

networkAddress: ncacn_vns_spp:EXCH-SRV
networkAddress: netbios:EXCH-SRV
networkAddress: ncacn_np:EXCH-SRV
networkAddress: ncacn_spx:EXCH-SRV
networkAddress: ncacn_ip_tcp:EXCH-SRV.ad.example.com
networkAddress: ncalrpc:EXCH-SRV

Вы можете сделать то же самое для атрибута «homeMTA», но вы будете искать «msExchResponsibleMTAServerBL» вместо «msExchOwningServer» при запросе DN, указанного в атрибуте «homeMTA».

Наконец, если вы хотите отказаться от всего этого, запросите у пользователя атрибут «msExchHomeServerName».

msExchHomeServerName: /o=Example Organization/ou=EXAMPLE/cn=Configuration/cn=Servers/cn=EXCH-SRV

Возьмите значение, возвращенное там, и используйте его в качестве фильтра поиска для атрибута "legacyExchangeDN" и выполните поиск в связанном с Exchange поддереве каталога для атрибута "networkAddress".

ldapsearch -h ad.example.com -D bind-user@ad.example.com -W -b "CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=ad,dc=example,dc=com" -x "(legacyExchangeDN=/o=Example Organization/ou=EXAMPLE/cn=Configuration/cn=Servers/cn=EXCH-SRV)" networkAddress

И вы получите те же сетевые адреса, что и выше.