在Linux命令行环境中配置DNS是网络管理的基础技能之一,正确的DNS配置能够确保系统顺利解析域名,从而访问互联网或内部网络资源,Linux系统中的DNS配置主要通过修改配置文件、使用命令行工具或管理网络服务来实现,具体方法因发行版不同而有所差异,本文将详细介绍常见Linux发行版(如Ubuntu/Debian、CentOS/RHEL)的DNS配置方法,包括临时配置、永久配置以及常见问题的排查思路。

DNS配置基础概念
DNS(域名系统)的作用是将人类可读的域名(如www.example.com)转换为机器可识别的IP地址,在Linux系统中,DNS解析主要依赖以下几个组件:
/etc/resolv.conf
文件:核心DNS配置文件,记录了系统使用的DNS服务器地址(如nameserver 8.8.8.8
)和搜索域(如search example.com
)。- 网络管理工具:如
NetworkManager
(Ubuntu/默认桌面版)、systemd-networkd
(CentOS 7+)、ifcfg
文件(CentOS/RHEL传统方式)等,这些工具会动态生成或管理/etc/resolv.conf
。 /etc/hosts
文件:本地静态域名解析,用于将特定域名直接映射到IP地址,优先级高于DNS。
临时DNS配置(重启失效)
如果仅需临时修改DNS配置(如测试特定DNS服务器),可直接编辑/etc/resolv.conf
文件。
操作步骤:
- 打开文件:使用文本编辑器(如
vi
、nano
)以root权限打开文件:sudo vi /etc/resolv.conf
- 配置DNS服务器:在文件中添加或修改
nameserver
指令,每行指定一个DNS服务器,nameserver 8.8.8.8 # Google DNS nameserver 8.8.4.4 # Google备用DNS nameserver 114.114.114.114 # 国内公共DNS
- 保存退出:在
vi
中按Esc
,输入wq
保存并退出。
注意事项:
- 这种方式是临时性的,重启系统或网络服务后,配置可能会被网络管理工具覆盖(如
NetworkManager
会重新生成该文件)。 - 可通过
cat /etc/resolv.conf
验证配置是否生效。
永久DNS配置(推荐)
永久配置需根据网络管理工具的不同调整,以下是主流发行版的操作方法。
Ubuntu/Debian(使用NetworkManager)
Ubuntu桌面版默认使用NetworkManager
管理网络,配置DNS需通过nmcli
命令或图形界面,直接修改/etc/resolv.conf
会被覆盖。

使用nmcli
命令(推荐)
- 查看当前网络连接:
nmcli connection show
假设连接名为
ens33
(根据实际输出修改)。 - 修改DNS服务器:
sudo nmcli connection modify ens33 ipv4.dns "8.8.8.8 114.114.114.114"
- 重启网络连接使配置生效:
sudo nmcli connection down ens33 && sudo nmcli connection up ens33
- 验证配置:
cat /etc/resolv.conf # 查看是否添加了指定的DNS服务器
修改Netplan配置文件(Ubuntu 18.04+)
Netplan是Ubuntu 18.04及以后版本的网络配置工具,配置文件通常位于/etc/netplan/
目录下(如01-network-manager-all.yaml
)。
- 编辑配置文件:
sudo vi /etc/netplan/01-network-manager-all.yaml
- 添加DNS配置(示例):
network: version: 2 ethernets: ens33: dhcp4: yes dhcp4-overrides: dns: ["8.8.8.8", "114.114.114.114"] nameservers: addresses: [8.8.8.8, 114.114.114.114] search: [example.com] # 可选,指定默认搜索域
- 应用配置:
sudo netplan apply
CentOS/RHEL(使用NetworkManager或systemd-networkd)
NetworkManager(CentOS 7+默认)
- 查看连接名称:
nmcli connection show
- 修改DNS:
sudo nmcli connection modify "ens33" ipv4.dns "8.8.8.8 114.114.114.114"
- 重启连接:
sudo nmcli connection down "ens33" && sudo nmcli connection up "ens33"
使用ifcfg
文件(CentOS/RHEL传统方式)
若使用ifcfg
文件(通常位于/etc/sysconfig/network-scripts/
,如ifcfg-ens33
),需修改以下参数:
sudo vi /etc/sysconfig/network-scripts/ifcfg-ens33
添加或修改:

DNS1=8.8.8.8
DNS2=114.114.114.114
DOMAIN=example.com # 可选,搜索域
重启网络服务:
sudo systemctl restart network
systemd-networkd(CentOS 8+可选)
CentOS 8+可使用networkd
,配置文件位于/etc/systemd/network/
(如ens33.network
):
[Match] Name=ens33 [Network] DNS=8.8.8.8 114.114.114.114 Domains=example.com
重启服务:
sudo systemctl restart systemd-networkd
其他发行版(如Arch Linux)
Arch Linux默认使用systemd-networkd
,配置方法与上述CentOS的networkd
类似,或通过dhcpcd
配置(修改/etc/dhcpcd.conf
):
sudo vi /etc/dhcpcd.conf
添加:
static domain_name_servers=8.8.8.8 114.114.114.114
重启dhcpcd
服务:
sudo systemctl restart dhcpcd
DNS配置验证与问题排查
验证DNS解析
- 使用
nslookup
:nslookup www.baidu.com
若返回IP地址,说明DNS配置生效。
- 使用
dig
(更详细):dig www.baidu.com
- 使用
ping
:ping www.baidu.com
常见问题排查
- 问题1:
/etc/resolv.conf
被自动覆盖。
原因:网络管理工具(如NetworkManager)自动生成该文件。
解决:通过对应工具的配置文件(如Netplan、nmcli)修改DNS,而非直接编辑/etc/resolv.conf
。 - 问题2:域名解析失败,但
/etc/hosts
配置正确。
原因:/etc/hosts
优先级高于DNS,检查域名是否在hosts
中被错误映射。 - 问题3:多个DNS服务器配置后部分域名无法解析。
原因:DNS服务器顺序问题,系统按nameserver
顺序依次查询,可调整DNS服务器顺序或超时时间(通过/etc/resolv.conf
的options timeout:1
)。
相关问答FAQs
Q1:为什么直接修改/etc/resolv.conf
后重启配置会丢失?
A:Linux系统中的网络管理工具(如NetworkManager、systemd-networkd)会动态管理/etc/resolv.conf
文件,当网络服务重启或系统重启时,这些工具会根据自身的配置(如Netplan、ifcfg文件)重新生成/etc/resolv.conf
,覆盖手动修改的内容,永久配置应通过网络管理工具的配置文件或命令实现,而非直接编辑/etc/resolv.conf
。
Q2:如何配置DNS以支持特定域名的本地解析?
A:可通过修改/etc/hosts
文件实现本地静态解析,将test.local
解析为168.1.100
,操作如下:
sudo vi /etc/hosts
168.1.100 test.local
保存后,系统访问test.local
时会直接使用该IP,无需查询DNS服务器,若需覆盖DNS解析结果,/etc/hosts
的优先级始终高于DNS配置。