вторник, 17 августа 2010 г.

Offline Address Book (OAB) в Exchange 2010

image На форумах достаточно часто встречаются вопросы, касающиеся проблем при работе с Offline Address Book (OAB), особенно много проблемы с OAB возникает при миграции с одной версии сервера Exchange на другую. В этой статье я хотел бы раскрыть принципы работы OAB и показать, какие действия можно предпринять самостоятельно до того как писать в тематические форумы или звонить в тех поддержку.

Принцип работы Offline Address Book

Для начала давайте разберемся, что такое Offline Address Book и как она работает.

Автономная адресная книга (OAB) — это копия адресной книги, загружаемая в MS Outlook с той целью, чтобы после отключения от сети, пользователь мог продолжать использовать записи, хранящиеся в ней. Автономная адресная книга содержит снимок данных службы каталогов Active Directory, которые доступны в глобальном списке адресов (GAL). Но некоторые сведения из глобального списка адресов отсутствуют в автономной адресной книге. В OAB отсутствуют:

  • добавленные администратором в Active Directory настраиваемые свойства (например. "Идентификатор работника" для сотрудников);
  • сведения об иерархии организации;
  • сведения о членстве в группах.

Существует два способа распространения OAB - это:

  • Веб-распространение;
  • Распространение через Public Folders.

Если у вас есть клиенты с версией Outlook старше 2007-го (например, Outlook 2003), то вам придется включить распространение OAB через общие папки, если нет, то правильнее будет оставить включенной только функцию веб-распространения.

При веб-распространении адресная книга генерируется на сервере с ролью Mailbox, а сервер с ролью Client Access каждые 480 минут (8 часов по умолчанию) проверяет наличие новых файлов при помощи службы Exchange File Distribution (Рассылка файлов Microsoft Exchange). Для веб-распространения используется протокол HTTPS и фоновая интеллектуальная служба передачи (BITS).

Если же включено распространение через Public Folders, то OAB помещается непосредственно в одну из общих, а затем копируется в другие точки распространения.

Виртуальный каталог OAB

По умолчанию на сервере Exchange 2010 включено распространение через веб-сайт, а распространение через Public Folders не активно. Следовательно, давайте подробнее рассмотрим процесс веб-распространения автономной адресной книги.

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

Get-OfflineAddressBook | fl Name,Server,PublicFolderDistributionEnabled,WebDistributionEnabled,VirtualDirectories

Эти же данные можно получить, зайдя на уровень Конфигурирования Организации – Mailbox Offline Address Book.

image

Рис.1: Параметры распространения OAB.

Обратите внимание, через какой именно виртуальный каталог распространяется эта OAB. Посмотреть параметры виртуального каталога можно на уровне Конфигурирования Серверов – Сервер клиентского доступа (CAS). Здесь можно увидеть URL адреса на которых будет опубликована OAB:

image

Рис.2: URL-ы распространения OAB.

Именно эти адреса будет выдавать клиентам служба Autodiscover.

Если открыть консоль управления службой IIS то можно отредактировать параметры самого виртуального каталога и уточнить где лежат файлы OAB:

image

Рис.3: Виртуальный каталог OAB.

Загрузка OAB клиентами MS Outlook

С точки зрения клиента, загрузка OAB происходит следующим образом:

1. Outlook, установленный в режим кэширования Exchange, запрашивает у службы автообнаружения (Autodiscover) URL-адрес ближайшей точки распространения автономной адресной книги;

2. Служба автообнаружения возвращает URL-адрес одного из серверов клиентского доступа (CAS);

3. Outlook использует BITS для соединения с URL-адресом, предоставленным службой автообнаружения и загружает автономную адресную книгу.

Чтобы выяснить, использует Outlook загруженную автономную адресную книгу или обращается к глобальному списку адресов (GAL), выполните указанные ниже действия.

  • Создайте сообщение и нажмите кнопку Кому.
  • В списке Источник адресов щелкните правой кнопкой мыши пункт Глобальный список адресов и выберите команду Свойства.

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

