在 Compute Engine 上部署 Microsoft Exchange Server 2016


本教程介绍如何在 Compute Engine 上部署 Microsoft Exchange Server 2016 以及如何进行配置以实现高可用性和网站弹性

Exchange 部署将跨单个地区中的两个区域。在每个区域中,您将部署一个邮箱服务器和一个边缘传输服务器。邮箱服务器将成为数据库可用性组的一部分,以便跨区域复制邮箱数据。

下图演示了该部署:

Microsoft Exchange 的部署

本文假定您已在 Google Cloud 上部署了 Active Directory,而且您已基本掌握 Exchange Server 2016、Active Directory 和 Compute Engine。

目标

  • 设置项目和 VPC 网络,并准备 Exchange Server 2016 的部署。
  • 跨两个区域部署 Exchange 邮箱服务器,并创建数据库可用性组
  • 跨越两个区域部署 Exchange 边缘传输服务器。
  • 配置负载平衡和防火墙规则。

费用

本教程使用 Google Cloud 的以下收费组件:

请使用价格计算器根据您的预计使用情况来估算费用。

准备工作

如需完成本指南,您需要以下各项:

  • 至少具有一台网域控制器的现有 Active Directory 网域。Active Directory 网域必须使用可公开路由的有效 DNS 域名。本地域名(如 corp.local)或预留域名(如 example.com)无法使用。

    如需详细了解如何在 Compute Engine 上部署 Active Directory 环境,请参阅部署容错 Microsoft Active Directory 环境

  • Active Directory 的 DNS 域名的专用 DNS 转发区域,用于将 DNS 查询转发到您的网域控制器。

  • 对您的 Active Directory 网域的管理员权限。

  • 连接到您的 Active Directory 网域控制器的 Google Cloud 项目和 VPC。

  • 用于 Exchange 虚拟机实例的子网。该子网必须至少跨越两个区域。

在开始部署之前,请先查看 Exchange Server 的高可用性和网站弹性要求

  1. 在 Google Cloud Console 中的项目选择器页面上,选择或创建一个 Google Cloud 项目

    转到“项目选择器”

  2. 确保您的 Google Cloud 项目已启用结算功能

完成本文档中描述的任务后,您可以通过删除所创建的资源来避免继续计费。如需了解详情,请参阅清理

准备项目和网络

如需准备 Google Cloud 项目和 VPC 以部署 Exchange Server,请执行以下操作:

  1. 在 Google Cloud Console 中切换到您的项目,然后打开 Cloud Shell。

    打开 Cloud Shell

  2. 初始化以下变量:

    VPC_NAME=VPC_NAME
    SUBNET_NAME=SUBNET_NAME
    SUBNET_REGION=SUBNET_REGION
    SUBNET_ZONE_1=$SUBNET_REGION-a
    SUBNET_ZONE_2=$SUBNET_REGION-b
    

    其中:

    • VPC_NAME 是您的 VPC 的名称。
    • SUBNET_NAME 是您的子网的名称。
    • SUBNET_REGION 是子网所在的地区。
  3. 设置默认项目 ID

    gcloud config set project PROJECT_ID
    

    PROJECT_ID 替换为您的 Google Cloud 项目的 ID。

创建安装磁盘

您现在创建一个包含安装 Exchange Server 安装媒体的磁盘。通过创建一个可挂接到多个虚拟机实例的磁盘,您不必将安装媒体单独下载到每个虚拟机实例上。

  1. 按照通过 ISO 文件创建映像中的说明进行操作。请使用以下网址作为下载网址:

    https://download.microsoft.com/download/6/6/F/66F70200-E2E8-4E73-88F9-A1F6E3E04650/ExchangeServer2016-x64-cu11.iso
    
  2. 使用新映像在第一个区域中创建磁盘:

    gcloud compute disks create exchange-media-1 \
      --zone=$SUBNET_ZONE_1 \
      --image-project=$GOOGLE_CLOUD_PROJECT \
      --image=IMAGE
    

    IMAGE 替换为您在上一步中创建的映像名称。

  3. 在第二个区域中创建磁盘:

    gcloud compute disks create exchange-media-2 \
      --zone=$SUBNET_ZONE_2 \
      --image-project=$GOOGLE_CLOUD_PROJECT \
      --image=IMAGE
    

    IMAGE 替换为您在第一步中创建的映像名称。

创建防火墙规则

