Home » Derinlemesine Autodiscover – SCP,DNS ve Sorun Giderme
Posted in

Derinlemesine Autodiscover – SCP,DNS ve Sorun Giderme

1. Neden önemli?

Outlook 2016 ve sonrası, Exchange bağlantı ayarlarını kayıt defterinden değil doğrudan Autodiscover’dan alır; Autodiscover çalışmıyorsa profil oluşturulamaz, PRF dosyaları da artık desteklenmez. Yani Autodiscover “kolaylık” değil, istemci erişiminin ön koşuludur. Sahada gördüğümüz “Outlook şifre soruyor”, “sertifika uyarısı çıkıyor”, “profil oluşturma 2 dakika sürüyor”, “free/busy ve otomatik yanıt çalışmıyor” şikayetlerinin büyük kısmının kökü, Outlook’un yanlış uç noktayı yanlış sırayla denemesidir. Bu zinciri adım adım okuyabilen admin, saatlerce süren “profil sil–yeniden kur” döngüsünü yarm saatte çözebilecek bir teşhise indirebilir.

2. Temel kavramlar ve nasıl çalışır?

2.1 Autodiscover ne döndürür?

Kullanıcının e-posta adresi ve kimlik bilgisiyle yapılan isteğe Exchange bir XML yanıtı döner: kullanıcının görünen adı, iç ve dış bağlantı ayarları (MAPI/HTTP uç noktaları), EWS, OAB, Availability (free/busy) ve OOF URL’leri, posta kutusunun hangi sunucuda/kimlikte (GUID@alanadı) olduğu. Outlook bu bilgileri önbelleğe alır ve periyodik olarak, ağ değiştiğinde veya hata aldığında Autodiscover’ı yeniden çalıştırır. Yani Autodiscover yalnızca ilk kurulumda değil, istemcinin ömrü boyunca devrededir.

2.2 SCP (Service Connection Point)

Her Exchange sunucusunun Client Access hizmeti kurulurken Active Directory’nin Configuration bölümünde bir SCP nesnesi yayımlanırt. Etki alanına üye ve DC’ye erişebilen Outlook ilk olarak burayı sorgular.

SCP nesnesini görmenin 3 yolu vardır.

  • Exchange Management Shell (En Kolay Yöntem)

Daha önce de kullandığınız Get-ClientAccessService (veya eski adıyla Get-ClientAccessServer) komutu, Active Directory’deki SCP nesnesini okur:

Get-ClientAccessService | Select-Object Name, AutoDiscoverServiceInternalUri

Autodiscover internal URl - Boş gelirse ne yapmalı? Sorun giderme adımları

  • ADSI Edit ile Active Directory İçinde Birebir Görme

