resolv.conf 是什么
resolv.conf 是 Linux 存根解析器(glibc 的 getaddrinfo/gethostbyname)读取的纯文本配置:nameserver 决定把查询转给哪台递归服务器,search 与 ndots 决定短名字怎么补全后缀,timeout/attempts 决定故障时的等待与重试。它自己不做递归,只是转交。注意它常被 DHCP 客户端、NetworkManager 或 systemd-resolved 重写,手改后重启可能被覆盖,这是排障时最容易踩的一点。
基本信息
| 文件路径 | /etc/resolv.conf |
|---|---|
| 读取者 | glibc 存根解析器(应用进程直接读文件) |
| 生效上限 | 只使用前 3 个 nameserver,多余的被忽略 |
| 常见托管方 | systemd-resolved(127.0.0.53)、NetworkManager、DHCP 客户端 |
| 规范 | man 5 resolv.conf、RFC 1035 §6 |
| 权限 | 一般 root 可写;被托管时应改上游而不是直接改文件 |
典型使用场景
- 指定内网 DNS 优先、公共 DNS 兜底,兼顾内部域名与外部解析
- 排查解析异常时临时切到 8.8.8.8 或 223.5.5.5 做对比
- 缩短 timeout 与 attempts,让 DNS 故障时的切换更快
- 排查内网短名解析失败:检查 search 域与 ndots 设置
- 容器与 CI 环境注入专用解析器,指向集群内部 DNS
典型配置与验证
典型配置与验证
# /etc/resolv.conf
nameserver 223.5.5.5
nameserver 119.29.29.29
search corp.example.com example.com
options ndots:1 timeout:2 attempts:2 rotate关键指令读法
| 指令 | 作用 | 默认与建议 |
|---|---|---|
| nameserver | 递归服务器地址,最多前 3 个生效 | 至少配 2 个做冗余 |
| search | 短名查询时依次追加的域后缀列表 | 只配必要的后缀,防止查询放大 |
| ndots:n | 名字中点数 ≥n 时先按绝对名解析 | 默认 1,容器内常见 5 |
| timeout:n | 单次查询超时秒数 | 默认 5,内网建议 2 |
| attempts:n | 单个服务器重试次数 | 默认 2,配合 timeout 控制总耗时 |
| rotate | 多 nameserver 轮询使用 | 负载均衡场景按需开启 |
验证当前生效的解析
验证当前生效的解析
cat /etc/resolv.conf # 看实际内容(可能被托管改写)
getent hosts app.example.com # 走完整 NSS 链路,验证配置是否生效
dig @223.5.5.5 app.example.com +short # 绕过本地配置直接问指定服务器
resolvectl status # systemd-resolved 环境下看真实上游search 配了多个后缀又叠加较大的 ndots,会让每次短名解析先尝试多个后缀组合,查询量成倍放大;内网 DNS 压力异常升高时优先检查这两个参数。
Ubuntu 等系统上 /etc/resolv.conf 可能是指向 systemd-resolved 存根的软链接(127.0.0.53)。直接编辑文件表面生效、重启后丢失,正确做法是改 /etc/systemd/resolved.conf 或对应网卡的 DNS 配置。