若要允许客户端连接到 Exchange 并实现 Exchange 服务器之间的通信,您需要创建一些防火墙规则。如需简化这些防火墙规则的创建操作,您可以使用网络标记

  • 边缘传输服务器由 exchange-transport 标记注释。
  • 邮箱服务器由 exchange-mailbox 标记注释。
  • 见证服务器由 exchange-witness 标记注释。
  • 所有服务器均由 exchange 标记注释。

创建使用这些网络标记的防火墙规则:

  1. 返回到现有的 Cloud Shell 会话。
  2. 为邮箱服务器创建防火墙规则:

    gcloud compute firewall-rules create allow-all-between-exchange-servers \
      --direction=INGRESS \
      --action=allow \
      --rules=tcp,udp,icmp \
      --enable-logging \
      --source-tags=exchange \
      --target-tags=exchange \
      --network=$VPC_NAME \
      --priority 10000
    
    gcloud compute firewall-rules create allow-smtp-from-transport-to-mailbox \
      --direction=INGRESS \
      --action=allow \
      --rules=tcp:25 \
      --enable-logging \
      --source-tags=exchange-transport \
      --target-tags=exchange-mailbox \
      --network=$VPC_NAME \
      --priority 10000
    
    gcloud compute firewall-rules create allow-edgesync-from-mailbox-to-transport \
      --direction=INGRESS \
      --action=allow \
      --rules=tcp:50636 \
      --enable-logging \
      --source-tags=exchange-mailbox \
      --target-tags=exchange-transport \
      --network=$VPC_NAME \
      --priority 10000
    
    gcloud compute firewall-rules create allow-mail-to-mailbox \
      --direction=INGRESS \
      --action=allow \
      --rules=tcp:25,tcp:110,tcp:135,tcp:143,tcp:443,tcp:993,tcp:995 \
      --enable-logging \
      --target-tags=exchange-mailbox \
      --network=$VPC_NAME \
      --priority 10000
    
    gcloud compute firewall-rules create allow-smb-within-dag \
      --direction=INGRESS \
      --action=allow \
      --rules=tcp:135,tcp:445,udp:445,tcp:49152-65535 \
      --enable-logging \
      --source-tags=exchange-mailbox,exchange-witness \
      --target-tags=exchange-mailbox,exchange-witness \
      --network=$VPC_NAME \
      --priority 10000
    
  3. 为边缘传输服务器创建防火墙规则:

    gcloud compute firewall-rules create allow-smtp-to-transport \
      --direction=INGRESS \
      --action=allow \
      --rules=tcp:25 \
      --enable-logging \
      --target-tags=exchange-transport \
      --network=$VPC_NAME \
      --priority 10000
    

您的项目和 VPC 现在已准备好部署 Exchange Server。

部署邮箱角色

您现在部署用于管理 Exchange 的邮箱服务器和管理服务器。

虚拟机实例将使用 n1-standard-8 机器类型。请参阅 Exchange Server 角色要求计算器,详细分析您的需求及其系统要求。

部署管理服务器

