在Linux系统中,DNS(域名系统)配置是网络连接的核心部分之一,它负责将人类可读的域名转换为机器可识别的IP地址,在某些特定场景下,如网络安全测试、系统维护或临时网络环境调整,可能需要临时或永久关闭系统的DNS解析功能,本文将详细介绍在Linux系统中关闭DNS的多种方法、适用场景、注意事项及相关操作细节。
Linux系统中DNS的作用与关闭原因
DNS服务在Linux系统中主要通过/etc/resolv.conf文件配置,该文件记录了系统使用的DNS服务器地址(如8.8.8.8、114.114.114.114等),系统在访问域名时,会优先查询该文件中的DNS服务器,关闭DNS通常包括两种情况:一是临时禁用域名解析,使系统仅通过IP地址通信;二是彻底修改DNS配置,避免系统使用特定DNS服务器,常见原因包括:防止DNS劫持、减少网络延迟、进行本地网络调试或满足特定安全策略要求。
临时关闭DNS解析的方法
临时关闭DNS解析适用于短期测试场景,无需修改系统核心配置,重启后即可恢复默认设置,以下是具体操作:
使用systemd-resolved服务禁用(适用于Systemd系统)
现代Linux发行版(如Ubuntu 18.04+、CentOS 7+)通常使用systemd-resolved服务管理DNS,可通过以下命令临时停止该服务:
sudo systemctl stop systemd-resolved
停止后,系统将不再通过systemd-resolved处理DNS请求,但需注意,此操作不会直接修改/etc/resolv.conf,若该文件由systemd-resolved自动管理,需手动清空或注释其中的DNS条目。
修改/etc/nsswitch.conf文件
该文件定义了系统名称解析的顺序(如hosts: files dns表示优先查询本地hosts文件,再查询DNS),可通过调整顺序实现“临时禁用DNS”:
sudo nano /etc/nsswitch.conf
将hosts行修改为hosts: files,保存后系统仅通过/etc/hosts文件解析域名,忽略DNS服务器,恢复时只需将files改为files dns即可。

使用dig或nslookup命令测试
若仅需临时验证某域名是否依赖DNS解析,可通过以下命令绕过系统默认DNS:
# 指定DNS服务器查询 dig @8.8.8.8 example.com # 或使用nslookup nslookup example.com 8.8.8.8
此方法仅对当前命令有效,不影响系统全局配置。
永久关闭或修改DNS配置
永久关闭DNS通常涉及修改系统核心配置文件,需谨慎操作,避免导致网络连接异常。
直接编辑/etc/resolv.conf文件
/etc/resolv.conf是传统的DNS配置文件,但部分系统(如Ubuntu)会由systemd-resolved自动覆盖,若需永久修改,可采取以下步骤:
-
方法1:手动清空DNS条目
使用编辑器(如nano或vim)打开文件,删除或注释掉所有nameserver行:sudo nano /etc/resolv.conf ```示例:
nameserver 8.8.8.8
nameserver 114.114.114.114
保存后,系统将无法通过DNS解析域名,仅依赖`/etc/hosts`文件。 -
方法2:锁定文件防止自动覆盖
在Ubuntu等系统中,可修改文件权限为只读,防止systemd-resolved自动修改:
sudo chattr +i /etc/resolv.conf
需修改时可通过
chattr -i解锁。
禁用systemd-resolved服务并手动配置DNS
对于需要彻底禁用系统DNS管理的场景,可按以下步骤操作:
- 停止并禁用服务:
sudo systemctl stop systemd-resolved sudo systemctl disable systemd-resolved
- 创建自定义DNS配置:
手动编辑/etc/resolv.conf,添加所需的DNS服务器,nameserver 8.8.8.8 nameserver 1.1.1.1 - 验证服务状态:
通过systemctl status systemd-resolved确认服务已停止。
网络接口级DNS配置(适用于NetworkManager系统)
在基于NetworkManager的系统(如RHEL、Fedora)中,可通过nmcli命令修改特定网络接口的DNS配置:
# 设置静态DNS并禁用自动获取 sudo nmcli con mod "连接名称" ipv4.dns "8.8.8.8 1.1.1.1" ipv4.ignore-auto-dns yes # 重新激活连接 sudo nmcli con down "连接名称" && sudo nmcli con up "连接名称"
若需完全禁用DNS,可将ipv4.dns设为空字符串。
不同场景下的操作对比
下表总结了常见关闭DNS方法的特点及适用场景:
| 方法 | 操作复杂度 | 临时性 | 适用场景 | 潜在风险 |
|---|---|---|---|---|
停止systemd-resolved |
低 | 临时 | 短期测试、网络故障排查 | 服务重启后恢复,需配合文件修改 |
修改nsswitch.conf |
中 | 临时 | 需优先使用本地hosts文件解析域名 | 可能影响其他依赖DNS的服务 |
编辑/etc/resolv.conf |
低 | 永久 | 传统系统、需固定DNS配置 | 文件可能被服务自动覆盖 |
| 禁用NetworkManager DNS | 中 | 永久 | 图形化界面管理网络连接的系统 | 需熟悉NetworkManager命令 |
注意事项
- 备份配置文件:修改
/etc/resolv.conf或/etc/nsswitch.conf前,建议先备份原文件,避免误操作导致系统无法解析域名。 - 影响网络服务:关闭DNS后,依赖域名解析的服务(如
apt、yum、浏览器访问等)可能无法正常工作,需确保通过IP地址或本地hosts文件补充配置。 - 容器与虚拟机环境:在Docker或虚拟机中,DNS配置可能受宿主机或网络模式影响,需额外检查容器内的
/etc/resolv.conf是否与宿主机同步。 - 企业级环境:企业网络中通常由DHCP服务器或网络策略统一管理DNS,直接修改本地配置可能违反安全策略,需提前沟通。
相关问答FAQs
问题1:关闭DNS后,如何确保某些关键服务仍能通过域名访问?
解答:可通过修改/etc/hosts文件手动添加域名与IP的映射关系,若需确保example.com可访问,可执行:

sudo echo "93.184.216.34 example.com" >> /etc/hosts
这样即使DNS被禁用,系统也能通过hosts文件解析该域名,但需注意,hosts文件需手动维护,不适用于动态域名。
问题2:在Ubuntu系统中,如何彻底禁用systemd-resolved并避免/etc/resolv.conf被自动修改?
解答:可分三步操作:
- 停止并禁用服务:
sudo systemctl stop systemd-resolved sudo systemctl disable systemd-resolved
- 手动创建
/etc/resolv.conf并设置固定DNS:sudo rm /etc/resolv.conf sudo echo "nameserver 8.8.8.8" > /etc/resolv.conf sudo chattr +i /etc/resolv.conf # 锁定文件
- 重启网络服务使配置生效:
sudo systemctl restart NetworkManager
完成上述步骤后,
systemd-resolved将不再管理DNS,且/etc/resolv.conf不会被自动覆盖。
来源互联网整合,作者:小编,如若转载,请注明出处:https://www.aiboce.com/ask/244054.html