~/yazilar/active-directory-kurulumu-ve-ikinci-dc
Active Directory kurulumu ve ikinci domain controller
içindekiler
Add-Computer : Computer 'DC02' failed to join domain 'ad.example.com' from its current workgroup 'WORKGROUP' with
following error message: The specified domain either does not exist or could not be contacted.Bir sunucuyu domain'e alırken ya da ikinci domain controller'ı kurarken bu mesajı görürsen ilk bakacağın yer DNS. Makine domain controller'ı DNS'teki SRV kayıtlarıyla buluyor. DNS ayarında DC yerine modem, kurumun genel resolver'ı ya da internetteki bir sunucu yazıyorsa domain'i hiçbir zaman bulamıyor. Kablo, güvenlik duvarı, parola, hepsi ondan sonra geliyor. AD sorunlarının çoğu bir şekilde DNS'e çıkıyor, o yüzden bu yazıda DNS'e de en az DC kadar yer var.
Plan
İki domain controller, ikisi de DNS sunucusu ve Global Catalog:
| Sunucu | IP | Görev |
|---|---|---|
dc01 | 10.10.20.11 | İlk DC, DNS, başlangıçta bütün FSMO rolleri |
dc02 | 10.10.20.12 | İkinci DC, DNS, Global Catalog |
Ağ 10.10.20.0/24, gateway 10.10.20.1. İkisi de Core, ikisi de domain'e alınmamış, statik IP'li, saat dilimi ayarlanmış ve güncellemeleri yapılmış durumda.
Tek DC varsa o sunucu yeniden başlarken bile oturum açılamıyor ve DNS çözülmüyor. İkinci DC, birini bakıma alırken işlerin yürümesini sağlıyor. Yedek yerine geçmiyor, ona en sonda döneceğim.
Domain adı
Örneklerde ad.example.com kullanıyorum, NetBIOS adı da ORNEK. Senin ortamında bu, kurumun sahip olduğu bir alan adının alt alan adı olmalı. .local ile biten isimler hâlâ çok yaygın ama mDNS ile çakışıyor (macOS ve Linux istemciler .local'i farklı çözmeye çalışıyor) ve bu ada hiçbir genel CA sertifika vermiyor. Dışa açık alan adının kendisini (example.com) kullanmak da iç DNS'te web sitesi için can sıkıcı kayıtlar gerektiriyor. Alt alan adı ikisini de çözüyor. Bu ismi sonradan değiştirmek pratikte mümkün değil, acele etme.
İlk DC
dc01 üzerinde rolü kuruyorum:
Install-WindowsFeature AD-Domain-Services -IncludeManagementToolsRolü kurmak sunucuyu henüz DC yapmıyor, sadece gerekli bileşenleri yüklüyor. Asıl iş Install-ADDSForest ile. Önce aynı parametrelerle bir ön kontrol çalıştırıyorum:
$dsrm = Read-Host -AsSecureString "DSRM parolası"
Test-ADDSForestInstallation -DomainName ad.example.com -DomainNetbiosName ORNEK `
-InstallDns -SafeModeAdministratorPassword $dsrmDSRM (Directory Services Restore Mode) parolası, DC'yi AD servisleri kapalıyken açman gerektiğinde, örneğin yedekten geri dönerken soruluyor. Her DC'de ayrı tutuluyor ve domain'deki hiçbir hesapla ilgisi yok. Kurumun parola kasasına kaydet, domain yönetici parolasıyla aynı yapma.
Ön kontrolde hata yoksa kurulum:
Install-ADDSForest -DomainName ad.example.com -DomainNetbiosName ORNEK `
-InstallDns -SafeModeAdministratorPassword $dsrm-ForestMode ve -DomainMode vermedim. Verilmediğinde kurulan sunucunun desteklediği en yüksek seviye seçiliyor. Ortama daha eski sürüm bir DC katılmayacaksa bu doğru tercih.
Kurulum sırasında neredeyse her zaman şu uyarı çıkıyor:
WARNING: A delegation for this DNS server cannot be created because the authoritative parent zone cannot be found
or it does not run Windows DNS server. If you are integrating with an existing DNS infrastructure, you should
manually create a delegation to this DNS server in the parent zone to ensure reliable name resolution from outside
the domain "ad.example.com". Otherwise, no action is required.Kurulum, üst bölge olan example.com'da ad.example.com için delegasyon oluşturmaya çalışıyor ve o bölge Windows DNS'te olmadığı için yapamıyor. AD'ye bağlı makineler DC'leri DNS olarak kullanacağı için bu sorun değil. AD dışındaki sistemlerin de ad.example.com altındaki isimleri çözmesi gerekiyorsa example.com'u yöneten DNS'te bu alt alan için NS kayıtlarını eklemen gerekiyor.
Sunucu kendiliğinden yeniden başlıyor. Açıldığında ORNEK\Administrator ile giriş yapıp kontrol ediyorum:
Get-ADDomain | Select-Object DNSRoot, NetBIOSName, PDCEmulator
Resolve-DnsName -Type SRV _ldap._tcp.dc._msdcs.ad.example.comDNSRoot NetBIOSName PDCEmulator
------- ----------- -----------
ad.example.com ORNEK dc01.ad.example.com
Name Type TTL Section NameTarget Priority Weight Port
---- ---- --- ------- ---------- -------- ------ ----
_ldap._tcp.dc._msdcs.ad.example.com SRV 600 Answer dc01.ad.example.com 0 100 389SRV kaydı geliyorsa istemciler DC'yi bulabilecek demektir. Yerleşik Administrator hesabını sadece kurulumda kullanıyorum, sonrasında herkes kendi yönetici hesabıyla çalışıyor. Örneklerde geçen ORNEK\yonetici hesabını şimdi açıyorum. Domain Admins üyeliği çok geniş bir yetki, bu hesabı sadece domain ve DC yönetimi için kullan, günlük işler için ayrı ve yetkisiz bir hesabın olsun:
$parola = Read-Host -AsSecureString 'yonetici parolası'
New-ADUser -Name 'yonetici' -SamAccountName 'yonetici' `
-UserPrincipalName 'yonetici@ad.example.com' `
-AccountPassword $parola -Enabled $true
Add-ADGroupMember -Identity 'Domain Admins' -Members 'yonetici'DNS tarafı
-InstallDns ile DNS rolü de kuruldu ve ad.example.com bölgesi AD'ye entegre olarak oluşturuldu. AD'ye entegre bölge, kayıtlarını ayrı bir DNS replikasyonu yerine AD veritabanında tutuyor. İkinci DC geldiğinde bölge de onunla birlikte kendiliğinden geliyor, ayrıca secondary zone kurmak gerekmiyor. Get-DnsServerZone çıktısında ad.example.com ve _msdcs.ad.example.com bölgelerinin IsDsIntegrated sütunu True olmalı.
Üç ayar daha yapıyorum.
Forwarder. İstemciler sadece DC'leri DNS olarak kullanacak. Dışarıdaki isimleri DC'nin çözebilmesi için kurumun çözücülerini forwarder olarak ekliyorum. Forwarder vermezsen DC root hint'ler üzerinden kendisi çözmeye çalışıyor, çoğu kurum ağında bu dışarı doğrudan DNS trafiği demek ve güvenlik duvarında takılıyor.
Set-DnsServerForwarder -IPAddress 198.51.100.53, 198.51.100.54Ters bölge. Logda IP gördüğünde isme çevirebilmek ve bazı uygulamaların ters sorgu kontrolleri için:
Add-DnsServerPrimaryZone -NetworkId "10.10.20.0/24" -ReplicationScope Domainİstemcilerin DNS ayarı. DHCP'den dağıtılan DNS sunucuları iki DC olmalı ve sadece onlar. "Yedek olsun" diye ikinci sıraya genel bir çözücü eklemek kötü fikir: istemci bir noktada ona sorarsa SRV kayıtlarını bulamıyor ve oturum açma, grup ilkesi gibi işler rastgele aksıyor. Bu tür hataların izini sürmek çok zor.
Saat
Kerberos, istemci ile DC arasındaki saat farkı varsayılan olarak beş dakikayı geçerse kimlik doğrulamayı reddediyor. Domain'de saat hiyerarşisi şöyle işliyor: üyeler DC'lerden, DC'ler PDC Emulator rolündeki DC'den, PDC de dışarıdaki bir kaynaktan alıyor. Bu yüzden dış NTP ayarını sadece PDC'de yapıyorum:
w32tm /config /manualpeerlist:"ntp1.example.com,0x8 ntp2.example.com,0x8" /syncfromflags:manual /reliable:yes /update
Restart-Service w32time
w32tm /query /sourceDC sanal makinedeyse hipervizörün zaman senkronizasyonu da devreye giriyor ve bu ayarla çakışabiliyor. Hyper-V için bunu serinin son yazısında anlatıyorum.
Silinen nesneler için geri dönüşüm kutusu
AD Recycle Bin varsayılan olarak kapalı. Kapalıyken yanlışlıkla silinen bir kullanıcıyı geri getirmek yedekten authoritative restore demek. Açıkken birkaç komut. Kapatılamayan bir özellik ama kapatmak isteyeceğin bir senaryo da yok:
Enable-ADOptionalFeature -Identity 'Recycle Bin Feature' -Scope ForestOrConfigurationSet -Target ad.example.comSerinin sonraki yazılarında kullanacağım iki OU'yu da şimdi açıyorum:
New-ADOrganizationalUnit -Name Sunucular -Path "DC=ad,DC=example,DC=com"
New-ADOrganizationalUnit -Name Personel -Path "DC=ad,DC=example,DC=com"New-ADOrganizationalUnit OU'ları yanlışlıkla silinmeye karşı korumalı oluşturuyor. Silmek istediğinde önce bu korumayı kaldırman gerekiyor, iyi ki öyle.
İkinci DC
dc02'de ilk iş DNS ayarı. Yazının başındaki hatanın sebebi tam olarak bu adımın atlanması:
Set-DnsClientServerAddress -InterfaceAlias Ethernet -ServerAddresses 10.10.20.11
Resolve-DnsName -Type SRV _ldap._tcp.dc._msdcs.ad.example.com
Test-NetConnection dc01.ad.example.com -Port 389SRV kaydı dönüyor ve 389'a bağlantı TcpTestSucceeded : True diyorsa devam. Dönmüyorsa sunucunun hangi DNS'e sorduğuna bak (Get-DnsClientServerAddress), birden fazla adaptör varsa yanlış olana bakıyor olabilir.
Sunucuyu önce domain'e alıyorum, sonra DC yapıyorum. Install-ADDSDomainController workgroup'taki bir sunucuyu da doğrudan terfi ettirebiliyor ama önce üye yapmak DNS'in ve kimlik bilgilerinin çalıştığını ayrı bir adımda görmemi sağlıyor:
Add-Computer -DomainName ad.example.com -Credential (Get-Credential ORNEK\yonetici) -RestartAçıldıktan sonra:
Install-WindowsFeature AD-Domain-Services -IncludeManagementTools
$dsrm = Read-Host -AsSecureString "dc02 DSRM parolası"
Install-ADDSDomainController -DomainName ad.example.com -InstallDns `
-Credential (Get-Credential ORNEK\yonetici) `
-SafeModeAdministratorPassword $dsrmVarsayılan olarak yeni DC Global Catalog da oluyor. Tek siteli bir ortamda doğrusu da bu.
Kurulum veritabanını dc01'den kopyalayıp sunucuyu yeniden başlatıyor.
DC'lerin kendi DNS ayarları
İki DC de ayakta. Şimdi DNS istemci ayarlarını düzeltiyorum, her biri önce diğerini, sonra kendisini göstersin:
# dc01'de
Set-DnsClientServerAddress -InterfaceAlias Ethernet -ServerAddresses 10.10.20.12, 127.0.0.1
# dc02'de
Set-DnsClientServerAddress -InterfaceAlias Ethernet -ServerAddresses 10.10.20.11, 127.0.0.1Bir DC sadece kendini gösterirse açılış sırasında kendi DNS servisinin hazır olmasını bekliyor, o arada AD servisleri ortağını bulamıyor ve açılış uzuyor. Ortağı başa koymak bunu önlüyor, 127.0.0.1 de ortak kapalıyken yedek oluyor.
SYSVOL paylaşıldı mı
Grup ilkeleri ve oturum açma script'leri SYSVOL'da duruyor, DFSR ile replike ediliyor. dc02'de şuna bakıyorum:
net shareShare name Resource Remark
-------------------------------------------------------------------------------
...
NETLOGON C:\Windows\SYSVOL\sysvol\ad.example.com\SCRIPTS Logon server share
SYSVOL C:\Windows\SYSVOL\sysvol Logon server share
The command completed successfully.NETLOGON ve SYSVOL yoksa ilk DFSR senkronizasyonu tamamlanmamış. Birkaç dakika bekle, düzelmezse DFS Replication günlüğüne bak:
Get-WinEvent -LogName 'DFS Replication' -MaxEvents 30 |
Select-Object TimeCreated, Id, LevelDisplayName, Messageİlk senkronizasyonun bittiğini gösteren olay 4604. Hata olaylarında en sık sebep yine DNS ya da iki DC arasındaki güvenlik duvarı.
Site ve subnet
İstemciler kendilerine en yakın DC'yi, IP adreslerinin hangi subnet'e ve o subnet'in hangi siteye ait olduğuna bakarak buluyor. Tek site olsa bile subnet'i tanımlamak iyi bir alışkanlık, yoksa DC'ler günlüğe tanımsız subnet'ten gelen istemciler için uyarı yazıyor:
New-ADReplicationSubnet -Name "10.10.20.0/24" -Site "Default-First-Site-Name"FSMO rolleri
AD'de çoğu değişiklik herhangi bir DC'de yapılabiliyor ve diğerlerine replike oluyor. Beş iş ise tek bir DC'nin elinde tutuluyor:
| Rol | Kapsam | Ne yapıyor |
|---|---|---|
| Schema Master | Orman | Şema değişiklikleri (Exchange kurulumu gibi) |
| Domain Naming Master | Orman | Ormana domain eklemek ve çıkarmak |
| PDC Emulator | Domain | Saat kaynağı, parola değişikliklerinin öncelikli yeri, hesap kilitleme |
| RID Master | Domain | DC'lere yeni nesne kimliği havuzu dağıtmak |
| Infrastructure Master | Domain | Başka domain'lerdeki nesnelere referansları güncel tutmak |
netdom query fsmoSchema master dc01.ad.example.com
Domain naming master dc01.ad.example.com
PDC dc01.ad.example.com
RID pool manager dc01.ad.example.com
Infrastructure master dc01.ad.example.com
The command completed successfully.İki DC'lik bir ortamda hepsinin dc01'de durması sorun değil, çoğu kısa süre ulaşılamasa kimse fark etmiyor. En hızlı hissedilen PDC Emulator.
dc01'i uzun süreli bakıma alacaksan rolleri düzgünce dc02'ye taşıyorum:
Move-ADDirectoryServerOperationMasterRole -Identity dc02 `
-OperationMasterRole PDCEmulator, RIDMaster, InfrastructureMaster, SchemaMaster, DomainNamingMasterPDC'yi taşırsan dış NTP ayarını da dc02'ye taşımayı unutma, yoksa domain'in saat kaynağı yerinde değil. Aynı komutun -Force ile kullanımı rolü zorla almak (seize) demek. Sadece eski DC bir daha hiç açılmayacaksa yapılıyor, sonrasında da o DC'nin metadata'sını AD'den temizlemek gerekiyor. Zorla alınmış rolün sahibi olan eski DC ağa geri gelirse iki DC aynı rolü tuttuğunu sanıyor.
Replikasyonu kontrol etmek
İlk bakacağım komut özet:
repadmin /replsummarySource DSA largest delta fails/total %% error
DC01 04m:12s 0 / 5 0
DC02 03m:51s 0 / 5 0
Destination DSA largest delta fails/total %% error
DC01 03m:51s 0 / 5 0
DC02 04m:12s 0 / 5 0fails sütununda sıfırdan farklı bir şey ya da error sütununda bir kod görüyorsan ayrıntıya iniyorsun:
repadmin /showrepl dc02Bu çıktı her dizin bölümü için son replikasyon denemesini listeliyor, "Last attempt ... was successful" satırları görmek istiyorsun. Elle bir replikasyon tetiklemek için:
repadmin /syncall /AdePA bütün bölümler, d sunucuları DN ile göster, e siteler arası da dahil, P değişiklikleri bu DC'den dışarı it.
En ikna edici test yine de bir nesne oluşturup diğer tarafta aramak:
New-ADUser -Name repltest -Server dc01
Start-Sleep -Seconds 30
Get-ADUser repltest -Server dc02
Remove-ADUser repltest -Server dc01 -Confirm:$falseAynı site içinde değişiklikler genelde birkaç saniye ile birkaç dakika arasında karşıya geçiyor.
dcdiag
dcdiag /q
dcdiag /s:dc02 /q/q sadece hataları yazdırıyor, çıktının boş gelmesi iyi haber.
Yeni kurulmuş bir DC'de DC02 failed test SystemLog satırını sık görüyorsun. Bu test sistem günlüğündeki yakın tarihli hata olaylarına bakıyor ve kurulum ile yeniden başlatma sırasında yazılan geçici hatalar onu kırmızıya boyuyor. Olay kimliğine bakıp ne olduğunu anla, bir süre sonra tekrar çalıştır.
DNS ile ilgili ayrıntılı bir kontrol de dcdiag /test:dns /s:dc01 /v ile yapılabiliyor, forwarder ve kayıt sorunlarını da yakalıyor.
Yedek ayrı bir iş
İki DC birinin donanımı giderse diğeriyle devam etmeni sağlıyor. Biri yanlışlıkla bir OU'yu boşaltırsa o silme işlemi birkaç saniye içinde ikinci DC'ye de replike oluyor. Recycle Bin bunun bir kısmını kurtarıyor, gerisi için düzenli system state yedeği gerekiyor:
Install-WindowsFeature Windows-Server-Backup
wbadmin start systemstatebackup -backupTarget:E: -quietE: burada DC'ye bağlı ayrı bir disk. Yedeğin bir yerde durduğunu görmek yetmiyor, ara sıra bir test ortamında geri dönmeyi denemek gerekiyor.
Domain iki DC ile ayakta ve replikasyon temiz. Sıradaki iş bu domain'e kullanıcı eklemek ve bunu elle yapmamak.
Sıradaki yazı: PowerShell ile tekrarlanan Windows işlerini otomatiğe almak