Linux 作为一种广泛使用的操作系统,其网络配置和管理功能尤为强大,DNS(域名系统)的配置是确保网络服务正常运行的关键环节,本文将详细介绍 Linux 系统中 DNS 的相关概念、配置方法及常见问题解决方案。

DNS 的基本概念
DNS 是互联网的核心服务之一,它负责将人类易于记忆的域名(如 www.example.com)转换为机器能够识别的 IP 地址(如 192.0.2.1),在 Linux 系统中,DNS 的配置通常涉及解析器的设置,即系统如何查询域名对应的 IP 地址,常见的 DNS 解析工具包括 glibc 自带的解析器和 systemd-resolved 服务。
查看 DNS 配置
在 Linux 系统中,可以通过多种方式查看当前的 DNS 配置,最直接的方法是检查 /etc/resolv.conf 文件,该文件列出了系统使用的 DNS 服务器地址,文件中可能包含 nameserver 8.8.8.8 这样的行,表示使用 Google 的公共 DNS 服务器,使用 systemd-resolve --status 命令可以查看 systemd-resolved 服务的详细配置信息。
临时修改 DNS 配置
如果需要临时修改 DNS 配置,可以直接编辑 /etc/resolv.conf 文件,但需要注意的是,某些 Linux 发行版(如 Ubuntu 18.04 及更高版本)可能会在系统重启后覆盖该文件的修改,临时修改适合测试或短期调整场景,可以通过 echo "nameserver 1.1.1.1" >> /etc/resolv.conf 命令添加 Cloudflare 的 DNS 服务器。

永久修改 DNS 配置
为了确保 DNS 配置在系统重启后仍然有效,需要根据 Linux 发行版的不同采取不同的方法,对于使用 NetworkManager 的系统(如 Fedora、Ubuntu),可以通过编辑网络连接配置文件或使用 nmcli 命令行工具修改 DNS。nmcli connection modify "连接名称" ipv4.dns "8.8.8.8 1.1.1.1" 命令可以永久设置 DNS 服务器,对于使用 systemd-networkd 的系统,可以在网络配置文件中添加 DNS= 选项。
使用 systemd-resolved 管理 DNS
现代 Linux 发行版(如 Ubuntu 20.04)默认使用 systemd-resolved 服务管理 DNS 解析,该服务提供了本地 DNS 缓存和 LLMNR(链路本地多播名称解析)功能,要启用该服务,可以使用 systemctl enable --now systemd-resolved 命令,配置文件通常位于 /etc/systemd/resolved.conf,修改后需重启服务以生效。
常见问题排查
在配置 DNS 时,可能会遇到无法解析域名或解析速度慢等问题,可以使用 nslookup 或 dig 命令测试 DNS 解析是否正常。nslookup www.example.com 可以查看域名解析结果,如果解析失败,检查 /etc/resolv.conf 中的 DNS 服务器地址是否正确,或尝试更换公共 DNS 服务器,确保防火墙或 SELinux 没有阻止 DNS 查询请求。

FAQs
Q1: 为什么修改 /etc/resolv.conf 后重启 DNS 配置会失效?
A1: 在某些 Linux 发行版中,/etc/resolv.conf 是由网络管理器(如 NetworkManager 或 systemd-networkd)动态维护的,直接编辑该文件可能会被后续操作覆盖,建议通过发行版提供的工具(如 nmcli)或配置文件永久修改 DNS 设置。
Q2: 如何在 Linux 中测试 DNS 解析是否正常?
A2: 可以使用 nslookup 或 dig 命令测试 DNS 解析。nslookup google.com 会显示域名对应的 IP 地址,如果命令返回超时或错误,可能是 DNS 服务器配置问题或网络连接异常。