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

关于本站

搬瓦工VPS中文网(bwgvps.com)是非官方中文信息站,整理搬瓦工的方案、优惠和教程。我们不销售主机,不提供技术服务。

新手必读
搬瓦工优惠码

NODESEEK2026(优惠 6.77%)

购买时填入即可抵扣。