Dnsmasq 本地 DNS 缓存配置教程
Dnsmasq 是一款轻量级的 DNS 转发器和 DHCP 服务器,非常适合在 VPS 上作为本地 DNS 缓存使用。它可以将 DNS 查询结果缓存在本地,减少重复查询的延迟,同时支持自定义域名解析和简单的 DHCP 服务。Dnsmasq 配置简单、资源占用极低,是小型网络环境中的理想 DNS 解决方案。
一、Dnsmasq 适用场景
- 本地 DNS 缓存:加速 VPS 上应用程序的 DNS 解析。
- 自定义内网域名:为内网设备分配易记的域名。
- 广告过滤:通过 DNS 黑名单屏蔽广告域名。
- 开发测试:模拟域名解析,方便本地开发调试。
- DHCP 服务:为局域网设备自动分配 IP 地址。
二、安装 Dnsmasq
Ubuntu/Debian
apt update
apt install dnsmasq -y
CentOS
yum install dnsmasq -y
安装后需要先停止 systemd-resolved 避免端口冲突:
systemctl stop systemd-resolved
systemctl disable systemd-resolved
三、DNS 缓存配置
编辑 Dnsmasq 配置文件 /etc/dnsmasq.conf:
cat > /etc/dnsmasq.conf <<EOF
# 监听地址
listen-address=127.0.0.1,你的VPS内网IP
bind-interfaces
# 上游 DNS 服务器
server=8.8.8.8
server=8.8.4.4
server=1.1.1.1
# DNS 缓存大小(条目数)
cache-size=10000
# 最小缓存 TTL(秒)
min-cache-ttl=300
# 不使用 /etc/resolv.conf 中的 DNS
no-resolv
# 不转发没有域名部分的查询
domain-needed
# 不转发私有反向查找
bogus-priv
# 日志配置
log-queries
log-facility=/var/log/dnsmasq.log
# 端口
port=53
EOF
四、自定义域名解析
在 Dnsmasq 中添加自定义域名映射有两种方式:
4.1 使用 address 指令
在 dnsmasq.conf 中直接添加:
# 将整个域名及其子域名指向同一 IP
address=/myapp.local/192.168.1.10
address=/dev.local/192.168.1.11
# 屏蔽广告域名(返回 0.0.0.0)
address=/ads.example.com/0.0.0.0
4.2 使用额外的 hosts 文件
addn-hosts=/etc/dnsmasq.hosts
cat > /etc/dnsmasq.hosts <<EOF
192.168.1.10 server1.local
192.168.1.11 server2.local
192.168.1.12 db.local
192.168.1.13 cache.local
EOF
五、按域名分流解析
Dnsmasq 支持将不同域名的查询发送到不同的上游 DNS 服务器:
# 内网域名使用内网 DNS
server=/internal.company.com/10.0.0.1
# 特定域名使用指定 DNS
server=/github.com/8.8.8.8
# 其余使用默认上游
server=1.1.1.1
六、DNS 广告过滤
通过将广告域名解析到 0.0.0.0 实现简单的广告过滤:
wget -O /etc/dnsmasq.d/adblock.conf \
https://raw.githubusercontent.com/notracking/hosts-blocklists/master/dnsmasq/dnsmasq.blacklist.txt
确保 dnsmasq.conf 中包含:
conf-dir=/etc/dnsmasq.d/,*.conf
七、启动与验证
dnsmasq --test
systemctl restart dnsmasq
systemctl enable dnsmasq
修改系统 DNS 指向本地:
echo "nameserver 127.0.0.1" > /etc/resolv.conf
测试解析效果:
# 第一次查询(未缓存)
dig google.com
# 第二次查询(已缓存,速度明显更快)
dig google.com
# 查看缓存统计
kill -USR1 $(pidof dnsmasq)
tail -20 /var/log/dnsmasq.log
八、DHCP 服务配置
如果需要为局域网设备自动分配 IP,可以启用 DHCP 功能:
# DHCP 范围
dhcp-range=192.168.1.100,192.168.1.200,24h
# 网关
dhcp-option=option:router,192.168.1.1
# DNS 服务器
dhcp-option=option:dns-server,192.168.1.1
# 静态 IP 分配
dhcp-host=aa:bb:cc:dd:ee:ff,192.168.1.50,server-static
九、性能优化
- 增大缓存:对于高查询量的场景,将 cache-size 增大到 50000 或更多。
- 预取功能:在缓存即将过期时自动更新。
# 缓存预取
dns-forward-max=300
cache-size=50000
min-cache-ttl=600
十、常见问题
端口 53 被占用
ss -ulnp | grep :53
通常是 systemd-resolved,按照第二节方法禁用。
配置变更后不生效
Dnsmasq 不支持 reload,需要重启服务:
systemctl restart dnsmasq
总结
Dnsmasq 是最轻量简洁的本地 DNS 方案,配置文件直观易懂,几分钟即可完成部署。在搬瓦工 VPS 上作为本地缓存 DNS 使用,可以明显减少应用的 DNS 查询延迟。如果需要更专业的 DNS 服务,可以参考 BIND9 教程 或 CoreDNS 教程。购买搬瓦工 VPS 请查看 全部方案,使用优惠码 NODESEEK2026 可享 6.77% 折扣,购买链接:bwh81.net。