在Linux操作系统中,域名系统(DNS)负责将人类可读的网址(如www.google.com)转换为机器可识别的IP地址,修改DNS设置是常见的网络管理任务,旨在提升访问速度、增强网络安全或绕过网络限制,本文将系统地介绍在不同Linux发行版中修改DNS的多种方法,从临时配置到永久生效,确保您能根据自身环境选择最合适的方案。
理解核心文件:/etc/resolv.conf
在所有Linux系统中,/etc/resolv.conf
是DNS客户端的核心配置文件,它包含了DNS服务器的IP地址,一个典型的文件内容如下:
# This file is managed by man:systemd-resolved(8). Do not edit. nameserver 127.0.0.53 options edns0 trust-ad search localdomain
这里的nameserver
行指定了DNS服务器,在现代Linux发行版中,直接手动编辑此文件通常不是最佳实践,因为该文件往往由网络管理服务(如NetworkManager
或systemd-resolved
)动态生成,任何直接修改都可能在系统重启或网络服务重启后被覆盖。
使用 NetworkManager 修改DNS(适用于 RHEL/CentOS/Fedora 等)
NetworkManager
是许多主流发行版,特别是Red Hat系列,默认使用的网络管理工具,它提供了命令行和图形界面两种方式来管理网络设置,包括DNS。
使用 nmcli
命令行工具
nmcli
功能强大,适合脚本化和远程管理。
-
查看网络连接名称:
nmcli connection show
这会列出所有网络连接,如“Wired connection 1”或“ens33”。
-
修改指定连接的DNS服务器:
sudo nmcli connection modify "Wired connection 1" ipv4.dns "8.8.8.8 1.1.1.1"
这里将Google的
8.8.8
和Cloudflare的1.1.1
设置为DNS服务器,请将连接名称替换为您自己的。 -
应用更改并重启连接:
sudo nmcli connection up "Wired connection 1"
此操作会保存配置并立即生效,且在系统重启后依然保留。
使用 systemd-resolved 修改DNS(适用于 Ubuntu 18.04+、Debian、Arch 等)
systemd-resolved
是现代Ubuntu、Debian和Arch Linux等发行版中广泛使用的本地DNS解析服务,它通过/etc/systemd/resolved.conf
文件进行配置。
-
编辑配置文件:
使用您喜欢的文本编辑器(如nano或vim)打开文件:sudo nano /etc/systemd/resolved.conf
-
配置DNS服务器:
在[Resolve]
部分,找到并修改(或取消注释并添加)以下行:[Resolve] DNS=8.8.8.8 1.1.1.1 FallbackDNS=9.9.9.9 #Domains= #LLMNR=no #MulticastDNS=no #DNSSEC=no #DNSOverTLS=no #Cache=yes
DNS=
指定了首选的DNS服务器,FallbackDNS=
则在主DNS不可用时使用。 -
重启服务并更新符号链接:
保存文件后,重启systemd-resolved
服务以应用更改:sudo systemctl restart systemd-resolved
为了确保
/etc/resolv.conf
指向正确的存根文件,可以执行:sudo ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf
此方法同样能实现永久生效。
使用 Netplan 修改DNS(适用于 Ubuntu 18.04+ 服务器版)
Ubuntu Server 18.04及更高版本使用Netplan
作为网络配置工具,其配置文件位于/etc/netplan/
目录下,通常为.yaml
格式。
-
找到并编辑YAML配置文件:
sudo nano /etc/netplan/01-netcfg.yaml
-
在配置中添加DNS:
在对应的网络接口配置下,添加nameservers
部分:network: version: 2 ethernets: ens33: dhcp4: yes nameservers: addresses: [8.8.8.8, 1.1.1.1]
-
应用配置:
保存文件后,运行以下命令使配置生效:sudo netplan apply
netplan
会自动处理后台服务的配置,使其永久生效。
验证DNS设置
无论采用哪种方法,验证配置是否成功都至关重要,可以使用以下命令:
-
查看当前生效的DNS:
cat /etc/resolv.conf
或对于
systemd-resolved
:resolvectl status
-
使用查询工具测试:
nslookup example.com
或使用更强大的
dig
命令:dig example.com
查看命令输出,确认解析请求是由您新设置的DNS服务器处理的。
方法总结与对比
下表总结了不同修改DNS方法的特点:
方法 | 命令/文件 | 适用场景 | 持久性 |
---|---|---|---|
NetworkManager | nmcli |
RHEL/CentOS/Fedora、桌面版Ubuntu | 永久 |
systemd-resolved | /etc/systemd/resolved.conf |
Ubuntu/Debian/Arch (现代系统) | 永久 |
Netplan | /etc/netplan/*.yaml |
Ubuntu Server (18.04+) | 永久 |
临时修改 | echo "nameserver ..." > /etc/resolv.conf |
临时测试或救援模式 | 重启失效 |
选择正确的DNS修改方法,不仅能解决当前的网络问题,还能确保系统配置的稳定性和可维护性,理解您所用Linux发行版的网络管理架构是成功配置的关键。