Administrator
Published on 2026-07-21 / 2 Visits
0

echo 覆盖写入完整DNS配置

#AI

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

补充说明

  1. 该方式临时生效,Ubuntu systemd-resolved 重启/机器重启会被自动覆盖;
  2. 若想防止覆盖(不推荐长期用):
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 后:

  1. 分开发送 IPv4、IPv6 查询,一次只发一个请求
  2. 每次查询自动重新打开新socket、更换端口
  3. 规避防火墙/网关拦截、端口复用导致的丢包、SERVFAIL、超时

完整组合效果

nameserver 100.100.2.136
nameserver 223.5.5.5
options timeout:2 attempts:3 rotate single-request-reopen edns0
  1. 2秒没返回就换下一个DNS,总共重试3轮;
  2. 两台DNS轮流均衡使用;
  3. 分开查询IPv4/IPv6,大幅降低教育网域名解析失败概率;
  4. 搭配 edns0 支持大包域名解析。