在Ubuntu操作系统中,域名系统(DNS)的配置是一项基础但至关重要的网络设置,DNS负责将我们易于记忆的域名(如www.google.com)转换为机器能够理解的IP地址,默认情况下,Ubuntu会自动从网络服务提供商(ISP)或路由器获取DNS服务器地址,但出于提升网速、增强安全性、绕过网络审查或实现家长控制等目的,手动修改DNS设置往往是必要的,本文将详细介绍在Ubuntu系统中修改DNS的几种主流方法,并分析其适用场景与优劣。

为什么要修改DNS设置?
在深入操作之前,了解修改DNS的动机至关重要,更换公共DNS服务器,如Google DNS(8.8.8.8)、Cloudflare DNS(1.1.1.1)或Quad9 DNS(9.9.9.9),通常能带来以下好处:
- 更快的解析速度:一些公共DNS服务器拥有更广泛的缓存和更优化的全球节点,能加快域名解析过程,从而提升网页加载速度。
- 增强的隐私与安全:部分DNS服务提供商提供防止恶意软件、钓鱼网站和广告的过滤功能,为您的浏览体验增加一层安全屏障。
- 绕过地域限制:通过特定DNS服务,有时可以访问某些地区受限的网络内容。
- 更高的可靠性:公共DNS服务通常比ISP提供的DNS服务更稳定,宕机概率更低。
通过图形用户界面(GUI)修改(适合新手)
对于使用Ubuntu桌面版的用户,最直观、最简单的方法是通过图形界面进行设置,此方法无需接触命令行,非常适合初学者。
- 打开“设置”应用程序。
- 在左侧菜单中,点击“网络”或“Wi-Fi”,具体取决于您使用的连接类型。
- 找到您正在活动的网络连接(有线连接”或已连接的Wi-Fi网络),点击其右侧的齿轮图标。
- 在弹出的窗口中,切换到“IPv4”或“IPv6”标签页。
- 将“DNS”一栏的设置从“自动(DHCP)”改为“关闭”。
- 在下方的“DNS服务器”输入框中,填入您希望使用的DNS地址,多个地址之间用逗号分隔,输入
1.1.1, 8.8.8.8。 - 点击右上角的“应用”按钮保存设置,系统可能会短暂断开并重新连接网络以使更改生效。
此方法的优点是简单易行,缺点是配置仅对当前网络连接有效,如果更换网络(如连接到另一个Wi-Fi),需要重新设置。
使用Netplan进行命令行配置(推荐方法)
从Ubuntu 18.04 LTS开始,Netplan成为默认的网络配置工具,它使用YAML文件来定义网络接口,通过Netplan修改DNS是服务器版和高级用户最推荐的方法,因为它稳定、持久且与系统深度集成。
-
找到Netplan的配置文件,这些文件通常位于
/etc/netplan/目录下,文件名可能为01-netcfg.yaml、50-cloud-init.yaml等,使用以下命令列出文件:ls /etc/netplan/
-
使用文本编辑器(如nano)打开该配置文件,请将
your-config-file.yaml替换为您实际的文件名:sudo nano /etc/netplan/your-config-file.yaml
-
在文件中,找到您要配置的网络接口(如
eth0或enp0s3),并在其配置下添加或修改nameservers部分,YAML文件对缩进非常敏感,请务必使用空格而非Tab键,并保持对齐。network: version: 2 ethernets: enp0s3: dhcp4: true nameservers: addresses: [1.1.1.1, 8.8.4.4]在这个例子中,我们为
enp0s3接口设置了静态DNS地址,如果您使用的是静态IP配置,结构类似,只需将dhcp4设为false并配置其他静态参数即可。
-
保存并关闭文件(在nano中按
Ctrl+X,然后按Y确认,最后按回车)。 -
应用新的配置:
sudo netplan apply
如果没有错误提示,DNS设置便已成功更新,此方法设置的DNS是永久性的,系统重启后依然有效。
直接编辑 /etc/resolv.conf(临时方法,不推荐)
在传统的Linux系统中,/etc/resolv.conf是存储DNS信息的核心文件,在现代Ubuntu系统中,该文件通常由systemd-resolved服务动态管理,手动修改后很可能在系统重启或网络服务重启后被覆盖。
如果您只是想临时测试一个DNS服务器,可以直接编辑此文件:
sudo nano /etc/resolv.conf ```修改为:
nameserver 1.1.1.1 nameserver 8.8.8.8
此更改会立即生效,但如前所述,它是临时的,不推荐将其作为长期解决方案。
---
### 方法四:配置systemd-resolved(全局生效)
这是一种更底层的全局配置方法,它会为`systemd-resolved`服务本身设置默认DNS,从而影响所有网络接口。
1. 编辑`/etc/systemd/resolved.conf`文件:
```bash
sudo nano /etc/systemd/resolved.conf
-
在
[Resolve]部分,取消DNS=和FallbackDNS=行的注释(删除开头的),并填入您想要的DNS地址。[Resolve] DNS=1.1.1.1 8.8.4.4 FallbackDNS=8.8.8.8 1.0.0.1
-
保存文件后,重启
systemd-resolved服务以应用更改:
sudo systemctl restart systemd-resolved
-
为了确保
/etc/resolv.conf指向由systemd-resolved管理的存根文件,可以执行以下命令:sudo ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf
此方法设置的DNS同样是永久性的,并且作用于全局,是一种非常可靠的配置方式。
方法对比
| 方法 | 适用场景 | 持久性 | 难度等级 | 推荐度 |
|---|---|---|---|---|
| 图形界面(GUI) | 桌面版用户,快速临时更改 | 仅限当前网络 | 低 | |
| Netplan | 服务器版,桌面版高级用户,永久配置 | 永久 | 中 | |
| /etc/resolv.conf | 临时测试,故障排查 | 临时 | 低 | |
| systemd-resolved | 全局统一配置,高级用户 | 永久 | 中高 |
相关问答FAQs
我已经按照教程修改了DNS,但是使用nslookup或dig命令检查时,显示的仍然是旧的DNS服务器,这是为什么?
解答: 这个问题通常由两个原因导致,本地系统和DNS服务器本身都有缓存机制,您可以尝试清除本地DNS缓存,在Ubuntu中可以通过重启systemd-resolved服务来实现:sudo systemctl restart systemd-resolved,请确保您修改了正确的配置文件,如果您是桌面用户,可能同时存在GUI和Netplan(或NetworkManager)的配置,它们之间可能存在冲突,建议优先使用Netplan进行统一配置,或者在GUI中确保没有其他设置覆盖了您的更改,请检查/etc/resolv.conf文件的实际内容,确认它是否指向了您期望的DNS服务器。
修改DNS后,我的网络连接变慢了甚至无法上网,该怎么办?
解答: 这通常意味着您输入的DNS服务器地址不正确、该服务器当前不可用,或者您的网络环境(如公司或学校网络)限制了使用外部DNS,解决方法是首先恢复到能够正常上网的设置,如果您使用的是Netplan,可以将配置文件中的nameservers部分删除或注释掉,然后重新运行sudo netplan apply,系统会回退到通过DHCP自动获取DNS,如果您是直接编辑/etc/resolv.conf,可以将其恢复为原始内容,建议尝试更换其他知名的公共DNS服务器,如Google(8.8.8)或Cloudflare(1.1.1),而不是使用一些不知名或可能存在问题的DNS地址。