跳转到主内容
趣航编程网 - 趣学编程,启航技术之路!

Linux系统DNS解析配置 修改resolv.conf方法

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

相关文章