1. echo 覆盖写入完整DNS配置(含options)
echo -e "nameserver 223.5.5.5\nnameserver 119.29.29.29\nnameserver 8.8.8.8\noptions edns0 timeout:2 attempts:3 rotate single-request-reopen" > /etc/resolv.conf
>覆盖原有全部内容-e开启换行符\n解析- 一行命令直接生成完整resolv.conf
2. 查看写入结果验证
cat /etc/resolv.conf
补充说明
- 该方式临时生效,Ubuntu systemd-resolved 重启/机器重启会被自动覆盖;
- 若想防止覆盖(不推荐长期用):
chattr +i /etc/resolv.conf
解锁恢复自动管理:
chattr -i /etc/resolv.conf
逐参数完整解释
这是写在 /etc/resolv.conf 里的 DNS 全局优化参数,配合 nameserver 使用:
options timeout:2 attempts:3 rotate single-request-reopen
1. timeout:2
- DNS 查询超时时间,单位秒
- 默认是5秒,这里改成2秒
- 作用:上游DNS无响应时快速切换下一个 nameserver,减少卡顿
2. attempts:3
- DNS 查询重试总次数
- 默认2次,这里设为3次
- 流程:依次轮流向多个DNS服务器重试,全部失败才判定解析失败
3. rotate
- 多 nameserver 轮询策略
- 不加 rotate:永远优先用第一个
nameserver,只有第一个挂了才走第二个 - 加 rotate:每次解析域名随机打乱DNS顺序,均衡负载,避免单一DNS压力过大
4. single-request-reopen
解决你阿里云ECS高频踩坑问题:UDP端口冲突、edu.cn/教育网解析超时/SERVFAIL
Linux glibc 默认行为:
同一个源端口同时发起 A记录(IPv4)+ AAAA记录(IPv6)两条DNS请求。
阿里云安全组、内网网关、部分教育网防火墙容易丢弃双包,直接解析失败。
开启 single-request-reopen 后:
- 分开发送 IPv4、IPv6 查询,一次只发一个请求
- 每次查询自动重新打开新socket、更换端口
- 规避防火墙/网关拦截、端口复用导致的丢包、SERVFAIL、超时
完整组合效果
nameserver 100.100.2.136
nameserver 223.5.5.5
options timeout:2 attempts:3 rotate single-request-reopen edns0
- 2秒没返回就换下一个DNS,总共重试3轮;
- 两台DNS轮流均衡使用;
- 分开查询IPv4/IPv6,大幅降低教育网域名解析失败概率;
- 搭配
edns0支持大包域名解析。