一、DNS解析检测的三个维度,大多数人只查了第一个
DNS检测不是只查"域名能不能解析到IP"就完事了。完整的DNS健康检查分三层:| 检测维度 | 查什么 | 工具 | 为什么重要 |
|---|---|---|---|
| 第一层:单点解析 | 用你当前的网络查域名解析结果:A记录/CNAME/MX/NS/TXT等 | dig / nslookup / 在线DNS查询 | 最基础的检查,但只能反映你当前网络环境的结果 |
| 第二层:多点全国解析 | 从全国不同地区、不同运营商(电信/联通/移动)的DNS服务器查询 | ITDog / 站长工具 / 17CE / DNS检测平台 | DNS变更有缓存延迟,不同地区生效时间不一样。查单点正常不代表全国正常 |
| 第三层:全球/权威检测 | 从全球各大洲的节点查询,以及直接向权威DNS服务器查询(绕过缓存) | WhatsMyDNS / DNSChecker / Google Dig | 英文站需要全球解析检测;权威查询可以确认"问题出在缓存还是源配置" |
二、命令行工具:dig 和 nslookup 的正确用法
如果你只需要查单个或少量域名,命令行最快。但大多数人只用最基础的用法,漏掉了很多有用的参数:dig 常用命令
# 查询A记录(默认)dig example.com# 查询指定记录类型dig example.com A # IPv4地址dig example.com AAAA # IPv6地址dig example.com CNAME # 别名记录dig example.com MX # 邮件服务器dig example.com NS # 域名服务器dig example.com TXT # 文本记录(SPF/DKIM等)# 指定DNS服务器查询(绕过本地缓存)dig example.com @8.8.8.8 # Google DNSdig example.com @114.114.114.114 # 国内114 DNS# 短输出(只要结果)dig example.com +short# 追踪完整解析路径dig example.com +tracenslookup 常用命令
# 基础查询nslookup example.com# 查询指定记录类型nslookup -type=A example.comnslookup -type=MX example.comnslookup -type=NS example.comnslookup -type=TXT example.com# 指定DNS服务器nslookup example.com 8.8.8.8# 交互模式(批量查询)nslookup> server 8.8.8.8> set type=A> example1.com> example2.com> exit三、批量检测几十上百个域名的方案
手动查两三个域名用dig就够了,查50个域名就完全不一样了。以下是四种批量方案:Shell脚本批量dig
把域名列表放到txt文件里,一行一个,shell循环dig:
#!/bin/bash# domains.txt 一行一个域名while read domain; doip=$(dig +short "$domain" A | head -1)if [ -z "$ip" ]; thenecho "$domain → 解析失败"elseecho "$domain → $ip"fidone < domains.txt优点:零依赖,任何Linux/Mac都能跑。缺点:串行查询,100个域名大约需要1-2分钟。
Python并发批量查询
用Python的dnspython库+并发,100个域名5秒内出结果:
import dns.resolverfrom concurrent.futures import ThreadPoolExecutordef check_domain(domain):try:answers = dns.resolver.resolve(domain, 'A')ips = [str(r) for r in answers]return f"{domain} → {', '.join(ips)}"except Exception as e:return f"{domain} → 失败({type(e).__name__})"domains = open('domains.txt').read().splitlines()with ThreadPoolExecutor(max_workers=20) as ex:for r in ex.map(check_domain, domains):print(r)优点:快,支持自定义DNS服务器,结果可导出CSV。缺点:需要装dnspython库。

在线工具:ITDog / 站长工具
ITDog(itdog.cn)的DNS批量查询支持一次粘贴多个域名,选记录类型后一键查询,结果以表格展示。站长工具的DNS检测功能也类似。适合偶尔需要查、不想装软件的人。短板:一次只能查几十个域名,太多会触发频率限制。