В некоторых организациях автономная адресная книга — это небольшой файл, лишь иногда загружаемый удаленными пользователями. Для таких организаций загрузка OAB обычно не составляет трудностей. В то же время в некоторых крупных организациях, размер автономной адресной книги может достигать нескольких сотен мегабайт. Размер может меняться в зависимости от следующих факторов:

  • Использование сертификатов в компании. Большинство сертификатов инфраструктуры открытого ключа (PKI) увеличивают размер автономной адресной книги. Сертификаты PKI имеют размер 1–3 КБ. Они оказывают наибольшее влияние на размер автономной адресной книги.
  • Количество получателей почты в Active Directory.
  • Количество групп распространения в Active Directory.
  • Информация, добавляемая компанией в Active Directory для каждого объекта с почтовым ящиком или адресом электронной почты. Например, в некоторых организациях свойства адресов заполняются для каждого пользователя, а в других — нет.

В связи с этим администраторы Exchange вынуждены ограничивать количество записей включенных в OAB. По умолчанию OAB содержит в себе глобальный список адресов (GAL), но это можно и изменить.

Чтобы сократить размер OAB можно вместо GAL включить в неё конкретный список адресов (Address List), либо использовать несколько настраиваемых глобальных списков адресов.

Отредактировать списки адресов, входящие в OAB можно на уровне конфигурации организации – Mailbox – Offline Address Book – свойства нужной OAB – Address Lists.

image

Рис.4: Изменение содержимого OAB.

При этом набор пользователей, включенный в конкретный Address List можно гибко редактировать при помощи фильтров. Тема работы со списками адресов более подробно раскрыта в статье “Списки адресов (Address List) в Exchange 2010

«Каждому пользователю своя OAB»

Exchange позволяет создать несколько автономных адресных книг, связать их с определенными списками адресов, и каждому пользователю, или базе данных почтовых ящиков назначить свою собственную OAB. Делается это при помощи команды:

Set-Mailbox -Identity “User or MailBoxDatabase” -OfflineAddressBook "OfflineAddressBook"

Удаление OAB

Удалить OAB можно, но при этом нужно понимать, что

  • Если вы удалили OAB какой любой базы данных почтовых ящиков или пользователя, то для них нужно указать новую OAB;
  • Если OAB была настроена в качестве стандартной OAB, вам нужно будет настроить другую книгу OAB по умолчанию, или у вас в организации Exchange не будет стандартной ОАВ;
  • Если OAB удалена, вам нужно будет вручную удалить все файлы, оставшиеся на вашем сервере Mailbox и сервере Client Access;
  • Если вы удалите последнюю OAB, у вас не останется никаких OAB, которые бы пользователи смогли загрузить

Troubleshooting

На этом с теорией закончим и резюмируем все вышесказанное в несколько практических рекомендаций.

Пожалуй, самая распространенная ошибка при загрузке OAB – это «Ошибка синхронизации 0x8004010F». Она говорить о том, что Outlook не может найти OAB. Причин данной ошибки может быть масса, часто такое происходит после миграции с Exchange 2007 на Exchange 2010, либо при использовании Outlook Anywhere, либо когда клиентский компьютер не включен в домен и т.д. Давайте посмотрим, какие действия нужно выполнить в первую очередь для того, чтобы попытаться самостоятельно решить эту проблему:

