# Развертывание Microsoft Exchange



{% note warning %}

Часть ресурсов, необходимых для прохождения практического руководства, доступны только в [регионе Россия](../../overview/concepts/region.md).

{% endnote %}


В сценарии описывается развертывание серверов Microsoft Exchange в Yandex Cloud. Инсталляция Microsoft Exchange будет состоять из двух почтовых серверов, двух серверов Active Directory и двух серверов Edge Transport в зонах доступности `kz1-a` и `kz1-b`. Нагрузка будет распределяться по серверам с помощью сетевого балансировщика нагрузки. Управление всеми серверами будет осуществляться через отдельную ВМ с доступом в интернет в зоне доступности `kz1-d`.

1. [Подготовьте облако к работе](#before-you-begin).
1. [Создайте облачную сеть и подсети](#create-network).
1. [Создайте скрипт для управления локальной учетной записью администратора](#admin-script).
1. [Создайте ВМ для Active Directory](#ad-vm).
1. [Создайте ВМ для File Share Witness](#ad-fsw-vm).
1. [Установите и настройте Active Directory](#install-ad).
1. [Настройте второй контроллер домена](#install-ad-2).
1. [Установите Microsoft Exchange](#install-exchange).
1. [Создайте сервера Microsoft Exchange](#create-ms-exchange-servers).
1. [Создайте Database Availability Group](#create-dag).
1. [Настройте Client Access](#configure-access).
1. [Настройте сетевой балансировщик нагрузки](#set-up-load-balancer).
1. [Настройте Accepted Domains и Email Address Policy](#set-up-accepted-domains).
1. [Создайте и настройте ВМ для серверов Edge Transport](#create-edge-vm)
1. [Настройте серверы Edge Transport](#set-up-edge-transport).
1. [Добавьте серверы Edge Transport в Exchange](#add-edges-to-exchange).

Если созданные ресурсы вам больше не нужны, [удалите их](#clear-out).

## Подготовьте облако к работе {#before-you-begin}

Зарегистрируйтесь в Yandex Cloud и создайте [платежный аккаунт](../../billing/concepts/billing-account.md):
1. Перейдите в [консоль управления](https://kz.console.yandex.cloud), затем войдите в Yandex Cloud или зарегистрируйтесь.
1. На странице **[Yandex Cloud Billing](https://kz.console.yandex.cloud/billing)** убедитесь, что у вас подключен платежный аккаунт, и он находится в [статусе](../../billing/concepts/billing-account-statuses.md) `ACTIVE` или `TRIAL_ACTIVE`. Если платежного аккаунта нет, [создайте его](../../billing/quickstart/index.md) и [привяжите](../../billing/operations/pin-cloud.md) к нему облако.

Если у вас есть активный платежный аккаунт, вы можете создать или выбрать [каталог](../../resource-manager/concepts/resources-hierarchy.md#folder), в котором будет работать ваша инфраструктура, на [странице облака](https://kz.console.yandex.cloud/cloud).

[Подробнее об облаках и каталогах](../../resource-manager/concepts/resources-hierarchy.md).

{% note info %}

Проверьте, что в платежном аккаунте указаны пользовательские данные, [необходимые для выполнения требований лицензионной политики Microsoft](../check-user-data.md). Без этих данных вы не сможете запустить продукт.

{% endnote %}

### Необходимые платные ресурсы {#paid-resources}

В стоимость инсталляции Microsoft Exchange входят:

* плата за постоянно запущенные виртуальные машины ([тарифы Yandex Compute Cloud](../../compute/pricing.md));
* плата за балансировку трафика ([тарифы Yandex Network Load Balancer](../../network-load-balancer/pricing.md));
* плата за использование динамических или статических публичных IP-адресов ([тарифы Yandex Virtual Private Cloud](../../vpc/pricing.md));
* стоимость исходящего трафика из Yandex Cloud в интернет ([тарифы Yandex Compute Cloud](../../compute/pricing.md)).

## Создайте облачную сеть и подсети {#create-network}

Создайте облачную сеть `exchange-network` с подсетями во всех зонах доступности, где будут находиться виртуальные машины.

1. Создайте облачную сеть:

   {% list tabs group=instructions %}

   - Консоль управления {#console}

     Чтобы создать [облачную сеть](../../vpc/concepts/network.md):

     1. В [консоли управления](https://kz.console.yandex.cloud) выберите каталог, в котором будет создана облачная сеть.
     1. Перейдите в сервис **Virtual Private Cloud**.
     1. Нажмите кнопку **Создать сеть**
     1. Задайте имя сети: `exchange-network`.
     1. Нажмите кнопку **Создать сеть**.

   - CLI {#cli}

     Чтобы создать облачную сеть, выполните команду:

     ```
     yc vpc network create --name exchange-network
     ```

   {% endlist %}

1. Создайте три подсети в сети `exchange-network`:

   {% list tabs group=instructions %}

   - Консоль управления {#console}

      Чтобы создать подсеть:

      1. Откройте раздел **Virtual Private Cloud** в каталоге, где требуется создать подсеть.
      1. Нажмите на имя облачной сети.
      1. Нажмите кнопку **Добавить подсеть**.
      1. Заполните форму: введите имя подсети `exchange-subnet-a`, выберите зону доступности `kz1-a` из выпадающего списка.
      1. Введите CIDR подсети: IP-адрес и маску подсети: `10.1.0.0/16`. Подробнее про диапазоны IP-адресов в подсетях читайте в разделе [Облачные сети и подсети](../../vpc/concepts/network.md).
      1. Нажмите кнопку **Создать подсеть**.

      Повторите шаги еще для двух подсетей `exchange-subnet-b` и `exchange-subnet-d` в зонах доступности `kz1-b` и `kz1-d` с CIDR `10.2.0.0/16` и `10.3.0.0/16` соответственно.

   - CLI {#cli}

      Чтобы создать подсети, выполните команды:

      ```
      yc vpc subnet create \
        --name exchange-subnet-a \
        --zone kz1-a \
        --network-name exchange-network \
        --range 10.1.0.0/16

      yc vpc subnet create \
        --name exchange-subnet-b \
        --zone kz1-b \
        --network-name exchange-network \
        --range 10.2.0.0/16

      yc vpc subnet create \
        --name exchange-subnet-d \
        --zone kz1-d \
        --network-name exchange-network \
        --range 10.3.0.0/16
      ```

   {% endlist %}


## Создайте скрипт для управления локальной учетной записью администратора {#admin-script}

Создайте файл `setpass`, содержащий скрипт, который будет устанавливать пароль для локальной учетной записи администратора при создании виртуальных машин через CLI:

```
#ps1
Get-LocalUser | Where-Object SID -like *-500 | Set-LocalUser -Password (ConvertTo-SecureString "<ваш пароль>" -AsPlainText -Force)
```

Пароль должен соответствовать [требованиям к сложности](https://docs.microsoft.com/ru-ru/windows/security/threat-protection/security-policy-settings/password-must-meet-complexity-requirements#reference).

Подробные рекомендации по защите Active Directory читайте на [сайте разработчика](https://docs.microsoft.com/ru-ru/windows-server/identity/ad-ds/plan/security-best-practices/best-practices-for-securing-active-directory).

## Создайте ВМ для Active Directory {#ad-vm}

Создайте две виртуальных машины для Active Directory. Эти машины не будут иметь доступа в интернет.

{% list tabs group=instructions %}

- Консоль управления {#console}

  1. На странице каталога в [консоли управления](https://kz.console.yandex.cloud) нажмите кнопку **Создать ресурс** и выберите `Виртуальная машина`.
  1. В блоке **Образ загрузочного диска**:

      * Перейдите на вкладку **Пользовательский**.
      * Нажмите кнопку **Выбрать** и в открывшемся окне выберите **Создать**.
      * В поле **Наполнение** выберите `Образ` и в списке ниже выберите образ **Windows Server 2016 Datacenter**. Как загрузить свой образ для продуктов Microsoft смотрите в разделе [Импортировать нужный образ](../byol.md#how-to-import).
      * (Опционально) В поле **Дополнительно** включите опцию **Удалять вместе с виртуальной машиной**, если вы хотите автоматически удалять этот диск при удалении ВМ.
      * Нажмите кнопку **Добавить диск**.

  1. В блоке **Расположение** выберите [зону доступности](../../overview/concepts/geo-scope.md) `kz1-a`.
  1. В блоке **Диски и файловые хранилища** задайте размер загрузочного [диска](../../compute/concepts/disk.md) `50 ГБ`.
  1. В блоке **Вычислительные ресурсы** перейдите на вкладку `Своя конфигурация` и укажите необходимую [платформу](../../compute/concepts/vm-platforms.md), количество vCPU и объем RAM:

      * **Платформа** — `Intel Ice Lake`.
      * **vCPU** — `4`.
      * **Гарантированная доля vCPU** — `100%`.
      * **RAM** — `8 ГБ`.

  1. В блоке **Сетевые настройки** укажите:

      * **Подсеть** — `exchange-subnet-a`.
      * **Публичный IP-адрес** — `Без адреса`.

  1. В блоке **Общая информация** задайте имя ВМ: `ad-vm-a`.
  1. Нажмите кнопку **Создать ВМ**.

  Дождитесь, когда статус ВМ сменится на `Running`, и сбросьте пароль:
  
  1. Выберите виртуальную машину.
  1. Нажмите кнопку **Сбросить пароль**.
  1. Укажите **Имя пользователя**, для которого нужно сбросить пароль. Если у ВМ не существует пользователя с таким именем, он будет создан с правами администратора.
  1. Нажмите кнопку **Сгенерировать пароль**.
  1. Сохраните **Новый пароль**. После закрытия окна он будет недоступен.

  Повторите шаги для ВМ с именем `ad-vm-b` в зоне доступности `kz1-b` и подключите ее к подсети `exchange-subnet-b`.

- CLI {#cli}

  ```
  yc compute instance create \
    --name ad-vm-a \
    --hostname ad-vm-a \
    --memory 8 \
    --cores 4 \
    --zone kz1-a \
    --network-interface subnet-name=exchange-subnet-a,ipv4-address=10.1.0.3 \
    --create-boot-disk image-folder-id=standard-images,image-family=windows-2016-gvlk \
    --metadata-from-file user-data=setpass

  yc compute instance create \
    --name ad-vm-b \
    --hostname ad-vm-b \
    --memory 8 \
    --cores 4 \
    --zone kz1-b \
    --network-interface subnet-name=exchange-subnet-b,ipv4-address=10.2.0.3 \
    --create-boot-disk image-folder-id=standard-images,image-family=windows-2016-gvlk \
    --metadata-from-file user-data=setpass
  ```

  {% note info %}
  
  Команды [`yc compute instance create`](../../cli/cli-ref/compute/cli-ref/instance/create.md) | [`create-with-container`](../../cli/cli-ref/compute/cli-ref/instance/create-with-container.md) | [`update`](../../cli/cli-ref/compute/cli-ref/instance/update.md) | [`add-metadata`](../../cli/cli-ref/compute/cli-ref/instance/add-metadata.md) поддерживают подстановку в метаданные ВМ значений переменных окружения. Эти значения, заданные в ключе `user-data` в формате `$<имя_переменной>`, в момент выполнения команды Yandex Cloud CLI будут подставлены в метаданные ВМ из переменных окружения среды, в которой выполняется команда. 
  
  Чтобы изменить такое поведение, не подставлять значение переменной из среды выполнения команды CLI и передать в метаданные ВМ имя переменной в формате `$<имя_переменной>`, используйте синтаксис с двумя символами доллара. Например: `$$<имя_переменной>`.
  
  Подробнее в разделе [Особенности передачи переменных окружения в метаданных через CLI](../../compute/concepts/metadata/sending-metadata.md#environment-variables).
  
  {% endnote %}

{% endlist %}

## Создайте ВМ для File Share Witness {#ad-fsw-vm}

Для настройки машин с Active Directory будет использоваться файловый сервер с выходом в интернет.

{% list tabs group=instructions %}

- Консоль управления {#console}

  1. На странице каталога в [консоли управления](https://kz.console.yandex.cloud) нажмите кнопку **Создать ресурс** и выберите `Виртуальная машина`.
  1. В блоке **Образ загрузочного диска**:

      * Перейдите на вкладку **Пользовательский**.
      * Нажмите кнопку **Выбрать** и в открывшемся окне выберите **Создать**.
      * В поле **Наполнение** выберите `Образ` и в списке ниже выберите образ **Windows Server 2016 Datacenter**. Как загрузить свой образ для продуктов Microsoft смотрите в разделе [Импортировать нужный образ](../byol.md#how-to-import).
      * (Опционально) В поле **Дополнительно** включите опцию **Удалять вместе с виртуальной машиной**, если вы хотите автоматически удалять этот диск при удалении ВМ.
      * Нажмите кнопку **Добавить диск**.

  1. В блоке **Расположение** выберите [зону доступности](../../overview/concepts/geo-scope.md) `kz1-d`.
  1. В блоке **Диски и файловые хранилища** задайте размер загрузочного диска `50 ГБ`.
  1. В блоке **Вычислительные ресурсы** перейдите на вкладку `Своя конфигурация` и укажите необходимую [платформу](../../compute/concepts/vm-platforms.md), количество vCPU и объем RAM:

      * **Платформа** — `Intel Ice Lake`.
      * **vCPU** — `2`.
      * **Гарантированная доля vCPU** — `100%`.
      * **RAM** — `4 ГБ`.

  1. В блоке **Сетевые настройки**:
  
      * В поле **Подсеть** выберите подсеть `exchange-subnet-d`.
      * В поле **Публичный IP-адрес** оставьте значение `Автоматически`.

  1. В блоке **Общая информация** задайте имя ВМ: `fsw-vm`.

  1. Нажмите кнопку **Создать ВМ**.

  Дождитесь, когда статус ВМ сменится на `Running`, и сбросьте пароль:
  
  1. Выберите виртуальную машину.
  1. Нажмите кнопку **Сбросить пароль**.
  1. Укажите **Имя пользователя**, для которого нужно сбросить пароль. Если у ВМ не существует пользователя с таким именем, он будет создан с правами администратора.
  1. Нажмите кнопку **Сгенерировать пароль**.
  1. Сохраните **Новый пароль**. После закрытия окна он будет недоступен.

- CLI {#cli}

  ```
  yc compute instance create \
    --name fsw-vm \
    --hostname fsw-vm \
    --memory 4 \
    --cores 2 \
    --zone kz1-d \
    --network-interface subnet-name=exchange-subnet-d,nat-ip-version=ipv4 \
    --create-boot-disk image-folder-id=standard-images,image-family=windows-2016-gvlk \
    --metadata-from-file user-data=setpass
  ```

{% endlist %}

## Установите и настройте Active Directory {#install-ad}

У машин с Active Directory нет доступа в интернет, поэтому их следует настраивать через ВМ `fsw-vm` с помощью RDP.

1. Подключитесь к ВМ `fsw-vm` [с помощью RDP](../../compute/operations/vm-connect/rdp.md). Используйте логин `Administrator` и ваш пароль.
1. На ВМ `fsw-vm` запустите RDP и подключитесь к виртуальной машине `ad-vm-a`. Используйте логин `Administrator` и ваш пароль.
1. На ВМ `ad-vm-a` запустите PowerShell и задайте статический адрес:

   ```powershell
   netsh interface ip set address "eth0" static 10.1.0.3 255.255.255.0 10.1.0.1
   ```

1. Создайте временную папку:

   ```powershell
   mkdir C:\Windows\temp
   ```

1. Установите роли Active Directory:

   ```powershell
   Install-WindowsFeature AD-Domain-Services -IncludeManagementTools
   ```

   Результат:

   ```powershell
   Success Restart Needed Exit Code      Feature Result
   ------- -------------- ---------      --------------
   True    No             Success        {Active Directory Domain Services, Group P...
   ```

1. Создайте лес Active Directory:

   ```powershell
   Install-ADDSForest -DomainName 'yantoso.net' -Force:$true
   ```

   Windows перезапустится автоматически. После перезагрузки подключитесь к ВМ `ad-vm-a`, используя учетную запись `yantoso\Administrator` и ваш пароль. Снова откройте PowerShell.

1. Переименуйте сайт по умолчанию в `kz1-a`:

   ```powershell
   Get-ADReplicationSite 'Default-First-Site-Name' | Rename-ADObject -NewName 'kz1-a'
   ```

1. Создайте еще два сайта для других зон доступности:

   ```powershell
   New-ADReplicationSite 'kz1-b'
   New-ADReplicationSite 'kz1-d'
   ```

1. Создайте подсети и привяжите их к сайтам:

   ```powershell
   New-ADReplicationSubnet -Name '10.1.0.0/16' -Site 'kz1-a'
   New-ADReplicationSubnet -Name '10.2.0.0/16' -Site 'kz1-b'
   New-ADReplicationSubnet -Name '10.3.0.0/16' -Site 'kz1-d'
   ```

1. Переименуйте сайт-линк и настройте репликацию:

   ```powershell
   Get-ADReplicationSiteLink 'DEFAULTIPSITELINK' | `
       Set-ADReplicationSiteLink -SitesIncluded @{Add='kz1-b'} -ReplicationFrequencyInMinutes 15 -PassThru | `
       Set-ADObject -Replace @{options = $($_.options -bor 1)} -PassThru | `
       Rename-ADObject -NewName 'kz1'
   ```

1. Укажите сервер переадресации DNS:

   ```powershell
   Set-DnsServerForwarder '10.1.0.2'
   ```

1. Настройте DNS-клиент:

   ```powershell
   Get-NetAdapter | Set-DnsClientServerAddress -ServerAddresses "10.2.0.3,127.0.0.1"
   ```

## Настройте второй контроллер домена {#install-ad-2}

1. Подключитесь к ВМ `fsw-vm` [с помощью RDP](../../compute/operations/vm-connect/rdp.md). Используйте логин `Administrator` и ваш пароль.
1. На ВМ `fsw-vm` запустите RDP и подключитесь к виртуальной машине `ad-vm-b`. Используйте логин `Administrator` и ваш пароль.
1. Создайте временную папку:

   ```
   mkdir C:\Windows\temp
   ```

1. Установите роли Active Directory:

   ```powershell
   Install-WindowsFeature AD-Domain-Services -IncludeManagementTools
   ```

   Результат:

   ```powershell
   Success Restart Needed Exit Code      Feature Result
   ------- -------------- ---------      --------------
   True    No             Success        {Active Directory Domain Services, Group P...
   ```

1. Настройте DNS-клиент:

   ```powershell
   Get-NetAdapter | Set-DnsClientServerAddress -ServerAddresses "10.1.0.3,127.0.0.1"
   ```

1. Настройте статический IP-адрес:

   ```powershell
   netsh interface ip set address "eth0" static 10.2.0.3 255.255.255.0 10.2.0.1
   ```

1. Добавьте контроллер в домен:

   ```powershell
   Install-ADDSDomainController `
       -Credential (Get-Credential "yantoso\Administrator") `
       -DomainName 'yantoso.net' `
       -Force:$true
   ```

   Windows перезапустится автоматически. После перезагрузки подключитесь к ВМ `ad-vm-b`, используя учетную запись `yantoso\Administrator` и ваш пароль. Снова откройте PowerShell.

1. Укажите сервер переадресации DNS:

   ```powershell
   Set-DnsServerForwarder '10.2.0.2'
   ```

## Установите Microsoft Exchange {#install-exchange}

1. Подключитесь с помощью RDP к ВМ `fsw-vm` и запустите PowerShell.
1. Настройте DNS-клиент:

   ```powershell
   Get-NetAdapter | Set-DnsClientServerAddress -ServerAddresses "10.1.0.3,10.2.0.3"
   ```

1. Добавьте сервер в домен:

   ```powershell
   $Credentials = Get-Credential # yantoso\Administrator
   Add-Computer -DomainName yantoso.net -DomainCredential $Credentials -Force -Restart
   ```

   Windows перезапустится автоматически. После перезагрузки подключитесь к ВМ `fsw-vm`, используя учетную запись `yantoso\Administrator` и ваш пароль. Снова откройте PowerShell.

1. Создайте папку `distrib`:

   ```powershell
   mkdir c:\distrib
   ```

1. Загрузите [дистрибутив Exchange Server](https://www.microsoft.com/ru-ru/download/confirmation.aspx?id=58395) и необходимые зависимости:
   1. [.NET Framework 4.7.2](https://go.microsoft.com/fwlink/p/?linkid=863265).
   1. [Visual C++ Redistributable Package for Visual Studio 2012](https://go.microsoft.com/fwlink/?linkid=327788). Переименуйте скачанный файл в `vcredist_x64_2012.exe`.
   1. [Visual C++ Redistributable Package for Visual Studio 2013](https://go.microsoft.com/fwlink/?linkid=2002913). Переименуйте скачанный файл в `vcredist_x64_2013.exe`.
   1. [Microsoft Unified Communications Managed API 4.0, Core Runtime 64-bit](https://go.microsoft.com/fwlink/p/?linkId=258269).

   Поместите дистрибутивы в директорию `C:\distrib`.

1. Предоставьте общий доступ из домена к папке с дистрибутивами:

   ```powershell
   New-SmbShare -ReadAccess 'yantoso\domain users' -Path 'c:\distrib' -Name 'distrib'
   ```

## Создайте сервера Microsoft Exchange {#create-ms-exchange-servers}

### Создайте первый сервер Exchange {#create-exchange-vm-a}

1. Создайте ВМ `vm-exchange-a`:

   {% list tabs group=instructions %}

   - Консоль управления {#console}

     1. На странице каталога в [консоли управления](https://kz.console.yandex.cloud) нажмите кнопку **Создать ресурс** и выберите `Виртуальная машина`.
     1. В блоке **Образ загрузочного диска**:

         * Перейдите на вкладку **Пользовательский**.
         * Нажмите кнопку **Выбрать** и в открывшемся окне выберите **Создать**.
         * В поле **Наполнение** выберите `Образ` и в списке ниже выберите образ **Windows Server 2016 Datacenter**. Как загрузить свой образ для продуктов Microsoft смотрите в разделе [Импортировать нужный образ](../byol.md#how-to-import).
         * (Опционально) В поле **Дополнительно** включите опцию **Удалять вместе с виртуальной машиной**, если вы хотите автоматически удалять этот диск при удалении ВМ.
         * Нажмите кнопку **Добавить диск**.

     1. В блоке **Расположение** выберите [зону доступности](../../overview/concepts/geo-scope.md) `kz1-a`.
     1. В блоке **Диски и файловые хранилища**:

         * Задайте размер загрузочного [диска](../../compute/concepts/disk.md) `100 ГБ`.
         * Нажмите кнопку **Добавить** и добавьте еще один SSD-диск размером `250 ГБ` с именем `db-a`.

     1. В блоке **Вычислительные ресурсы** перейдите на вкладку `Своя конфигурация` и укажите необходимую [платформу](../../compute/concepts/vm-platforms.md), количество vCPU и объем RAM:

         * **Платформа** — `Intel Ice Lake`.
         * **vCPU** — `8`.
         * **Гарантированная доля vCPU** — `100%`.
         * **RAM** — `32 ГБ`.

     1. В блоке **Сетевые настройки** укажите:

         * **Подсеть** — `exchange-subnet-a`.
         * **Публичный IP-адрес** — `Без адреса`.

     1. В блоке **Общая информация** задайте имя ВМ: `vm-exchange-a`.
     1. Нажмите кнопку **Создать ВМ**.

     Дождитесь, когда статус ВМ сменится на `Running`, и сбросьте пароль:
     
     1. Выберите виртуальную машину.
     1. Нажмите кнопку **Сбросить пароль**.
     1. Укажите **Имя пользователя**, для которого нужно сбросить пароль. Если у ВМ не существует пользователя с таким именем, он будет создан с правами администратора.
     1. Нажмите кнопку **Сгенерировать пароль**.
     1. Сохраните **Новый пароль**. После закрытия окна он будет недоступен.

   - CLI {#cli}

     ```
     yc compute instance create \
       --name vm-exchange-a \
       --hostname vm-exchange-a \
       --memory 32 \
       --cores 8 \
       --zone kz1-a \
       --network-interface subnet-name=exchange-subnet-a \
       --create-boot-disk size=100,image-folder-id=standard-images,image-family=windows-2016-gvlk \
       --create-disk type=network-ssd,size=250,auto-delete=false \
       --metadata-from-file user-data=setpass
     ```

   {% endlist %}

1. Подключитесь к ВМ `fsw-vm` с помощью RDP.
1. На ВМ `fsw-vm` запустите RDP и подключитесь к ВМ `vm-exchange-a`. Используйте логин `Administrator` и ваш пароль. Запустите PowerShell.
1. Настройте DNS-клиент:

   ```powershell
   Get-NetAdapter | Set-DnsClientServerAddress -ServerAddresses "10.1.0.3"
   ```

1. Добавьте ВМ `vm-exchange-a` в домен:

   ```powershell
   $Credentials = Get-Credential # yantoso\Administrator
   Add-Computer -DomainName yantoso.net -DomainCredential $Credentials -Force -Restart
   ```

   После перезагрузки зайдите на ВМ, используя учетную запись `yantoso\Administrator` и ваш пароль. Снова откройте PowerShell.

1. Установите загруженные зависимости по порядку:
   1. `& \\fsw-vm\distrib\vcredist_x64_2012.exe /install /passive /norestart`
   1. `& \\fsw-vm\distrib\vcredist_x64_2013.exe /install /passive /norestart`
   1. `& \\fsw-vm\distrib\UcmaRuntimeSetup.exe /install /passive /norestart`
   1. `& \\fsw-vm\distrib\NDP472-KB4054530-x86-x64-AllOS-ENU.exe /install /passive /norestart`
1. Перезапустите VM: `Restart-Computer -Force`.

   После перезагрузки зайдите на ВМ, используя учетную запись `yantoso\Administrator` и ваш пароль. Снова откройте PowerShell.

1. Установите Exchange Mailbox Server на `vm-exchange-a`. Смонтируйте образ дистрибутива из общей папки с дистрибутивами:

   ```powershell
   Mount-DiskImage \\fsw-vm\distrib\ExchangeServer2016-x64-cu13.iso
   ```

1. Запустите установку Exchange Mailbox Server:

   ```powershell
   & D:\Setup.exe /Mode:Install /InstallWindowsComponents /Role:Mailbox /IAcceptExchangeServerLicenseTerms /OrganizationName:MyOrg
   Restart-Computer -Force
   ```

   После установки ВМ перезапустится автоматически.

### Создайте второй сервер Exchange {#create-exchange-vm-b}

1. Создайте ВМ `vm-exchange-b`:

   {% list tabs group=instructions %}

   - Консоль управления {#console}

     1. На странице каталога в [консоли управления](https://kz.console.yandex.cloud) нажмите кнопку **Создать ресурс** и выберите `Виртуальная машина`.
     1. В блоке **Образ загрузочного диска**:

         * Перейдите на вкладку **Пользовательский**.
         * Нажмите кнопку **Выбрать** и в открывшемся окне выберите **Создать**.
         * В поле **Наполнение** выберите `Образ` и в списке ниже выберите образ **Windows Server 2016 Datacenter**. Как загрузить свой образ для продуктов Microsoft смотрите в разделе [Импортировать нужный образ](../byol.md#how-to-import).
         * (Опционально) В поле **Дополнительно** включите опцию **Удалять вместе с виртуальной машиной**, если вы хотите автоматически удалять этот диск при удалении ВМ.
         * Нажмите кнопку **Добавить диск**.
     1. В блоке **Расположение** выберите [зону доступности](../../overview/concepts/geo-scope.md) `kz1-b`.
     1. В блоке **Диски и файловые хранилища**:

         * Задайте размер загрузочного [диска](../../compute/concepts/disk.md) `100 ГБ`.
         * Нажмите кнопку **Добавить** и добавьте еще один SSD-диск размером `250 ГБ` с именем `db-b`.

     1. В блоке **Вычислительные ресурсы** перейдите на вкладку `Своя конфигурация` и укажите необходимую [платформу](../../compute/concepts/vm-platforms.md), количество vCPU и объем RAM:

         * **Платформа** — `Intel Ice Lake`.
         * **vCPU** — `8`.
         * **Гарантированная доля vCPU** — `100%`.
         * **RAM** — `32 ГБ`.

     1. В блоке **Сетевые настройки** укажите:

         * **Подсеть** — `exchange-subnet-b`.
         * **Публичный IP-адрес** — `Без адреса`.

     1. В блоке **Общая информация** задайте имя ВМ: `vm-exchange-b`.
     1. Нажмите кнопку **Создать ВМ**.

     Дождитесь, когда статус ВМ сменится на `Running`, и сбросьте пароль:
     
     1. Выберите виртуальную машину.
     1. Нажмите кнопку **Сбросить пароль**.
     1. Укажите **Имя пользователя**, для которого нужно сбросить пароль. Если у ВМ не существует пользователя с таким именем, он будет создан с правами администратора.
     1. Нажмите кнопку **Сгенерировать пароль**.
     1. Сохраните **Новый пароль**. После закрытия окна он будет недоступен.

   - CLI {#cli}

     ```
     yc compute instance create \
       --name vm-exchange-b \
       --hostname vm-exchange-b \
       --memory 32 \
       --cores 8 \
       --zone kz1-b \
       --network-interface subnet-name=exchange-subnet-b \
       --create-boot-disk size=100,image-folder-id=standard-images,image-family=windows-2016-gvlk \
       --create-disk type=network-ssd,size=250,auto-delete=false \
       --metadata-from-file user-data=setpass
     ```

   {% endlist %}

1. Подключитесь к ВМ `fsw-vm` с помощью RDP.
1. На ВМ `fsw-vm` запустите RDP и подключитесь к ВМ `vm-exchange-b`. Используйте логин `Administrator` и ваш пароль. Запустите PowerShell.
1. Настройте DNS-клиент:

   ```powershell
   Get-NetAdapter | Set-DnsClientServerAddress -ServerAddresses "10.1.0.3"
   ```

1. Добавьте ВМ `vm-exchange-a` в домен:

   ```powershell
   $Credentials = Get-Credential # yantoso\Administrator
   Add-Computer -DomainName yantoso.net -DomainCredential $Credentials -Force -Restart
   ```

   После перезагрузки зайдите на ВМ, используя учетную запись `yantoso\Administrator` и ваш пароль. Снова откройте PowerShell.

1. Установите загруженные зависимости по порядку:
   1. `& \\fsw-vm\distrib\vcredist_x64_2012.exe /install /passive /norestart`
   1. `& \\fsw-vm\distrib\vcredist_x64_2013.exe /install /passive /norestart`
   1. `& \\fsw-vm\distrib\UcmaRuntimeSetup.exe /install /passive /norestart`
   1. `& \\fsw-vm\distrib\NDP472-KB4054530-x86-x64-AllOS-ENU.exe /install /passive /norestart`

1. Перезапустите VM: `Restart-Computer -Force`.

   После перезагрузки зайдите на ВМ, используя учетную запись `yantoso\Administrator` и ваш пароль. Снова откройте PowerShell.

1. Установите Exchange Mailbox Server на `vm-exchange-b`. Смонтируйте образ дистрибутива из общей папки с дистрибутивами:

   ```powershell
   Mount-DiskImage \\fsw-vm\distrib\ExchangeServer2016-x64-cu13.iso
   ```

1. Запустите установку Exchange Mailbox Server:

   ```powershell
   & D:\Setup.exe /Mode:Install /InstallWindowsComponents /Role:Mailbox /IAcceptExchangeServerLicenseTerms /OrganizationName:MyOrg
   Restart-Computer -Force
   ```

   После установки ВМ перезапустится автоматически.

## Создайте Database Availability Group {#create-dag}

Database Availability Group обеспечивает отказоусточивость почтовых серверов с помощью репликации баз данных и автоматического переключения баз при неполадках.

1. Подключитесь к ВМ `fsw-vm` с помощью RDP.
1. Дайте группе `yantoso\Exchange Trusted Subsystem` администраторские права на ВМ `fsw-vm`:

   ```powershell
   Add-LocalGroupMember -Group 'Administrators' -Member 'yantoso\Exchange Trusted Subsystem'
   ```

### Создайте диски для баз данных на виртуальных машинах {#create-db-disks}

1. На ВМ `fsw-vm` запустите RDP и подключитесь к ВМ `vm-exchange-a`. Используйте логин `yantoso\Administrator` и ваш пароль.
1. Создайте дополнительный диск и отформатируйте его:

   ```powershell
   Get-Disk | `
       Where-Object PartitionStyle -eq raw | `
       Initialize-Disk -PartitionStyle GPT -PassThru | `
       New-Partition -DriveLetter 'Z' -UseMaximumSize | `
       Format-Volume -FileSystem NTFS -NewFileSystemLabel "mdb" -Confirm:$false -AllocationUnitSize 65536
   ```

1. Установите роль `Failover-Clustering`:

   ```powershell
   Install-WindowsFeature -Name 'Failover-Clustering' -IncludeManagementTools
   ```

Повторите команды для виртуальной машины `vm-exchange-b`.

### Настройте Database Availability Group {#dag-configuration}

1. На ВМ `fsw-vm` запустите RDP и подключитесь к ВМ `vm-exchange-a` с помощью RDP. Используйте логин `yantoso\Administrator` и ваш пароль.
1. Запустите Exchange Management Shell.
1. Создайте Database Availability Group:

   ```powershell
   New-DatabaseAvailabilityGroup `
       -Name ycdag `
       -WitnessServer fsw-vm `
       -DatabaseAvailabilityGroupIpAddresses 255.255.255.255
   ```

1. Добавьте серверы `vm-exchange-a` и `vm-exchange-b` в DAG:

   ```powershell
   Add-DatabaseAvailabilityGroupServer -Identity ycdag -MailboxServer vm-exchange-a
   Add-DatabaseAvailabilityGroupServer -Identity ycdag -MailboxServer vm-exchange-b
   ```

1. Проверьте состояние серверов, оба сервера должны находиться в графе Operational Servers:

   ```powershell
   Get-DatabaseAvailabilityGroup -Status
   ```

   Результат:

   ```powershell
   Name             Member Servers                                      Operational Servers
   ----             --------------                                      -------------------
   ycdag            {VM-EXCHANGE-A, VM-EXCHANGE-B}                    {VM-EXCHANGE-A, VM-EXCHANGE-B}
   ```

1. Создайте базу данных почтовых серверов:

   ```powershell
   New-MailboxDatabase -Name yamdb -EdbFilePath 'Z:\MDB\yamdb\yamdb.edb' -LogFolderPath 'Z:\MDB\yamdb\log' -Server vm-exchange-a
   ```

1. Смонтируйте базу данных:

   ```powershell
   Mount-Database yamdb
   ```

1. Создайте копию базы данных на втором сервере:

   ```powershell
   Add-MailboxDatabaseCopy -Identity yamdb -MailboxServer vm-exchange-b -SeedingPostponed
   Update-MailboxDatabasecopy yamdb\vm-exchange-b –CatalogOnly
   ```

1. Проверьте состояния баз данных:

   ```powershell
   Get-MailboxDatabaseCopyStatus -Server vm-exchange-a
   Get-MailboxDatabaseCopyStatus -Server vm-exchange-b
   ```

## Настройте Client Access {#configure-access}

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

1. Задайте почтовый домен:

   ```powershell
   $MailDomain = "mail.yantoso.net"
   ```

1. ECP:

   ```powershell
   Get-EcpVirtualDirectory | Set-EcpVirtualDirectory -ExternalUrl "https://$MailDomain/ecp"
   ```

1. EWS:

   ```powershell
   Get-WebServicesVirtualDirectory | Set-WebServicesVirtualDirectory -ExternalUrl "https://$MailDomain/ews/exchange.asmx"
   ```

1. Active Sync:

   ```powershell
   Get-ActiveSyncVirtualDirectory | Set-ActiveSyncVirtualDirectory -ExternalUrl "https://$MailDomain/Microsoft-Server-ActiveSync"
   ```

1. OAB:

   ```powershell
   Get-OabVirtualDirectory | Set-OabVirtualDirectory -ExternalUrl "https://$MailDomain/OAB"
   ```

1. OWA:

   ```powershell
   Get-OwaVirtualDirectory | Set-OwaVirtualDirectory -ExternalUrl "https://$MailDomain/owa"
   ```

1. PowerShell:

   ```powershell
   Get-PowerShellVirtualDirectory | Set-PowerShellVirtualDirectory -ExternalUrl "https://$MailDomain/powershell"
   ```

1. MAPI:

   ```powershell
   Get-MapiVirtualDirectory | Set-MapiVirtualDirectory -ExternalUrl "https://$MailDomain/mapi"
   ```

## Настройте сетевой балансировщик нагрузки {#set-up-load-balancer}

Балансировщик будет распределять нагрузку по серверам Exchange в разных зонах доступности.

{% list tabs group=instructions %}

- Консоль управления {#console}

  Чтобы создать [сетевой балансировщик](../../network-load-balancer/concepts/index.md):

  1. В [консоли управления](https://kz.console.yandex.cloud) выберите [каталог](../../resource-manager/concepts/resources-hierarchy.md#folder), в котором хотите создать сервисный аккаунт.
  1. Перейдите в сервис **Network Load Balancer**.
  1. Нажмите кнопку **Создать сетевой балансировщик**.
  1. Задайте имя балансировщика: `exchange-lb`.
  1. В поле **Публичный адрес** выберите **Автоматически**.
  1. В блоке **Обработчики** нажмите кнопку **Добавить обработчик**.
  1. Введите имя обработчика: `yassl`
  1. Укажите порт и целевой порт обработчика: `443` и нажмите кнопку **Добавить**.
  1. В блоке **Целевые группы** нажмите кнопку **Добавить целевую группу**.
  1. В поле **Целевая группа** раскройте выпадающий список и выберите **Создать целевую группу**.
  1. Введите имя целевой группы: `exchange-tg`.
  1. Отметьте виртуальные машины `vm-exchange-a` и `vm-exchange-b` и нажмите кнопку **Создать**.
  1. Нажмите кнопку **Настроить**.
  1. Введите имя проверки состояния: `exchange-hc`.
  1. Выберите тип проверки **TCP**.
  1. Укажите порт `443`.
  1. Оставьте остальные параметры по умолчанию и нажмите кнопку **Применить**.
  1. Нажмите кнопку **Создать**.

- CLI {#cli}

  1. Создайте сетевой балансировщик:

     ```
     yc lb nlb create --name exchange-lb
     ```

  1. Создайте целевую группу:

     ```
     yc lb tg create --name exchange-tg
     ```

  1. Получите сведения о почтовых серверах:

     ```
     yc compute instance get vm-exchange-a
     yc compute instance get vm-exchange-b
     ```

     Скопируйте IP-адреса и идентификаторы подсетей ВМ.

  1. Добавьте серверы в целевую группу:

     ```
     yc lb tg update --name exchange-tg \
       --target address=<IP-адрес ВМ vm-exchange-a>,subnet-id=<идентификатор подсети ВМ vm-exchange-a> \
       --target address=<IP-адрес ВМ vm-exchange-b>,subnet-id=<идентификатор подсети ВМ vm-exchange-b>
     ```

  1. Добавьте обработчик к балансировщику:

     ```
     yc lb nlb add-listener --name exchange-lb --listener name=yassl,port=443,target-port=443,external-ip-version=ipv4
     ```

  1. Получите сведения о целевых группах:

     ```
     yc lb tg list
     ```

     Скопируйте идентификатор созданной целевой группы.

  1. Подключите целевую группу к балансировщику, используя идентификатор целевой группы:

     ```
     yc lb nlb attach-target-group \
       --name exchange-lb \
       --target-group target-group-id=<идентификатор целевой группы>,healthcheck-name=exchange-hc,healthcheck-tcp-port=443
     ```

{% endlist %}

## Настройте Accepted Domains и Email Address Policy {#set-up-accepted-domains}

Домен создается по умолчанию. Если требуется изменить домен, используйте команду:

```powershell
New-AcceptedDomain -Name yantoso.net -DomainName yantoso.net
```

Отредактируйте Email Address Policy:

```powershell
Get-EmailAddressPolicy | Set-EmailAddressPolicy -EnabledPrimarySMTPAddressTemplate '@yantoso.net'
```

Всем новым почтовым ящикам будет автоматически добавляться псевдоним с доменом `@yantoso.net`.

## Создайте ВМ для серверов Edge Transport {#create-edge-vm}

Серверы Edge Transport будут принимать основную пользовательскую нагрузку: принимать письма из интернета, отсеивать спам и перенаправлять сообщения на внутренние почтовые серверы Exchange.

### Создайте ВМ для сервера vm-edge-a {#create-edge-a}

Создайте ВМ `vm-edge-a`:

{% list tabs group=instructions %}

- Консоль управления {#console}

  1. На странице каталога в [консоли управления](https://kz.console.yandex.cloud) нажмите кнопку **Создать ресурс** и выберите `Виртуальная машина`.
  1. В блоке **Образ загрузочного диска**:

      * Перейдите на вкладку **Пользовательский**.
      * Нажмите кнопку **Выбрать** и в открывшемся окне выберите **Создать**.
      * В поле **Наполнение** выберите `Образ` и в списке ниже выберите образ **Windows Server 2016 Datacenter**. Как загрузить свой образ для продуктов Microsoft смотрите в разделе [Импортировать нужный образ](../byol.md#how-to-import).
      * (Опционально) В поле **Дополнительно** включите опцию **Удалять вместе с виртуальной машиной**, если вы хотите автоматически удалять этот диск при удалении ВМ.
      * Нажмите кнопку **Добавить диск**.
  1. В блоке **Расположение** выберите [зону доступности](../../overview/concepts/geo-scope.md) `kz1-a`.
  1. В блоке **Диски и файловые хранилища** задайте размер загрузочного [диска](../../compute/concepts/disk.md) `50 ГБ`.
  1. В блоке **Вычислительные ресурсы** перейдите на вкладку `Своя конфигурация` и укажите необходимую [платформу](../../compute/concepts/vm-platforms.md), количество vCPU и объем RAM:

      * **Платформа** — `Intel Ice Lake`.
      * **vCPU** — `4`.
      * **Гарантированная доля vCPU** — `100%`.
      * **RAM** — `8 ГБ`.
  1. В блоке **Сетевые настройки**:
  
      * В поле **Подсеть** выберите подсеть `exchange-subnet-a`.
      * В поле **Публичный IP-адрес** оставьте значение `Автоматически` или выберите `Список` и адрес из списка зарезервированных, если вы ранее зарезервировали публичный IP-адрес.
  1. В блоке **Общая информация** задайте имя ВМ: `vm-edge-a`.
  1. Нажмите кнопку **Создать ВМ**.

  Дождитесь, когда статус ВМ сменится на `Running`, и сбросьте пароль:
  
  1. Выберите виртуальную машину.
  1. Нажмите кнопку **Сбросить пароль**.
  1. Укажите **Имя пользователя**, для которого нужно сбросить пароль. Если у ВМ не существует пользователя с таким именем, он будет создан с правами администратора.
  1. Нажмите кнопку **Сгенерировать пароль**.
  1. Сохраните **Новый пароль**. После закрытия окна он будет недоступен.

- CLI {#cli}

  ```
  yc compute instance create \
    --name vm-edge-a \
    --hostname vm-edge-a \
    --memory 8 \
    --cores 4 \
    --zone kz1-a \
    --network-interface subnet-name=exchange-subnet-a,nat-ip-version=ipv4 \
    --create-boot-disk size=50,image-folder-id=standard-images,image-family=windows-2016-gvlk \
    --metadata-from-file user-data=setpass
  ```

 {% endlist %}

### Создайте ВМ для сервера vm-edge-b {#create-edge-b}

Создайте ВМ `vm-edge-b`:

{% list tabs group=instructions %}

- Консоль управления {#console}

  1. На странице каталога в [консоли управления](https://kz.console.yandex.cloud) нажмите кнопку **Создать ресурс** и выберите `Виртуальная машина`.
  1. В блоке **Образ загрузочного диска**:

      * Перейдите на вкладку **Пользовательский**.
      * Нажмите кнопку **Выбрать** и в открывшемся окне выберите **Создать**.
      * В поле **Наполнение** выберите `Образ` и в списке ниже выберите образ **Windows Server 2016 Datacenter**. Как загрузить свой образ для продуктов Microsoft смотрите в разделе [Импортировать нужный образ](../byol.md#how-to-import).
      * (Опционально) В поле **Дополнительно** включите опцию **Удалять вместе с виртуальной машиной**, если вы хотите автоматически удалять этот диск при удалении ВМ.
      * Нажмите кнопку **Добавить диск**.
  1. В блоке **Расположение** выберите [зону доступности](../../overview/concepts/geo-scope.md) `kz1-b`.
  1. В блоке **Диски и файловые хранилища** задайте размер загрузочного [диска](../../compute/concepts/disk.md) `50 ГБ`.
  1. В блоке **Вычислительные ресурсы** перейдите на вкладку `Своя конфигурация` и укажите необходимую [платформу](../../compute/concepts/vm-platforms.md), количество vCPU и объем RAM:

      * **Платформа** — `Intel Ice Lake`.
      * **vCPU** — `4`.
      * **Гарантированная доля vCPU** — `100%`.
      * **RAM** — `8 ГБ`.
  1. В блоке **Сетевые настройки**:
  
      * В поле **Подсеть** выберите подсеть `exchange-subnet-b`.
      * В поле **Публичный IP-адрес** оставьте значение `Автоматически` или выберите `Список` и адрес из списка зарезервированных, если вы ранее зарезервировали публичный IP-адрес.
  1. В блоке **Общая информация** задайте имя ВМ: `vm-edge-b`.
  1. Нажмите кнопку **Создать ВМ**.

  Дождитесь, когда статус ВМ сменится на `Running`, и сбросьте пароль:
  
  1. Выберите виртуальную машину.
  1. Нажмите кнопку **Сбросить пароль**.
  1. Укажите **Имя пользователя**, для которого нужно сбросить пароль. Если у ВМ не существует пользователя с таким именем, он будет создан с правами администратора.
  1. Нажмите кнопку **Сгенерировать пароль**.
  1. Сохраните **Новый пароль**. После закрытия окна он будет недоступен.

- CLI {#cli}

  ```
  yc compute instance create \
    --name vm-edge-b \
    --hostname vm-edge-b \
    --memory 8 \
    --cores 4 \
    --zone kz1-b \
    --network-interface subnet-name=exchange-subnet-b,nat-ip-version=ipv4 \
    --create-boot-disk size=50,image-folder-id=standard-images,image-family=windows-2016-gvlk \
    --metadata-from-file user-data=setpass
  ```

{% endlist %}

## Настройте серверы Edge Transport {#set-up-edge-transport}

### Настройте сервер Edge Transport в зоне kz1-a {#edge-a}

1. Подключитесь к ВМ `fsw-vm` с помощью RDP.
1. Подключитесь к ВМ `vm-edge-a` с помощью RDP. Используйте логин `Administrator` и ваш пароль. Запустите PowerShell.
1. Создайте временную папку:

   ```
   mkdir C:\Windows\temp
   ```

1. Установите роли ADLDS на сервер:

   ```powershell
   Install-WindowsFeature ADLDS
   ```

1. Настройте DNS-клиент:

   ```powershell
   Get-NetAdapter | `
       Set-DnsClientServerAddress -ServerAddresses "10.1.0.3,10.2.0.3"
   ```

1. Настройте удаленный доступ к папке с дистрибутивами, находящейся на сервере `fsw-vm`:

   ```powershell
   $Credential = Get-Credential # Username: yantoso\Administrator

   New-PSDrive -Name 'fsw-vm' -PSProvider:FileSystem -Root '\\fsw-vm.kz1.internal\distrib' -Credential $Credential
   ```

   Введите логин `yantoso\Administrator` и ваш пароль.

1. Установите зависимости:

   ```powershell
   & fsw-vm:\vcredist_x64_2012.exe /install /passive /norestart
   & fsw-vm:\NDP472-KB4054530-x86-x64-AllOS-ENU.exe /install /passive /norestart
   ```

1. Скопируйте дистрибутив Microsoft Exchange на сервер `vm-edge-a`:

   ```powershell
   copy-item fsw-vm:\ExchangeServer2016-x64-cu13.iso c:\windows\temp\ExchangeServer2016-x64-cu13.iso
   ```

1. Укажите основной суффикс DNS:

   ```powershell
   $Suffix = 'kz1.internal'

   Set-ItemProperty -path HKLM:\system\CurrentControlSet\Services\tcpip\parameters -Name Domain -Value $Suffix

   Set-ItemProperty -path HKLM:\system\CurrentControlSet\Services\tcpip\parameters -Name 'NV Domain' -Value $Suffix
   ```

1. Перезагрузите ВМ:

   ```powershell
   Restart-Computer -Force
   ```

   Снова подключитесь к ВМ `vm-edge-a` через RDP и запустите PowerShell.

1. Смонтируйте дистрибутив Exchange Server:

   ```powershell
   Mount-DiskImage c:\windows\temp\ExchangeServer2016-x64-cu13.iso
   ```

1. Установите Edge Transport Server на сервер `vm-edge-a`:

   ```powershell
   & D:\Setup.exe /Mode:Install /InstallWindowsComponents /Role:EdgeTransport /IAcceptExchangeServerLicenseTerms /OrganizationName:MyOrg
   ```

### Настройте сервер Edge Transport в зоне kz1-b {#edge-b}

1. Подключитесь к ВМ `fsw-vm` с помощью RDP.
1. Подключитесь к ВМ `vm-edge-b` с помощью RDP. Используйте логин `Administrator` и ваш пароль. Запустите PowerShell.
1. Создайте временную папку:

   ```powershell
   mkdir C:\Windows\temp
   ```

1. Установите роли ADLDS на сервер:

   ```powershell
   Install-WindowsFeature ADLDS
   ```

1. Настройте DNS-клиент:

   ```powershell
   Get-NetAdapter | `
       Set-DnsClientServerAddress -ServerAddresses "10.2.0.3,10.1.0.3"
   ```

1. Настройте удаленный доступ к папке с дистрибутивами, находящейся на сервере `fsw-vm`:

   ```powershell
   $Credential = Get-Credential # Username: yantoso\Administrator

   New-PSDrive -Name 'fsw-vm' -PSProvider:FileSystem -Root '\\fsw-vm.kz1.internal\distrib' -Credential $Credential
   ```

   Введите логин `yantoso\Administrator` и ваш пароль.

1. Установите зависимости:

   ```powershell
   & fsw-vm:\vcredist_x64_2012.exe /install /passive /norestart
   & fsw-vm:\NDP472-KB4054530-x86-x64-AllOS-ENU.exe /install /passive /norestart
   ```

1. Скопируйте дистрибутив Microsoft Exchange на сервер `vm-edge-b`:

   ```powershell
   copy-item fsw-vm:\ExchangeServer2016-x64-cu13.iso c:\windows\temp\ExchangeServer2016-x64-cu13.iso
   ```

1. Укажите основной суффикс DNS:

   ```powershell
   $Suffix = 'kz1.internal'

   Set-ItemProperty -path HKLM:\system\CurrentControlSet\Services\tcpip\parameters -Name Domain -Value $Suffix

   Set-ItemProperty -path HKLM:\system\CurrentControlSet\Services\tcpip\parameters -Name 'NV Domain' -Value $Suffix
   ```

1. Перезагрузите ВМ:

   ```powershell
   Restart-Computer -Force
   ```

   Снова подключитесь к ВМ `vm-edge-b` через RDP и запустите PowerShell.

1. Смонтируйте дистрибутив Exchange Server:

   ```powershell
   Mount-DiskImage c:\windows\temp\ExchangeServer2016-x64-cu13.iso
   ```

1. Установите Edge Transport Server на сервер `vm-edge-b`:

   ```powershell
   & D:\Setup.exe /Mode:Install /InstallWindowsComponents /Role:EdgeTransport /IAcceptExchangeServerLicenseTerms /OrganizationName:MyOrg
   ```

## Добавьте серверы Edge Transport в Exchange {#add-edges-to-exchange}

Каждый из серверов Edge Transport требуется подписать на сайт в своей зоне доступности.

### Настройте подписку на сервере vm-edge-a {#subscribe-vm-edge-a}

1. Создайте папку `subscribe`:

   ```powershell
   mkdir c:\subscribe
   ```

1. Запустите Exchange Management Shell. Создайте файл подписки на сервере `vm-edge-a`:

   ```powershell
   New-EdgeSubscription -FileName "C:\subscribe\$(hostname).xml"
   ```

1. Скопируйте файл `C:\subscribe\vm-edge-a.xml` на сервер `vm-exchange-a` в папку `C:\root\vm-edge-a.xml`.

1. Зайдите на сервер `vm-exchange-a` и запустите Exchange Management Shell.

1. Подпишите Edge Transport сервера `vm-edge-a` на сайт `kz1-a`:

   ```powershell
   New-EdgeSubscription -FileData ([byte[]]$(Get-Content -Path "C:\root\vm-edge-a.xml" -Encoding Byte -ReadCount 0)) -Site "kz1-a"
   ```

1. Убедитесь, что подписка создана, с помощью команды:

   ```powershell
   Get-EdgeSubscription
   ```

   Результат:

   ```powershell
   Name            Site                 Domain
   ----            ----                 ------
   vm-edge-a       yantoso.net/Confi... kz1.internal
   ```

1. Проверьте статус синхронизации:

   ```powershell
   Test-EdgeSynchronization
   ```

   Параметр `SyncStatus` должен перейти в состояние `Normal`.


### Настройте подписку на сервере vm-edge-b {#subscribe-vm-edge-b}

1. Создайте папку `subscribe`:

   ```powershell
   mkdir c:\subscribe
   ```

1. Запустите Exchange Management Shell. Создайте файл подписки на сервере `vm-edge-b`:

   ```powershell
   New-EdgeSubscription -FileName "C:\subscribe\$(hostname).xml"
   ```

1. Скопируйте файл `C:\subscribe\vm-edge-b.xml` на сервер `vm-exchange-b` в папку `C:\root\vm-edge-b.xml`.

1. Зайдите на сервер `vm-exchange-b` и запустите Exchange Management Shell.

1. Подпишите Edge Transport сервера `vm-edge-b` на сайт `kz1-b`:

   ```powershell
   New-EdgeSubscription -FileData ([byte[]]$(Get-Content -Path "C:\root\vm-edge-b.xml" -Encoding Byte -ReadCount 0)) -Site "kz1-b"
   ```

1. Убедитесь, что подписка создана, с помощью команды:

   ```powershell
   Get-EdgeSubscription
   ```

   Результат:

   ```powershell
   Name            Site                 Domain
   ----            ----                 ------
   vm-edge-a       yantoso.net/Confi... kz1.internal
   vm-edge-b       yantoso.net/Confi... kz1.internal
   ```

1. Проверьте статус синхронизации:

   ```powershell
   Test-EdgeSynchronization
   ```

   Параметр `SyncStatus` должен перейти в состояние `Normal`.

## Как удалить созданные ресурсы {#clear-out}

Чтобы перестать платить за развернутые серверы, достаточно удалить все созданные [виртуальные машины](../../compute/operations/vm-control/vm-delete.md) и [балансировщик](../../network-load-balancer/operations/load-balancer-delete.md):

* `fsw-vm`
* `ad-vm-a`
* `ad-vm-b`
* `vm-exchange-a`
* `vm-exchange-b`
* `vm-edge-a`
* `vm-edge-b`
* балансировщик `exchange-lb`