İki ayrı Active Directory Forest ortamının birbirini görmesi gerektiğinde ilk takılan nokta çoğu zaman ad çözümlemedir. abc.local Forest'ındaki bir Domain Controller, xyz.local Domain'ine ait bir kaydı sorguladığında bu bilgiyi kendi Zone'larında bulamaz ve sorguyu tanımlı Forwarder ya da Root Hints üzerinden dışarıya gönderir. .local gibi internette karşılığı olmayan bir Namespace söz konusu olduğunda bu sorgu hiçbir zaman doğru cevaba ulaşmaz ve Client tarafında isim çözümlenemedi hatası alınır.
Bu boşluğu kapatan yapı DNS Conditional Forwarder'dır. Conditional Forwarder, belirli bir DNS Domain adına ait sorguların doğrudan o Domain'den sorumlu DNS Server'lara iletilmesini sağlar. Forest Trust kurulumu, ADMT ile yapılan Cross Forest Migration, Exchange Cross Forest Coexistence ya da birleşme ve satın alma sonrası altyapı entegrasyonu gibi senaryolarda ilk yapılandırılan bileşenlerden biri budur. Trust oluşturma Wizard'ı karşı Forest'ın Domain Controller'larını DNS üzerinden SRV kayıtlarıyla bulmak zorundadır ve ad çözümleme çalışmadığı sürece Trust kurulumu ilerlemez.
Genel Forwarder ile Conditional Forwarder arasındaki fark da burada belirginleşir. Genel Forwarder, DNS Server'ın çözümleyemediği tüm sorguları tek bir hedefe gönderir. Conditional Forwarder ise yalnızca tanımlanan Namespace için devreye girer, internet ad çözümlemesi mevcut düzeninde çalışmaya devam eder. Böylece iki Forest arasında ihtiyaç duyulan çözümleme, ortamın geri kalanına dokunmadan sağlanmış olur.
Aşağıdaki akışta Windows Server 2022 üzerinde çalışan, tek Domain'li iki Forest kullanılıyor. Kaynak tarafta abc.local, hedef tarafta xyz.local yer alıyor. Önce her iki ortamın Domain, Forest ve Domain Controller bilgileri toplanıyor, ardından iki tarafta da DNS Manager üzerinden Conditional Forwarder oluşturuluyor, aynı işlemin PowerShell karşılığı veriliyor ve son olarak ad çözümleme doğrulanıyor.
Conditional Forwarder Nasıl Çalışır
Bir DNS Server Client'tan sorgu aldığında önce yetkili olduğu Zone'lara, ardından Cache'e bakar. Cevap bu iki kaynakta yoksa Conditional Forwarder tanımlarını kontrol eder. Sorgulanan isim tanımlı bir Namespace ile eşleşiyorsa sorgu, o tanımdaki Master Server listesine Recursive Query olarak iletilir. Eşleşme yoksa sorgu genel Forwarder'a ya da Root Hints'e gider. Aşağıdaki diyagram abc.local tarafındaki bir Client'ın xyz.local sorgusunun izlediği yolu gösteriyor.
Client (abc.local)
|
| xyz.local sorgusu
v
abcsrvdc01 - 10.10.10.100
| 1. Yetkili Zone kontrolü -> eşleşme yok
| 2. Cache kontrolü -> kayıt yok
| 3. Conditional Forwarder -> xyz.local eşleşti
v
xyzsrvdc01 - 172.16.10.100
| xyz.local Zone'u üzerinden yetkili cevap
v
Cevap abcsrvdc01 üzerinden Client'a döner ve Cache'e alınır
Benzer bir ihtiyaç Stub Zone ile de karşılanabilir. İki yöntem arasındaki farkı aşağıdaki tablo özetliyor. Seçimi belirleyen asıl etken, karşı ortamdaki DNS Server listesinin ne sıklıkla değiştiği ve bu listenin kim tarafından güncel tutulacağıdır.
|
Yöntem |
Çalışma Şekli |
Tipik Kullanım |
|
Forwarder |
Çözümlenemeyen tüm sorguları tanımlı hedefe gönderir |
İnternet ad çözümlemesinin belirli DNS Server'lar üzerinden yapılması |
|
Conditional Forwarder |
Yalnızca belirtilen Namespace sorgularını tanımlı Master Server'lara gönderir, IP listesi manuel tutulur |
Forest Trust, Cross Forest Migration, partner ağlarla ad çözümleme |
|
Stub Zone |
Hedef Zone'un SOA, NS ve ilgili A kayıtlarını tutar, NS listesindeki değişiklikleri kendiliğinden öğrenir |
Karşı tarafta Domain Controller sayısının sık değiştiği yapılar |
Ortam Bilgilerinin Toplanması
Conditional Forwarder tanımlamadan önce hangi Namespace'in hangi DNS Server'lara yönlendirileceği netleştirilmelidir. Bunun için her iki ortamda Get-ADDomain ve Get-ADForest komutları çalıştırılır. Get-ADDomain çıktısındaki DNSRoot ve NetBIOSName değerleri, Get-ADForest çıktısındaki Forest ve Domains değerleri yönlendirilecek Namespace'i ve Forest içinde başka Domain olup olmadığını gösterir. İlk iki ekran kaynak taraftaki abc.local ortamına ait.


