Migration von Exchange 2010 zu Exchange 2016 (Teil 1)

Vorwort

Exchange 2016 liegt seit dem 01.10 in der finalen Version vor. Viele werden Exchange 2013 übersprungen haben, und derzeit noch Exchange 2010 einsetzen, für diejenigen ist es an der Zeit die Migration zu Exchange 2016 zu planen. Exchange 2016 wird die letzte Version sein, zu der sich von Exchange 2010 direkt migrieren lässt.

Diese Anleitung beschreibt die Migration von Exchange 2010 zu Exchange 2016 und soll einen Überblick über die notwendigen Schritte verschaffen und ist daher bewusst einfach gehalten. Zertifikate und auch der Namespace sollen übernommen werden, denn man muss das Rad ja nicht ständig neu erfinden.

Diese Anleitung wird aus 3 Teilen bestehen, im ersten Teil wird die Migration vorbereitet, im zweiten Teil werden die Postfächer und die Öffentlichen Ordner migriert und im dritten Teil wird aufgeräumt.

Eins noch vorweg: Dies ist keine allgemein gültige Migrationsanleitung, die sich auf jede Exchange 2010 Organisation anwenden lässt. Die Implementierungsmöglichkeiten bei Exchange 2010 waren sehr vielfältig, daher sollte man sich vor der Migration seine Exchange Infrastruktur möglichst 1-zu-1 in einer Testumgebung abbilden um die Migration zu testen.

Umgebung

Die Testumgebung besteht aus 3 Windows Server 2012 R2. Ein Domain Controller, ein Exchange 2010 Server und ein Exchange 2016 Server:

mig

Exchange 2010 und Exchange 2016 sind bereits installiert.

Damit die Koexistenz und damit auch die Migration unterstützt wird, muss Exchange 2010 Service Pack 3 und das Update Rollup 11 installiert sein. Die Downloads für das Service Pack 3 und Update Rollup 11 finden sich hier:

Die Exchange 2016 Installation in einer bestehenden Exchange 2010 Organisation, unterscheidet sich nicht von der Installation in einer frischen Umgebung. Nur die Frage nach dem Organisationnamen entfällt. Ich spare mir daher die Installation von Exchange 2016 zu beschreiben, denn das habe ich bereits hier getan:

https://www.frankysweb.de/exchange-2016-installation-auf-windows-server-2012-r2/

Exchange 2010 ist auf die folgenden URLs konfiguriert:

  • Servername: EX2010.frankysweb.local
  • Outlook (CAS-Array): outlook-int.frankysweb.de
  • OWA, EWS, ActiveSync, OAB: outlook.frankysweb.de
  • Outlook Anywhere: outlook.frankysweb.de
  • Autodiscover: autodiscover.frankysweb.de

Exchange 2016 soll die folgenden URLs benutzen:

  • Servername: EX2016.frankysweb.local
  • Outlook: outlook.frankysweb.de
  • OWA, EWS, ActiveSync OAB: outlook.frankysweb.de
  • Outlook Anywhere: outlook.frankysweb.de
  • Autodiscover: autodiscover.frankysweb.de

Exchange 2016 soll also die gleichen URLs benutzen wie Exchange 2010, so brauchen sich die Benutzer nicht umgewöhnen.

Vorbereitung

Wie bereits erwähnt ist Exchange 2016 bereits installiert, aber noch nicht konfiguriert. Daher werden zunächst die URLs konfiguriert, am einfachsten passiert das mittels Exchange Management Shell:

$servername = "EX2016"
$internalhostname = "outlook.frankysweb.de"
$externalhostname = "outlook.frankysweb.de"
$autodiscoverhostname = "autodiscover.frankysweb.de"
 
$owainturl = "https://" + "$internalhostname" + "/owa"
$owaexturl = "https://" + "$externalhostname" + "/owa"
$ecpinturl = "https://" + "$internalhostname" + "/ecp"
$ecpexturl = "https://" + "$externalhostname" + "/ecp"
$ewsinturl = "https://" + "$internalhostname" + "/EWS/Exchange.asmx"
$ewsexturl = "https://" + "$externalhostname" + "/EWS/Exchange.asmx"
$easinturl = "https://" + "$internalhostname" + "/Microsoft-Server-ActiveSync"
$easexturl = "https://" + "$externalhostname" + "/Microsoft-Server-ActiveSync"
$oabinturl = "https://" + "$internalhostname" + "/OAB"
$oabexturl = "https://" + "$externalhostname" + "/OAB"
$mapiinturl = "https://" + "$internalhostname" + "/mapi"
$mapiexturl = "https://" + "$externalhostname" + "/mapi"
$aduri = "https://" + "$autodiscoverhostname" + "/Autodiscover/Autodiscover.xml"
 
