HowTo: Migration von Exchange 2016 zu Exchange 2019 (Teil 2)

Teil 1 der Artikelserie “Migration von Exchange 2016 zu Exchange 2019” hat nur die Testumgebung und die Installation von Exchange 2019 beschrieben. Jetzt folgen die interessanteren Schritte. In diesem Teil geht es nun um die Konfiguration von Exchange 2019 für die Ko-Existenz mit Exchange 2016.

Ziel dieses Artikels ist es, einen funktionsfähigen Exchange 2019 Server zu haben, welcher später den Exchange 2016 Server ersetzt. Das Zertifikat und auch die URLs (Bsp. OWA) sollen beibehalten werden. Die Benutzer sollen sich also nicht eine neue URL für OWA merken müssen. Auch bestehende Anwendungen die mit Exchange interagieren sollen im besten Fall nichts von der Migration mitbekommen (Kompatibilität vorausgesetzt).

Exchange 2019 Konfiguration

Die erste Konfiguration die ich an einem neuem Exchange Server vornehme, ist das Umbenennen und Verschieben der Datenbank an ihren Bestimmungsort. Per Exchange Management Shell ist dies schnell erledigt:

Get-MailboxDatabase -Server Exchange2019 | Set-MailboxDatabase -Name DB2019
Move-DatabasePath DB2019 -EdbFilePath d:\DB2019\DB2019.edb -LogFolderPath d:\DB2019

HowTo: Migration von Exchange 2016 zu Exchange 2019 (Teil 2)

Damit Exchange 2019 auch Mails ins Internet zustellen kann, muss der neue Server als Quellserver für den Sendeconnector eingetragen werden:

HowTo: Migration von Exchange 2016 zu Exchange 2019 (Teil 2)

Hier muss nur der Exchange 2019 Server hinzugefügt werden. Wenn es weitere Sendeconnectoren gibt, dann muss hier ebenfalls der neue Server eingetragen werden:

HowTo: Migration von Exchange 2016 zu Exchange 2019 (Teil 2)

Als nächstes sind die URLs für die verschiedenen virtuellen Verzeichnisse dran.

Damit nicht jede der Exchange URLs manuell konfiguriert werden muss, kann das folgende kleine Script verwendet werden. Es müssen nur die ersten beiden Zeilen angepasst und die jeweiligen Hostnamen von Exchange 2016 und Exchange 2019 eingetragen werden. Das Script liest dann die URLs aus der Exchange 2016 Konfiguration aus und konfiguriert die gleichen Einstellungen für Exchange 2019:

$Exchange2019Server = "Exchange2019"
$Exchange2016Server = "Exchange16"

#Get URLs from Exchange 2016 Server
$autodiscoverhostname = (Get-ClientAccessService $Exchange2016Server).AutoDiscoverServiceInternalUri
$owainturl = (Get-OwaVirtualDirectory -Server $Exchange2016Server).internalurl
$owaexturl = (Get-OwaVirtualDirectory -Server $Exchange2016Server).externalurl
$ecpinturl = (Get-EcpVirtualDirectory -server $Exchange2016Server).internalurl
$ecpexturl = (Get-EcpVirtualDirectory -server $Exchange2016Server).externalurl
$ewsinturl = (Get-WebServicesVirtualDirectory -Server $Exchange2016Server).internalurl
$ewsexturl = (Get-WebServicesVirtualDirectory -Server $Exchange2016Server).externalurl
$easinturl = (Get-ActiveSyncVirtualDirectory -Server $Exchange2016Server).internalurl
$easexturl = (Get-ActiveSyncVirtualDirectory -Server $Exchange2016Server).externalurl
$oabinturl = (Get-OabVirtualDirectory -server $Exchange2016Server).internalurl
$oabexturl = (Get-OabVirtualDirectory -server $Exchange2016Server).externalurl
$mapiinturl = (Get-MapiVirtualDirectory -server $Exchange2016Server).internalurl
$mapiexturl = (Get-MapiVirtualDirectory -server $Exchange2016Server).externalurl
$OutlAnyInt = (Get-OutlookAnywhere -Server $Exchange2016Server).internalhostname
$OutlAnyExt = (Get-OutlookAnywhere -Server $Exchange2016Server).externalhostname