请按照以下步骤创建用作管理服务器的虚拟机实例:

  1. 返回到现有的 Cloud Shell 会话。
  2. 为虚拟机实例创建专用脚本。该脚本会在虚拟机初始化期间运行,并安装 Exchange 2016 管理工具的客户端必备项

    cat << "EOF" > specialize-admin.ps1
    
    $ErrorActionPreference = "stop"
    
    # Install required Windows features
    Install-WindowsFeature RSAT-ADDS,RSAT-DNS-Server
    Enable-WindowsOptionalFeature -Online -FeatureName IIS-ManagementScriptingTools, `
        IIS-ManagementScriptingTools, `
        IIS-IIS6ManagementCompatibility, `
        IIS-LegacySnapIn, `
        IIS-ManagementConsole, `
        IIS-Metabase, `
        IIS-WebServerManagementTools, `
        IIS-WebServerRole
    
    # Install Visual C++ Redistributable Package for Visual Studio 2012
    (New-Object System.Net.WebClient).DownloadFile(
        'http://download.microsoft.com/download/1/6/B/16B06F60-3B20-4FF2-B699-5E9B7962F9AE/VSU3/vcredist_x64.exe',
        "$env:Temp\vcredist_2012_x64.exe")
    & $env:Temp\vcredist_2012_x64.exe /passive /norestart | Out-Default
    
    EOF
    
  3. 创建一个使用 specialize-admin.ps1 作为专用脚本的虚拟机实例,并将 Exchange 安装磁盘挂接为辅助磁盘。您稍后会使用辅助磁盘安装 Exchange 管理工具:

    gcloud compute instances create exchange-admin \
      --image-family=windows-2019 \
      --image-project=windows-cloud \
      --machine-type=n1-standard-2 \
      --subnet=$SUBNET_NAME \
      --zone=$SUBNET_ZONE_1 \
      --tags=exchange \
      --disk=name=exchange-media-1,auto-delete=no,mode=ro \
      --metadata-from-file=sysprep-specialize-script-ps1=specialize-admin.ps1
    
  4. 通过查看虚拟机的串行端口输出来监控其初始化过程:

    gcloud compute instances tail-serial-port-output exchange-admin --zone=$SUBNET_ZONE_1
    

    等待大约 5 分钟,直到您看到输出 Instance setup finished,然后按 Ctrl+C。此时,该虚拟机实例已准备就绪,可以使用了。

  5. 为虚拟机实例创建用户名和密码

  6. 使用远程桌面连接到虚拟机,然后使用上一步中创建的用户名和密码登录。

  7. 右键点击开始按钮(或者按 Win+X),然后点击命令提示符(管理员)

  8. 点击以确认提升权限提示。

  9. 在提升的命令提示符中,启动 PowerShell 会话:

    powershell
    
  10. 将该计算机加入您的 Active Directory 网域:

    Add-Computer -Domain DOMAIN
    

    DOMAIN 替换为您的 Active Directory 网域的 DNS 名称。

  11. 重启该计算机:

    Restart-Computer
    

    等待重启过程完成,大约需要 1 分钟。

  12. 使用远程桌面连接到虚拟机,并以属于企业管理员群组的网域用户身份登录。

  13. 按照说明为 Exchange Server 准备 Active Directory 架构和网域。您可以在驱动器 D: 上找到 Exchange 安装媒体。

  14. 按照说明安装 Exchange 管理工具

部署邮箱服务器

您现在可以部署充当邮箱服务器的虚拟机实例:

  1. 返回到现有的 Cloud Shell 会话。
  2. 为虚拟机实例创建专用脚本。脚本在虚拟机初始化期间运行,并安装邮箱服务器的安装必备项

    cat << "EOF" > specialize-mailbox.ps1
    
    $ErrorActionPreference = "stop"
    
    # Install required Windows features
    Install-WindowsFeature RSAT-ADDS
    Install-WindowsFeature `
        NET-Framework-45-Features, `
        Server-Media-Foundation, `
        RPC-over-HTTP-proxy, `
        RSAT-Clustering, `
        RSAT-Clustering-CmdInterface, `
        RSAT-Clustering-Mgmt, `
        RSAT-Clustering-PowerShell, `
        WAS-Process-Model, `
        Web-Asp-Net45, `
        Web-Basic-Auth, `
        Web-Client-Auth, `
        Web-Digest-Auth, `
        Web-Dir-Browsing, `
        Web-Dyn-Compression, `
        Web-Http-Errors, `
        Web-Http-Logging, `
        Web-Http-Redirect, `
        Web-Http-Tracing, `
        Web-ISAPI-Ext, `
        Web-ISAPI-Filter, `
        Web-Lgcy-Mgmt-Console, `
        Web-Metabase, `
        Web-Mgmt-Console, `
        Web-Mgmt-Service, `
        Web-Net-Ext45, `
        Web-Request-Monitor, `
        Web-Server, `
        Web-Stat-Compression, `
        Web-Static-Content, `
        Web-Windows-Auth, `
        Web-WMI, `
        Windows-Identity-Foundation, `
        RSAT-ADDS
    
    # Install Visual C++ Redistributable Package for Visual Studio 2012
    (New-Object System.Net.WebClient).DownloadFile(
        'http://download.microsoft.com/download/1/6/B/16B06F60-3B20-4FF2-B699-5E9B7962F9AE/VSU3/vcredist_x64.exe',
        "$env:Temp\vcredist_2012_x64.exe")
    & $env:Temp\vcredist_2012_x64.exe /passive /norestart | Out-Default
    
    # Visual C++ Redistributable Package for Visual Studio 2013
    (New-Object System.Net.WebClient).DownloadFile(
        'http://download.microsoft.com/download/2/E/6/2E61CFA4-993B-4DD4-91DA-3737CD5CD6E3/vcredist_x64.exe',
        "$env:Temp\vcredist_2013_x64.exe")
    & $env:Temp\vcredist_2013_x64.exe /passive /norestart | Out-Default
    
    # Install Microsoft Unified Communications Managed API
    (New-Object System.Net.WebClient).DownloadFile(
        'https://download.microsoft.com/download/2/C/4/2C47A5C1-A1F3-4843-B9FE-84C0032C61EC/UcmaRuntimeSetup.exe',
        "$env:Temp\UcmaRuntimeSetup.exe")
    & $env:Temp\UcmaRuntimeSetup.exe /passive /norestart | Out-Default
    
    EOF
    
  3. 在第一个区域中创建一个虚拟机实例,并将 specialize-mailbox.ps1 作为专用脚本传递。将 Exchange 安装磁盘挂接为辅助磁盘。您稍后会使用辅助磁盘安装 Exchange Server 邮箱角色:

    gcloud compute instances create mailbox-1-a \
      --image-family=windows-2016 \
      --image-project=windows-cloud \
      --machine-type=n1-standard-8 \
      --subnet=$SUBNET_NAME \
      --tags exchange,exchange-mailbox \
      --zone=$SUBNET_ZONE_1 \
      --boot-disk-type pd-ssd \
      --disk=name=exchange-media-1,auto-delete=no,mode=ro \
      --metadata-from-file=sysprep-specialize-script-ps1=specialize-mailbox.ps1
    
  4. 在第二个区域中创建另一个虚拟机实例:

    gcloud compute instances create mailbox-1-b \
      --image-family=windows-2016 \
      --image-project=windows-cloud \
      --machine-type=n1-standard-8 \
      --subnet=$SUBNET_NAME \
      --tags exchange,exchange-mailbox \
      --zone=$SUBNET_ZONE_2 \
      --boot-disk-type pd-ssd \
      --disk=name=exchange-media-2,auto-delete=no,mode=ro \
      --metadata-from-file=sysprep-specialize-script-ps1=specialize-mailbox.ps1
    
  5. 通过查看虚拟机的串行端口输出来监控其初始化过程:

    gcloud compute instances tail-serial-port-output mailbox-1-b --zone=$SUBNET_ZONE_2
    

    等待大约 5 分钟,直到您看到输出 Instance setup finished,然后按 Ctrl+C。此时,该虚拟机实例已准备就绪,可以使用了。

  6. 对于这两个虚拟机实例中的每个实例,请执行以下步骤:

    1. 为虚拟机实例创建用户名和密码
    2. 使用远程桌面连接到虚拟机,然后使用上一步中创建的用户名和密码登录。
    3. 右键点击开始按钮(或者按 Win+X),然后点击命令提示符(管理员)
    4. 点击以确认提升权限提示。
    5. 在提升的命令提示符中,启动 PowerShell 会话:

      powershell
      
    6. 将该计算机加入您的 Active Directory 网域:

      Add-Computer -Domain DOMAIN
      

      DOMAIN 替换为您的 Active Directory 网域的 DNS 名称。

    7. 重启该计算机:

      Restart-Computer
      

      等待重启过程完成,大约需要 1 分钟。

    8. 使用远程桌面连接到虚拟机,并以属于企业管理员群组的网域用户身份登录。

    9. 使用安装向导或在无人参与模式下安装 Exchange Server 邮箱角色。您可以在驱动器 D: 上找到 Exchange 安装媒体。