Get-OwaVirtualDirectory -Server $servername | Set-OwaVirtualDirectory -internalurl $owainturl -externalurl $owaexturl
Get-EcpVirtualDirectory -server $servername | Set-EcpVirtualDirectory -internalurl $ecpinturl -externalurl $ecpexturl
Get-WebServicesVirtualDirectory -server $servername | Set-WebServicesVirtualDirectory -internalurl $ewsinturl -externalurl $ewsexturl
Get-ActiveSyncVirtualDirectory -Server $servername  | Set-ActiveSyncVirtualDirectory -internalurl $easinturl -externalurl $easexturl
Get-OabVirtualDirectory -Server $servername | Set-OabVirtualDirectory -internalurl $oabinturl -externalurl $oabexturl
Get-MapiVirtualDirectory -Server $servername | Set-MapiVirtualDirectory -externalurl $mapiexturl -internalurl $mapiinturl
Get-OutlookAnywhere -Server $servername | Set-OutlookAnywhere -externalhostname $externalhostname -internalhostname $internalhostname -ExternalClientsRequireSsl:$true -InternalClientsRequireSsl:$true -ExternalClientAuthenticationMethod 'Negotiate'
Get-ClientAccessService $servername | Set-ClientAccessService -AutoDiscoverServiceInternalUri $aduri

Jetzt muss die Authentifizierung für Outlook Anywhere von Exchange 2016 an Exchange 2010 angepasst werden:

Zuerst prüfen, welche Authentifizierung Exchange 2010 verwendet:

image

Die gleiche Authentifizierungsmethode wird dann auch für Exchange 2016 eingestellt:

image

image

Auch die Art der Anmeldung an OWA und ECP muss gleich konfiguriert werden

image

image

Da ich die URLs nicht verändere kann ich das vorhandene Zertifikat des Exchange 2010 Servers weiterverwenden:

image

image

Das ist natürlich nur sinnvoll, wenn das Zertifikat noch eine ausreichend lange Restlaufzeit hat und auch mit SHA256 signiert wurde. Das Zertifikat kann dann einfach vom Exchange 2010 Server exportiert werden und auf dem Exchange 2016 Server wieder importiert werden:

image

Dann noch den Diensten zuordnen

image

Aber auch ein neues Zertifikat ist nicht das Problem. Ein neues Zertifikat kann entweder von einer internen CA oder von einer öffentlichen CA ausgestellt werden. Der Prozess unterscheidet sich dabei nicht von Exchange 2013:

Als nächsten kann Exchange 2016 zum Sendeconnector hinzugefügt werden, damit über Exchange 2016 auch Mails versendet werden können:

image

image

Bei der Exchange 2016 Installation wird ein neues Offline Adressbuch erzeugt, welches der Exchange 2016 Datenbank noch zugewiesen werden muss:

image

Die Grundkonfiguration ist damit bereits abgeschlossen.

Jetzt ein Testpostfach in die Exchange 2016 Datenbank verschoben werden:

image

Testpostfach auswählen

image

Namen vergeben und die Exchange 2016 Datenbank auswählen

image

Dann die Postfachverschiebung abschließen:

image

Jetzt ein bisschen warten bis die Postfachverschiebung abgeschlossen ist:

image

Sobald das Postfach Verschoben wurde, erscheint wieder die berüchtigte Meldung, wenn Outlook zum Zeitpunkt der Postfachverschiebung geöffnet war:

Der Microsoft Exchange-Administrator hat eine Änderung durchgeführt, die einen Neustart von Outlook erfordert

image

Um die Verbindung zu testen ohne gleich alle Clients umzustellen, können wir den DNS Server umgehen und folgende Einträge in der HOSTS-Datei unter c:\Windows\System32\drivers\etc hinzufügen:

  • 172.168.100.102 outlook.frankysweb.de
  • 172.16.100.102 autodiscover.frankysweb.de

image

Wobei 172.16.100.102 die IP meines Exchange 2016 Servers ist. Der Eintrag in der HOSTS-Datei dienst natürlich nur zum Test und wird nach erfolgreichem Test wieder entfernt.