#Configure Exchange 2019 Server
Get-OwaVirtualDirectory -Server $Exchange2019Server | Set-OwaVirtualDirectory -internalurl $owainturl -externalurl $owaexturl -Confirm:$false
Get-EcpVirtualDirectory -server $Exchange2019Server | Set-EcpVirtualDirectory -internalurl $ecpinturl -externalurl $ecpexturl -Confirm:$false
Get-WebServicesVirtualDirectory -server $Exchange2019Server | Set-WebServicesVirtualDirectory -internalurl $ewsinturl -externalurl $ewsexturl -Confirm:$false
Get-ActiveSyncVirtualDirectory -Server $Exchange2019Server | Set-ActiveSyncVirtualDirectory -internalurl $easinturl -externalurl $easexturl -Confirm:$false
Get-OabVirtualDirectory -Server $Exchange2019Server | Set-OabVirtualDirectory -internalurl $oabinturl -externalurl $oabexturl -Confirm:$false
Get-MapiVirtualDirectory -Server $Exchange2019Server | Set-MapiVirtualDirectory -externalurl $mapiexturl -internalurl $mapiinturl -Confirm:$false
Get-OutlookAnywhere -Server $Exchange2019Server | Set-OutlookAnywhere -externalhostname $OutlAnyExt -internalhostname $OutlAnyInt -ExternalClientsRequireSsl:$true -InternalClientsRequireSsl:$true -ExternalClientAuthenticationMethod 'Negotiate' -Confirm:$false
Get-ClientAccessService $Exchange2019Server | Set-ClientAccessService -AutoDiscoverServiceInternalUri $autodiscoverhostname -Confirm:$false

#Display setttings
Get-OwaVirtualDirectory | fl server,externalurl,internalurl
Get-EcpVirtualDirectory | fl server,externalurl,internalurl
Get-WebServicesVirtualDirectory | fl server,externalurl,internalurl
Get-ActiveSyncVirtualDirectory | fl server,externalurl,internalurl
Get-OabVirtualDirectory | fl server,externalurl,internalurl
Get-MapiVirtualDirectory | fl server,externalurl,internalurl
Get-OutlookAnywhere | fl servername,ExternalHostname,InternalHostname
Get-ClientAccessService | fl name,AutoDiscoverServiceInternalUri

Die konfigurierten URLs werden am Ende aufgelistet, diese sollten einmal kontrolliert werden. Beide Server müssen über die gleichen URLs verfügen:

HowTo: Migration von Exchange 2016 zu Exchange 2019 (Teil 2)

Dies ist eigentlich schon alles.

Zur Sicherheit, sollte man allerdings einmal die komplette Exchange 2016 Konfiguration durchgehen und Exchange 2019 ebenfalls entsprechend konfigurieren. Beispielsweise Einstellungen zu den Empfangs- und Sendeconnectoren (Relay Einstellungen, Drosselung, Nachrichtengröße)

HowTo: Migration von Exchange 2016 zu Exchange 2019 (Teil 2)

Wichtig sind auch die Einstellungen der Datenbanken, hier sollten ebenfalls die Limits angeglichen werden. Es wäre nicht schön wenn auf dem Exchange 2016 Server beispielsweise 10 GB als Maximum für Postfächer eingestellt wurde, auf Exchange 2019 aber nur 2 GB. Bei der späteren Datenübernahme von Exchange 2016 zu Exchange 2016 wäre somit ein 5 GB Postfach über dem Limit und Exchange verbietet senden und empfangen.

HowTo: Migration von Exchange 2016 zu Exchange 2019 (Teil 2)

Zertifikat übernehmen

Nach der Konfiguration von Exchange 2019 kann das Zertifikat übernommen werden. Dazu muss zunächst das Zertifikat vom Exchange 2016 Server exportiert werden:

HowTo: Migration von Exchange 2016 zu Exchange 2019 (Teil 2)

Das Zertifikat wird nun direkt auf dem Exchange 2019 Server gespeichert. An dieser Stelle kann natürlich auch jede andere Freigabe angegeben werden, die von beiden Servern erreicht werden kann. Kennwort und Pfad wird für den Import wieder benötigt:

HowTo: Migration von Exchange 2016 zu Exchange 2019 (Teil 2)

Jetzt kann das zuvor exportierte Zertifikat auf dem Exchange 2019 Server importiert werden:

HowTo: Migration von Exchange 2016 zu Exchange 2019 (Teil 2)

Hier muss Pfad und Kennwort des exportierten Zertifikats angegeben werden:

HowTo: Migration von Exchange 2016 zu Exchange 2019 (Teil 2)

Im letzten Schritt des Dialogs wird noch der Exchange 2019 Server angegeben, auf dem das Zertifikat installiert wird:

HowTo: Migration von Exchange 2016 zu Exchange 2019 (Teil 2)

Nachdem das Zertifikat installiert wurde, müssen noch die Exchange Dienste an das Zertifikat gebunden werden:

HowTo: Migration von Exchange 2016 zu Exchange 2019 (Teil 2)