SCP nesnesi Active Directory’nin Configuration bölümünde (partition) saklanır. Nesneyi ham haliyle incelemek için:

  1. Win + R tuşlarına basın ve adsiedit.msc yazıp Enter‘a basın.

  2. Sol paneldeki ADSI Edit düğümüne sağ tıklayıp Connect to… seçeneğini seçin.

  3. Select a well known Naming Context kısmından Configuration seçip OK deyin.

  4. Sırasıyla şu dizine gidin:

    CN=Configuration,DC=meridian,DC=corp,DC=test
    └── CN=Services
        └── CN=Microsoft Exchange
            └── CN=<Exchange-Organization-Adınız>
                └── CN=Administrative Groups
                    └── CN=Exchange Administrative Group (FYDIBOHF23SPDLT)
                        └── CN=Servers
                            └── CN=EXC01 (Sunucu adınız)
                                └── CN=Protocols
                                    └── CN=Autodiscover
                                        └── CN=EXC01
  5. En sondaki CN=EXC01 (veya CN=EXC02) nesnesine sağ tıklayıp Properties deyin.

  6. Öznitelik (Attribute) listesinden serviceBindingInformation alanını bulun.

    Buradaki string değer, sunucunuza ait SCP URL’sidir (örneğin: https://exc01.meridian.corp.test/Autodiscover/Autodiscover.xml).

SCP on ADSIEdit.msc

SCP on Adsiedit.msc

  • Standart Active Directory PowerShell Modülü ile Sorgulama

Ad üzeirnden ya da ActiveDirectory modülü olan bir domain joined makineden;

Import-Module ActiveDirectory

$ConfigNC = (Get-ADRootDSE).configurationNamingContext
Get-ADObject -Filter 'objectClass -eq "serviceConnectionPoint" -and serviceBindingInformation -like "*autodiscover.xml"' -SearchBase $ConfigNC -Properties serviceBindingInformation | Select-Object Name, serviceBindingInformation

Get SCP (service connection point) from AD - DNS kontrol etmeyi unutmayın

İki tür SCP vardır:

  • SCP URL — Autodiscover uç nokta URL’sini taşır; keywords özniteliğinde GUID 77378F46-2C66-4aa9-A6A6-3E7A48B19596 bulunur. URL, serviceBindingInformation özniteliğindedir.
  • SCP pointer — belirli bir alan adı için başka bir LDAP sunucusuna/ormana yönlendirir; GUID 67661d7F-8FC4-4fa7-BFAC-E1D7794C1F68. Çok ormanlı (kaynak orman, birleşme) yapılarda önemlidir.

İstemci, bulduğu SCP URL’lerini keywords içindeki Site= değerine gör e sıralar:

Öncelik Koşul Pratik anlamı
1 Site=<istemcinin AD sitesi> içeriyor Önce kendi sitesindeki sunucunun URL’si denenir
2 Hiç Site= değeri yok Kapsamsız SCP’ler; herkes için ortak havuz
3 Başka bir siteyi işaret ediyor En son denenir

Site= değerleri Set-ClientAccessService -AutoDiscoverSiteScope ile yönetilir. Aynı öncelikteki birden fazla URL arasında sıra garantisi yoktur; dolayısıyla “tek bir hatalı SCP bile bazı kullanıcılarda rastgele gecikme” üretir.

Get-ClientAccessService | select name, AutoDiscoverSiteScope

Scp site - sorun giderme

2.3 Outlook’un arama zinciri

Microsoft’un Outlook dokümantasyonunda listelenen yöntemler şunlardır (her yöntem kayıt defteri/GPO ile tek tek kapatılabilir):

Yöntem Ne dener? Kapatan değer (DWORD=1)
SCP lookup AD’deki SCP URL’leri (yalnızca etki alanı üyesi + DC erişimi) ExcludeScpLookup
HTTPS kök alan adı https://alanadi.com.tr/autodiscover/autodiscover.xml ExcludeHttpsRootDomain
HTTPS autodiscover alt alanı https://autodiscover.alanadi.com.tr/autodiscover/autodiscover.xml ExcludeHttpsAutoDiscoverDomain
HTTP redirect http://autodiscover.alanadi.com.tr/… üzerinden 302 ile yönlendirme ExcludeHttpRedirect
DNS SRV kaydı _autodiscover._tcp.alanadi.com.tr ExcludeSrvRecord
Son başarılı URL Profilde önbelleğe alınmış URL ExcludeLastKnownGoodURL
Microsoft 365’e doğrudan bağlantı Outlook 2016 (16.0.6741.2017+) ile gelen, Microsoft 365 uç noktasını açıkça deneme ExcludeExplicitO365Endpoint
Yerel XML Yerelde tanımlı XML dosyası PreferLocalXML (tercih ettirir)

Değerler HKCU\Software\Microsoft\Office\16.0\Outlook\AutoDiscover ve ilke karşılığı HKCU\Software\Policies\Microsoft\Office\16.0\Outlook\AutoDiscover altında bulunur. (Detay Link)

Etki alanı dışı bir istemci için tipik akış: kök alan → autodiscover alt alanı → HTTP redirect → SRV. Etki alanı üyesi istemcide SCP en baştadır. Microsoft 365 doğrudan bağlantısının zincirdeki tam konumu Outlook derlemesine ve koşullara bağlıdır.

2.4 Önemli bir ayrıntı: SRV ve HTTP redirect’te uyarı

SRV veya HTTP yönlendirmesiyle farklı bir sunucuya gidildiğinde Outlook kullanıcıya “Bu web sitesinin sunucu ayarlarınızı yapılandırmasına izin verilsin mi?” uyarısı gösterir. Kurumsal ortamda beklenen bir yönlendirme varsa eğerr uyarı, …\AutoDiscover\RedirectServers altına sunucu adını içeren boş bir String değeri eklenerek bastırılabilir. Barındırma firmasında çok sayıda alan adı olan, SAN sertifikasına her alan adını koyamayan ortamlarda SRV kaydı meşru bir çözümdür.

Dikkat :

  • Ölü sunucunun SCP’si yaşamaya devam eder. Exchange sunucusu düzgün kaldırılmadan (Setup ile uninstall yapılmadan) computer objesi silinirse, AD’deki sunucu nesnesi ve SCP’si kalır. Etki alanı üyesi Outlook’lar bu URL’yi de dener; zaman aşımı, sertifika uyarısı veya IP yeniden kullanıldıysa tamamen alakasız bir sunucuya kimlik bilgisi gönderilmesi görülür. Doğru yol Setup /Mode:RecoverServer ile sunucuyu geri getirip düzgün kaldırmaktır; ADSI Edit ile elle silme son çaredir ve yedek + değişiklik kaydı olmadan yapılmamalıdır.
  • Yeni kurulan sunucu, kurulduğu anda SCP yayımlar. Bu SCP sunucu FQDN’ini içerir ve henüz ticari sertifikası yoktur; prod ortamda gün ortasında kurulum yapılırsa kullanıcılar sertifika uyarısı görür. Önlem için krulumu mesai dışına planlayabilirsiniz ve ya SCP’yi hemen namespace’e çekebilirsiniz.
  • Microsoft 365’e doğrudan bağlantı sürprizi. Alan adı geçmişte bir Teams denemesi ya da azure tarafında açılan bir tenant’ta doğrulanmışsa, salt on-prem kullanıcının Outlook’u Microsoft 365 oturum açma ekranına düşebilir. Hibrit planı yoksa ExcludeExplicitO365Endpoint=1 ilkesi ile çözümlenebilir. (Detay Link) Hibrit ortamda bu değeri körlemesine dağıtmayın; Exchange Online’a taşınmış posta kutularını etkiler.

4. Pratik: Exchange Management Shell / PowerShell örnekleri

4.1 Foresttaki tüm Autodiscover SCP URL’lerini doğrudan AD’den listeleme (Exchange’in “bildiği” değil, istemcinin gördüğü gerçek tablo; ActiveDirectory modülü gerekir):

$cfg = (Get-ADRootDSE).configurationNamingContext

Get-ADObject -SearchBase $cfg `
-LDAPFilter "(&(objectClass=serviceConnectionPoint)(keywords=77378F46-2C66-4aa9-A6A6-3E7A48B19596))" `
-Properties serviceBindingInformation, keywords, whenChanged | `
Select-Object @{n='Sunucu';e={($_.DistinguishedName -split ',')[1] -replace 'CN='}}, `
serviceBindingInformation, whenChanged, `
@{n='Site';e={($_.keywords | Where-Object {$_ -like 'Site=*'}) -join ';'}}

Listede artık var olmayan bir sunucu veya namespace dışındaki bir URL görüyorsanız kaldırmanız gerekmektedir.

4.2 Exchange tarafında Client Access hizmeti, site kapsamı ve AD sitesi karşılaştırması:

Get-ClientAccessService | Format-Table Name, AutoDiscoverServiceInternalUri, AutoDiscoverSiteScope -AutoSize
Get-ExchangeServer | Format-Table Name, Site, AdminDisplayVersion -AutoSize

4.5 Outlook’u taklit eden POX Autodiscover isteği — istemciye gitmeden sunucunun döndürdüğü XML’i görmenin en hızlı yolu:

$body = @"
<?xml version="1.0" encoding="utf-8"?>
<Autodiscover xmlns="http://schemas.microsoft.com/exchange/autodiscover/outlook/requestschema/2006">
<Request>
<EMailAddress>user01@meridian.corp.test</EMailAddress>
<AcceptableResponseSchema>http://schemas.microsoft.com/exchange/autodiscover/outlook/responseschema/2006a</AcceptableResponseSchema>
</Request>
</Autodiscover>
"@
$r = Invoke-WebRequest -Uri "https://autodiscover.meridian.corp.test/Autodiscover/Autodiscover.xml" `
-Method Post -Body $body -ContentType "text/xml" -Credential (Get-Credential) -UseBasicParsing
$r.StatusCode; ([xml]$r.Content).OuterXml.ToString()

4.5 İstemci üzerinden Autodiscover connection aşaması sağlıklı mı? SSL/TLS sorunu var mı?

$SystemNetAssembly = [Reflection.Assembly]::LoadWithPartialName("System.Net")
$req = [System.Net.HttpWebRequest]::Create("https://autodiscover.meridian.corp.test/autodiscover/autodiscover.xml")
$req.GetResponse()

Komut SSL/TLS hatası döndürmeden HTTP 401 döndürmesi gerekir.

Peki en kritik soru gelsin o zaman…

  • Etki alanı üyesi bir istemci, Site= anahtar kelimesi içermeyen bir SCP URL’si ile başka bir siteye kapsamlanmış bir SCP URL’si bulursa hangisini önce dener?

Yukarıdaki tabloya göz gezdirirsek eğer; kapsamsız (Site= içermeyen) SCP URL’sini önce dener: öncelik 2’dir; başka siteye kapsamlı URL öncelik 3’tür. Kendi sitesine kapsamlı bir URL olsaydı (öncelik 1) o en önce denenirdi.

  • Karşılaştığım bir senaryodan örnek olması açısından; etki alanı dışı bir Outlook istemcisinde, kurumsal web sitesi sunucusu 401 dönüyorsa ne olur ve hangi DWORD değeriyle bu adım atlanabilir?

Outlook, autodiscover alt alanından önce https://alanadi/autodiscover/autodiscover.xml adresini dener; web sunucusu geçerli sertifikayla 401 döndüğünde Outlook kimlik bilgisi ister. Yönetilen cihazlarda ExcludeHttpsRootDomain=1 bu adımı atlatır; kalıcı çözüm web sunucusunun bu yola 404 dönmesidir.

Faydalı olması dileğiyle.

Leave a Reply

Your email address will not be published. Required fields are marked *