本教程的目标是禁用 systemd-resolved
的管理,并直接编辑 /etc/resolv.conf
文件,然后“锁定”它以防止被其他服务覆盖。
准备工作:
在进行任何修改之前,建议您通过 SSH 连接到服务器,并拥有 sudo
权限。
步骤一:检测 /etc/resolv.conf
是否使用了软链接,如果是则删除
systemd-resolved
在运行时会将 /etc/resolv.conf
设置为指向 /run/systemd/resolve/stub-resolv.conf
的软链接。我们需要删除这个软链接才能手动创建和编辑文件。
- 检测
/etc/resolv.conf
是否是软链接:ls -l /etc/resolv.conf
预期输出:
如果它是软链接,输出会是类似这样,开头有l
并且有->
指向目标文件:lrwxrwxrwx 1 root root 39 Apr 1 10:00 /etc/resolv.conf -> ../run/systemd/resolve/stub-resolv.conf
如果它不是软链接(即一个普通文件),输出会是这样,开头是-
:-rw-r--r-- 1 root root 128 Apr 1 10:00 /etc/resolv.conf
- 如果是软链接,则删除它:
bash sudo rm /etc/resolv.conf
注意: 此时,您的 DNS 解析可能暂时失效,直到您完成后续步骤并重新配置。
步骤二:检测 /etc/resolv.conf
是否锁定,如果锁定应该先解锁
“锁定”通常指的是文件系统属性的 immutable
(不可变) 标记,它阻止任何用户(包括 root)对文件进行修改、删除或重命名。这个标记是通过 chattr
命令设置的。
- 检测文件是否被锁定 (
immutable
):lsattr /etc/resolv.conf
预期输出:
如果文件被锁定,输出会显示i
属性:----i--------e-- /etc/resolv.conf
如果文件没有被锁定,输出中不会有i
属性:-------------e-- /etc/resolv.conf
- 如果文件被锁定 (有
i
属性),则解锁它:bash sudo chattr -i /etc/resolv.conf
注意: 如果在步骤一中/etc/resolv.conf
是软链接且您已将其删除,那么这一步就无需执行,因为软链接本身无法被chattr +i
锁定。只有普通文件才能被锁定。
步骤三:禁用 systemd-resolved
服务并修改 /etc/resolv.conf
中的 DNS 地址
为了确保您的手动修改不会被 systemd-resolved
覆盖,我们需要完全停止并禁用它。
- 停止并禁用
systemd-resolved
服务:sudo systemctl stop systemd-resolved sudo systemctl disable systemd-resolved
这会阻止systemd-resolved
在系统启动时自动运行,并停止它当前的实例。 - 创建或编辑
/etc/resolv.conf
文件并添加 DNS 服务器:
现在/etc/resolv.conf
应该已经不存在(如果之前是软链接)或是一个普通文件。使用您喜欢的文本编辑器(如nano
或vim
)来编辑它。sudo nano /etc/resolv.conf
在文件中添加您想要使用的 DNS 服务器地址。每一行nameserver
后跟一个 IP 地址。 您可以添加多个,它们将按顺序尝试。通常也建议添加search
域。 示例内容:nameserver 8.8.8.8
nameserver 8.8.4.4
保存文件并退出。 (在nano
中,按Ctrl+O
保存,Ctrl+X
退出)
步骤四:修改完毕后重新锁定 /etc/resolv.conf
为了防止未来其他程序(即使 systemd-resolved
被禁用,也可能有其他脚本或旧的网络服务尝试修改它)意外地覆盖您的 /etc/resolv.conf
,您可以重新锁定它。
- 锁定
/etc/resolv.conf
文件 (设置immutable
属性):sudo chattr +i /etc/resolv.conf
这将使/etc/resolv.conf
文件变为不可变。即使是root
用户,在不先解除锁定的情况下,也无法修改或删除它。 - 验证文件是否已锁定:
bash lsattr /etc/resolv.conf
确保输出中显示了i
属性:----i--------e-- /etc/resolv.conf
善后工作(可选,但推荐):
- 重启网络服务 (如果需要)
在某些情况下,即使您修改了/etc/resolv.conf
,某些应用程序或缓存可能仍在使用旧的 DNS 信息。重启网络服务可以确保所有组件都读取新的配置。sudo systemctl restart networking # 重启传统的网络服务
或者,重启整个系统以确保所有服务都以新配置启动:sudo reboot
- 确认最终 DNS 配置:
重启后,再次检查/etc/resolv.conf
:bash cat /etc/resolv.conf
然后进行 DNS 查询:bash nslookup google.com
确保 DNS 查询成功,并且Server:
行显示的是您配置的 DNS 服务器。
解除锁定的方法:
如果您将来需要再次修改 /etc/resolv.conf
,请记住先解除锁定:
sudo chattr -i /etc/resolv.conf
然后才能进行编辑。编辑完成后,如果您希望再次锁定,请重复步骤四。
风险和注意事项:
- 禁用
systemd-resolved
: 这将禁用 DNS 缓存,可能导致 DNS 解析稍慢,并失去 DNSSEC 和 DNS over TLS 的安全性。对于大多数现代服务器,使用systemd-resolved
或netplan
提供的 DNS 管理功能更为推荐。 chattr +i
的风险: 锁定文件会阻止任何程序修改它。如果系统升级或其他管理工具尝试更新此文件,可能会导致错误或警告。在进行系统升级或安装新网络管理软件之前,请考虑暂时解锁/etc/resolv.conf
。- DHCP: 如果您的服务器通过 DHCP 获取 IP 地址,并且 DHCP 服务器提供了 DNS 信息,那么即使您锁定了
/etc/resolv.conf
,DHCP 客户端也可能仍然尝试更新 DNS 信息(虽然因为文件被锁定而无法写入)。这通常不会导致问题,因为锁定了文件,但了解这种潜在行为很重要。如果您使用静态 IP 配置,则无需担心此问题。
好的,以下是 Google Public DNS、Cloudflare DNS 和 Quad9 的公共 DNS 服务器地址,包括 IPv4 和 IPv6。
这些都是知名的、可靠的公共 DNS 服务,提供更快的解析速度和隐私保护(具体隐私政策请查阅各服务官网)。
1. Google Public DNS
Google 的公共 DNS 服务,全球范围内广泛使用。
- IPv4 地址:
- 主:
8.8.8.8
- 备:
8.8.4.4
- 主:
- IPv6 地址:
- 主:
2001:4860:4860::8888
- 备:
2001:4860:4860::8844
- 主:
nameserver 8.8.8.8
nameserver 8.8.4.4
nameserver 2001:4860:4860::8888
nameserver 2001:4860:4860::8844
2. Cloudflare DNS (1.1.1.1)
Cloudflare 提供的高性能和隐私保护 DNS 服务,以其速度和不记录用户 IP 地址而闻名。
- IPv4 地址:
- 主:
1.1.1.1
- 备:
1.0.0.1
- 主:
- IPv6 地址:
- 主:
2606:4700:4700::1111
- 备:
2606:4700:4700::1001
- 主:
nameserver 1.1.1.1
nameserver 1.0.0.1
nameserver 2606:4700:4700::1111
nameserver 2606:4700:4700::1001
3. Quad9
Quad9 是一个专注于安全和隐私的公共 DNS 服务,它会过滤恶意域名(如钓鱼网站、恶意软件分发等)。
- IPv4 地址:
- 主 (带安全过滤):
9.9.9.9
- 备 (带安全过滤):
149.112.112.112
- 不带过滤 (仅DNS):
9.9.9.10
- 不带过滤 (并EDNS Client Subnet支持):
149.112.112.10
- 主 (带安全过滤):
- IPv6 地址:
- 主 (带安全过滤):
2620:fe::fe
- 备 (带安全过滤):
2620:fe::9
- 不带过滤 (仅DNS):
2620:fe::10
- 不带过滤 (并EDNS Client Subnet支持):
2620:fe::fe:10
- 主 (带安全过滤):
如何选择:
- 速度优先: Cloudflare (1.1.1.1) 通常以其极快的解析速度而著称。
- 兼顾速度和稳定性: Google Public DNS 是非常成熟和稳定的选择。
- 安全优先: Quad9 提供了内置的恶意域名过滤功能,有助于提高上网安全性。
您可以根据自己的需求选择一个或多个进行配置。通常建议配置至少两个,一个作为主 DNS,另一个作为备用,以提高可靠性。