使用 resolvectl 临时指定 DNS 服务器
在日常运维中,我们经常需要临时切换 DNS 服务器来排查域名解析问题。传统做法是修改 /etc/resolv.conf,但在使用 systemd-resolved 的现代 Linux 发行版中,resolvectl 提供了更优雅的解决方案。
为什么用 resolvectl
传统的修改 /etc/resolv.conf 方式有几个痛点:
- systemd-resolved 管理下会被覆盖:直接编辑
/etc/resolv.conf可能无效,因为该文件是一个指向/run/systemd/resolve/stub-resolv.conf的符号链接 - 需要 root 权限:编辑系统文件必须 sudo
- 容易忘记还原:排查完问题后忘记改回来,可能影响业务
而 resolvectl 的优势:
| 特性 | 传统方式 | resolvectl |
|---|---|---|
| 修改配置文件 | ✅ | ❌ |
| 需要 root | ✅ | ❌(per-link) |
| 重启后恢复 | 需手动还原 | ✅ 自动恢复 |
| 影响范围 | 全局 | 可按网卡控制 |
查看当前 DNS 状态
# 查看全局 DNS 配置
resolvectl status
# 查看指定网卡
resolvectl status eth0
# 查看当前生效的 DNS 服务器
resolvectl dns
输出示例:
Global
Protocols: +LLMNR +mDNS -DNSOverTLS DNSSEC=no/unsupported
Resolving DNS Servers: 192.168.1.1
Fallback DNS Servers: 8.8.8.8
Link 2 (eth0)
Current Scopes: DNS
Protocols: +LLMNR +mDNS -DNSOverTLS DNSSEC=no/unsupported
Resolving DNS Servers: 192.168.1.1
DNS Domain: lan