域名解析成功的明确标准是解析结果与预期IP地址完全匹配,且响应延迟≤2秒、无NXDOMAIN/SERVFAIL错误、多DNS服务器结果一致。
明确检测目标与关键指标
检测核心是确认域名是否解析到预期的 IP 地址(如生产服务器、CDN 入口或负载均衡器 VIP),而非失效、劫持或指向测试环境。需关注:
- 解析结果是否匹配预设的权威 IP 列表(支持单 IP、多 IP 或 CIDR 段)
- DNS 响应是否超时(建议阈值 ≤2s)
- 是否返回 NXDOMAIN、SERVFAIL 等错误状态
- 不同 DNS 服务器(如 8.8.8.8、114.114.114.114、内网 DNS)结果是否一致,用于识别局部解析异常
编写轻量可调度的检测脚本
以下是一个生产可用的 powershell 脚本片段(保存为 check-domainresolution.ps1):
说明:使用 Resolve-DnsName(无需额外模块,Windows 8.1+/Server 2012 R2+ 内置),支持指定 DNS 服务器、超时控制和错误捕获;结果写入 CSV 并保留最近 7 天日志。
- 定义待检域名列表(如
$domains = @("api.company.com", "pay.company.com")) - 预设期望 IP 或网段(如
$expectedIPs = @("10.20.30.100", "2001:db8::1")或用Test-IPv4InCIDR辅助判断) - 对每个域名,轮询多个 DNS 服务器(
-Server 8.8.8.8,114.114.114.114,192.168.10.5),设置-Timeout 2 - 捕获
$_.IP4Address、$_.IP6Address、$_.QueryType及$_.Error属性 - 比对结果:若无响应、响应 IP 不在白名单、或任意 DNS 服务器返回 SERVFAIL/NXDOMAIN,则标记为“异常”
配置 Windows 定时任务自动执行
避免依赖用户登录,推荐用 ScheduledTasks 模块创建系统级计划任务:
- 以管理员身份运行 PowerShell,执行:
Register-ScheduledTask "DomainDNS-HealthCheck" -Trigger (New-ScheduledTaskTrigger -Once -At (Get-Date) -RepetitionInterval (New-TimeSpan -Minutes 5)) -Action (New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "-NoProfile -ExecutionPolicy Bypass -File C:\Scripts\Check-DomainResolution.ps1") -Settings (New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries -StartWhenAvailable) - 实际部署中建议改为每 15 分钟执行一次,首次触发时间设为整点后 2 分钟(避开其他任务高峰)
- 启用任务历史记录(
Get-ScheduledTask "DomainDNS-HealthCheck" | Enable-ScheduledTask -Verbose),便于排查执行失败原因
异常时主动通知与简单自愈
检测到异常后,不只写日志,还需快速触达:
- 发送邮件:调用
Send-MailMessage(需提前配置 SMTP 凭据)或对接企业微信/钉钉机器人(用Invoke-RestMethodPOST JSON) - 写入 Windows 事件日志(
Write-EventLog -LogName "Application" -Source "DNS-Monitor" -EventId 1001 -EntryType Error -Message "api.company.com resolved to 192.168.99.55 (unexpected)"),方便与 Zabbix、Prometheus WMI Exporter 集成 - 可选自愈动作:如确认是本地 DNS 缓存污染,自动执行
Clear-DnsClientCache并重试;仅限内网可信环境,生产环境慎用

