Exchange 2019 ist jetzt in der Lage als Proxy für Exchange 2016 zu arbeiten. Es bietet sich jetzt an ein paar Tests durchzuführen indem die Hosts Datei eines Clients auf bearbeitet wird. In diesem Beispiel würde ich nun also auf einem Client die Hosts Datei anpassen und outlook.frankysweblab.de auf die IP des Exchange 2019 Servers zeigen lassen. Wenn die ersten Tests erfolgreich waren, kann DNS und Firewall umgestellt werden.

DNS und Firewall umstellen

Am internen DNS Server muss nun die IP-Adresse für die Einträge “outlook.frankysweblab.de” und autodiscover.frankysweblab.de” geändert werden. Aktuell verweisen beide Einträge auf die IP des Exchange 2016 Servers:

HowTo: Migration von Exchange 2016 zu Exchange 2019 (Teil 2)

Die IP der beiden Host-A Einträge wird nun auf die IP des Exchange 2019 Servers geändert. In diesem Fall also 192.168.200.18:

HowTo: Migration von Exchange 2016 zu Exchange 2019 (Teil 2)

Damit auch externe Clients an Exchange 2019 verwiesen werden, muss noch der NAT Eintrag angepasst werden, aktuell zeigt dieser auf Exchange 2016:

HowTo: Migration von Exchange 2016 zu Exchange 2019 (Teil 2)

Das Portforward muss an dieser Stelle also nur auf Exchange 2019 geändert werden:

HowTo: Migration von Exchange 2016 zu Exchange 2019 (Teil 2)

Nach diesen Änderungen ist Exchange 2019 nun CAS-Proxy für Exchange 2016. Die Postfächer der Benutzer werden aktuell immer noch auf Exchange 2016 gehostet. Die Migration der Daten ist Bestandteil des nächsten Artikels, dieser folgt in Kürze.

An dieser Stelle ist es empfehlenswert die DNS Einträge durchzugehen: Weitere DNS Einträge, wie CNAMES und SRV-Records (Autodiscover) sollten ebenfalls auf Exchange 2019 zeigen. In vielen Umgebungen wurden CNAMES auf den Hostname des (alten) Exchange Servers konfiguriert (Beispielsweise für SMTP Traffic von anderen Geräten/Anwendungen). Auch Geräte wie Drucker / Scanner sollten einmal kontrolliert werden, hier wird erfahrungsgemäß gerne die IP verwendet, anstatt eines FQDN.

In dieser Konstellation kann jetzt Exchange 2019 erst einmal parallel zu Exchange 2016 laufen. Wenn sich keine Probleme ergeben, kann mit der Datenmigration weiter gemacht werden. Sollten doch Probleme auftreten, können mit wenig Aufwand die DNS- und NAT Einstellungen rückgängig gemacht werden.

Die Datenmigration ist Bestandteil des nächsten Artikels.