Nachdem Outlook neugestartet wurde, sollte es jetzt mit Exchange 2016 verbunden sein:

image

Hier kann man schon erkennen, dass nun MAPIoverHTTP genutzt wird, welches das neue Standardprotokoll für Exchange 2016 ist.

Hinweis: Wer Outlook 2010 als Client nutzt, muss darauf achten das folgendes Update installiert ist:

Erst das Update liefert Support für MAPIoverHTTP für Outlook 2010.

Und auch Autodiscover sollte nun die Exchange 2016 Einstellungen liefern:

image

Jetzt können die üblichen Tests durchgeführt werden, E-Mail Empfang intern, E-Mail Empfang extern, E-Mail Versand intern, E-Mail Versand extern und alles was man noch so machen möchte.

Hier bietet sich nun ein ausführlicher Test an, auch mit mehreren Testpostfächern. Wichtig ist auch daran zu denken, dass Exchange nicht nur Mailserver spielt, auch Kalender, Raumbuchungen, Abwesenheitsassistent usw. sollte getestet werden. Ebenfalls nicht vergessen den Zugriff von extern zu testen (ActiveSync, Outlook Anywhere).

WICHTIG: Unbedingt auch testen, ob der Zugriff möglich ist, wenn das Postfach noch nicht auf Exchange 2016 verschoben wurde, also ein bestehendes Exchange 2010 Postfach raussuchen und HOSTS-Datei entsprechend wie oben beschrieben ändern. Dieser Zugriff muss für die weitere Migration möglich sein.

HINWEIS: Wenn öffentliche Ordner genutzt werden, sollte bei den Tests aufgefallen sein, das von einem Exchange 2016 Postfach nicht auf Exchange 2010 Öffentliche Ordner zugegriffen werden kann. Im zweiten Teil dieser Anleitung, wird der Zugriff entsprechend eingerichtet.