Aynı komutlar hedef taraftaki xyz.local ortamında çalıştırıldığında karşı Forest'ın bilgileri elde edilir.


Namespace belli olduktan sonra Master Server listesine yazılacak IP adresleri toplanır. Aşağıdaki komut her iki Forest'ta birer Domain Controller üzerinde çalıştırılarak Domain içindeki tüm Domain Controller'lar Site sırasına göre listelenir.
Get-ADDomainController -Filter * | Sort-Object Site | Format-List HostName, OperatingSystem, Domain, Site, IPv4Address, IsGlobalCatalog
Komut ActiveDirectory PowerShell Module'ü gerektirir ve bu Module Domain Controller üzerinde varsayılan olarak yüklü gelir. İki ortamdan alınan çıktılar aşağıdaki tabloda yan yana veriliyor. Conditional Forwarder tanımında kullanılacak değerler Domain ve IPv4Address alanlarıdır.
|
Alan |
Kaynak Forest |
Hedef Forest |
|
HostName |
abcsrvdc01.abc.local |
xyzsrvdc01.xyz.local |
|
OperatingSystem |
Windows Server 2022 Standard |
Windows Server 2022 Standard |
|
Domain |
abc.local |
xyz.local |
|
Site |
Default-First-Site-Name |
Default-First-Site-Name |
|
IPv4Address |
10.10.10.100 |
172.16.10.100 |
|
IsGlobalCatalog |
True |
True |
abc.local tarafındaki çıktı aşağıdaki ekranda görülüyor.

xyz.local tarafındaki çıktı ise şu şekilde.

Bu ortamda her Forest'ta tek Domain Controller bulunuyor. Birden fazla Domain Controller olan yapılarda Master Server listesine DNS Server rolü çalışan tüm Domain Controller'lar eklenmelidir. Get-ADDomainController çıktısı bir Domain Controller'ın DNS Server rolünü çalıştırıp çalıştırmadığını göstermez, bu nedenle listeye eklenecek sunucularda DNS rolünün varlığı ayrıca kontrol edilmelidir.
abc.local Tarafında Conditional Forwarder Oluşturma
abc.local Domain'indeki Domain Controller üzerinde DNS Manager açılır, sol paneldeki Conditional Forwarders düğümüne sağ tıklanır ve New Conditional Forwarder seçeneği seçilir.

Açılan pencerede DNS Domain alanına yönlendirilecek Namespace olan xyz.local yazılır. IP addresses of the master servers alanına ise xyz.local Domain'indeki DNS Server'ların IP adresleri, bu ortamda 172.16.10.100 girilir. IP adresi eklendiğinde DNS Manager bu sunucuya ulaşmayı dener ve sonucu Validated sütununda gösterir. Server FQDN sütununun doldurulabilmesi için IP adresinin Reverse Lookup ile çözümlenebilmesi gerekir. Karşı tarafa ait bir Reverse Lookup Zone yoksa bu sütunda isim görünmeyebilir. Bu durum yönlendirmenin çalışmasını engellemez, asıl bakılması gereken nokta sunucunun DNS sorgusuna cevap verip vermediğidir.

