在Linux系统中,DNS(域名系统)配置用于将域名解析为IP地址,正确的DNS设置直接影响网络访问效率,本文将详细介绍Linux系统中设置DNS的多种方法,涵盖临时修改、永久配置及不同发行版的操作差异,帮助用户根据实际需求选择合适的配置方式。
临时修改DNS(重启后失效)
临时修改DNS适用于快速测试或临时场景,重启系统或网络服务后配置会恢复默认,直接编辑/etc/resolv.conf
文件即可,该文件是Linux系统中DNS解析的核心配置文件,记录了系统使用的DNS服务器地址。
操作步骤:
- 使用文本编辑器(如
vi
或nano
)打开/etc/resolv.conf
,需root权限:sudo vi /etc/resolv.conf ``` 示例如下,通过`nameserver`指令指定DNS服务器(可配置多个,按优先级顺序使用): ```plaintext # 本地域名解析配置 domain localdomain search localdomain nameserver 8.8.8.8 # Google DNS nameserver 114.114.114.114 # 114 DNS nameserver 223.5.5.5 # 阿里DNS
- 保存文件后,立即生效,但重启系统或网络服务(如
sudo systemctl restart NetworkManager
)后可能被覆盖。
永久修改DNS(推荐方法)
永久修改需通过系统网络管理工具或配置文件实现,避免重启后丢失,不同Linux发行版(如Ubuntu/Debian、CentOS/RHEL)使用的管理工具不同,需分别操作。
(一)Ubuntu/Debian系统(基于systemd和Netplan/NetworkManager)
-
通过Netplan配置(适用于Ubuntu 18.04+)
Netplan是Ubuntu默认的网络配置工具,配置文件通常位于/etc/netplan/
目录下(如01-netcfg.yaml
)。- 编辑配置文件(示例为静态IP+DNS):
sudo vi /etc/netplan/01-netcfg.yaml
- 添加或修改DNS配置:
network: version: 2 ethernets: enp0s3: # 网卡名称,需通过ip a命令确认 dhcp4: no addresses: [192.168.1.100/24] # 静态IP gateway4: 192.168.1.1 # 网关 nameservers: addresses: [8.8.8.8, 114.114.114.114] # DNS服务器 search: [localdomain] # 搜索域
- 应用配置:
sudo netplan apply
- 编辑配置文件(示例为静态IP+DNS):
-
通过NetworkManager配置(图形化或命令行)
NetworkManager是Ubuntu常用的网络管理工具,支持图形界面(nm-connection-editor
)和命令行(nmcli
)。- 命令行方式:
sudo nmcli con mod "连接名称" ipv4.dns "8.8.8.8 114.114.114.114" # 修改DNS sudo nmcli con mod "连接名称" ipv4.ignore-auto-dns yes # 忽略DHCP分配的DNS sudo nmcli con up "连接名称" # 重启连接
- 图形化方式:通过“系统设置”→“网络”→“连接”→“IPv4设置”→“DNS服务器”手动添加。
- 命令行方式:
(二)CentOS/RHEL系统(基于NetworkManager或ifcfg文件)
-
通过NetworkManager配置(推荐)
CentOS 7+默认使用NetworkManager,可通过nmtui
(文本界面)或nmcli
(命令行)配置。- 文本界面(nmtui):
sudo nmtui
进入“编辑连接”→选择网卡→“IPv4配置”→“手动”→“DNS服务器”添加地址→保存。
- 命令行(nmcli):
sudo nmcli con mod "ens33" ipv4.dns "8.8.8.8 223.5.5.5" # 修改DNS(ens33为网卡名) sudo nmcli con up "ens33" # 重启连接
- 文本界面(nmtui):
-
通过ifcfg文件配置(传统方式)
若NetworkManager未启用,可直接编辑网卡配置文件(如/etc/sysconfig/network-scripts/ifcfg-ens33
):sudo vi /etc/sysconfig/network-scripts/ifcfg-ens33
添加或修改以下参数:
DNS1=8.8.8.8 DNS2=114.114.114.114 PEERDNS=no # 忽略DHCP分配的DNS
重启网络服务:
sudo systemctl restart network
systemd-resolved本地DNS缓存配置
现代Linux系统(如Ubuntu 20.04+)默认使用systemd-resolved
提供本地DNS缓存,可提升解析效率并支持DNS over HTTPS(DoH)。
- 查看状态:
systemd-resolve --status
- 修改上游DNS:编辑
/etc/systemd/resolved.conf
:sudo vi /etc/systemd/resolved.conf
取消注释并修改
DNS=
字段(如DNS=8.8.8.8 223.5.5.5
),禁用DNSStubListener(若需直接使用/etc/resolv.conf
):DNSStubListener=no
- 重启服务:
sudo systemctl restart systemd-resolved
验证DNS配置
配置完成后,可通过以下命令验证DNS解析是否生效:
nslookup
:查询域名对应的IP,如nslookup www.baidu.com
。dig
:显示详细的DNS解析过程,如dig www.baidu.com
。host
:简单查询,如host www.baidu.com
。
不同发行版DNS配置方法对比
发行版 | 推荐工具 | 配置文件/命令 | 重启命令 |
---|---|---|---|
Ubuntu 18.04+ | Netplan | /etc/netplan/*.yaml |
sudo netplan apply |
Ubuntu/Debian | NetworkManager | nmcli /nm-connection-editor |
sudo nmcli con up "连接名称" |
CentOS 7+ | NetworkManager | nmtui /nmcli |
sudo systemctl restart network |
传统CentOS | ifcfg文件 | /etc/sysconfig/network-scripts/* |
sudo systemctl restart network |
注意事项
- 避免直接修改
/etc/resolv.conf
,优先使用系统网络管理工具,防止配置被覆盖。 - 企业环境中,DNS配置需结合内部服务器策略,公共DNS(如8.8.8.8)仅适用于临时测试。
- 若需启用DNS安全功能(如DoH),可配置
systemd-resolved
或使用第三方工具(如dnscrypt-proxy
)。
相关问答FAQs
Q1:为什么修改/etc/resolv.conf后DNS设置不生效?
A:/etc/resolv.conf
可能被NetworkManager或systemd-resolved自动管理,解决方法:
- 对于NetworkManager:确保配置中设置
ipv4.ignore-auto-dns=yes
(nmcli)或PEERDNS=no
(ifcfg文件)。 - 对于systemd-resolved:修改
/etc/systemd/resolved.conf
中的DNSStubListener=no
,并重启服务。
Q2:如何查看当前系统实际使用的DNS服务器?
A:可通过以下命令确认:
systemd-resolve --status
:显示systemd-resolved使用的DNS及缓存状态。nmcli dev show | grep DNS
:查看NetworkManager管理的DNS配置。cat /etc/resolv.conf
:查看最终生成的DNS解析文件(注意是否为软链接,如/etc/resolv.conf -> /run/systemd/resolve/stub-resolv.conf
)。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/30540.html