DNS Server 排錯先分成「查不到、查錯、查得慢、動態更新失敗」。再確認用戶端問了哪台 DNS、查的是哪個 zone、答案來自 authoritative、forwarder 還是 cache。
Zone 與記錄盤點
列出所有 zone系統管理員 PowerShell(DNS)
Get-DnsServerZone | Format-Table ZoneName,ZoneType,IsDsIntegrated,IsReverseLookupZone,DynamicUpdate確認 AD-integrated、動態更新與 reverse zone。
查看指定 zonePowerShell
Get-DnsServerZone -Name 'corp.example' | Format-List *變更前記錄 replication scope 與 dynamic update。
列出 zone 內記錄PowerShell
Get-DnsServerResourceRecord -ZoneName 'corp.example' | Sort-Object HostName,RecordType大型 zone 先依 Name 或 RRType 篩選。
找指定主機記錄PowerShell
Get-DnsServerResourceRecord -ZoneName 'corp.example' -Name 'app01'同名可能同時有 A、AAAA、CNAME 或多筆 A。
查看 forwarderPowerShell
Get-DnsServerForwarder確認 timeout、是否使用 root hints 與來源 DNS 可達性。
查看 root hintsPowerShell
Get-DnsServerRootHint內部封閉 DNS 可能按設計不使用 root hints。
查看 scavenging 設定PowerShell
Get-DnsServerScavenging不要看到 stale record 就直接全域啟用清除。
建立與維護記錄
建立 A 與 PTR 記錄系統管理員 PowerShell(DNS)
Add-DnsServerResourceRecordA -ZoneName 'corp.example' -Name 'app01' -IPv4Address '192.168.50.10' -CreatePtr需先有對應 reverse zone,建立後正反查都要驗證。
建立 CNAME系統管理員 PowerShell(DNS)
Add-DnsServerResourceRecordCName -ZoneName 'corp.example' -Name 'portal' -HostNameAlias 'app01.corp.example'alias 目標應用 FQDN,且不能和同名其他 record 衝突。
建立 TXT 記錄系統管理員 PowerShell(DNS)
Add-DnsServerResourceRecord -ZoneName 'corp.example' -Txt -Name '_validation' -DescriptiveText 'replace-with-issued-token'驗證 token 屬敏感資料時不要留在工單。
刪除前預演系統管理員 PowerShell(DNS)
Remove-DnsServerResourceRecord -ZoneName 'corp.example' -Name 'old-app' -RRType A -WhatIf若同名多筆,先 Get 精確確認;正式刪除前備份。
新增 forwarder系統管理員 PowerShell(DNS)
Add-DnsServerForwarder -IPAddress 192.0.2.53 -PassThru把測試 IP 換成公司核准的 DNS;先確認遞迴與資安政策。
匯出標準 primary zone系統管理員 PowerShell(DNS)
Export-DnsServerZone -Name 'corp.example' -FileName 'corp.example.dns'AD-integrated zone 的完整復原仍要搭配 System State/AD 備份策略。
清除伺服器 cache系統管理員 PowerShell(DNS)
Clear-DnsServerCache -Force會讓後續查詢重新遞迴;尖峰時段與大型環境要評估。
查詢與事件排錯
查 A 記錄並指定 DNSPowerShell
Resolve-DnsName app01.corp.example -Type A -Server 192.168.10.10記錄 Server 與實際回覆,不只看 IP。
不使用本機 DNS cachePowerShell
Resolve-DnsName app01.corp.example -Type A -DnsOnly -NoHostsFile排除 hosts file 與 LLMNR 等干擾。
查 SOA 與 serialPowerShell
Resolve-DnsName corp.example -Type SOA -Server 192.168.10.10比較不同 authoritative server 的 serial 與 master。
查反向 PTRPowerShell
Resolve-DnsName 192.168.50.10 -Type PTR -Server 192.168.10.10缺 PTR 常影響郵件、稽核與部分驗證,但不一定影響一般 TCP。
查看 DNS Server 錯誤事件PowerShell(DNS)
Get-WinEvent -FilterHashtable @{LogName='DNS Server'; Level=2,3} -MaxEvents 100對照事件時間、zone 與上游 DNS。
測 DNS TCP 53PowerShell
Test-NetConnection 192.168.10.10 -Port 53DNS 平常多用 UDP,但大型回覆、DNSSEC 與 zone transfer 會用 TCP;TCP 成功不代表 UDP 正常。
怎麼確認有做對
- 從至少兩個不同網段,以實際設定的 DNS 查 A/PTR/SRV。
- 不同 DC/DNS 的 AD-integrated 記錄一致,事件 log 無持續錯誤。
- 新增記錄在 TTL 與 replication window 後可解析,舊 cache 也按預期更新。
常見錯誤
- 把 8.8.8.8 直接發給網域電腦當主要 DNS。
- 沒有 reverse zone 卻勾 CreatePtr 就以為成功。
- 為了解一筆錯誤記錄就全域開 scavenging。
- 只測 nslookup,不確認用戶端實際 DNS、suffix 與查詢封包。
常見問題
網域電腦可以設定公用 DNS 當備援嗎?
通常不行。網域成員應只使用能解析 AD zone 的公司 DNS;公用 DNS 應設成內部 DNS 的 forwarder,而不是直接發到網域用戶端。
清 DNS cache 會修好所有解析問題嗎?
只會移除快取。若 authoritative record、forwarder、delegation、suffix 或動態更新本來就錯,清完只會再拿到同一個錯誤答案。
延伸閱讀
版本與官方文件
參數會隨工具版本與作業系統實作改變。正式環境先用 --help、-h 或系統內建說明確認,再以當版官方文件為準。
常見問題
網域電腦可以設定公用 DNS 當備援嗎?
通常不行。網域成員應只使用能解析 AD zone 的公司 DNS;公用 DNS 應設成內部 DNS 的 forwarder,而不是直接發到網域用戶端。
清 DNS cache 會修好所有解析問題嗎?
只會移除快取。若 authoritative record、forwarder、delegation、suffix 或動態更新本來就錯,清完只會再拿到同一個錯誤答案。