直接改 /etc/resolv.conf 失效是因为该文件被 systemd-resolved、NetworkManager 或 resolvconf 动态管理,通常是软链接(如指向 /run/systemd/resolve/stub-resolv.conf)或自动生成,修改后会被立即覆盖。
直接改
为什么经常失效
因为现代 Linux 发行版大多用
、
或
动态管理这个文件,
往往只是个软链接(比如指向
)。你刚保存,过几秒就被覆盖回去了。
验证方式很简单:
运行
,如果输出里带
,说明是软链接
看文件开头有没有注释,比如
或
这时候硬改文件等于白忙——得先停掉对应服务或改配置源头。
停掉
再写死
这是最直截了当的“夺回控制权”方式,适合服务器环境或明确不想用 systemd 解析器的场景。
操作步骤:
停服务:
禁自启:
删软链接:
新建静态文件:
加只读锁防覆盖(可选):
(改之前记得先
)
注意:
能显著缓解 DNS 卡顿或超时问题,尤其在公网解析不稳定时。
Docker Desktop(linux)
当前 Docker 最新稳定版本之一,主要针对稳定性和兼容性进行了修复优化,适合生产环境与日常开发使用。该版本继续强化 AI 开发支持、容器日志管理以及 Docker Engine 的安全能力,对 Windows/macOS/Linux 平台兼容性进行了进一步优化。
下载
用
配置 NetworkManager 的 DNS
桌面环境或使用 NetworkManager 管理网络时,这是推荐路径。它不碰
,而是让 NM 在连接激活时生成配置。
关键命令:
查当前连接名:
设 DNS 并禁用 DHCP 分配:
重启连接生效:
别漏掉
,否则 DHCP 返回的 DNS 仍会覆盖你的设置。
里的
行数和顺序有影响吗
有,而且很实际:
glibc 解析器按顺序尝试
行,只用第一个响应的;后续服务器仅在前一个超时或失败时启用
最多支持 3 行
(第 4 行起被忽略)
不要把内网 DNS(如
)放在公网 DNS 后面——一旦前面那个慢或挂了,所有请求都会卡满 timeout
IPv6
(如
)和 IPv4 混排没问题,但若系统关了 IPv6,这行会被跳过
真正容易被忽略的是:很多故障不是 DNS 服务器本身坏了,而是
里混进了被屏蔽的 DNS(比如某些云厂商默认塞的内网地址),又没配
,结果整条链路卡在第一个无效地址上等 5 秒才切下一个。
/etc/resolv.confsystemd-resolvedNetworkManagerresolvconf/etc/resolv.conf/run/systemd/resolve/stub-resolv.confls -l /etc/resolv.conf-># Generated by NetworkManager# Managed by systemd-resolvedsystemd-resolvedresolv.confsudo systemctl stop systemd-resolvedsudo systemctl disable systemd-resolvedsudo rm /etc/resolv.confsudo tee /etc/resolv.conf <<'EOF'
nameserver 223.5.5.5
nameserver 114.114.114.114
options timeout:1 attempts:2 rotate
EOFsudo chattr +i /etc/resolv.confchattr -ioptions timeout:1 attempts:2 rotatenmcliresolv.confnmcli connection show --activesudo nmcli connection modify "Wired connection 1" ipv4.dns "8.8.8.8 1.1.1.1" ipv4.ignore-auto-dns yessudo nmcli connection down "Wired connection 1" && sudo nmcli connection up "Wired connection 1"ipv4.ignore-auto-dns yesresolv.confnameservernameservernameserver10.x.x.xnameserver2400:3200::1resolv.confrotate