最准方法是用dig命令测Query time字段,数值越小响应越快;需指定DNS_IP直连测试、多轮运行看稳定性、横向对比至少三台服务器,并排除本地缓存、hosts绑定及systemd-resolved干扰。

直接用 dig 命令测最准,重点看 Query time 字段——它反映从发请求到收到响应的毫秒数,数值越小说明 DNS 服务器响应越快。
用 dig @DNS_IP 测单台服务器延迟
指定目标 DNS 服务器发起查询,避免受本地配置干扰:
- dig @8.8.8.8 example.com +short —— 只显示 IP,方便快速比对
- dig @1.1.1.1 example.com +stats —— 显示完整统计,含 Query time、SERVER 行等
- 多跑几次:for i in {1..5}; do dig @223.5.5.5 baidu.com +short 2>/dev/null | head -1; done | xargs -n1 dig @223.5.5.5 +short 2>/dev/null | grep "Query time",观察波动是否稳定
横向对比多个 DNS 服务器
别只测一个,至少拉三台常见 DNS 并排测试:
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
- dig @8.8.8.8 google.com | grep "Query time"
- dig @1.1.1.1 google.com | grep "Query time"
- dig @223.5.5.5 aliyun.com | grep "Query time"
- 注意 SERVER 行是否一致(如显示
SERVER: 114.114.114.114#53),确认真正在向目标服务器发包
排除干扰,测出真实速度
本地缓存、hosts 绑定、systemd-resolved 转发都会让结果失真:
- 加 +norecurse 或换域名(如用
test-$(date +%s).example)避开缓存 - 临时停掉缓存服务:sudo systemctl stop systemd-resolved,再测
- 检查 /etc/hosts 是否有该域名条目,有则注释掉再试
- 用 dig @127.0.0.1 测本地 resolver(如 dnsmasq 或 systemd-resolved),看是否比直连公网 DNS 慢得多
辅助验证:ping 和端口连通性
响应快的前提是网络可达且端口开放:
- ping -c 3 8.8.8.8 —— 看丢包率和平均延迟,>100ms 就不够理想
- nc -u -z -w 2 8.8.8.8 53 && echo ok —— 确认 UDP 53 端口可通(DNS 主要用 UDP)
- 若 ping 通但 dig 超时,大概率是防火墙拦截或 DNS 服务未监听