部署见证服务器

若要为两个邮箱服务器设置数据库可用性组 (DAG),您需要一个额外的虚拟机实例充当见证服务器。若要部署见证服务器,请按照以下步骤操作:

  1. 返回到现有的 Cloud Shell 会话。
  2. 在第一个区域中创建一个见证服务器:

    gcloud compute instances create witness \
      --image-family=windows-2016 \
      --image-project=windows-cloud \
      --machine-type n1-standard-8 \
      --subnet $SUBNET_NAME \
      --tags exchange,exchange-witness \
      --zone $SUBNET_ZONE_1 \
      --boot-disk-type pd-ssd \
      "--metadata=sysprep-specialize-script-ps1=add-windowsfeature FS-FileServer"
    
  3. 通过查看虚拟机的串行端口输出来监控其初始化过程:

    gcloud compute instances tail-serial-port-output witness --zone=$SUBNET_ZONE_1
    

    等待大约 3 分钟,直到您看到输出 Instance setup finished,然后按 Ctrl+C。此时,该虚拟机实例已准备就绪,可以使用了。

  4. 为虚拟机实例创建用户名和密码

  5. 使用远程桌面连接到虚拟机,然后使用上一步中创建的用户名和密码登录。

  6. 右键点击开始按钮(或者按 Win+X),然后点击命令提示符(管理员)

  7. 点击以确认提升权限提示。

  8. 在提升的命令提示符中,启动 PowerShell 会话:

    powershell
    
  9. 将该计算机加入您的 Active Directory 网域:

    Add-Computer -Domain DOMAIN
    

    DOMAIN 替换为您的 Active Directory 网域的 DNS 名称。

  10. 重启该计算机:

    Restart-Computer
    

    等待重启过程完成,大约需要 1 分钟。

  11. 使用远程桌面连接到虚拟机,并以属于企业管理员群组的网域用户身份登录。

  12. 右键点击开始按钮(或者按 Win+X),然后点击命令提示符(管理员)

  13. 点击以确认提升权限提示。

  14. 在提升的命令提示符中,启动 PowerShell 会话:

    powershell
    
  15. Exchange 受信任子系统通用安全群组添加到本地管理员群组:

    Add-LocalGroupMember -Group Administrators -Member "DOMAIN\Exchange Trusted Subsystem"
    

    DOMAIN 替换为您的 Active Directory 网域的 NetBIOS 名称。

