>[!Danger]- 1. Установка и базовая настройка **Win server** >1. Установи Windows Server 2019 **Desktop Experience**, задай сильный пароль локального Administrator и включи RDP (лучше ограничить по IP на фаерволе). >2. Поставь статический IP (на DC DNS будет “сам на себя”, на Exchange DNS будет указывать на DC). >3. Синхронизация времени: обязательно корректное время/часовой пояс, иначе будут проблемы с Kerberos/SSL. >Задайте статический IP, шлюз, DNS. >>[!todo]- 1 > > Если сервер = DC/DNS: DNS указывайте на себя (127.0.0.1 и/или свой IP). > > > > Если сервер = только Exchange: DNS указывайте на DC. > > > > Проверьте время/часовой пояс (важно для Kerberos/сертификатов). > > > > Timezone, NTP, синхронизация. > > > > Включите RDP (если нужно) и проверьте Windows Firewall (пока можно оставить дефолтный, но убедитесь, что 443/25 потом не блокируются). > > > > Обновления. > > > > Установите все обновления Windows. > > > > Перезагрузки до тех пор, пока обновлений не останется. > > > > Переименование сервера (если ещё не делали): > > ``` > > Rename-Computer -NewName "" -Restart > > ``` > > **Изменить WINS5 НА ТРЕБУЕТСЯ ИМЯ** > >>[!todo]- 2 Проверка, что **443 порт** вообще живёт на сервере (потом пригодится при диагностике OWA/ECP): >>``` >>`Test-NetConnection 127.0.0.1 -Port 443 netstat -ano | findstr ":443"` >>``` >[!Failure]- 2) AD DS + DNS (и ваш split‑DNS) >>[!info] Критично, чтобы внутренние ПК ходили на внутренний IP, а снаружи — на публичный. >>Именно из‑за этого у вас “то открывается /owa, то не открывается”: внутри сети обращение к публичному IP не проходило (hairpin NAT), поэтому вы лечили split‑DNS. >> > >>[!Danger]- **2.1** Если Domen Controller не поднят. Настройка DC >>На будущем DC: >>``` >>Install-WindowsFeature AD-Domain-Services,DNS -IncludeManagementTools >>``` >>Дальше поднимайте лес (пример): >>``` >>Install-ADDSForest -DomainName "" -DomainNetbiosName "" >>``` >>>[!ifno] Пример >>>``` >>>Install-ADDSForest -DomainName "s5teams.local" -DomainNetbiosName "S5TEAMS" >>>``` > >>[!Tip]- **2.2** Публичный домен внутри сети (split‑DNS) >>>[!info] Смысл: >>> внутри сети `mail.stitch505.ru` должен резолвиться в **ip типа** **192.168.....**, чтобы OWA/ECP открывались из LAN стабильно. >> >>>[!Warning] На каждом внутреннем DNS, который обслуживает клиентов (это важно! у вас были разные DNS на разных подсетях), создайте зону `**YOUR_DOMEN**` и запись: >>``` >>Add-DnsServerPrimaryZone -Name "YOUR_DOMEN" -ReplicationScope "Domain" -DynamicUpdate "None" >Add-DnsServerResourceRecordA -ZoneName "YOUR_DOMEN" -Name "mail" -IPv4Address "192.168.60.212" >Add-DnsServerResourceRecordCName -ZoneName "YOUR_DOMEN" -Name "autodiscover" -HostNameAlias "mail.YOUR_DOMEN" >>``` >> >>>[!Bug] ЗАМЕНИТЬ ДАННЫЕ IP и указать свой домен вместо YOUR_DOMEN > >>[!Bug]- Проверка на клиентском ПК после изменений: >>``` >>ipconfig /flushdns nslookup mail.YOUR_DOMEN >>``` >[!Bug]- 3. Exchange 2019: установка и базовая оживлялка веба (OWA/ECP) >>[!info] >>Эта часть — чтобы после установки сразу работали https://mail.../owa и https://mail.../ecp, и чтобы при сбоях вы быстро отличали “IIS жив” от “DNS/маршрут сломан”. В вашем диалоге веб реально “падал” снаружи/изнутри, но на сервере 443 был жив — это типичный признак не Exchange, а сети/DNS. > >>[!Warning]- 3.1 До установки Exchange (ЧЕКЛИСТ) >>1. Сервер должен быть членом домена (если Exchange не на DC). >>2. Установите prerequisites (самый практичный путь — ставить компоненты/зависимости, которые просит установщик CU). >>3. Перезагрузите сервер, убедитесь, что IIS/службы не в “полуживом” состоянии. > >>[!warning]- 3.2 Установка Exchange >>Смонтировать ISO Exchange 2019 CU. >> Запустить setup, выбрать роль Mailbox (в 2019 фактически одна роль). >> После установки открыть: >> https://<имя_сервера>/ecp (первичная проверка) >> потом уже через https://YOUR_DOMEN/ecp > >>[!Warning] 3.3 Если /owa или /ecp “вечно грузится/таймаут” >>1. Проверка на самом сервере: >>``` >>Test-NetConnection 127.0.0.1 -Port 443 netstat -ano | findstr ":443" >>``` >>2. Быстрый перезапуск IIS: >>``` >>iisreset >>``` >>3. Если внутри сети с ПК не открывается, а на сервере 127.0.0.1:443 ок — почти всегда это DNS/hairpin, возвращайтесь к разделу split‑DNS. >[!Danger] DKIM/SPF/DMARC/PTR >Прошлая рабочая схема >A mail → 188.170.157.193 >CNAME autodiscover → mail.stitch505.ru >MX → mail.stitch505.ru >SPF (TXT для корня домена) `v=spf1 ip4: -all` >DKIM (TXT для селектора) `v=DKIM1; k=rsa; p=` >``` >Что писать: public key, который выдаёт твой DKIM‑агент/провайдер, обычно формата: >``` >DMARC (TXT для _dmarc) v=DMARC1; p=none; rua=mailto:dmarc@ >PTR (reverse DNS) — **не в Cloudflare а у провайдера** >``` >Обычно нужно: `` → `mail.`, и при этом A‑запись `mail.` должна указывать обратно на ``. >``` > >>[!info] DKIM-агент (Exchange DkimSigner / dkim-exchange) (скачать из интернета или прикрепленного файла) >>ПО/что это: >>``` >>это отдельный DKIM‑подписывающий агент для **Exchange on‑prem**, который добавляет заголовок `DKIM-Signature` на исходящую почту.[](https://github.com/Pro/dkim-exchange/issues/78) >>``` >> >1. **Установка** > - Ставится на Exchange сервер (где работает транспорт). > - После установки обычно появляется GUI (настройки доменов) и папка с ключами (часто ...\keys). >2. **Создание домена и ключа** >- В GUI агента добавь домен: >- Selector: например s1 (или любой другой, но одинаковый в агенте и DNS) >- Сгенерируй ключ (обычно RSA 2048) >- Скопируй public key → вставь в Cloudflare TXT: s1._domainkey. >3. **Файлы ключей**. > - Private key обычно лежит в файле типа: `C:\Program Files\\keys\.pem` >- Именно этот файл должен быть доступен службе транспорта Exchange. > >>[!Warning] Главная ошибка и исправление (Access denied) >>``` >>Почему ломается: транспорт Exchange обычно работает от `NT AUTHORITY\NETWORK SERVICE`, и если у него нет прав на чтение private key (`.pem`), агент пишет “Access denied”, ключ не грузится и доменов становится 0. >>``` >>>[!todo] **Исправление (универсально, подставь свой путь и домен):** >>> ``` >>> $KeyFile = "C:\Program Files\Exchange DkimSigner\keys\.pem" icacls $KeyFile /inheritance:e icacls $KeyFile /grant "NT AUTHORITY\NETWORK SERVICE:RX" Restart-Service MSExchangeTransport >>> ``` >>> **/inheritance:e** включает наследование ACL, а /grant добавляет права, это штатный синтаксис icacls. > >>[!Info] Проверка после настройки >>1. В логе DKIM‑агента должно быть что-то вроде “settings loaded / Number of domains: 1” (или аналогичная строка, смысл — домен подхватился). >>2. Отправь письмо на Gmail → “Показать оригинал”: должно быть `dkim=pass`, а также заголовок `DKIM-Signature` >>3. >[!Danger] Проверки >Проверка доступности после настройки PTR записей >``` >nslookup 188.170.157.193 8.8.8.8 nslookup 188.170.157.193 1.1.1.1 Если есть ошибки: 1) агент пишет, что не может загрузить private key “Отказано в доступе”, и доменов становится 0, **Измени YOUR_DOMAIN** ``` icacls "C:\Program Files\Exchange DkimSigner\keys\YOUR_DOMAIN.pem" /inheritance:e icacls "C:\Program Files\Exchange DkimSigner\keys\YOUR_DOMAIN.pem" /grant "NT AUTHORITY\NETWORK SERVICE:RX" Restart-Service MSExchangeTransport ```