在Linux系统中使用dnsmasq搭建DNS缓存服务器,能够显著降低重复域名解析的延迟,同时减少上游DNS服务器的请求压力,适合个人主机、小型局域网等场景使用。下面详细介绍完整的配置流程。

环境准备与软件安装
首先确认当前Linux系统的版本,本文示例基于Ubuntu 22.04和CentOS 7两种常见发行版,其他发行版操作逻辑类似。dnsmasq在主流Linux发行版的官方仓库中都有提供,直接通过包管理器安装即可。
Ubuntu/Debian系统安装
执行以下命令更新软件源并安装dnsmasq:
# 更新软件源 sudo apt update # 安装dnsmasq sudo apt install dnsmasq -y
CentOS/RHEL系统安装
执行以下命令安装dnsmasq:
# 安装dnsmasq sudo yum install dnsmasq -y
核心配置文件修改
dnsmasq的默认配置文件路径为/etc/dnsmasq.conf,我们可以先备份默认配置,再修改自定义配置,避免误操作后无法恢复。
执行备份命令:
sudo cp /etc/dnsmasq.conf /etc/dnsmasq.conf.bak
接下来编辑配置文件,添加DNS缓存相关的核心配置,以下是推荐的基础配置内容:
# 指定监听的网卡,默认监听所有网卡,可指定具体网卡如eth0 # interface=eth0 # 不监听回环网卡,避免冲突 no-dhcp-interface=lo # 指定上游DNS服务器,这里使用公共DNS作为示例,可替换为实际使用的上游DNS server=114.114.114.114 server=8.8.8.8 # 开启DNS缓存功能 cache-size=1000 # 缓存有效期,单位秒,这里设置为1小时 dns-cache-ttl=3600 # 本地hosts解析优先级高于上游DNS addn-hosts=/etc/hosts # 日志记录路径,方便排查问题 log-facility=/var/log/dnsmasq.log # 日志级别,设置为debug可查看详细解析日志 log-queries
配置项说明:cache-size表示缓存的最大DNS记录数,可根据实际需求调整;server参数指定上游DNS服务器,可配置多个实现冗余;dns-cache-ttl控制缓存记录的存活时间,避免缓存过期数据。
服务启动与开机自启
配置完成后,需要启动dnsmasq服务并设置开机自启,不同系统的服务管理命令略有区别。
Systemd系统(Ubuntu 16.04+、CentOS 7+)
执行以下命令:
# 启动dnsmasq服务 sudo systemctl start dnsmasq # 设置开机自启 sudo systemctl enable dnsmasq # 查看服务状态 sudo systemctl status dnsmasq
SysVinit系统(较旧版本CentOS 6等)
执行以下命令:
# 启动服务 sudo service dnsmasq start # 设置开机自启 sudo chkconfig dnsmasq on # 查看服务状态 sudo service dnsmasq status
功能验证
服务启动后,需要验证DNS缓存功能是否正常工作,可通过以下步骤测试。
查看服务监听端口
dnsmasq默认监听53端口,执行以下命令查看端口监听情况:
# 查看53端口监听状态 sudo netstat -tuln | grep 53 # 或者使用ss命令 sudo ss -tuln | grep 53
如果输出中存在0.0.0.0:53或指定网卡的53端口监听记录,说明服务启动成功。
测试DNS解析与缓存
使用dig命令测试解析,首先安装dig工具:
# Ubuntu/Debian安装dig sudo apt install dnsutils -y # CentOS/RHEL安装dig sudo yum install bind-utils -y
执行解析测试,第一次解析会请求上游DNS:
# 指定DNS服务器为本地dnsmasq(127.0.0.1) dig @127.0.0.1 www.baidu.com
查看返回结果中的Query time字段,记录第一次解析耗时。然后再次执行相同的解析命令,此时应该命中缓存,Query time会明显缩短,同时可以查看日志文件/var/log/dnsmasq.log,会看到缓存命中的相关记录。
常见问题排查
- 服务启动失败:检查53端口是否被其他服务占用,比如systemd-resolved服务默认也会占用53端口,可先停止该服务再启动dnsmasq:
sudo systemctl stop systemd-resolved - 解析失败:检查配置文件中的上游DNS是否可达,可通过
ping 114.114.114.114测试上游DNS连通性 - 缓存不生效:检查
cache-size是否配置为大于0的数值,同时确认dns-cache-ttl配置正确
客户端配置
如果要将这台dnsmasq服务器作为局域网内的DNS缓存服务器,只需要将其他客户端的DNS服务器地址设置为这台Linux主机的IP地址即可。例如客户端是Linux系统,可修改/etc/resolv.conf文件,添加nameserver 192.168.0.1(替换为实际dnsmasq服务器的IP),如果是Windows客户端,在网络适配器属性中修改DNS服务器地址即可。
dnsmasqdns_cache_serverLinux配置DNS缓存修改时间:2026-07-01 09:30:17