这两个邮箱服务器和见证服务器现已完全部署,但您仍需要将它们添加到数据库可用性组中。

创建数据库可用性组

如需创建 DAG,请按照以下步骤操作:

  1. 使用远程桌面连接到管理虚拟机,并以属于企业管理员群组的网域用户身份登录。
  2. 右键点击开始按钮(或者按 Win+X),然后点击命令提示符(管理员)
  3. 点击以确认提升权限提示。
  4. 在提升的命令提示符中,启动 PowerShell 会话:

    powershell
    
  5. 下载并安装 Chrome 浏览器:

    Start-BitsTransfer `
        -Source 'https://dl.google.com/chrome/install/latest/chrome_installer.exe' `
        -Destination "$env:Temp\chrome_installer.exe"
    & $env:Temp\chrome_installer.exe
    
  6. 如需打开 Exchange 管理中心 (EAC),请启动 Chrome 并导航到以下网址:

    https://mailbox-1-a/ecp/?ExchClientVer=15
    
  7. 以属于企业管理员群组的网域用户身份登录。

  8. 在 EAC 菜单中,选择服务器 > 数据库可用性组

  9. 点击 +

  10. 在对话框中,输入以下设置以创建数据库可用性组

    1. 数据库可用性组名称:mailbox
    2. 见证服务器:witness
  11. 点击保存

  12. 点击代管式 DAG 成员资格图标。

  13. 在对话框中,点击 + 以添加成员服务器。

  14. 选择 mailbox-1-amailbox-1-b,然后点击添加

  15. 点击确定

  16. 点击保存

(可选)执行任何 Exchange Server 安装后任务

设置负载均衡

如需允许客户端连接到邮箱服务器,您现在需要创建内部负载均衡器资源:

  1. 返回到现有的 Cloud Shell 会话。
  2. 为每个区域创建一个非代管式实例组

    gcloud compute instance-groups unmanaged create mailbox-a --zone=$SUBNET_ZONE_1
    gcloud compute instance-groups unmanaged create mailbox-b --zone=$SUBNET_ZONE_2
    
  3. 将运行邮箱服务器的虚拟机实例添加到实例组:

    gcloud compute instance-groups unmanaged add-instances mailbox-a \
      --zone=$SUBNET_ZONE_1 \
      --instances=mailbox-1-a
    gcloud compute instance-groups unmanaged add-instances mailbox-b \
      --zone=$SUBNET_ZONE_2 \
      --instances=mailbox-1-b
    
  4. 创建健康检查以探测 HTTP 路径 /owa/healthcheck.htm

    gcloud compute health-checks create http http-80\
      --port=80 \
      --request-path=/owa/healthcheck.htm
    
  5. 创建一个负载平衡器后端并添加这两个实例组:

    gcloud compute backend-services create mailbox-backend \
      --load-balancing-scheme=internal \
      --protocol=tcp \
      --region=$SUBNET_REGION \
      --health-checks=http-80 \
      --session-affinity=CLIENT_IP_PORT_PROTO
    
    gcloud compute backend-services add-backend mailbox-backend \
      --region=$SUBNET_REGION \
      --instance-group=mailbox-a \
      --instance-group-zone=$SUBNET_ZONE_1
    
    gcloud compute backend-services add-backend mailbox-backend \
      --region=$SUBNET_REGION \
      --instance-group=mailbox-b \
      --instance-group-zone=$SUBNET_ZONE_2
    
  6. 为负载平衡器预留静态 IP 地址:

    gcloud compute addresses create mailbox-frontend \
      --region=$SUBNET_REGION \
      --subnet=$SUBNET_NAME
    
  7. 为负载平衡器创建转发规则:

    gcloud compute forwarding-rules create mailbox-frontend \
      --region=$SUBNET_REGION \
      --address=mailbox-frontend  \
      --load-balancing-scheme=internal \
      --network=$VPC_NAME \
      --subnet=$SUBNET_NAME \
      --ip-protocol=TCP \
      --ports=ALL \
      --backend-service=mailbox-backend  \
      --backend-service-region=$SUBNET_REGION
    
  8. 查找负载平衡器的 IP 地址:

    gcloud compute addresses describe mailbox-frontend  \
      --region=$SUBNET_REGION \
      --format=value\(address\)
    