Aynı pencerenin alt kısmında yer alan Store this conditional forwarder in Active Directory seçeneği, tanımın nerede saklanacağını ve hangi DNS Server'lara dağıtılacağını belirler. Bu yapılandırmada seçenek işaretlenmiş ve Replication kapsamı All DNS servers in this forest olarak seçilmiştir. Böylece tanım Active Directory içinde tutulur ve Forest'taki DNS Server rolü çalışan tüm Domain Controller'lara Replication ile ulaşır. Aynı tanımın her DNS Server'da tek tek yapılması gerekmez ve sunucular arasında farklı yapılandırma oluşma ihtimali ortadan kalkar.

Pencerede ayrıca Number of seconds before forward queries time out alanı bulunur. Varsayılan değer 5 saniyedir ve listedeki her Master Server için bu süre kadar cevap beklenir. WAN üzerinden erişilen, gecikmesi yüksek hedeflerde bu değerin artırılması gerekebilir.
Replication Kapsamı Seçenekleri
Store this conditional forwarder in Active Directory seçeneği işaretlendiğinde açılan listede yer alan kapsamlar aşağıdaki tabloda veriliyor. Her kapsam tanımın farklı bir Application Directory Partition'da tutulmasına ve buna bağlı olarak farklı sunucu gruplarına dağıtılmasına karşılık gelir.
|
Seçenek |
Saklandığı Partition |
Tanımı Alan Sunucular |
|
All DNS servers in this forest |
ForestDnsZones |
Forest'taki tüm Domain'lerde DNS Server rolü çalışan Domain Controller'lar |
|
All DNS servers in this domain |
DomainDnsZones |
Yalnızca ilgili Domain'de DNS Server rolü çalışan Domain Controller'lar |
|
All domain controllers in this domain (for Windows 2000 compatibility) |
Domain Partition |
DNS rolü olsun olmasın Domain'deki tüm Domain Controller'lar |
Seçenek işaretlenmezse tanım yalnızca işlemin yapıldığı sunucunun yerel yapılandırmasında tutulur. Active Directory ile entegre olmayan, Member Server üzerinde çalışan DNS Server'lara tanım Replication ile ulaşmaz ve bu sunucularda ayrıca yapılandırılmalıdır.
Çok Domain'li bir Forest'ta karşı ortamın tüm Domain'lerden çözümlenmesi gerekiyorsa Forest kapsamı tercih edilir. Yönlendirme yalnızca belirli bir Domain'in ihtiyacıysa Domain kapsamı daha kontrollü bir dağıtım sağlar.
xyz.local Tarafında Conditional Forwarder Oluşturma
Ad çözümlemenin iki yönlü çalışması için aynı tanım karşı tarafta da yapılır. xyz.local Domain'indeki Domain Controller üzerinde DNS Manager açılır ve Conditional Forwarders düğümüne sağ tıklanarak New Conditional Forwarder seçilir.

Bu kez DNS Domain alanına abc.local, Master Server listesine ise abc.local Domain'indeki DNS Server'ın IP adresi olan 10.10.10.100 yazılır.

Replication kapsamı bu tarafta da All DNS servers in this forest olarak seçilir ve tanım kaydedilir. İşlem tamamlandığında abc.local Namespace'i Conditional Forwarders düğümü altında listelenir.

