linux命令行修改dns
linux命令行修改dns详细介绍
在 Linux 系统中修改 DNS 服务器地址的方法因发行版或网络管理工具的不同而有所差异,以下是几种常见的操作方式:
一、临时修改(重启后失效)
直接修改 /etc/resolv.conf 文件(DNS 客户端配置文件),适用于临时测试:
bash
/etc/resolv.conf
nameserver .114.114
nameserver .8.8
注意:部分系统(如 Ubuntu)的 /etc/resolv.conf 是符号链接(指向 /run/systemd/resolve/stub-resolv.conf 或其他动态生成的文件),直接修改会被覆盖,需配合其他方法实现持久化。
二、永久修改(推荐)
方法 1:通过 systemd-resolved(适用于使用 systemd 的系统)
systemd-resolved 是 systemd 提供的 DNS 解析服务,配置文件为 /etc/systemd/resolved.conf。
- 编辑配置文件:
bash/etc/systemd/resolved.conf - 找到
[Resolve]部分,取消注释并修改DNS字段(多个 DNS 用空格分隔):
conf[Resolve]DNS=114.114.114.114 8.8.8.8
# FallbackDNS=9.9.9.9 1.1.1.1 # 可选:备用 DNS
# Domains=~. # 可选:特定域名的 DNS 覆盖
- 重启
systemd-resolved服务使配置生效:
bashsystemctl restart systemd-resolved - 验证(需确保
/etc/resolv.conf指向systemd-resolved的缓存文件):
bash/etc/resolv.conf
www.baidu.com
方法 2:通过 NetworkManager(适用于桌面环境或使用 NetworkManager 的系统)
NetworkManager 是 Linux 常用的网络管理工具,可通过配置文件或命令行持久化 DNS。
方式 A:编辑 NetworkManager 配置文件
- 进入 NetworkManager 配置目录(通常为
/etc/NetworkManager/conf.d/或/etc/NetworkManager/system-connections/):
bash/etc/NetworkManager/conf.d/ - 创建或编辑一个自定义配置文件(例如
99-dns.conf):
bash-dns.conf - 添加以下内容(强制使用指定 DNS):
conf[main]dns=static
- 编辑具体网络连接的 DNS(以有线连接为例):
- 进入连接配置目录:bash
/etc/NetworkManager/system-connections/ - 找到你的网络连接文件(如
Wired connection 1.nmconnection),用文本编辑器打开:bash - 在
[ipv4]部分添加 DNS:conf[ipv4]dns=114.114.114.114;8.8.8.8;
dns-search=
method=auto
- 进入连接配置目录:bash
- 重启 NetworkManager 服务:
bashsystemctl restart NetworkManager
方式 B:使用 nmcli 命令(命令行工具)
通过 nmcli 命令直接修改当前网络连接的 DNS 配置:
- 查看当前网络连接名称:
bashnmcli connection show - 修改指定连接的 DNS(假设连接名为
Wired):
bashnmcli connection modify Wired ipv4.dnsnmcli connection modify Wired ipv4.dns-search
- 重启连接使配置生效:
bashnmcli connection down Wired nmcli connection up Wired
三、验证 DNS 是否生效
修改后可通过以下命令验证 DNS 配置:
bash
/etc/resolv.conf
www.google.com
www.baidu.com
注意事项:
- 部分服务器系统(如 CentOS、Debian 服务器版)可能默认不启用
NetworkManager,需通过/etc/network/interfaces(Debian 系)或/etc/sysconfig/network-scripts/ifcfg-*(RedHat 系)配置 DNS。 - 所有系统级配置修改需使用
sudo获得管理员权限。 - 若 DNS 未生效,可能是缓存问题,可尝试重启网络服务或使用
systemd-resolved的resolvectl flush-caches清理缓存。