Миграция Exchange 2007 на Dovecot

Средний рейтинг
Еще нет оценок
Мой рейтинг:

Всем привет.

По работе потребовалось рассмотреть вопрос возможности мигрировать почту с Exchange 2007 на Dovecot (iRedMail). Так же заодно возможность переноса домена с Windows Server 2008 на Windows Server 2012 R2.

Я хотел обновить заметку и использовать Windows Server 2016 или 2019, но там всплыли свои особенности:
— из-за ошибок синхронизации на домен контроллере 2019-я никак не хотела повышаться до уровня домен контроллера. С 2016-й такой проблемы не было.
— если AD  у меня был 2016, а Exchange на 2012, то не давал продолжить установку из-за какой-то там несовместимости структуры AD, хотя все подготовительные действия были сделаны.

Так же будет рассмотрена настройка фильтрации по группе (не по всему контейнеру (OU)), а по конкретной группе. Те, кто будет состоять в этой группе, смогут залогиниться и отправить почту только пользователям из этой группы.

Пока что остается не решенным один вопрос: адресная книга, т.к. пока не разобрался как организовать фильтр по группам.

В данном конкретном примере не будет рассмотрена отправка на внешние почтовые адреса (тот же Яндекс или Gmail), т.к. почта будет работать исключительно во внутренней сети и не будет иметь доступа в Интернет.

Всё делалось в вирт среде, с бэкапами после каждой важной операции и snapshot’ами, для быстроты (но это уже на последних шагах).

И так, по порядку.

Сразу прошу прощения и извиняюсь, если где-то на скринах или на каких-то шагах фигурирует Windows Server 2016\2019 — пробовал и так, и этак, и мог где-то не заменить скрины.

На момент дополнения заметки — 18.09.2023 — всё делал на Windows Server 2012 R2.

!!!Внимание:  будьте внимательны при наборе команд. Перед началом необходимо обязательно выполнить резервную копию мигрирующих ОС средствами MS Windows Server Backup, либо сторонними — Acronis True Image, CloneZilla или какими вы пользуетесь!!!

IP-адреса, названия серверов указаны для примера. Данные используемые у Вас могут отличаться!
Пожалуйста, будьте внимательны во избежание ошибок!

Предисловие.

Так как я исследовал только возможность миграции, то я сделал тестовую зону в которой разместил все три виртуальные машины: AD, Exchange и iRedMail. Если вам такого не надо, то вы можете просто старые выключить, и уже новые интегрировать в вашу локальную сеть, подменив ip-адреса и почистив DNS-кеш как на сервере, так и на клиентах.

Сама миграция с Exchange 2007 сначала должна была происходить на Exchange 2016. В тех статьях, что я нашел, говорили что делается по такой схеме: Exchange 2007 —> Exchange 2010/2013 —> Exchange 2016. Т.к. 2010-й версии не было, то пришлось делать на 2013-й.

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

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

Ссылки на статьи-источники, а так же их сохраненные копии внизу.

Миграция Active Directory.

Все свои работы я производил на тестовом стенде. Но как только будет надо, то почти тоже самое можно повторить на проде.

На соседнем гипервизоре поднимаем новую вирт машину с Windows Server 2012 R2- пробовал на ней.

Установка стандартная с GUI, потом установка всех обновлений.

Далее, задаем имя машины (для примера, dc0.mydomain.local), если не сделали этого раньше, и вводим в существующий домен, перезагружаем. После этого добавляем роли — Active Directory и DNS (у меня всего 2 роли, т.к. домен используется в небольшой организации).

Если у Вас DHCP, то вероятно беспокоиться не о чем. В моём случае я установил свободный IP-адрес, а в DNS указал IP контроллера домена (т.к. он же и является DNS-сервером).

Установка и настройка DNS.

Теперь необходимо настроить DNS. Я на текущем DC (dc2.mydomain.local) в настройках DNS разрешил репликацию на новый сервер.

как разрешить репликацию

На сервере, с которого надо забрать записи DNS, открыть «Диспетчер DNS», развернуть свой контроллер домена —> развернуть «Зоны Прямого Доступа» («Forward Lookup Zones») —> на нужной зоне кликнуть ПКМ —> Свойства —> Вкладка: Передачи зон и здесь настроить как вам надо. Т.е. либо явно указать сервера, которым разрешено забирать зоны, либо тем, кто в списке во вкладке «Серверы имен», либо вообще всем.

