在 Ubuntu系列系统中,例如Mint,/etc/resolv.conf 文件的内容在重启后会被自动还原,而且还原后的DNS被设置为127.0.0.53, 对网络有巨大影响,网速特别慢,在浏览器中查询dns显示为国外的ip,但是在系统网络界面已经设置了本地dns,但是仍然失效,点击查看网络信息,显示正常,但是在命令行界面通过 nslookup baidu.com 查询时,却发现DNS为127.0.0.53 。
通常是因为该文件由系统的网络管理服务(如 NetworkManager 或 systemd-resolved)动态生成和管理。要防止其重启后被自动还原,你可以尝试以下几种解决方法:
问题分析
/etc/resolv.conf 文件用于存储DNS服务器和搜索域信息。在传统系统中,手动编辑这个文件可以配置DNS。
systemd-resolved 是一个用于管理DNS解析的服务。它动态地更新 /etc/resolv.conf,并将DNS请求转发给上游DNS服务器。
符号链接:如果你直接修改 /etc/resolv.conf,更改会丢失,因为它指向 /run/systemd/resolve/stub-resolv.conf(一个动态文件,每次重启会更新)。
让 /etc/resolv.conf 永久生效的方法
方法1:禁用 systemd-resolved
如果你不希望 systemd-resolved 管理DNS,并希望使用自己配置的 DNS 信息:
停止并禁用 systemd-resolved:
sudo systemctl stop systemd-resolved
sudo systemctl disable systemd-resolved
删除符号链接:
sudo rm /etc/resolv.conf
创建新的静态 /etc/resolv.conf 文件:
sudo nano /etc/resolv.conf
在文件中添加你需要的DNS服务器,例如:
nameserver 8.8.8.8
nameserver 8.8.4.4
锁定 /etc/resolv.conf 防止意外修改: 如果其他服务可能覆盖它,可以设置文件锁:
sudo chattr +i /etc/resolv.conf
这会让文件变成不可变,避免被其他程序或服务修改。
保存并退出。
方法2:保持 systemd-resolved 但指定自定义 DNS
如果你希望继续使用 systemd-resolved,但需要自定义 DNS 配置:
创建 /etc/systemd/resolved.conf.d/dns.conf 配置文件:
sudo mkdir -p /etc/systemd/resolved.conf.d
sudo nano /etc/systemd/resolved.conf.d/dns.conf
添加 DNS 服务器配置:
[Resolve]
DNS=8.8.8.8 8.8.4.4
FallbackDNS=1.1.1.1 1.0.0.1
重启 systemd-resolved 服务:
sudo systemctl restart systemd-resolved
检查是否生效:
resolvectl status
方法3:将 /etc/resolv.conf 指向自定义文件
如果你希望使用自己的 DNS 配置,但又不想完全禁用 systemd-resolved:
创建一个静态 /etc/resolv.conf 文件:
sudo nano /etc/resolv-custom.conf
内容如下:
nameserver 8.8.8.8
nameserver 8.8.4.4
用符号链接替换默认 /etc/resolv.conf:
sudo ln -sf /etc/resolv-custom.conf /etc/resolv.conf
总结
如果你希望完全自己管理DNS,建议禁用 systemd-resolved 并创建静态 /etc/resolv.conf。
如果你希望保持 systemd-resolved 运行,但使用自定义DNS,则可以通过配置文件更改它的行为。
检查生效情况时,可以使用:
resolvectl status
根据你的需求选择合适的方案即可让 DNS 配置永久生效。