Website-Icon Frankys Web

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

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

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

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:

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)

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.

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:

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:

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

Hier muss Pfad und Kennwort des exportierten Zertifikats angegeben werden:

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

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

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:

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:

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

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

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.

Die mobile Version verlassen