На стороне клиента:

  • Проверьте параметры распространения OAB, полученные от службы Autodiscover, для этого нужно нажать правой кнопкой значок MS Outlook в трее при зажатой клавише CTRL и выбрать пункт Test E-mail AutoConfiguration;
  • При веб-распространении нужно попробовать открыть URL адрес OAB, полученный при в тесте автоконфигурации (обычно http://YourCAS/OAB/GUID/oab.xml).
  • Если в Internet Explorer`e настроен на использование прокси-сервера, то нужно добавить IP-адрес сервера клиентского доступа (CAS) в список исключений.

На стороне сервера нужно проверить:

  • параметры публикации OAB командой

Get-OfflineAddressBook | fl Name,Server,PublicFolderDistributionEnabled,WebDistributionEnabled,VirtualDirectories

для клиентов Outlook 2007 и более новых включить распространение через web;

  • настройки виртуального каталога OAB в IIS (см. рис.2 и 3);
  • параметры директории с файлами OAB - C:\Program Files\Microsoft\Exchange Server\V14\ClientAccess\OAB\GUID\
      • Там должно быть несколько файлов *.lzx и файл oab.xml. Нужно удалить всю папку с GUID вашей OAB, перезапустить службу Exchange File Distribution (net stop/start MSExchangeFDS), через некоторое время убедиться, что файлы были созданы заново и попробовать открыть URL http://YourCAS/OAB/GUID/oab.xml;
      • Посмотреть на NTFS разрешения для папки хранящей файлы OAB.
  • Запустите процесс обновления OAB (Конфигурирование организации – Mailbox – Offline Address Book – правой кнопкой на нужной OAB – Update (Актуализировать));
  • Выполните принудительную синхронизацию:

Update-FileDistributionService -Identity YourCAS -Type "OAB"

В журнале на CAS сервере должно появиться событие 1008 от MSExchangeFDS

Заключение

Перечисленный список действий является далеко не полным, и вы всегда в комментариях можете оставить свой «рецепт» решения проблем с Offline Address Book. В любом случае, прежде чем предпринимать какие либо действия убедитесь, что вы достаточно четко осознаете принципы работы тех механизмов, настройки которых вы затрагиваете.

44 комментария:

Вячеслав комментирует...

Алексей, а как бороться с ошибкой 0x80072F0D в аутлуке 2007 при обновлении OAB, если сертификат куплен только на одно единственное имя - owa.domain_name.ru ? Обращаясь по адресу cервера из InternalURL, клиент получает сообщение о несоответствии имени сервера [server_name.domain_name.local] и имени, прописанного в сертификате [owa.domain_name.ru].

Алексей Богомолов (Alexx) комментирует...

Я вижу тут два варианта - либо установить всем сертификат, которым представляется ОАВ, либо немного доплатить и расширить купленный сертификат, дописав в его поле SAN нужные имена.

Вячеслав комментирует...

Пробовал устанавливать сертификат того сервера в "Personal" хранилище тестовой машины.
Ошибка не исчезает.
Может, не в это хранилище нужно устанавливать сертификат?

Алексей Богомолов (Alexx) комментирует...

По хорошему, надо в Trusted Root Cert. добавить сертификат корневого СА, выдавшего конечный сертификат. Если у вас Exchange использует в данном случае самоподписанный сертификат, то можно попробовать добавить туда сертификат самого Exch`a, но я так не пробовал, так что не знаю что из этого получиться.

Вячеслав комментирует...

Я тоже ожидал, что для внутренних запросов будет использоваться самоподписанный сертификат, а для запросов извне будет использован сертификат для внешнего имени...
Но избавиться от упоминания внешнего адреса в "Internal"-настройках не удаётся. Как только во внутренних линках используется внутреннее имя сервера, клиенты отваливаются.

Вячеслав комментирует...

Нашёл ветку с точно такой же проблематикой:
http://social.technet.microsoft.com/Forums/ru-RU/ocses2007ru/thread/59c5b569-4ad6-4ed9-a939-c3a2fd185e73

Сергей комментирует...

Вдруг кому пригодится:
Решал вопрос по синхронизации OAB с клиентами.
Ситуация, когда расположение папок на сервере было изменено на другой локальный диск.
Синхронизация не будет проходить по причине того, что нет доступа на чтение \\почтовый сервер\ExchangeOAB для Все (не совсем верно с точки зрения безопасности).
Если добавить возможность читать эту папку (безопасность NTFS), то синхронизация будет работать.

Решение не нашел в Инете - поэтому решил зафиксировать.

Алексей Богомолов (Alexx) комментирует...

Сергей, спасибо за информацию!

Анонимный комментирует...

Алексей есть вопрос. Я создал адресную книгу привязал ее к пользователю, но она не подтянулась. Подтягивается стандартная книга. Как убрать эту привязку, что бы работала моя адресная книги а не та что по умолчанию??

Алексей Богомолов (Alexx) комментирует...

Если речь про одного пользователя, то создаете отдельный Address List, потом открываете Адресную книгу в Outlook`e пользователя - Сервис - Параметры - внизу выпадающее меню "при открытии адресной книги отображать этот список адресов первым:"
Если речь о многих пользователях, то посмотрите в сторону фичи Address Book Policy в Exch 2010 SP2

Andrey Korobko комментирует...

на рисунке 2, где URL-ы распространения OAB:
для внешнего указано подключаться через https
а для внутреннего через http
это не ошибка??
я пока не добрался до вашего сайта собрал кашу в голове и окончательно запутался)

Алексей Богомолов (Alexx) комментирует...

нет, это не ошибка. Вы можете самостоятельно зайти в консоль IIS и посмотреть какие bindings есть у виртуального каталога ОАВ.

Andrey Korobko комментирует...

ок.
я ,правда, публикую outlook anwhere на exch2007+isa 2006
из локальной сети захожу и по http и https
http(s)://exch.домен.ru/OAB/505686f5-4b8a-4b9c-8470-3b0953ad854b/oab.xml
-файл открывается в браузере

если захожу снаружи по ссылке - выскакивает окно авторизации ISA Server (как у OWA) - где я ошибся?

p.s.
домен.ru - у меня один и тот же как внутри так и снаружи (на внешнем ДНС все прописано правильно,OWA и ActivSync работают)

Andrey Korobko комментирует...

я, может, неправильно сформулировал про окно авторизации isa server...
оно вообще должно появляться? или должно появляться маленькое окошко для авторизации, как при доступе из локальной сети?

Алексей Богомолов (Alexx) комментирует...

Если вы про Form Based Authentication - то не должно. Смотрите правила публикации. Сделайте публикацию Outlook Anywhere мастером (вроде как в этом правиле ОАВ настраивается) и все будет ОК.

Andrey Korobko комментирует...

Благодарю, разобрался, дело было в отсутствии разрешений анонимного доступа к виртуальному каталогу OAB в IIS

Анонимный комментирует...

Здравствуйте возникла такая проболема
в owa exchange 2010 sp2 не отображает глобальный список адресов, но поиск работает. И снаружи и внутри ситуация одинаковая. Это произошло после смены контроллера домена до этого - отображались все контакты в глобальном списке.

Анонимный комментирует...

Добавлю к предыдущему вопросу
По поиску контакт находит, но при открытии любого списка пишет что оъектов нет. В outlook 2010 Глобальный список сразу отображает всех пользователей. Но все остальные списки пустые (все пользователи, все комнаты итд) Ошибок в журналах нет. Подскажите пожалуйста куда копать.

Алексей Богомолов (Alexx) комментирует...

Что говорит команда Update-GlobalAddressList и Update-OfflineAddressBook?

Анонимный комментирует...

указываеш Identity и все - никаких коментариев и ошибок

Анонимный комментирует...

В журнале событий - командлеты успешно выполнены

Сама автономная книга обновляется (у файлов на диске меняется дата и нового пользователя можно найти через поиск (причем именно в рамках заданого списка (указываеш любую букву и он отображает всех кто на неё начинается именно в этом списке)). Доступ к http://YourCAS/OAB/GUID/oab.xml есть - файл открывается в браузере. Просто не отображается полный список пользователе в любом списке в owa.
Все пользователи - стали отображаться в outlook 2010 после переопределения этого списка в emc.

Анонимный комментирует...

после update перестал открываться http://YourCAS/OAB/GUID/oab.xml код ошибки 0x80070005

Анонимный комментирует...

Исправил - после запроса пароля открывается. В остальном все как и было

Анонимный комментирует...

В outlook oab тоже не подключается - просто висит окно подключение автономной адресной книги и все

Анонимный комментирует...

В outlook все нормально - oab загрузилась и все отображаются сразу

Алексей Богомолов (Alexx) комментирует...

Я потерял нить. В чем у вас сейчас прооблема? )
Напишите лучше мне на электронку.

Анонимный комментирует...

Письмо отправил на ящик из вашего профиля

Анонимный комментирует...

У нас после простой перезагрузки сервера exchange пропал доступ к глобальной адресной книге. При попытке выбрать получателя по кнопке "Кому" появляется сообщение "Отсутствует подключение к ms exch. Для завершения требуется подключение". Все описанное в этой статье испробовал, все отработало без ошибок, но не помогло.
Помогите, куда копать дальше?

Ergo Proxy комментирует...

Благодарю за статью, очень помогла :D

Анонимный комментирует...

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

Алексей Богомолов (Alexx) комментирует...

Можно найти несколько решений, которые умеют читать данные откуда-то и создавать контакты в АД, а Exchange потом уже эти контакты добавит в адресную книгу. Для миграции cross-forest, например, часто используют FIM.

Александр Кистерский комментирует...

После установки Exchange2010 при попытке обновить OAB выдаёт ошибку "0x80190197" - сбой операции. Хотя на всех клиентских машинах обновление ОАВ проходит нормально, это сообщение несколько нервирует. Как убрать его? :)

Юрий Ходоренков комментирует...
Этот комментарий был удален автором.
Павел Попов комментирует...

Алексей, подскажите, не могу понять почему не работает обновление адресной книги на сервере RDP в домене. Exchange 2010, Outlook 2010.
С других компьютеров не в домене книга на клиентах обновляется.
С сервера RDP через браузер ссылка http://_mailserver_/oab/537150d2-2bb6-4316-b0e1-63e0646cb781/oab.xml открывается нормально, файлы http://_mailserver_/oab/537150d2-2bb6-4316-b0e1-63e0646cb781/c7a4c78f-6753-496b-bcaf-12fca19831f6-lng0402-97.lzx тоже скачиваются нормально.
Но при попытке обновить адресную книгу в Outlook 2010 через "Группы отправки и получения - Загрузить адресную книгу" получаю ошибку: Задача "user@domain" сообщила об ошибке (0х80200050): "Сбой операции."
Заметил разницу в диалоговых окнах перед загрузкой книги на доменном и не доменном компах: в домене поле "Адресные книги" = "Загрузка списка автономной адресной книги", не в домене "Адресные книги:" = "\Глобальный список адресов"
Подскажите, плз, что проверить ?

Павел Попов комментирует...

Алексей, подскажите: В свойствах почтового ящика ставлю галку "Скрыть из списков адресов Exchange", но на следующий день пользователь все равно присутствует и в обычном списке и в Иерархической структуре у клиентов в Outlook. C чем это может быть связано ?

Алексей Богомолов (Alexx) комментирует...

А в OWA он также присутствует? Если в OWA нет, а в Outlook`e - есть, то проблема скорее всего в обновлении ОВА.

Павел Попов комментирует...

Да, в OWA скрытые пользователи тоже присутствуют.

Павел Попов комментирует...

Уточню: в OWA присутствуют ВСЕ скрытые пользователи

Павел Попов комментирует...

Алексей, прокомментируйте плз, всю голову сломал в какую сторону копать ..

Владимир Харинсонов комментирует...

Добрый день, подскажите пожалуйста.
Файлов в директории OAB нет. Пробовал по вашему примеру траблшутить - не удачно. Папка пуста.
Хотелось бы получить ответы на несколько вопросов:
1. На какую папку нужно проверять права ntfs? на OAB или GUID, или на обе?
2. На какую учетную запись должны быть права? Я так понимаю, что Exchange просто не достаточно прав на запись?

Заранее благодарен

Алексей Богомолов (Alexx) комментирует...

to Павел - вообще странно, если в OWA тоже скрытые пользователи видны, то у меня нет готового ответа на вопрос "Почем?". Надо повышать уровень логирования для ОАВ и читать логи.

to Владимир: 1. на обе (там наследование должно быть включено)
2. попробуйте сбросить права на деволтные для папки ОАВ, а папку с GUID просто удалите. Если не поможет, то можно попробовать Full Access - Everyone дать.

Антон Бакунин комментирует...
Этот комментарий был удален автором.
John RD комментирует...

Уважаемые гуру, есть вопрос
Имеем следующее:
1 рутовый домен, 10 дочерних доменов, 1 организация exchange, 10 серверов exchange 2010, 1 находится в городе с хорошим интернетом, остальные 9 в разных городах и селах страны, где интернет плохой, есть даже 512кбит, потому как находятся практически в поле где нет правильных провайдеров а только adsl,xdsl, но между всеми доменами есть ведомственные каналы 10мбит с топологией звезда, в центре звезды.-.город с хорошим интернетом.
И так дано:
corp - родительский домен
d1-d10 - дочерние домены
Домены: corp, d1 находятся в городе с хорошим интернетом
Домены:d2,d3,d4-d10 находятся в местах с плохим интернетом
В каждом дочернем домене есть exchange и почтовые ящики от 50 до 150
Настроил в центре звезды в городе с хорошим интернетом 2 смартхоста (postfix) которые принимают и отдают почту наружу для всех почтовых доменов, d1.domain.com, d2.domain.com, d3.domain.com, итд, в свою очередь смартхосты проверяя в рутовом LDAP наличие почтовых ящиков, отдают и забирают почту у каждого Exchange уже по внутренним каналам.
Решил поэксперементировать с межсайтовым проксированием, для OWA и для Outlook Anywhere
corp.domain.com запись А в глобальном днс смотрит в Exchange домена d1 где инет хороший.
External URL – https://corp.domain.com/... для OWA ECP ActiveSync OAB вписан только на Exchange в домене d1 в городе с хорошим интернетом, как и указано в хендбуке https://technet.microsoft.com/ru-ru/library/bb310763.aspx
External hostname для Outlook Anywhere вписан в каждом Exchange один и тот же corp.domain.com
Работает и OWA и Outlook Anywhere
Вопрос про OAB.
Как известно из того же хендбука запросы к OAB никогда не передаются через прокси-соединение между сайтами AD.

Пытаюсь настроить таким образом чтобы Outlook в местах где интернета практически нет, работая из своей локальной сети забирал OAB со своего сервера Exchange, но когда этот же Outlook уехал например домой или в командировку где есть неплохой интернет, соединяясь через corp.domain.com с сервером в городе с хорошим интернетом, тянул OAB с него.
Не могу понять логику выбора URL для OAB
Делал единственный default OAB который генерируется и раздается с сервера домена d1 где инет хороший.
Делал собственные OAB (no default) для доменов d2-d10 где нет инета
Добавлял в default OAB который генерируется и раздается с сервера домена d1 где инет хороший, рахдающие сервера других доменов d2-d10 где нет инета
Наблюдая за autodiscover.xml за строками
Выяснил что внешний URL почти всегда правильный, за исключением когда он отсутствует
https://corp.domain.com/OAB/a65d3bfc-77f3-4c99-b237-4dcb0622b59c/
Он всегда тянется если Outlook в интернете

А вот внутренний URL по разному
Чаще всего в локальных сетях доменов d2-d10 выбран такой URL
http://d1-msg-01.d1.corp.local/OAB/a65d3bfc-77f3-4c99-b237-4dcb0622b59c/
Что есть плохо, Outlook из доменов d1-d10 где нет интернета будет тянуть OAB из другого сайта d1 грузя внутренний канал
Бывает так
http://d8-msg-01.d8.corp.local/OAB/a65d3bfc-77f3-4c99-b237-4dcb0622b59c/
Совсем не понятен выбор, поскольку своего OAB в домене d8 нет а сид является собственностью домена d1, поэтому вылетит ошибка и не выкачает ничего
Иногда обе строки отсутствуют совсем и ничего не скачает
В разных доменах b2-b10 URLы OAB в autodiscover.xml выбраны по разному
только в домене d1 всегда хорошо, потому как внешний и внутренний URL смотрят на свой сервер из своего домена.


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

спасибо что прочитали,
заранее благодарен знающим за ответы

Анонимный комментирует...

Алексей, а подскажите, где должна быть запущена служба BITS для отправки изменений в OAB клиентам? На Mailbox или Client Access роли сервера ?

Отправить комментарий