在CentOS系统中,配置DNS缓存是提升网络性能和响应速度的有效手段,通过将频繁访问的域名解析结果暂存在本地,系统可以避免每次都向外部DNS服务器发起请求,从而显著降低网络延迟,减轻上游DNS服务器的负担,对于服务器和开发环境而言,一个稳定高效的DNS缓存服务尤为重要,本文将详细介绍在CentOS上配置DNS缓存的两种主流方法,并提供验证与维护的实用技巧。
使用 Dnsmasq 搭建DNS缓存服务
Dnsmasq是一款轻量级且功能强大的工具,适用于提供DNS缓存和DHCP服务,它配置简单,资源占用低,是许多小型网络和单机环境的首选。
安装 Dnsmasq
通过yum或dnf包管理器来安装Dnsmasq,在CentOS 7及更高版本上,通常使用以下命令:
sudo yum install dnsmasq
配置 Dnsmasq
Dnsmasq的主配置文件位于/etc/dnsmasq.conf
,为了将其配置为一个纯粹的本地DNS缓存服务器,我们需要进行如下修改:
- 监听地址:确保服务只监听本地回环地址,避免对外提供服务。
listen-address=127.0.0.1
- 上游DNS服务器:默认情况下,Dnsmasq会读取
/etc/resolv.conf
文件中的地址作为上游服务器,通常无需修改,除非你想指定特定的公共DNS(如8.8.8.8或1.1.1.1)。 - 缓存大小:可以根据需要调整缓存条目数量,默认值通常是150。
cache-size=1000
启动并启用服务
配置完成后,启动Dnsmasq服务并设置其开机自启:
sudo systemctl start dnsmasq sudo systemctl enable dnsmasq
更新系统DNS解析器
最后一步是让系统使用我们刚刚搭建的DNS缓存服务,这需要修改/etc/resolv.conf
文件,将nameserver
指向本地地址。
sudo vim /etc/resolv.conf
在文件最顶部添加一行:
nameserver 127.0.0.1
注意:在某些由NetworkManager管理的系统中,/etc/resolv.conf
可能会在重启后被覆盖,为使其永久生效,可以修改网络配置脚本(如/etc/sysconfig/network-scripts/ifcfg-eth0
),添加PEERDNS=no
,或使用nmcli
工具进行配置。
使用 Systemd-Resolved(现代CentOS推荐)
从CentOS 7开始,systemd引入了systemd-resolved
服务,它内置于系统中,提供了完整的DNS缓存和解析功能,对于现代CentOS发行版,这是一个更集成、更推荐的选择。
检查并启用服务
首先检查服务状态,如果未运行则启动它。
systemctl status systemd-resolved sudo systemctl enable systemd-resolved --now
配置 Systemd-Resolved
其配置文件为/etc/systemd/resolved.conf
,打开文件并找到[Resolve]
部分,进行如下修改:
[Resolve]
DNS=8.8.8.8 1.1.1.1
#FallbackDNS=
Domains=
Cache=yes
DNSStubListener=yes
DNS=
:指定上游DNS服务器地址。Cache=yes
:确保开启缓存功能。
更新解析器指向
systemd-resolved
提供了一个本地的DNS存根监听在0.0.53
,我们需要将系统的/etc/resolv.conf
指向它,最佳实践是创建一个符号链接指向systemd-resolved
管理的配置文件:
sudo mv /etc/resolv.conf /etc/resolv.conf.bak sudo ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf
重启服务使配置生效:
sudo systemctl restart systemd-resolved
如何验证DNS缓存是否生效
无论使用哪种方法,都可以通过dig
命令来验证缓存是否工作。
首次查询一个域名,记录查询时间:
dig example.com
注意输出中的
Query time
,例如Query time: 48 msec
。立即再次执行相同命令:
dig example.com
Query time
应该会显著降低,例如Query time: 1 msec
,这表明结果是从本地缓存中获取的。
如果使用systemd-resolved
,还可以通过以下命令查看缓存统计信息:
systemd-resolve --statistics
Dnsmasq 与 Systemd-Resolved 对比
特性 | Dnsmasq | Systemd-Resolved |
---|---|---|
易用性 | 配置直观,适合独立部署 | 与系统集成度高,配置简单 |
功能范围 | 同时提供DNS和DHCP服务 | 专注于DNS解析、缓存和LLMNR |
资源占用 | 非常轻量 | 作为systemd一部分,资源占用也较小 |
适用场景 | 需要DHCP服务的局域网、轻量级缓存需求 | 现代CentOS桌面或服务器,追求原生集成 |
相关问答 (FAQs)
问题1:为什么我的 /etc/resolv.conf 文件在重启后总是被还原?
解答:这是因为在现代Linux发行版中,/etc/resolv.conf
文件通常由NetworkManager
服务动态管理,当网络状态发生变化或系统重启时,NetworkManager
会根据其网络配置重新生成此文件,要永久生效,最佳方法是使用NetworkManager
的工具(如nmcli
)来配置DNS,或者修改网络接口配置文件(例如在/etc/sysconfig/network-scripts/ifcfg-*
中设置PEERDNS="no"
并手动添加DNS条目),或者如上文所述,将/etc/resolv.conf
链接到systemd-resolved
的输出文件。
问题2:DNS缓存会保存多久?如何清理缓存?
解答:DNS缓存条目的保存时间由该域名DNS记录中的TTL(Time To Live)值决定,当缓存时间超过TTL后,该条目会失效,下次查询时会重新向上游服务器请求,如果需要手动清理缓存,可以重启对应的服务,对于Dnsmasq,使用sudo systemctl restart dnsmasq
,对于systemd-resolved
,则使用更优雅的命令sudo systemd-resolve --flush-caches
,这会清空所有缓存条目而不重启整个服务。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复