[свернуть]

При настройке DNS на dc0 я указываю, что зоны надо получить с основного контроллера домена (dc2). Убедиться, что зоны скопировались нормально.

Так же не забудьте создать обратную зону, иначе DNS не сможет создать PTR-записи.

Настройка Active Directory.

Теперь надо повысить новый сервер до Контроллера Домена (Domain Controller). Для этого в консоли управления сервером выбираем — Promote this server to a domain controller.

Откроется мастер. Выбираем Add a domain controller to an existing domain (Добавить Контроллер Домена в существующий домен).

На следующем шаге отмечаем пункты:

  • Domain Name System (DNS) server
  • Global Catalog (GC)

И ниже вводим Directory Service Restore Mode (DSRM) password (DSRM-пароль).

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

сброс пароля DSRM

Если Вы забыли этот пароль или вам достался сервер в наследство, а пароль спросить не у кого, то есть способ его сбросить.

Пожалуйста, убедитесь в том, что Вы понимаете что делаете!

1. Войти под учетной записью администратора домена либо эквивалентной ей на контроллер домена, где необходимо сбросить пароль.

2. Запустить cmd от имени Администратора.

3. Ввести

4. Ввести команду

5. Команда сброса пароля

6. Установите новый пароль (предварительно запишите в надежном месте), после ввода пароля нажать Enter.

Повторить ввод пароля.

7. Если всё сделано правильно, то Вы увидите надпись — Password has been set succefully (пароль был успешно установлен).

8. Выйти командой

И еще раз повторить команду для выхода.

Теперь данный пароль можно использовать в след шаге по повышению до контроллера домена.

[свернуть]

На след шаге, возможно, будет вот такое предупреждение:

Но т.к. DNS настроили выше, то я просто пропустил, нажав next (далее).

Далее, я выбираю свой контроллер домена (который у меня один и который на Windows Server 2008)

На этом шаге всё оставляю по умолчанию, Вы же делаете как у Вам нужно

Далее, проверим параметры, что указывали на прошлых шагах

В этом окне будет куча предупреждений, но мне они не мешают. Главное, что написано, что проверки выполнены успешны. Жмем Install (Установить).

После установки — перезагрузить.

Теперь после перезагрузки можно открыть оснастку AD и проверить, что мы видим структуру нашего домена.

Команда — dsa.msc или же из консоли управления сервером. Можно создать учетную запись и убедиться, что в оснастке на старом сервере вы видите изменения.

Замена серверов.

В моем случае я новый DC0 перенес в изолированную подсеть для тестов, что бы не поломать всё на проде.

После переноса оснастка на сервере не работала. Выдавала — the specified domain does not exist or could not be contacted, т.к. основной контроллер домена не доступен.

Теперь моя задача: сделать этот DC рабочим.

Захват ролей.

!Внимание, при принудительном захвате ролей Microsoft крайне настоятельно рекомендует избегать возвращения старого DC в сеть, т.к. могут быть проблемы. Пожалуйста, убедитесь, что старый DC будет недоступен во избежание конфликтов!

Убедимся, что оснастка недоступна — запустим dsa.msc. Если у вас всё работает, то супер. Остальное можно пропустить.

Сначала зайдем на сервер под учетной записью администратора домена (как раз в кэше должен быть). У меня же вот такая ошибка:

И при попытке смены контроллера домена ничего не видим…

В свойствах сетевого подключения укажем в первой записи DNS сами себя, только не 127.0.0.1, а именно IP-адрес. В моем случае это 10.0.2.15

Далее, запускаем cmd от имени администратора и приступаем к принудительному захвату домена:

выполним

должно получится как-то так

подключаемся к нашему (локальному) серверу, у меня это dc0

Собственно, начинаем захват ролей:

В данном диалогов окне отвечаем утвердительно — выбираем Yes.

Как видно роль переехала с DC2 на DC0.

Аналогично делаем для других ролей.

Так же отвечаем утвердительно — Yes.

Как видно, роль переехала (захвачена). Идем дальше:

Так же отвечаем утвердительно — Yes.

Как видим, роль захвачена. Дальше:

Отвечаем утвердительно — Yes.

Роль успешно захвачена. Последний шаг:

Отвечаем утвердительно — Yes.

Как видим, роль успешно захвачена.

Выходим:

Попробуем выполнить проверку ролей:

и видим ошибку…

Чистка метаданных через ntdsutil