Forest Trust gibi senaryolarda her iki tarafın da karşı Forest'ın Domain Controller'larını DNS üzerinden çözümleyebilmesi gerekir. Bu yapılandırmada iki yönlü ad çözümleme, her iki tarafta Conditional Forwarder tanımlanarak sağlanıyor. Conditional Forwarder bu ihtiyacı karşılamanın tek yöntemi değildir. Stub Zone, Secondary Zone veya karşı Namespace'i doğru şekilde çözümleyebilen başka bir DNS tasarımı da aynı sonucu verir.
PowerShell ile Conditional Forwarder Oluşturma
Aynı tanımlar PowerShell ile tek satırda yapılabilir. Add-DnsServerConditionalForwarderZone cmdlet'i DnsServer PowerShell Module'ü içinde yer alır. ReplicationScope parametresine verilen Forest değeri DNS Manager'daki All DNS servers in this forest seçeneğine, Domain değeri ise All DNS servers in this domain seçeneğine karşılık gelir. Forest kapsamında tanım oluşturabilmek için hesabın ForestDnsZones Partition'ına yazma yetkisi olmalıdır ve Enterprise Admins üyeliği bu gereksinimi karşılar.
# abc.local tarafındaki Domain Controller üzerinde
Add-DnsServerConditionalForwarderZone -Name "xyz.local" -MasterServers 172.16.10.100 -ReplicationScope "Forest"
# xyz.local tarafındaki Domain Controller üzerinde
Add-DnsServerConditionalForwarderZone -Name "abc.local" -MasterServers 10.10.10.100 -ReplicationScope "Forest"
# Oluşturulan Conditional Forwarder tanımlarını listeleme
Get-DnsServerZone | Where-Object ZoneType -eq "Forwarder"
Forest kapsamındaki tanım Replication ile tüm DNS Server'lara dağıtılır. Yanlış bir IP adresi girildiğinde ilgili Namespace'in çözümlenmesi Forest genelinde etkilenir. Aynı isimde bir Zone zaten varsa komut hata verir.
Karşı tarafta Domain Controller eklendiğinde veya kaldırıldığında Master Server listesi Set-DnsServerConditionalForwarderZone cmdlet'i ile güncellenir. Bu liste kendiliğinden yenilenmediği için Domain Controller değişikliklerinin DNS ekibine bildirilmesi operasyon sürecinin bir parçası olmalıdır.
Ad Çözümlemenin Doğrulanması
Yapılandırmanın çalıştığını görmenin en hızlı yolu karşı Domain'e Ping göndermektir. xyz.local tarafındaki sunucudan abc.local Domain'ine gönderilen Ping, abc.local isminin 10.10.10.100 adresine çözümlendiğini gösteriyor.

abc.local tarafından xyz.local Domain'ine gönderilen Ping ise ismin 172.16.10.100 adresine çözümlendiğini doğruluyor.

Ping çıktısının ilk satırında köşeli parantez içinde görünen IP adresi, ad çözümlemenin başarılı olduğunu tek başına kanıtlar. Ağ üzerinde ICMP trafiği Firewall tarafından engelleniyorsa Reply satırları gelmeyebilir. Bu durum DNS yapılandırmasındaki bir sorunu değil, ICMP'nin engellendiğini gösterir. Daha güvenilir bir kontrol için Resolve-DnsName ve nslookup ile doğrudan DNS sorgusu yapılır. Active Directory senaryolarında A kaydının yanında Domain Controller'ları bulmaya yarayan SRV kayıtlarının da çözümlendiği kontrol edilmelidir, çünkü Trust ve Migration araçları karşı tarafı bu kayıtlar üzerinden bulur.
# abc.local tarafından xyz.local kontrolü
Resolve-DnsName -Name xyz.local
Resolve-DnsName -Name _ldap._tcp.dc._msdcs.xyz.local -Type SRV
# xyz.local tarafından abc.local kontrolü
nslookup abc.local
nslookup -type=SRV _ldap._tcp.dc._msdcs.abc.local
SRV sorgusu karşı Forest'ın Domain Controller'larını Hostname, Port ve öncelik bilgileriyle döndürüyorsa yapılandırma Trust ve Migration işlemleri için hazırdır. Sorgu zaman aşımına uğruyorsa iki taraftaki DNS Server'lar arasında TCP ve UDP 53 portlarının her iki yönde açık olduğu kontrol edilmelidir.
Conditional Forwarder, iki Forest arasında ad çözümlemeyi mevcut DNS düzenini bozmadan sağlayan, kurulumu birkaç dakika süren bir yapılandırmadır. Asıl dikkat isteyen kısım kurulumdan sonra başlar. Master Server listesi karşı ortamdaki Domain Controller değişikliklerini kendiliğinden takip etmez. Domain Controller sayısının sık değiştiği bir ortamla çalışılıyorsa Stub Zone daha az bakım gerektirir, sabit bir yapıda ise Forest kapsamında tanımlanmış bir Conditional Forwarder uzun süre ek müdahale gerektirmeden çalışır.
Faydalı olması dileğiyle...
Makale ile ilgili düşüncelerinizi ve sorularınızı aşağıdaki yorum kısmında paylaşmaktan çekinmeyin. Her katkı, içeriğin daha fazla kişiye ulaşmasını ve daha faydalı bir tartışma ortamı oluşmasını sağlar.