专业DNS监控平台:DNSPod / Cloudflare
如果你的域名托管在DNSPod或Cloudflare,它们自带DNS健康监控。DNSPod控制台可以看到所有域名的解析状态、TTL、最后更新时间。Cloudflare的Analytics面板能看到DNS查询量趋势和异常。适合域名数量多、需要长期监控的场景。
四、DNS变更后怎么验证全国生效情况
DNS改完之后最头疼的事:你自己电脑上dig已经看到新IP了,但客户打电话说网站还是打不开。这是因为DNS缓存是分层级的——本地缓存、运营商递归DNS缓存、权威DNS服务器,每一层都有TTL时间。DNS变更后的全国生效检测流程
- 改之前先记下旧的TTL值。如果TTL是3600(1小时),理论上最多等1小时缓存就过期了。但很多域名的TTL是86400(24小时),那就意味着改完之后最长要等24小时全球才能全部生效。改DNS之前先把TTL调低(比如600=10分钟),等生效后再调回来。
- 改完后用ITDog或17CE做全国多点检测。这两个平台在全国各省市电信/联通/移动都有探测节点,可以一次性看到各地解析出来的IP是什么。如果有些地区还是旧IP、有些已经是新IP,说明DNS正在传播中。
- 用WhatsMyDNS.net做全球检测。这个工具从全球几十个节点查询你的域名,能看到各大洲的解析状态。英文站特别需要这个——你可能只关心国内,但海外用户也有延迟。
- 等所有节点都返回新IP后,再把TTL调回正常值。不要在传播期间调TTL,否则会导致一些节点用新TTL、一些用旧TTL,缓存混乱更麻烦。
五、常见DNS记录类型和排查清单
批量检测时,不同类型的DNS记录对应不同的业务场景。查错了记录类型,等于白查:| 记录类型 | 作用 | 什么时候需要查 | 异常表现 |
|---|---|---|---|
| A / AAAA | 域名→IPv4/IPv6地址 | 网站打不开、换了服务器、加了CDN | 解析到错误的IP或解析失败=网站完全不可访问 |
| CNAME | 域名别名,指向另一个域名 | 用了CDN、www跳转、第三方平台托管 | CNAME指向的域名挂了,你的站也会挂 |
| MX | 邮件服务器地址 | 收不到邮件、换了企业邮箱 | MX记录错误或缺失=所有发往该域名的邮件丢失 |
| NS | 指定域名由哪个DNS服务器解析 | 换了DNS服务商、域名刚注册 | NS记录错误=整个域名无法解析,所有子记录全部失效 |
| TXT | 文本信息(SPF/DKIM/DMARC/验证) | 邮件进垃圾箱、Google Search Console验证失败 | SPF/DKIM/DMARC配置错误=发出的邮件被标记为垃圾邮件 |
| CAA | 指定哪些CA可以颁发SSL证书 | 申请SSL证书失败 | CAA限制了证书颁发机构,导致SSL申请被拒 |
六、站群场景:上百个域名的DNS统一监控
管理几十上百个域名时,DNS监控不能靠人工。需要一套自动化的方案:站群DNS最容易出的三个问题
- 域名忘记续费导致DNS被暂停。上百个域名分散在不同注册商、不同到期时间,手动跟踪很容易漏。某天突然发现某个站打不开了,一查是域名过期了。
- DNS服务商单点故障。所有域名都用同一家DNS服务商(比如全部放DNSPod),这家服务商一出故障,所有站全挂。关键域名至少分散到两家DNS服务商。
- CDN配置变更影响解析。某个站换了CDN服务商、修改了CNAME记录,但没有同步更新SSL证书配置,导致HTTPS访问失败。
自动化监控脚本
#!/bin/bash# 批量检测+对比上次结果,有变化就告警DOMAINS="domains.txt"LAST="last_dns_result.txt"NOW="dns_result_$(date +%Y%m%d).txt"while read d; doecho "$d → $(dig +short "$d" A | paste -sd ',')"done < "$DOMAINS" > "$NOW"# 和上次对比diff "$LAST" "$NOW" && echo "无变化" || \echo "DNS有变化!" | mail -s "DNS变更告警" admin@xx.commv "$NOW" "$LAST"把这个脚本加到crontab里每天跑一次,DNS解析一有变化立刻收到邮件。
