在Linux系统中,命令行设置DNS是网络管理中的常见操作,无论是临时修改还是永久配置,掌握相关命令都能高效管理域名解析服务,DNS(域名系统)的作用是将人类可读的域名转换为机器可识别的IP地址,正确配置DNS对网络访问至关重要,以下将详细介绍不同Linux发行版中通过命令行设置DNS的方法,包括临时修改、永久配置以及常见问题的解决方案。

临时修改DNS配置
临时修改DNS配置适用于测试场景或重启后无需保留的配置,重启网络服务或系统后修改会失效,主要方法有两种:
-
使用
resolv.conf文件
resolv.conf是Linux系统中存放DNS解析器的核心文件,直接编辑该文件可立即生效。- 查看当前配置:
cat /etc/resolv.conf - 编辑文件(需root权限):
sudo nano /etc/resolv.conf - 添加或修改DNS服务器,
nameserver 8.8.8.8 # Google DNS nameserver 8.8.4.4 # 备用DNS nameserver 223.5.5.5 # 阿里DNS
- 保存后立即生效,但重启网络服务(如
sudo systemctl restart NetworkManager)或系统后会恢复默认配置。
- 查看当前配置:
-
使用
nmcli命令(NetworkManager工具)
若系统使用NetworkManager(如Ubuntu、CentOS 7+),可通过nmcli临时修改DNS:sudo nmcli connection show # 查看当前连接名称 sudo nmcli connection modify "连接名称" ipv4.dns "8.8.8.8 8.8.4.4" # 设置DNS sudo nmcli connection down "连接名称" && sudo nmcli connection up "连接名称" # 重启连接
此方法修改后仅在当前会话有效,NetworkManager重启后可能恢复。
(图片来源网络,侵删)
永久修改DNS配置
永久配置需根据系统使用的网络管理工具选择对应方法,确保重启后配置不丢失。
基于NetworkManager的系统(Ubuntu 18.04+、CentOS 7+、Fedora等)
-
使用
nmcli命令sudo nmcli connection modify "连接名称" ipv4.dns "8.8.8.8 223.5.5.5" # 设置DNS sudo nmcli connection modify "连接名称" ipv4.ignore-auto-dns yes # 忽略DHCP分配的DNS sudo nmcli connection up "连接名称" # 重启连接使配置生效
验证配置:
nmcli connection show "连接名称" | grep ipv4.dns -
修改NetworkManager配置文件
编辑/etc/NetworkManager/NetworkManager.conf,在[main]段落添加:
(图片来源网络,侵删)dns=none
然后编辑
/etc/resolv.conf,将其设为只读(防止被覆盖):sudo chattr +i /etc/resolv.conf
最后重启NetworkManager:
sudo systemctl restart NetworkManager
基于systemd-networkd的系统(Debian 10+、Ubuntu 20.04+等)
使用netplan或networkd配置文件:
- 编辑网络配置文件(如
/etc/netplan/01-netcfg.yaml):network: version: 2 ethernets: enp0s3: # 网卡名称 dhcp4: no addresses: [192.168.1.100/24] # IP地址(可选) nameservers: addresses: [8.8.8.8, 223.5.5.5] search: [example.com] # 域名后缀(可选)应用配置:
sudo netplan apply
基于传统ifupdown的系统(Debian 9、Ubuntu 16.04等)
编辑/etc/network/interfaces文件:
auto enp0s3
iface enp0s3 inet static
address 192.168.1.100
netmask 255.255.255.0
dns-nameservers 8.8.8.8 223.5.5.5
重启网络服务:sudo systemctl restart networking
不同发行版的DNS配置对比
| 发行版系列 | 主要网络工具 | 永久配置命令/文件 | 临时配置方法 |
|---|---|---|---|
| Ubuntu/Debian | NetPlan/NetworkManager | /etc/netplan/*.yaml或nmcli |
直接编辑/etc/resolv.conf |
| CentOS/RHEL 7+ | NetworkManager | nmcli或/etc/NetworkManager/ |
nmcli临时修改 |
| Arch Linux | systemd-networkd | /etc/systemd/networkd/*.network |
resolvectl命令 |
| openSUSE | NetworkManager | YaST工具或nmcli |
nmcli临时修改 |
常见问题排查
-
DNS修改后不生效
- 检查
/etc/resolv.conf是否被NetworkManager或其他服务覆盖,可通过chattr +i锁定文件。 - 重启网络服务或系统:
sudo systemctl restart networking或reboot。 - 验证DNS解析:
nslookup example.com或dig example.com。
- 检查
-
多网卡环境DNS冲突
若系统有多张网卡,可能导致DNS解析混乱,可通过ip route检查默认路由,或为指定网卡配置DNS:sudo nmcli connection modify "enp0s3" ipv4.dns "8.8.8.8"
相关问答FAQs
Q1: 为什么修改/etc/resolv.conf后重启系统会恢复默认配置?
A: 在现代Linux系统中,/etc/resolv.conf通常由NetworkManager、systemd-resolved或DHCP客户端自动管理,直接编辑该文件会被后续服务覆盖,导致配置失效,需通过对应网络管理工具(如nmcli、netplan)永久修改,或锁定文件(chattr +i)防止覆盖。
Q2: 如何为特定域名配置自定义DNS服务器?
A: 可通过/etc/hosts文件实现本地域名解析,或使用systemd-resolved的DNS-over-TLS功能,在/etc/hosts中添加:
168.1.50 internal.example.com
若需为特定域名设置不同DNS,可配置split DNS(通过nmcli的ipv4.dns-options或netplan的nameservers.domains字段)。