21 Gedanken zu “Migration von Exchange 2010 zu Exchange 2016 (Teil 1)

  1. Hi Frank,

    täusche ich mich oder muss nicht das Domain und Forest Functional Level für Exchange 2016 mindestens Windows Server 2008 sein oder sogar Windows Server 2008 R2. Die Aussagen im Web sind da etwas verwirrend … Kannst du das bitte definitiv klären? Denn das ist ein Showstopper (erlebe ich gerade selbst in einem Projekt). Die meisten Kunden sind eben doch noch auf Windows Server 2003 native und können nicht so einfach promotemn …

  2. Hallo Bernd,

    Der Forest Function Level muss mindestens Server 2008 sein (ohne R2), alle Domain Controller müssen mindestens auf Windows Server 2008 (ohne R2) laufen. Nachzulesen in den Exchange 2016 Systemanforderungen.
    Gruss, Frank

  3. Würdest du dann bitte die notwendigen Einstellungen zum FFL und DFL EXPLIZIT erwähnen, sonst wird das zum Showstopper. Wie gesagt, ich bin in einem Projekt wo der Kunde nach Veröffentlichung von EX2016 gleich dahin migrieren wollte und nicht auf EX2013, bloss …. FFL und DFL sind Windows 2003 native und so schnell kann und will der Kunde kein Functional Level Promoting machen.

  4. Hi Frank,
    vorab vielen Dank für Deine Arbeit für uns hier in der Community ! Man sollte vielleicht noch zum Ausdruck bringen, das diese Art der Migration ein „OneNightStand“ ist. Bei mittleren und größeren Umgebungen wirst Du mit einer URL und längerer Koexistenz der beiden Exchanger nicht auskommen. Hier stellt sich eher die Frage der Zukunft, wie mit mehreren Exchange 2016 im HA Modus z.B. mit MS-Boardmitteln betrieben werden könnten ohne gleich auf Loadbalancer zurückgreifen zu müssen. Interessant wäre hierzu auch ein Beitrag der Migration der CAS2010 Rolle und/oder CAS-Arrays zu Exchange 2016. Was wird von 2016 automatisch redirected usw….

  5. Hi Andreas,
    nö, das sehe ich anders, natürlich habe ich in meiner Testumgebung nur 1 Exchange 2010 Server und einen Exchange 2016 Server, aber wo genau siehst du den Unterschied, wenn beispielsweise 10 Exchange 2010 und 10 Exchange 2016 Server bereitgestellt werden? Gerade bei längerer Koexistenz und größeren Organisationen macht es meines Erachtens Sinn, den Namespace beizubehalten. Natürlich ist es immer eine Designfrage, unterschiedliche URLs für die jeweiligen Dienste machen Sinn, wenn du entsprechend intelligente Loadbalancer einsetzt, wenn dein Loadbalancer aber nur „TCP Port 443 open“ als Health Kriterium unterstützt, dann kann man sich die verschiedenen URLs und damit auch den Aufwand für Zertifikate spraren. Weiterer Vorteil, die Benutzer müssen sich nicht an eine andere URL gewöhnen. Postfach umschubsen und sie bekommen „das neue OWA“. Loadbalancing werde ich aber gesondert behandeln. Hat auch eigentlich nichts mit der Migration zu tun.

    Gruß, Frank

  6. Hi Frank,
    will hier nicht den Rahmen sprengen, aber wie willst Du mehrere Server unter einer URL publishen? (Unabhängig von LB und/oder IIS AAR)
    Natürlich sollte das Ziel aus Usersicht sein, das die alte URL gleich der neuen wird….

  7. Bei mir gab es ein Stolperstein – Kalendereinträge konnten von einem 2010 Benutzer bei einem 2016 Benutzer nicht mehr bearbeitet werden obwohl die Berechtigungen richtig waren.
    Grund dafür war das bei dem Exchange Admin Center unter Organisation das Sharing (teilen) nicht eingeschalten war. Warum dies passiert ist konnte ich nicht nachvollziehen.
    Interessanterweise lief dann auch Mapi over http bei allen Outlook Clients und das Autodiscover wurde einwandfrei durchgeführt.

  8. Hi Frank,

    vielen Dank für die großartige Doku die du hier kostenlos zur Verfügung stellst! Wir haben die Migration von Exchange 2003 über 2010 zu 2016 soeben und auch Dank deines Blogs erfolgreich abgeschlossen! Dafür schulde ich dir mind. ein Bier!

    Lg aus Österreich, Manfred

  9. Ich habe ein Problem ab dem Punkt wenn man das OAB mit der Datenbank verknüpfen soll.
    Wenn ich in der EAC schaue sehe ich unter dem Punkt Server > Datenbanken keine Einträge. wenn ich aber auf dem alten Exchange 2010 schau sehe ich das es 2 OABs gibt.
    Mit dem dem Befehl get-mailboxdatabase sagt er mir auf dem Ex 2016 nur an „Der Exchange-Server für das Datenobjekt „Mailbox Database…“ wurde nicht in den Active Directory-Domänendienst gefunden.
    Hast du einen TIpp was man da machen kann?

  10. Hi Franky,
    Super Anleitung, wie würdest du die Befehle ausführen für die URL Änderungen?
    Als .PS1 speichern und dann via PS ausführen?
    Oder wie findest du es für richtig?
    Gruss Danke

  11. Hi,
    du kannst es zeilenweise Ausführen oder auch als PS1 Datei speichern. Spielt eigentlich keine Rolle. Ich kopiere es meistens in den Editor, passe die Variablen an und kopiere dann die Befehle in die Shell. Aber jeder so, wie er es mag :-)

    Gruß, Frank

  12. Vielen Dank Franky, hat geklappt
    bin gerade ein postfach am schieben
    kann es sein dass das lange dauert?
    2gb postfach, seit 20min am laufen
    gruss

  13. folgendes neues problem
    kann es sein dass es eine begrenzung an verbindungen hat?
    alles auf 2016 gezuegelt
    clients laufen auch auf mapi over http
    sobald paaar geräte an sind, zeigt es die verbindung als getrennt?
    und nach einem server neustar gehts wieder?
    der alte ex2010 lauft noch, aber ohne funktion
    danke

  14. Hallo Frank,

    als erstes mußß ich sagen, das ist eine super Anleitung. Leider habe ich bei meiner Migration ein Problem.
    Outlook verbindet sich nicht mehr mit dem Exchange Server. Es fragt nach Benutzername und Kennwort. und obwohl ich es richtig eingebe, kommt die Maske wieder. Outlook WebAccess funktioniert problemlos.

    Bei Verbindungsstatus im Outlook steht bei mir aber auch nicht die Öffentliche Adresse.

  15. Hallo Frank,
    vielen Dank für die hervorragende Anleitung. In einer kleinen Testumgebung hat es wunderbar funktioniert. Jetzt habe ich nur eine Frage: in meiner großen Testumgebung und natürlich auch in meiner Produktivumgebung habe ich eine DAG. Gibt es dabei etwas besonderes zu beachten? Oder kann ich einfach die neuen Server in die DAG aufnehmen und eine Testdatenbank mit Testbenutzern auf die neuen Server „ausdehnen“?
    Viele Grüße,
    Michael

  16. Hi Michael,

    Exchange Server innerhalb einer DAG müssen „sortenrein“ sein, du kannst also keine Exchange Server mit unterschiedlichen Versionen (2010, 2013, 2016) innerhalb einer DAG mischen. Leider gab es die Möglichkeit, in einer Exchange 2013 DAG auch Exchange 2016 Server aufzunehmen, was allerdings auf keinen Fall gemacht werden darf. In deinem Fall musst du also eine zusätzliche DAG aus den neuen Servern und Datenbanken bilden und dann die Postfächer in die neuen Datenbanken verschieben.

    Gruß, Frank

  17. Hallo Frank,

    wir hatten Probleme bei der Migration, sodass Outlook sich nicht mehr verbinden konnte. Das Setup war Exchange 2016 CU2, Outlook 2010 und Proxy-Server, der nicht von uns betreut wurde. Das Symptom war, dass öffentliche Ordner nicht eingebunden werden konnten, dass man nur über den 2010er das Postfach einbinden konnte, auch wenn es auf dem 2016er lag. Sobald der Proxy umgangen und in Windows deaktiviert wurde, hat es sofort funktioniert. Mit Häkchen beim Proxy war keine Verbindung möglich.

    Das Problem konnte dann gelöst werden, indem zwei Office 2010 Updates installiert wurden:
    https://support.microsoft.com/en-us/kb/2965295
    https://support.microsoft.com/en-us/kb/3085604

    Kein Neustart notwendig, hat sofort funktioniert.

  18. Hi

    ich habe massive Probleme mit dem Zugriff auf die öffentlichen Ordner (auf EX2010) vom Exchange 2016.
    Brav alles gemacht, auch in Outlook wird mir beim AutoKonfigurationstest die ProxyMailbox angezeigt, allerdings bleibt in Outlook unter „Alle öffentlichen Ordnern“ alles leer. Fehlermeldungen sehe ich auch keine.
    Die Datenbank ist ja auf dem Exchange 2010 nicht eingebunden, egal ob ich das so lasse oder die einbinde – kein Unterschied. Zertifikate passen, auf dem Testclient ist das DNS lokal angepasst. Auch via OWA sehe ich vom Ex2016 nichts, wenn ich die öffentlichen Ordner anzeigen lassen möchte.

    Noch ein Tipp wo zu suchen ist?

    Gruß

    Michael

  19. Hallo,
    Danke für die Anleitung, ich habe eine Frage zu diesem Teil „Exchange 2016 soll also die gleichen URLs benutzen wie Exchange 2010, so brauchen sich die Benutzer nicht umgewöhnen.“.

    Was ist wenn ich die URL ändere? Aktuell hat der Vorbesitzer überall den Servernnamen eingetragen, gerne würde ich dies korrekt ändern auf autodiscover etc.

    Muss ich dann alle Clients neu einrichten( also ich meine das Outlook Profil auf den PCs)

    Bezüglich Active Sync sehe ich kein Problem, da wir auf den Mobile Devices die Verbindung via IP eingerichtet haben.

    Danke für dein Feedback

  20. Hallo Frank,

    Vielen Dank für das Tut!

    Ich bin bei der Migration in einer Testumgebung und einer zeitweisen Co Existenz von 2010 und 2016 über das Problem gestoßen, dass ein Zugriff via dem OWA Login des Ex 2016 auf ein PF im Ex 2010 nur eine Fehlermeldung kommt.
    Bei der Recherche diesbezüglich bin ich auf http://www.admin-enclave.com/de/articles/exchange/251-exchange-2010-to-exchange-2016-co-existence-migration-owa-redirect-not-working.html gestoßen. Nach Aktivieren der integrierten Windows Authentifizierung auf dem vir.Directory OWA auf dem 2010, war der Login wieder möglich. In Deiner Anleitung ist entsprechender Punkt aber abgehakt.
    Ist das nur übersehen worden, oder generell eine notwendige Konfiguration für die Co Existenz, dann könntest Du Dein Tut in dem Punkt vielleicht noch anpassen.

    Vielen Dank

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.