在Linux命令行中设置DNS是系统管理和网络配置中的常见任务,正确的DNS配置直接影响域名解析效率和网络访问能力,本文将详细介绍通过命令行修改DNS配置的多种方法,包括临时修改、永久配置以及不同Linux发行版的差异处理,同时结合实例和表格说明操作步骤,最后附上常见问题解答。

临时修改DNS配置
临时修改DNS配置适用于测试场景或重启后无需保留的配置,主要涉及resolv.conf文件和nameserver命令。
-
直接编辑
/etc/resolv.conf文件
该文件是Linux系统传统的DNS解析配置文件,格式简单,包含nameserver、search、domain等字段。sudo nano /etc/resolv.conf
在文件中添加或修改
nameserver行,nameserver 8.8.8.8 # Google DNS nameserver 114.114.114.114 # 中国电信DNS
保存后立即生效,但重启网络服务或系统后可能被重置。
(图片来源网络,侵删) -
使用
nmcli命令(NetworkManager管理)
若系统使用NetworkManager(如Ubuntu、CentOS 7+),可通过nmcli临时修改:sudo nmcli connection show "连接名称" | grep ipv4.dns sudo nmcli connection modify "连接名称" ipv4.dns "8.8.8.8 114.114.114.114" sudo nmcli connection up "连接名称"
连接名称”可通过
nmcli connection show查看,此方法仅在NetworkManager运行时有效。
永久修改DNS配置
永久配置需根据Linux发行版和使用的网络管理工具选择不同方法,避免重启后失效。
基于NetworkManager的系统(Ubuntu 18.04+、CentOS 7+、Fedora等)
-
通过
nmcli命令
(图片来源网络,侵删)# 查看当前连接 nmcli connection show # 修改DNS并自动配置 sudo nmcli connection modify "ens33" ipv4.ignore-auto-dns yes ipv4.dns "8.8.8.8 1.1.1.1" # 重启连接 sudo nmcli connection up "ens33"
参数说明:
ipv4.ignore-auto-dns忽略DHCP分配的DNS,ipv4.dns指定DNS服务器。 -
通过图形界面(可选)
执行nm-connection-editor,在连接属性中切换到“IPv4设置”,将“DNS服务器”手动添加并保存。
基于systemd-networkd的系统(Debian 10+、Ubuntu 20.04+等)
此类系统使用netplan或systemd-networkd管理网络。
-
使用
netplan配置
编辑/etc/netplan/01-netcfg.yaml(文件名可能不同):network: version: 2 ethernets: ens33: dhcp4: no addresses: [192.168.1.100/24] gateway4: 192.168.1.1 nameservers: addresses: [8.8.8.8, 114.114.114.114] search: [example.com]应用配置:
sudo netplan apply
-
使用
systemd-networkd
创建或编辑/etc/systemd/network/ens33.network:[Match] Name=ens33 [Network] DNS=8.8.8.8 114.114.114.114 DHCP=no Address=192.168.1.100/24 Gateway=192.168.1.1
重启网络服务:
sudo systemctl restart systemd-networkd
传统SysVinit系统(CentOS 6、Debian 9等)
此类系统使用ifcfg文件配置网络。
- 编辑
/etc/sysconfig/network-scripts/ifcfg-ens33:DEVICE=ens33 BOOTPROTO=static IPADDR=192.168.1.100 NETMASK=255.255.255.0 GATEWAY=192.168.1.1 DNS1=8.8.8.8 DNS2=114.114.114.114 ONBOOT=yes
重启网络服务:
sudo service network restart
使用resolv.conf的永久绑定(不推荐)
部分系统(如Alpine Linux)允许通过chattr锁定/etc/resolv.conf:
sudo chattr +i /etc/resolv.conf
此方法会阻止系统自动覆盖文件,但可能导致DHCP分配的DNS失效,需谨慎使用。
验证DNS配置
修改完成后,可通过以下命令验证DNS解析是否生效:
# 查看当前DNS配置 cat /etc/resolv.conf # 测试域名解析 nslookup www.baidu.com ping www.google.com
若解析失败,检查网络服务状态(systemctl status NetworkManager或service network status)及防火墙规则。
不同Linux发行版的DNS配置差异
下表总结了主流发行版的推荐配置方法:
| 发行版系列 | 推荐工具 | 配置文件/命令示例 | 重启命令 |
|---|---|---|---|
| Ubuntu/Debian | Netplan/nmcli | /etc/netplan/*.yaml或nmcli |
netplan apply |
| CentOS/RHEL 7+ | NetworkManager | nmcli connection modify |
nmcli connection up |
| CentOS 6 | ifcfg文件 | /etc/sysconfig/network-scripts/ifcfg-* |
service network restart |
| Arch Linux | systemd-networkd | /etc/systemd/network/*.network |
systemctl restart systemd-networkd |
| Alpine Linux | 直接编辑resolv.conf | /etc/resolv.conf |
无需重启(需锁定文件) |
相关问答FAQs
Q1: 修改DNS后仍无法解析域名,可能的原因有哪些?
A: 可能的原因包括:
- DNS服务器不可达(检查网络连通性:
ping 8.8.8.8); - 防火墙阻止DNS端口(如
ufw规则需允许53端口); - 系统缓存了旧的DNS记录(尝试清除缓存:
sudo systemd-resolve --flush-caches或sudo /etc/init.d/nscd restart); - 配置文件路径错误(如
nmcli修改时未指定正确的连接名称)。
Q2: 如何为特定域名设置自定义DNS解析(如内网域名)?
A: 可通过以下方法实现:
- 在
/etc/hosts文件中添加静态映射:sudo nano /etc/hosts 192.168.1.50 internal.example.com
- 使用
search或domain字段(在resolv.conf或Netplan配置中):nameservers: addresses: [8.8.8.8] search: [internal.example.com]
- 部署内部DNS服务器(如BIND),并将客户端指向该服务器。
通过以上方法,可根据实际需求灵活选择Linux命令行下的DNS配置方式,确保网络访问的稳定性和高效性。