Захвата ролей не достаточно, что бы наш сервер был сам по себе. Теперь мы должны удалить записи о старых DC, если их несколько. Воспользуемся всё той же утилитой ntdustil:

далее вводим:

далее

далее, подключение к локальному серверу

далее

далее, команда просмотра сайтов. В моё случае только один:

выбираем нужный сайт по его номеру, в данном случае — 0

Теперь посмотрим сколько серверов на сайте:

В моём случае их 3 (три) штуки:

DC0 — новый, который на Windows Server 2016, его не трогаем

DC1 — старый первичный сервер, который уже давно не встрою — его удалю.

DC2 — сервер, который у меня главный в проде — его тоже удалить.

Посмотрим домены на этом сервере:

Выбираем домен, у меня он тут один:

выйдем и удалим эту запись:

Подтверждаем операцию — Yes.

Как видно, DC2 успешно удалился. Теперь можно проверить:

Как видно, остались только DC0 — новый сервер (Windows 2016) и DC1 — старый, который тоже надо удалить.

Для этого повторить шаги после команды «list servers in site».

В итоге должен остаться только один DC0.

 

Чистка DNS-записей

Теперь, надо почистить DNS-записи от старых «хвостов». Для этого откроем оснастку DNS и раскроем Forward Lookup Zones.

Далее, в моем случае, чистим _msdcs.mydomain.local

Надо открыть свойства этого каталога и почистить там старые записи во вкладке Name Servers.

Удаляю DC1 и DC2; выделяю DC0, нажимаю edit, в открывшемся окне нажимаю Resolve.

Нажимаю OK, и должно получиться что-то типа такого:

Apply (Применить) — OK.

Теперь, раскроем список самого домена — mydmain.local

Вызовем свойства этого каталога и во вкладке Name Servers удалим лишнюю запись, в моем случае — dc2. Оставим только DC0, причем IP-адрес уже должен там быть. Если нет, то делаем по аналогии с предыдущим пунктом.

Далее, нас интересует подкаталог _msdcs. Если его выбрать, то видно, что там старый DC прописан.

По аналогии с предыдущими пунктами, вызовем свойство этого каталога и изменим во вкладке Name Servers на наш DC0.

Далее, раскроем: DomainDnsZones > _sites > Default-First-Site-Name > _tcp и почистим от старых записей:

Так же проверьте остальные подкаталоги на предмет старых записей. Всех их удалить.

После этого почистим кэш и обновим файл на DNS-сервере:

NETLOGON — Обновление записи в реестре.

Но даже после этих манипуляций оснастка выдавала ошибку.

Пробовал перезагружать сервер. В итоге, решил еще погуглить проблему, т.к. понимания что не так — не было, а в событиях Windows пустота.

При попытке смены контроллера домена на самого себя, я вижу что у него статус Online, но не подключается.

Помогла статья, ссылка ниже, там же сохраненная копия.

  1. Откроем редактор реестра и перейдем в веку HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters
  2. Найдите параметр с именем SysvolReady
  3. Если его значение равно 0, измените его на 1. Если значение 1 – смените на 0 и опять измените на 1
  4. Закройте редактор реестра, и убедитесь что служба Netlogon расшарила каталог NETLOGON.

После внесения изменения, у меня без перезагрузки сервера, стала доступна оснастка управления — dsa.msc.

Проверим роли нашего сервера:

Теперь в нашем распоряжении Windows Server 2016 с Active Directory для тестирования и т.п.

Можно и в прод выпускать, если надо.

Подготовка MS Exchange.

Версия 2007.

Сервер с Exchange 2007 я так же скопировал на тестовый стенд. Изменил DNS в свойствах сетевого подключения. Он увидел мой домен (dc0) на Windows Server 2016.

Версия, с которой буду мигрировать

 

Версия 2013.

Теперь надо установить ОС для последующей установки туда нового Exchange. Для версии 2013 я выбрал Windows Server 2012 R2 где  установлены все доступные обновления. Залогинился под учетной записью доменного админа, а то ничего не получится.

Почему не Windows Server 2016

из-за отсутствия нужного ПО

[свернуть]

Запустим Power Shell от имени администратора и выполним вот такую команду:

После ввода команды показался прогресс бар:

По окончании установки увидим такое:

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

После установки надо перезапустить сервер и установить след компоненты (всё внизу по ссылке):

  • Microsoft Unified Communications Managed API 4.0. Core Runtime 64-bit,
  • Microsoft Office 2010 Filter Packs 64 bit,
  • Microsoft Office 2010 Filter Packs SP1 64 bit.

 