测试邮箱服务器

若要验证邮箱服务器是否已成功部署,请执行以下步骤:

  1. 在管理虚拟机上,打开 Chrome 并导航到 https://<var>IP</var>/owa/,其中 IP 是您之前查找的负载平衡器的 IP 地址。
  2. 以网域用户身份登录。

    您现在应该看到 Outlook Web Access 的界面。

部署边缘传输角色

您现在部署边缘传输服务器。边缘传输服务器可处理所有入站和出站邮件流

与邮箱服务器不同,边缘传输服务器会向互联网公开。在本地部署中,您可能因此将边缘传输服务器部署到通过防火墙与内部网络隔离的边界网络。

在 Google Cloud 上,无需将边缘传输服务器部署到单独的 VPC 或子网中。而是使用防火墙规则对网络进行微细分,并限制进出边缘传输服务器的网络通信。

与邮箱服务器不同,边缘传输服务器不属于 Active Directory 网域。

虚拟机实例将使用 n1-standard-8 机器类型。根据您计划使用 Exchange 部署的方式,您可能需要使用较大的机器类型。请参阅 Exchange Server 角色要求计算器,详细分析您的需求及其系统要求。

部署边缘传输服务器

若要部署边缘传输服务器,请按照以下步骤操作:

  1. 返回到现有的 Cloud Shell 会话。
  2. 为虚拟机实例创建专用脚本。脚本在虚拟机初始化期间运行,并安装边缘传输服务器的安装必备项

    cat << "EOF" > specialize-transport.ps1
    
    # Install required Windows features
    Install-WindowsFeature ADLDS
    
    # Install Visual C++ Redistributable Package for Visual Studio 2012
    (New-Object System.Net.WebClient).DownloadFile(
        'http://download.microsoft.com/download/1/6/B/16B06F60-3B20-4FF2-B699-5E9B7962F9AE/VSU3/vcredist_x64.exe',
        "$env:Temp\vcredist_2012_x64.exe")
    & $env:Temp\vcredist_2012_x64.exe /passive /norestart | Out-Default
    
    EOF
    
  3. 在第一个区域中创建一个虚拟机实例,并将 specialize-transport.ps1 作为专用脚本传递。以只读模式挂接 Exchange 安装磁盘,以便您稍后可以安装 Exchange Server 传输服务器角色:

    gcloud compute instances create transport-1-a \
      --image-family=windows-2016 \
      --image-project=windows-cloud \
      --machine-type=n1-standard-8 \
      --subnet=$SUBNET_NAME \
      --tags exchange,exchange-transport \
      --zone=$SUBNET_ZONE_1 \
      --boot-disk-type pd-ssd \
      --disk=name=exchange-media-1,auto-delete=no,mode=ro \
      --metadata-from-file=sysprep-specialize-script-ps1=specialize-transport.ps1
    
  4. 在第二个区域中创建另一个虚拟机实例:

    gcloud compute instances create transport-1-b \
      --image-family=windows-2016 \
      --image-project=windows-cloud \
      --machine-type=n1-standard-8 \
      --subnet=$SUBNET_NAME \
      --tags exchange,exchange-transport \
      --zone=$SUBNET_ZONE_2 \
      --boot-disk-type pd-ssd \
      --disk=name=exchange-media-2,auto-delete=no,mode=ro \
      --metadata-from-file=sysprep-specialize-script-ps1=specialize-transport.ps1
    
  5. 通过查看虚拟机的串行端口输出来监控其初始化过程:

    gcloud compute instances tail-serial-port-output transport-1-b --zone=$SUBNET_ZONE_2
    

    等待大约 5 分钟,直到您看到输出 Instance setup finished,然后按 Ctrl+C。此时,该虚拟机实例已准备就绪,可以使用了。

  6. 对于这两个边缘传输服务器虚拟机实例中的每个实例,请执行以下步骤:

    1. 为虚拟机实例创建用户名和密码
    2. 使用远程桌面连接到虚拟机,然后使用上一步中创建的用户名和密码登录。
    3. 配置主 DNS 后缀,以匹配您的 Active Directory 网域使用的 DNS 域名。
    4. 使用安装向导或在无人参与模式下安装 Exchange Server 边缘传输服务器角色。您可以在驱动器 D: 上找到 Exchange 安装媒体。

在 DNS 中注册边缘传输服务器

您必须先为服务器分配 DNS 名称,然后才能为边缘传输服务器设置边缘订阅。由于边缘传输服务器不属于 Active Directory 网域,因此您必须手动分配这些名称:

  1. 在管理服务器上,打开 PowerShell 控制台。
  2. transport-1-atransport-1-b 创建一个 CNAME 记录:

    Add-DnsServerResourceRecordCName `
      -ComputerName (Get-ADDomainController).Hostname `
      -HostNameAlias "transport-1-a.REGION-a.c.PROJECT-ID.internal." `
      -Name "transport-1-a" `
      -ZoneName "DOMAIN"
    
    Add-DnsServerResourceRecordCName `
      -ComputerName (Get-ADDomainController).Hostname `
      -HostNameAlias "transport-1-b.REGION-b.c.PROJECT-ID.internal." `
      -Name "transport-1-b" `
      -ZoneName "DOMAIN"
    

    其中:

    • PROJECT-ID 是部署 Exchange 虚拟机实例的项目的项目 ID。
    • REGION 是部署 Exchange 虚拟机实例的地区。
    • DOMAIN 是 Active Directory 网域的 DNS 网域。

设置边缘订阅

如需使用 Active Directory 数据来填充边缘传输服务器上的 Active Directory 轻型目录服务 (AD LDS) 实例,您现在需要设置边缘订阅

  1. 右键点击开始 > Exchange 命令行管理程序并选择更多 > 以管理员身份运行,打开提升的 Exchange 命令行管理程序。
  2. 创建边缘订阅:

    New-EdgeSubscription -FileName "$env:UserProfile\Desktop\EdgeSubscriptionInfo-$env:computername.xml"
    

    您现在应该会在桌面上看到订阅文件。

  3. 导出 Exchange AD LDS 服务器证书:

    1. 点击开始 > 运行,输入 mmc 并选择确定,以打开 Microsoft 管理控制台。
    2. 选择文件 > 添加/删除管理单元
    3. 在管理单元列表中,选择证书,然后点击添加
    4. 选择服务账号,然后点击下一步
    5. 选择本地计算机,然后点击下一步
    6. 选择 Microsoft Exchange ADAM,然后点击完成
    7. 点击确定
    8. 在左侧窗格中,导航到证书 > ADAM_MSExchange\Personal > 证书
    9. 右键点击右侧窗格中的证书,然后选择所有任务 > 导出
    10. 点击下一步
    11. 选择否,不导出私钥,然后点击下一步
    12. 选择以 Base-64 编码的 X.509 (.cer),然后点击下一步
    13. 选择证书保存位置,然后点击下一步
  4. 对于这两个邮箱服务器虚拟机实例中的每个实例,请执行以下步骤:

    1. 将两个边缘传输服务器的 Exchange AD LDS 服务器证书复制到临时位置。
    2. 将两个边缘传输服务器的订阅文件复制到临时位置。
    3. 右键点击开始 > Exchange 命令行管理程序并选择更多 > 以管理员身份运行,打开提升的 Exchange 命令行管理程序。
    4. 导入 transport-1-a 的 Exchange AD LDS 服务器证书:

      Import-Certificate -FilePath "PATH" -CertStoreLocation cert:\LocalMachine\Root
      

      PATH 替换为 transport-1-a 的 Exchange AD LDS 服务器证书的路径。

    5. 导入 transport-1-b 的 Exchange AD LDS 服务器证书:

      Import-Certificate -FilePath "PATH" -CertStoreLocation cert:\LocalMachine\Root
      

      PATH 替换为 transport-1-b 的 Exchange AD LDS 服务器证书的路径。

    6. 导入边缘订阅文件(这些文件属于 transport-1-atransport-1-b)。

    7. 在邮箱服务器上手动启动 EdgeSync 流程,然后验证同步是否成功

设置入站邮件流的负载平衡

如需启用通往边缘传输服务器的入站电子邮件流,您现在需要创建网络负载平衡器资源:

  1. 返回到现有的 Cloud Shell 会话。
  2. 创建目标池:

    gcloud compute target-pools create transport-pool --region $SUBNET_REGION
    
  3. 将边缘传输服务器虚拟机实例添加到目标池:

    gcloud compute target-pools add-instances transport-pool \
      --instances-zone $SUBNET_ZONE_1 \
      --instances transport-1-a
    
    gcloud compute target-pools add-instances transport-pool \
      --instances-zone $SUBNET_ZONE_2 \
      --instances transport-1-b
    
  4. 为负载平衡器预留外部 IP 地址:

    gcloud compute addresses create transport-frontend --region=$SUBNET_REGION
    
  5. 创建转发规则:

    gcloud compute forwarding-rules create www-rule \
      --region $SUBNET_REGION \
      --ports 25 \
      --address transport-frontend \
      --target-pool transport-pool
    
  6. 查找负载平衡器的 IP 地址:

    gcloud compute addresses describe transport-frontend  \
      --region=$SUBNET_REGION \
      --format=value\(address\)
    

    传输服务器现在可以通过此 IP 地址的端口 25 接收电子邮件,并将传入的电子邮件传递到邮箱服务器。

  7. 按照使用 Telnet 测试 Exchange 服务器上的 SMTP 通信中的说明,验证电子邮件递送功能是否正常工作。

  8. 如需完成边缘传输服务器的设置,请按照在 Exchange 服务器上配置邮件流和客户端访问权限中的步骤操作。

使用 SendGrid 设置出站电子邮件流

由于 Google Cloud 不允许端口 25 上的出站连接,因此您现在可以设置自定义发送连接器来处理出站电子邮件。

  1. 使用 Google Cloud Marketplace 注册 SendGrid 电子邮件服务。
  2. 在 SendGrid 网站上,创建新的 API 密钥。
  3. 将虚拟机实例 transport-1-atransport-1-b 的公共 IP 地址添加到允许的 IP 地址列表。

创建发送连接器

现在,您创建一个使用 SendGrid 作为智能主机的出站发送连接器

  1. 返回到 Exchange 管理中心 (EAC)。
  2. 在 EAC 菜单中,选择邮件流 > 发送连接器
  3. 点击 +
  4. 新发送连接器对话框中,输入以下设置:
    • 名称SendGrid
    • 类型互联网(例如发送互联网邮件)
  5. 点击下一步
  6. 网络设置下,选择通过智能主机路由邮件,然后点击 +
  7. 添加智能主机页面上,输入 smtp.sendgrid.net
  8. 点击保存
  9. 点击下一步
  10. 智能主机身份验证下,选择基本身份验证
  11. 请输入以下信息:
    • 用户名apikey
    • 密码:粘贴在 SendGrid 网站上创建的 API 密钥
  12. 点击下一步
  13. 地址空间下,点击 +
  14. 请输入以下信息:
    • 类型:SMTP
    • 完全限定域名 (FQDN):*
    • 费用1
  15. 点击下一步
  16. 源服务器下,点击 +
  17. 选择 transport-1-atransport-1-b,然后点击确定
  18. 点击完成

更改 SMTP 端口

现在,您将发送连接器配置为使用自定义端口:

  1. 在其中一个邮箱服务器上,通过右键点击开始 > Exchange Management Shell 打开 Exchange 管理 Shell。
  2. 将发送连接器修改为使用端口 2525

    Set-SendConnector -Identity "SendGrid" -port 2525
    
  3. 触发边缘同步以确保配置更改已传播到所有边缘传输服务器:

    Start-EdgeSynchronization -ForceFullSync
    

清除数据

学完本教程后,请删除您创建的实体,避免日后再为这些资源付费。

删除 Google Cloud 项目

  1. 在 Google Cloud 控制台中,进入管理资源页面。

    转到“管理资源”

  2. 在项目列表中,选择要删除的项目,然后点击删除
  3. 在对话框中输入项目 ID,然后点击关闭以删除项目。

后续步骤