在Linux系统中设置DNS服务,关键取决于你使用的发行版、网络管理工具以及是否需要持久化配置。通常涉及修改< b>resolv.conf、使用< b>systemd-resolved、< b>NetworkManager或< b>netplan等机制。以下从临时生效、永久生效及常见场景三个层面给出专业配置方法。

首先理解核心文件:/etc/resolv.conf 是传统DNS客户端配置入口,其中 nameserver 指定DNS服务器IP,search 定义域名搜索列表。直接编辑该文件可以立即生效,但很多现代系统会通过工具动态生成此文件,手工修改可能被覆盖。执行 echo "nameserver 8.8.8.8" > /etc/resolv.conf 即可临时设置,但重启网络服务或系统后可能丢失。注意,此文件通常被符号链接指向systemd-resolved或NetworkManager生成的目标,因此需谨慎处理。
对于使用systemd-resolved的系统(如较新的Ubuntu、Fedora),推荐使用 resolvectl 命令。先执行 systemctl enable --now systemd-resolved 启动服务,然后通过 resolvectl dns eth0 1.1.1.1 为指定的网络接口(如eth0)设置DNS。若要永久生效,需要修改 /etc/systemd/resolved.conf 或 /etc/systemd/resolved.conf.d/ 下的配置文件,设置 DNS=8.8.8.8 和 FallbackDNS=1.1.1.1,然后执行 systemctl restart systemd-resolved。同时应确保 /etc/resolv.conf 符号链接指向 /run/systemd/resolve/stub-resolv.conf 或 /usr/lib/systemd/resolv.conf,以便客户端解析流量通过本地回环接口 127.0.0.53 转发。
对于使用NetworkManager的桌面或服务器环境,推荐使用 nmcli 命令管理DNS。先查看连接名称:nmcli con show。然后修改指定连接的IPv4 DNS:nmcli con mod "Wired connection 1" ipv4.dns "8.8.8.8 1.1.1.1",并设置 ipv4.ignore-auto-dns yes 忽略DHCP自动获取的DNS。最后重启连接生效:nmcli con down "Wired connection 1" && nmcli con up "Wired connection 1"。这种方式会将配置写入NetworkManager的配置文件,永久保留。
对于使用netplan的Ubuntu Server(18.04及以上),配置位于 /etc/netplan/*.yaml。在对应网络接口的 dhcp4: true 或静态IP配置下,添加 nameservers: 字段,例如:addresses: [8.8.8.8, 1.1.1.1],同时可设置 search: [example.com]。修改完成后执行 netplan apply 使配置生效。如果使用DHCP,建议显式设置 dhcp4-overrides: 下的 use-dns: false,避免覆盖手工指定的DNS。
对于传统sysconfig风格的发行版(如CentOS/RHEL 7及更早版本),配置文件为 /etc/sysconfig/network-scripts/ifcfg-eth0。在此文件中添加 DNS1=8.8.8.8、DNS2=1.1.1.1,然后执行 systemctl restart network 或 service network restart。在CentOS/RHEL 8及以上版本,系统改用NetworkManager和systemd-resolved,可参照前述nmcli方式,或直接使用 nmcli 修改。
此外,还有一种全局方法:修改 /etc/resolv.conf 并设置其不可变属性,防止被其他工具覆盖。执行 chattr +i /etc/resolv.conf 后手工写入nameserver。但此方法不推荐,因为它会阻断系统管理工具的正常更新,可能导致网络故障难排查。更合理的方式是配置系统对应的管理工具,并让其自动生成正确的resolv.conf。
在容器或轻量级环境中,如果没有systemd或NetworkManager,可以直接编辑 /etc/resolv.conf 并确保网络服务不会覆盖它。在树莓派或嵌入式Linux中,也可通过修改 /etc/dhcp/dhclient.conf 预先设置DNS:supersede domain-name-servers 8.8.8.8;,然后重启dhclient。但最通用、最兼容的方法是先判断系统使用哪个网络守护进程,再对症下药。
最后验证配置是否生效,可以使用 resolvectl status(systemd环境)、nmcli dev show(NetworkManager环境)、netplan get(netplan环境)或直接运行 cat /etc/resolv.conf。实际测试解析可用 nslookup example.com 或 dig example.com。如果DNS配置未生效,请检查防火墙是否阻止UDP 53端口、DNS服务器是否可达,以及是否存在多个网络管理工具冲突。
总结:设置Linux DNS服务的核心原则是使用系统统一的网络配置接口,而不是直接篡改resolv.conf。临时调试可直接改resolv.conf,持久生效则根据发行版选择 resolvectl、nmcli、netplan 或 ifcfg 文件。生产环境建议至少配置两个DNS服务器以提供冗余,并确保DNS查询延迟和解析正确性满足业务需求。

查看详情

查看详情