使用
sudo echo "nameserver 8.8.8.8" >> /etc/resolv.conf或`nmcli con mod “System eth0” ipv4.dns “8.8.8.Linux命令行修改DNS完整指南
DNS基础概念
DNS(Domain Name System)是互联网的核心服务之一,负责将域名转换为IP地址,在Linux系统中,DNS配置直接影响网络访问速度和稳定性,本文将详细介绍如何通过命令行修改Linux系统的DNS设置。
临时修改DNS方法
修改/etc/resolv.conf文件
这是最直接的临时修改方法,但系统重启后可能失效
# 使用文本编辑器打开文件 sudo nano /etc/resolv.conf # 添加以下内容(示例使用阿里DNS) nameserver 223.5.5.5 nameserver 223.6.6.6 # 保存退出(Ctrl+X > Y > Enter)
使用nmcli命令(NetworkManager)
适用于使用NetworkManager的系统
# 设置DNS(会覆盖现有配置) sudo nmcli con mod "当前网络连接名称" ipv4.dns "223.5.5.5 223.6.6.6" # 查看当前连接名称 nmcli con show active | grep '^[azAZ]'
使用ip命令(仅IP层)
不影响系统全局DNS配置
# 为特定网络接口添加DNS sudo ip route add local 0.0.0.0/0 via 192.168.1.1 dev eth0 src 192.168.1.100
永久修改DNS方法
NetworkManager配置文件修改
(1) 找到网络连接配置文件
不同发行版路径可能不同:

| 发行版 | 配置文件路径 |
|---|---|
| Ubuntu/Debian | /etc/NetworkManager/systemconnections/ |
| CentOS/Fedora | /etc/sysconfig/networkscripts/ifcfg |
| Arch | /etc/NetworkManager/systemconnections/ |
(2) 编辑对应网络连接文件
以Ubuntu为例:
# 查找当前活动连接名称
nmcli con show active | awk '/^[azAZ]/{print $1}'
# 编辑配置文件(替换YourConnectionName)
sudo nano /etc/NetworkManager/systemconnections/YourConnectionName.nmconnection
# 在[ipv4]部分添加:
[ipv4]
dns=223.5.5.5;223.6.6.6;
传统ifcfg脚本配置(CentOS旧版本)
编辑网络接口配置文件:
sudo nano /etc/sysconfig/networkscripts/ifcfgeth0 # 添加或修改以下行: DNS1=223.5.5.5 DNS2=223.6.6.6
使用netplan配置(Ubuntu 18.04+)
现代Ubuntu使用netplan管理网络:
# 编辑netplan配置文件
sudo nano /etc/netplan/01netcfg.yaml
# 添加dns4和dns6配置:
network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: no
addresses: [192.168.1.100/24]
gateway4: 192.168.1.1
nameservers:
addresses: [223.5.5.5, 223.6.6.6]
不同发行版配置对比表
| 操作类型 | Ubuntu/Debian | CentOS/Fedora | Arch Linux |
|---|---|---|---|
| 临时修改 | /etc/resolv.conf |
/etc/resolv.conf |
/etc/resolv.conf |
| 永久修改 | NetworkManager配置 | ifcfg脚本 | NetworkManager配置 |
| 重启网络服务 | systemctl restart NetworkManager |
systemctl restart network |
systemctl restart NetworkManager |
| 配置文件位置 | /etc/NetworkManager/systemconnections/ |
/etc/sysconfig/networkscripts/ |
/etc/NetworkManager/systemconnections/ |
高级DNS配置技巧
设置DNS搜索域
在/etc/resolv.conf或NetworkManager配置中添加:

search example.com subdomain.example.com
配置DNS超时和重试次数
编辑/etc/resolv.conf:
options ndots:1 timeout:2 attempts:3 rotate
参数说明:
ndots:1:少于n个点的域名直接解析timeout:2:请求超时时间(秒)attempts:3:重试次数rotate:轮询使用多个DNS服务器
使用加密DNS协议
(1) 配置Systemdresolved(较新系统)
编辑/etc/systemd/resolved.conf:
[Resolve] DNS=https://cloudflaredns.com/dnsquery DNSOverTLS=yes
(2) 使用DoH客户端工具
安装dnsutils:

# 查询使用Google DoH
dig @dns.google/dnsquery {www.example.com}
常见问题与解决
修改DNS后不生效怎么办?
| 症状 | 解决方案 |
|---|---|
| 浏览器仍使用旧DNS | 清除浏览器DNS缓存,重启浏览器 |
| 终端应用不生效 | 检查/etc/resolv.conf是否被覆盖,确认NetworkManager未重置配置 |
| SSH连接失败 | 确保DNS服务器可达,检查防火墙规则 |
| 本地域名解析异常 | 检查search域配置,尝试使用绝对域名(如www.example.com) |
如何验证DNS配置是否成功?
使用以下命令进行测试:
# 测试域名解析 dig www.baidu.com +short # 查看当前DNS服务器列表 cat /etc/resolv.conf # 测试网络连通性 ping 223.5.5.5
相关问题与解答
Q1:为什么修改/etc/resolv.conf后系统重启会失效?
A:大多数现代Linux发行版使用NetworkManager或Wicd等网络管理工具,这些工具会在系统启动时自动覆盖/etc/resolv.conf文件,要实现永久修改,必须通过对应的网络管理工具或配置文件进行设置。
Q2:如何为特定用户设置独立的DNS服务器?
A:可以通过以下两种方式实现:
- 使用
chroot环境:在用户虚拟环境中单独配置/etc/resolv.conf - 配置代理服务器:通过SOCKS5代理或VPN为特定用户路由DNS查询请求
- 修改用户级网络配置:在Wayland/X11系统中配置用户网络命名空间(需root权限
来源互联网整合,作者:小编,如若转载,请注明出处:https://www.aiboce.com/ask/203487.html