在Linux操作系统中,域名系统(DNS)是连接互联网的基石,它负责将我们易于记忆的域名(如www.google.com)解析为机器能够识别的IP地址,默认情况下,系统会自动使用由网络服务提供商(ISP)分配的DNS服务器,出于提升网络访问速度、增强隐私安全、过滤恶意内容或绕过某些网络限制等目的,我们常常需要手动修改DNS设置,本文将详细介绍在Linux系统中修改DNS的几种主流方法,并提供验证与排错建议。

临时修改DNS(适用于快速测试)
最直接的方法是编辑/etc/resolv.conf文件,这个文件是Linux系统用来查询DNS的配置文件,通过终端,使用文本编辑器(如nano或vim)打开它:
sudo nano /etc/resolv.conf
通常如下所示:
# This file is managed by man:systemd-resolved(8). Do not edit.
nameserver 192.168.1.1
你可以将现有的nameserver行注释掉(在行首添加),并添加你希望使用的公共DNS地址,使用Google和Cloudflare的DNS:
# nameserver 192.168.1.1
nameserver 8.8.8.8
nameserver 1.1.1.1
保存文件后,DNS设置会立即生效,但请注意,此方法通常是临时的,在现代Linux发行版中,网络管理服务(如NetworkManager或systemd-resolved)会在系统重启或网络重新连接时覆盖此文件的更改,它更适合用于临时测试。
永久性修改DNS(推荐方法)
为了使DNS设置永久生效,我们需要通过网络管理工具进行配置,以下是针对两种主流系统的配置方法。
使用systemd-resolved (适用于Ubuntu 18.04+、Debian 10+等)
许多现代发行版使用systemd-resolved服务来管理DNS,配置方法如下:
-
编辑配置文件: 打开
/etc/systemd/resolved.conf文件。
sudo nano /etc/systemd/resolved.conf
-
添加DNS地址: 在
[Resolve]部分,找到#DNS=和#FallbackDNS=行,取消#DNS=的注释,并在其后填入你想要的DNS地址,用空格分隔。[Resolve] DNS=8.8.8.8 1.1.1.1 #FallbackDNS=
-
更新resolv.conf链接: 为了让系统使用
systemd-resolved管理的DNS,需要确保/etc/resolv.conf指向正确的文件。sudo ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf
-
重启服务: 应用更改并重启
systemd-resolved服务。sudo systemctl restart systemd-resolved
使用NetworkManager (适用于桌面环境和Fedora等)
对于使用NetworkManager的系统,可以通过nmcli命令行工具或图形界面进行修改,以下是nmcli的方法:
-
查看网络连接名称:
nmcli connection show
假设你的连接名称是“有线连接 1”。
-
为该连接设置DNS:

sudo nmcli con mod "有线连接 1" ipv4.dns "8.8.8.8 1.1.1.1"
-
重启网络连接:
sudo nmcli con down "有线连接 1" && sudo nmcli con up "有线连接 1"
常用公共DNS推荐
选择一个可靠的DNS服务器至关重要,以下是一些流行的公共DNS选项:
| 提供商 | 主DNS | 辅DNS | 特点 |
|---|---|---|---|
| 8.8.8 | 8.4.4 | 速度快,稳定可靠 | |
| Cloudflare | 1.1.1 | 0.0.1 | 注重隐私与安全,速度极快 |
| Quad9 | 9.9.9 | 112.112.112 | 自动拦截恶意网站,安全性高 |
| 阿里DNS | 5.5.5 | 6.6.6 | 针对中国大陆用户优化 |
验证DNS修改是否生效
修改完成后,可以使用nslookup或dig命令来验证,只需查询一个域名,观察返回的服务器地址是否是你新设置的DNS。
nslookup google.com
在命令输出的第一行,你会看到Server: 8.8.8.8(或你设置的其他地址),这表明DNS修改已成功生效。
相关问答 (FAQs)
我修改了 /etc/resolv.conf,为什么重启后又变回来了?
解答: 这是因为在现代Linux发行版中,/etc/resolv.conf文件通常是由网络管理服务(如systemd-resolved或NetworkManager)动态生成的,当系统重启或网络状态改变时,这些服务会根据其自身的配置文件覆盖/etc/resolv.conf,直接编辑它只是一种临时方案,要实现永久修改,必须像上文介绍的那样,去修改这些网络管理服务自己的配置文件(如/etc/systemd/resolved.conf)或使用其专用工具(如nmcli)。
修改DNS后,部分网站还是无法访问或速度很慢,怎么办?
解答: 尝试清除系统的DNS缓存,对于使用systemd-resolved的系统,可以执行sudo systemd-resolve --flush-caches,检查你的本地防火墙(如ufw或firewalld)规则,确保没有阻止DNS查询(通常使用UDP 53端口),问题也可能出在你的路由器上,某些路由器会强制所有设备使用其指定的DNS,或者开启了家长控制等功能,你可以尝试登录路由器管理后台,检查并修改其DNS设置,或者在路由器上暂时禁用这些功能进行测试。