作为Ubuntu用户,您可能曾经遇到过“域名无法访问但IP可以连接”的情况。这时问题的根源大多数在于DNS设置。尤其是最近的Ubuntu默认使用名为systemd-resolved
的DNS解析器守护进程,因此了解其结构非常重要。
1. DNS请求的流程
仔细阅读下面的摘要并理解,几乎所有问题都会得到解决。
- 用户在浏览器等应用中请求域名
- Linux通常通过读取
/etc/resolv.conf
来解析DNS(该文件与/run/systemd/resolve/stub-resolv.conf
存在符号链接) /run/systemd/resolve/stub-resolv.conf
被设置为127.0.0.53
,因此systemd-resolved
出现了。- 系统中的
systemd-resolved
受配置文件/etc/systemd/resolved.conf
的控制 - 换句话说,
systemd-resolved
从/etc/systemd/resolved.conf
中查询配置的DNS服务器, - 收到响应并完成域名到IP地址的转换
2. 核心组成部分总结
如上所述,systemd-resolved
有四个核心配置文件。理解这些文件的作用是关键。
2-1. /etc/resolv.conf
- 传统Linux系统中读取DNS服务器列表的位置
- 但现在为了与systemd兼容,必须以符号链接存在
- 通常应该设置为如下,以正常工作:
bash /etc/resolv.conf -> ../run/systemd/resolve/stub-resolv.conf
- 也就是说,该文件在当前系统中起到“传统应用与systemd-resolved之间的中介作用”
2-2. /run/systemd/resolve/stub-resolv.conf
- 包含由
systemd-resolved
管理的本地DNS存根服务器(127.0.0.53)信息 - 当
/etc/resolv.conf
指向该文件时,所有DNS请求都会经过systemd-resolved
2-3. /etc/systemd/resolved.conf
systemd-resolved
的核心配置文件- 可以在这里设置
DNS=
、FallbackDNS=
等项以指定优先级 - 永久性设置,在重启后保持有效
2-4. /run/systemd/resolve/resolv.conf
- 包含
systemd-resolved
管理的实际DNS服务器列表的文件 - 高级用户如果将此文件链接到
/etc/resolv.conf
,则可以直接请求DNS服务器(绕过设置)
3. 问题发生的例子:ISP提供的路由器中设置的DNS服务器不稳定
- 韩国著名ISP KT的DNS服务器(例如:
168.126.63.1
)被设置在路由器中,但我没有控制该路由器的权限时,DNS问题会间歇性发生。 - KT DNS的响应速度不稳定,或UDP/TCP握手失败的情况较多
- 当systemd-resolved日志中反复出现以下消息时,是问题的迹象:
使用降级特性集TCP而不是UDP请求DNS服务器168.126.63.1。
使用降级特性集UDP而不是TCP请求DNS服务器168.126.63.1。 - 最终导致域名解析失败→无法访问网站的现象
4. 推荐DNS服务器
名称 | 地址 | 特点 |
---|---|---|
Google DNS | 8.8.8.8 , 8.8.4.4 |
快速且稳定 |
Cloudflare DNS | 1.1.1.1 , 1.0.0.1 |
速度快且隐私保护优秀 |
Quad9 | 9.9.9.9 |
提供安全威胁过滤 |
5. 稳定的DNS配置方法
- 打开
/etc/systemd/resolved.conf
文件
[Resolve]
DNS=1.1.1.1 8.8.8.8
FallbackDNS=9.9.9.9
- 应用设置
sudo systemctl restart systemd-resolved
- 检查
/etc/resolv.conf
是否正确链接
ls -l /etc/resolv.conf
→ 应该链接到/run/systemd/resolve/stub-resolv.conf
如果有需要,可以强制重置:
sudo ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf
6. 注意NetworkManager的干预
使用GUI环境的Ubuntu中,NetworkManager
可能会覆盖DNS设置
- 如果启用了自动DNS设置,
systemd-resolved
的设置可能会被忽略 - 解决方法:
bash nm-connection-editor
→ 编辑连接 → IPv4选项卡 → 关闭自动DNS → 输入手动DNS
7. 结论
- 由于KT DNS经常报告不稳定性,建议避免使用
- 通过
systemd-resolved
进行DNS配置是提高Ubuntu稳定性的强大方法 - 准确理解和应用设置,可以降低因域名解析失败带来的压力
8. Jesse的评论
基于理解的设置就是最强大的安全和维护。希望这篇文章能对那些在Ubuntu中对DNS设置感到困惑的人们提供实质性的帮助。
댓글이 없습니다.