在Linux系统中,修改DNS配置是网络管理中的常见操作,无论是为了访问特定内网资源、提高解析速度,还是进行网络安全测试,都需要掌握正确的命令和方法,本文将详细介绍在不同Linux发行版中修改DNS配置的多种方式,包括临时修改、永久修改以及针对不同服务工具的配置方法,同时提供常见问题的解决方案和最佳实践建议。
临时修改DNS配置
临时修改DNS配置适用于测试场景或短期需求,系统重启后配置将恢复默认,这种方法无需修改系统文件,操作简单快捷。
-
使用
resolv.conf
文件
resolv.conf
是Linux系统中传统的DNS解析配置文件,通过直接编辑该文件可实现临时DNS修改。sudo vim /etc/resolv.conf
在文件中添加或修改以下内容:
nameserver 8.8.8.8 nameserver 8.8.4.4
其中
nameserver
指定DNS服务器IP地址,可配置多个(按优先级从上到下)。
注意:在 systemd-resolved 系统中,直接修改resolv.conf
可能被覆盖,需结合chattr
命令锁定文件:sudo chattr +i /etc/resolv.conf
-
使用
nmcli
命令(NetworkManager适用)
对于使用NetworkManager的服务(如Ubuntu、CentOS 7+),可通过命令行工具nmcli
临时修改DNS:sudo nmcli connection show "连接名称" | grep ipv4.dns sudo nmcli connection modify "连接名称" ipv4.dns "8.8.8.8 8.8.4.4" sudo nmcli connection down "连接名称" && sudo nmcli connection up "连接名称"
若需为所有连接设置全局DNS:
sudo nmcli connection modify "System eth0" ipv4.ignore-dns-auto yes sudo nmcli connection modify "System eth0" ipv4.dns "8.8.8.8"
永久修改DNS配置
永久修改需要根据系统使用的网络服务工具进行调整,确保配置在重启后依然生效。
基于systemd-resolved的系统(Ubuntu 18.04+、Debian 10+)
systemd-resolved
是现代Linux发行版默认的DNS解析服务,配置文件位于/etc/systemd/resolved.conf
:
sudo vim /etc/systemd/resolved.conf
修改以下参数:
[Resolve]
DNS=8.8.8.8 8.8.4.4
FallbackDNS=1.1.1.1
Domains=~.
保存后重启服务:
sudo systemctl restart systemd-resolved
验证DNS配置:
resolvectl status
基于NetworkManager的系统(RHEL/CentOS 7+、Fedora)
通过nmcli
命令永久修改DNS:
sudo nmcli connection modify "ens33" ipv4.dns "8.8.8.8" sudo nmcli connection modify "ens33" ipv4.ignore-auto-dns yes sudo nmcli connection up "ens33"
若需配置DNS搜索域:
sudo nmcli connection modify "ens33" ipv4.dns-search "example.com"
基于systemd-networkd的系统(Arch Linux、Debian)
编辑网络配置文件/etc/systemd/network/ens33.network
:
[Match] Name=ens33 [Network] DNS=8.8.8.8 DNS=8.8.4.4 Domains=example.com
重启网络服务:
sudo systemctl restart systemd-networkd
传统发行版(CentOS 6/7、Ubuntu 16.04)
直接编辑/etc/resolv.conf
并锁定文件:
sudo echo "nameserver 8.8.8.8" > /etc/resolv.conf sudo chattr +i /etc/resolv.conf
若需修改网卡配置(如/etc/sysconfig/network-scripts/ifcfg-ens33
):
DNS1=8.8.8.8 DNS2=8.8.4.4 PEERDNS=no
重启网络服务:
sudo systemctl restart network
容器环境中的DNS修改
在Docker容器中,默认会继承宿主机的DNS配置,但可通过以下方式自定义:
-
运行容器时指定DNS
docker run -it --dns 8.8.8.8 ubuntu:20.04
-
修改Docker守护进程配置
编辑/etc/docker/daemon.json
:{ "dns": ["8.8.8.8", "8.8.4.4"] }
重启Docker服务:
sudo systemctl restart docker
常见问题与解决方案
-
DNS修改后不生效
- 检查网络服务状态:
systemctl status systemd-resolved
- 清除DNS缓存:
sudo systemd-resolve --flush-caches
- 确认网卡配置无冲突(如
PEERDNS=yes
会覆盖手动设置)
- 检查网络服务状态:
-
无法访问特定域名
检查/etc/hosts
文件是否有错误条目:sudo vim /etc/hosts
-
多DNS服务器配置顺序问题
DNS服务器按resolv.conf
或配置文件中的顺序依次尝试,建议将可靠的DNS(如内网DNS)放在首位。
DNS服务器推荐
类型 | 推荐服务器 | 特点 |
---|---|---|
公共DNS | Google DNS (8.8.8.8) | 全球覆盖,速度快,适合测试 |
Cloudflare DNS (1.1.1.1) | 隐私保护,无日志 | |
阿里云DNS (223.5.5.5) | 国内访问速度快,适合国内用户 | |
内网DNS | 企业内网DNS服务器 | 支持内部域名解析,安全性高 |
最佳实践建议
- 优先使用系统级工具:如
nmcli
或systemd-resolved
,避免直接修改resolv.conf
导致配置丢失。 - 配置备份:修改前备份原配置文件,例如
sudo cp /etc/resolv.conf /etc/resolv.conf.bak
。 - 测试验证:修改后使用
nslookup
或dig
命令测试解析是否生效:nslookup example.com dig @8.8.8.8 example.com
- 安全性考虑:避免使用不可信的公共DNS,内网环境建议配置防火墙规则限制DNS访问端口(53/TCP/UDP)。
通过以上方法,您可以根据实际需求灵活选择适合的DNS修改方式,无论是临时测试还是长期配置,掌握这些命令都能有效提升Linux系统的网络管理效率。