13 thoughts on “HowTo: Migration von Exchange 2016 zu Exchange 2019 (Teil 2)”

  1. Hallo ich bekomme beim Senden einer E-Mail folgendes Problem:
    Die Nachrichtenzustellung dauert etwas länger als erwartet.

    Die Installion von exchanger-server 2019 war ohne Probleme.
    Auch der export und import vom Zertifikat ging.

    im Zustellbericht wird die Mail an exchangeserver2016 übermittelt,
    danach wurde die nachricht
    durch exchange 2019 von exchange 2016 empfangen
    die nachricht befindet sich auf exchane 2019
    und es kommt die meldung:
    Fehler: ‚[{LED=};{MSG=};{FQDN=};{IP=};{LRT=}]‘

    Nach einer Zeit gibt der exchange 2019 auf die e-mail zu versenden.

    Reply
  2. Wie kann ich vom Client aus erkennt, ob er sich mit dem neuen Server verbunden hat?
    DNS und alles ist umgestellt. Im Verbindungsstatus steht unter Version aber weiterhin 15.1, für einen EX 2019 müsste aber 15.2 sein.
    Daran hat auch die Migration meines Postfaches nichts geändert.

    Reply
  3. Der neue Server wurde automatisch in die bestehende Umgebung mit hinzugefügt, das hat zur folge das Outlook nicht mehr startet
    Es erscheint die Meldung in Outlook-. Ordnergruppe kann nicht geöffnet werden, Informationsspeicher steht nicht zur Verfügung

    Reply
  4. ich habe folgendes Problem: Server 2019 installiert, Exchange 2019 auf dem Server installiert, Wenn ich jetzt das Admin Center öffne sehe ich beide Server, ich kann mich via Powershell aber nicht am neuen Server anmelden

    Reply
  5. Hallo!
    Ich bin gerade im Schritt „Serverzertifikat Exportieren (2016) und neu importieren auf dem 2019“
    Leider sehe ich bei mir keine Möglichkeit das Zerti zu exportieren.
    Die 3 Punkte habe ich nicht… Gibts eine andere Möglichkeit?
    Gruß Sascha

    Reply
    • Hallo Sascha,
      etwas spät, aber vielleicht dennoch hilfreich.
      Die drei Punkte sind seit einem Update nicht mehr da…
      Von daher musst Du den Export über die Management Shell ausführen.

      export-exchangecertificate ist hierfür der Befehl.

      Zuvor kannst Du Dir am 2016er mit get-exchangecertificate deine Zertifikate anzeigen lassen. Kopier dann das Thumbprint des aktiven und für IIS und SMTP aktiven Zertifikats. das brauchst Du beim Export.
      Dann Exportieren in eine Datei als Binary und mit import-exchangecertificate wieder am neuen importieren.

      LG

      Reply
  6. Hallo und vielen Dank für die klasse Anleitung. Ich bin gerade am Ende von Teil 2 an dem folgenden Punkt.

    In dieser Konstellation kann jetzt Exchange 2019 erst einmal parallel zu Exchange 2016 laufen. Wenn sich keine Probleme ergeben, kann mit der Datenmigration weiter gemacht werden. Sollten doch Probleme auftreten, können mit wenig Aufwand die DNS- und NAT Einstellungen rückgängig gemacht werden.

    E-Mails können versendet und empfangen werden. Allerdings bekomme ich beim Versand an externe Empfänger folgende Fehlermeldungen.

    Remote Server returned ‚441 4.4.1 Error encountered while communicating with primary target IP address: „421 4.4.2 Connection dropped due to SocketError.“ Attempted failover to alternate host, but that did not succeed. Either there are no alternate hosts, or delivery failed to all alternate hosts. The last endpoint attempted was „interne IP der Sophos UTM“

    Ihre Nachricht konnte nicht zugestellt werden, und es wurde kein gültiger, erweiterter Statuscode vom Remote-E-Mail-System ausgestellt, um die genaue Ursache zu ermitteln. Status: „Relay not permitted“.

    Die folgende Organisation hat Ihre Nachricht abgelehnt: URL vom Mail Gateway

    Einige Nachrichten werden versendet und einige nicht. Manchmal klappt es auch beim wiederholten Senden. Ist der Fehler am Exchange zu suchen oder auf der UTM?

    Viele Grüße

    Reply
    • Moin Thomas,

      ich hatte das gleiche Problem. Ursache war die Sophos Firewall, wo in den Relay Setting noch der neue Exchangeserver als Versender hinzugefügt werden muss.
      Das es mal funktioniert und mal nicht liegt daran, dass er mal den alten (noch erlaubten) Server zum versenden nutzt und mal den neuen (noch geblockten).

      Hoffe das hilft.

      Reply
  7. Ich habe mit einem Testclient versucht, wieder auf Outlook zuzugreifen. Das mißlingt mit der nichtssagenden Meldung „…Fehler bei der Anmeldung“. Ein Versuch, das Mailprofil neu einzurichten endet mit (sinngemäß) „Fehler bei Exchange ActiveSync (EAS) Server nicht gefunden“. Beim Versuch über den neuen Exchange-Server auf die ActiveSync Webseite zuzugreifen, bekomme ich nach Anmeldung einen 501 Fehler (Seite nicht gefunden). Danach habe ich über die ECP das virtuelle Verzeichnis resetet und die URL’s neu gesetzt – gleiches Ergebnis. Ein „Test-Activesyncconnectivity“ meldet ein Fehler:
    „Die zugrunde liegende Verbindung wurde geschlossen: Für den geschützten SSL/TLS-Kanal konnte keine Vertrauensstellung hergestellt werden.. Interner Fehler [System.AuthenticationException]Security.Authentication.: Das Remotezertifikatist laut Validierungsverfahren ungültig.“
    Das Zeretifikat ist das aus dem EX2016 exportierte mit mit dem Certifikatsassistent erstellte Let’s Encrypt Zertifikat. Ich habe daraufhin das Zertifikat mittels Assistent neu erstellen lassen und das alte gelöscht. Gleicher Fehler. Immer noch hat der Ex2019 offenbar ein Problem mit der Acrivesync Webseite und mein Outlook verbindet sich nicht. Jetzt weiß ich nicht weiter. Hat jemand ein Tipp für mich?

    Reply
  8. Eine Frage habe ich doch noch. Das Split-DNS ist optional und nicht muss? Zumindest wenn Full-Nat an der UTM konfiguriert wird?!

    Reply
  9. Der für uns wichtige Test, sind die neuen Client Zugriffsregeln, mit den es möglich sein soll, den Zugriff auf das Admin Center einzuschränken und nicht wie empfohlen, auf mindestens 2 Exchange Server zu setzen.

    Reply

Leave a Comment