Далее, смонтируем iso-образ или распакуем куда-нибудь, это как кому удобно. Запустим cmd от имени Администратора и перейдем туда, где установщик (я смонтировал):

Теперь подготовим схему нашей AD для 2013-й версии Exchange:

При успешном успехе увидим такое:

Теперь след команда:

YouOrganization — имя текущей организации в Exchange. Где это посмотреть так и не нашел. Ввел произвольное и он мне выдал ошибку:

Я повторил команду, но уже с правильным именем и всё прошло:

А можно вообще без имени:

 

Можно продолжить установку так

Так, продолжим установку. Теперь выполнить такую команду:

Ошибка: The Windows component Server-Gui-Mgmt-Infra isn’t installed on this computer and needs to be installed before Exchange Setup can begin

В Windows Server 2016 нет этого компонента, поэтому надо использовать Windows Server 2012 R2.

Далее, след команда:

[свернуть]

Но я просто запустил setup.exe и далее шел по шагам мастера:

Мастер установки EXCHANGE 2013 (картинки)

[свернуть]

После окончания установки увидим такое сообщение:

Перезагрузим сервер с Exchange.

Теперь попробуем зайти в webui https://localhost/ecp/?ExchClientVer=15

Авторизуемся под доменным админом и, надеюсь, видим всех наши п\ящики.

Перейдем на вкладку «Servers» и там увидим наш старый сервер и наш новый.

Здесь же можно ввести ключ от сервера.

Теперь можно проверить всё остальное — «databases», «virtual directories», «certificates». Убедиться, что всё создано.

 

 

 

 

 

Перемещение пользователей.

Для перемещения п\ящика пользователя необходимо перейти во вкладку «mailboxes», выделить нужного пользователя и справа внизу выбрать Move Mailbox To another database

Следующее окно:

1 — указываем название задания перемещение,

2 — нажать browse…

3 — в открывшемся окне выбрать нужную БД (в моём случае это exch2 — новый сервер (2013)), нажать add ->

4 — увидим добавленную БД и жмем OK.

Пример:

Жмем next Здесь я всё оставил без изменений.

Жмем new

Появится окно с вопросом:

Если нажать «YES», то переместит в окно где можно смотреть за процессом миграции.

1 — обновить.

При успехе в столбцах «Total» и «Finalized» будет 1, т.к. один п\ящик перемещали.

На скрине у меня 2 задания — с 1-м и 3-мя п\ящиками.

Возвращаемся в mailboxes и видим, что наш клиент находится в новом расположении. Для того, что бы отображался столбец с БД, надо его добавить:

Если выделить несколько пользователей, то для перемещения надо потом справа нажать «More options…» и уже там выбрать «Move Mailbox».

Дальше всё тоже самое, что для одного пользователя. Процесс миграции  у меня длительный. У меня диск у ВМ — 50 ГБ и его маловато. 2012-я не позволяет на лету расширить диск, т.е. без перезагрузки. Т.ч. лучше заранее диск расширить, либо изначально сделать большим.

Можно, конечно, сделать где-нибудь RAID, потом iSCSI и подключить, и уже туда переместить database и mailbox. Всё зависит от задачи и инфраструктуры.

 

[заметка дополняется]

Настройка iRedMail.

Далее, рассмотрим настройку Dovecot, Postfix и Roundcube для работы с LDAP и фильтрацией по группе.

[заметка дополняется]

ROUNDCUBE: Адресная книга из группы в Active Directory (AD)

Данный конфиг позволяет сделать адресную книгу для пользователей на основе группы в AD.

По умолчанию в документации iRedMail сказано как сделать Адресную книгу на весь Organization Unit (контейнер) в AD. Но у меня была задача, сделать так, что бы пользователь мог иметь п\ящик, но при этом не отображаться в адресной книге. Ну какой-нибудь специфический аккаунт. Письмо ему отправить можно, но это если знать его почту.

Я удалил все логины, пароли и прочее, т.к. данные с реального стенда. Вам следует указать свои.

 

[заметка дополняется]

 

 

 

Ссылки:

The specified domain

NetLogon Windows Server 2016 (MS) |

If you found an error, highlight it and press Shift + Enter or to inform us.

Фото аватара

Дмитрий

родился, учился, работаю-учусь

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest
0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии