编辑
/etc/resolv.conf
,添加 nameserver
行(如 8.8.8.8
),保存后CentOS 8 网络配置DNS详解
DNS基础概念
1 什么是DNS?
DNS(Domain Name System)是互联网的电话簿,负责将人类可读的域名(如www.example.com
)转换为计算机可识别的IP地址(如0.2.1
),在CentOS 8中,DNS配置直接影响网络访问能力。
2 DNS工作流程
- 客户端请求:应用程序发起域名解析请求
- 递归查询:DNS客户端向配置的DNS服务器发起查询
- 迭代查询:DNS服务器逐级查询权威服务器
- 返回结果:最终将IP地址返回给客户端
临时DNS配置方法
1 直接修改/etc/resolv.conf
配置项 | 说明 | 示例 |
---|---|---|
nameserver | 指定DNS服务器IP | nameserver 8.8.8.8 |
search | 本地域名后缀 | search example.com |
options | 配置选项(如超时设置) | options ndots:1 |
注意:此方法仅对当前会话有效,重启后会被系统配置覆盖。
2 使用nmtui快速配置
# 进入网络配置界面 sudo nmtui # 选择对应网络连接 > 配置 > IPv4设置 > 手动DNS服务器
永久DNS配置方案
1 修改NetworkManager配置文件
路径:/etc/sysconfig/networkscripts/ifcfg<接口名>
参数 | 说明 | 示例值 |
---|---|---|
DNS1 | 主DNS服务器 | 114.114.114 |
DEFRoute | 默认网关 | 168.1.1 |
IPADDR_START | DHCP分配起始地址 | 168.1.100 |
IPADDR_END | DHCP分配结束地址 | 168.1.200 |
2 使用nmcli命令行配置
# 查看所有连接 nmcli connection show # 修改指定连接的DNS nmcli connection modify <连接名称> ipv4.dns "8.8.4.4 114.114.114.114" # 设置自动获取DNS(通过DHCP) nmcli connection modify <连接名称> ipv4.ignoreautodns yes/no
3 图形化配置(GNOME桌面)
- 打开「设置」>「网络」
- 选择对应网络连接 > 点击齿轮图标
- 切换到「IPv4」标签页
- 选择「自动(DHCP)」或「手动」
- 在「DNS服务器」字段输入服务器地址
DNS验证方法
1 使用systemdresolve工具
# 查看当前DNS配置 systemdresolve status # 输出示例: # Global # DNSSEC NTA: 10.0.0.1 # DNS Servers: 8.8.8.8 # DNS Over TLS: disabled
2 使用dig命令测试
# 基本查询 dig www.baidu.com # +short 只显示IP地址 dig www.baidu.com +short # @参数指定DNS服务器 dig www.qq.com @114.114.114.114
3 使用nslookup工具
# 交互模式 nslookup > server 8.8.4.4 > www.google.com # 单次查询 nslookup www.github.com 114.114.114.114
高级配置技巧
1 配置多个DNS服务器
建议按优先级顺序配置至少2个DNS服务器:
nameserver 8.8.8.8 # Google公共DNS nameserver 8.8.4.4 # Google备用DNS nameserver 114.114.114.114 # 阿里公共DNS
2 启用DNSSEC验证
在/etc/systemd/resolved.conf
中设置:
[Resolve] DNSSEC=true
重启服务:sudo systemctl restart systemdresolved
3 配置本地域名搜索域
在/etc/systemd/resolved.conf
添加:
[Resolve] Domain~.= .example.com ~.local
效果:查询host
时会自动补全为host.example.com
常见问题排查
1 DNS配置不生效的常见原因
现象 | 可能原因 | 解决方案 |
---|---|---|
只能访问IP不能访问域名 | DNS服务器未配置或网络中断 | 检查nameserver配置 |
部分域名无法解析 | DNS服务器缓存问题 | 更换DNS服务器 |
网络连通性正常但无法解析 | Firewalld阻断DNS流量 | firewallcmd addservice=dns |
2 特殊场景处理
场景1:虚拟机内部DNS配置
需同时配置宿主机和虚拟机的DNS,建议使用与宿主机相同的DNS服务器。
场景2:容器环境DNS配置
在docker中可通过dns
参数指定:
docker run dns=8.8.8.8 dns=8.8.4.4 ...
安全最佳实践
- 使用加密DNS协议:配置DNS over HTTPS(DoH)或DNS over TLS(DoT)
- 限制DNS查询范围:在
/etc/systemd/resolved.conf
设置DNSStubListener=yes
- 定期更新公共DNS服务器:建议使用Google(8.8.8.8)、Cloudflare(1.1.1.1)等可靠服务商
相关问题与解答
Q1:如何测试多个DNS服务器的优先级?
A:可以使用dig
命令的参数依次测试不同DNS服务器。
# 测试第一个DNS服务器 dig www.example.com @8.8.8.8 # 测试第二个DNS服务器 dig www.example.com @8.8.4.4
系统会按照/etc/resolv.conf
中的顺序依次查询,返回最快的响应即被采用。
Q2:如何清除DNS缓存?
A:CentOS 8使用systemdresolved服务管理DNS缓存,可通过以下方式清除:
# 刷新缓存 sudo systemdresolve flushcaches # 或重启服务(不推荐频繁使用) sudo systemctl restart system