Dnsmasq 是一款功能强大且极为轻量级的网络工具,广泛应用于家庭路由器、小型服务器乃至复杂的网络环境中,它能够将 DNS 缓存和 DHCP 服务器功能集于一身,但本文将聚焦于其核心且最受欢迎的用途:构建一个高效、灵活的本地 DNS 服务器,通过合理配置 Dnsmasq,不仅可以显著提升网络访问速度,还能实现本地设备域名解析、广告过滤等高级功能,是优化网络体验的利器。

安装 Dnsmasq
在大多数主流的 Linux 发行版中,安装 Dnsmasq 非常简单,可以通过其默认的包管理器一键完成。
对于基于 Debian 或 Ubuntu 的系统,使用以下命令:
sudo apt update sudo apt install dnsmasq
对于基于 CentOS、RHEL 或 Fedora 的系统,则使用:
sudo yum install dnsmasq
或在新版系统中使用 dnf:
sudo dnf install dnsmasq
安装完成后,Dnsmasq 服务通常会自动启动,其主配置文件位于 /etc/dnsmasq.conf,建议在修改前先备份原始文件。
核心配置详解
Dnsmasq 的配置逻辑清晰,通过修改 /etc/dnsmasq.conf 文件即可实现大部分功能,以下是一些关键的配置项。
指定上游 DNS 服务器
Dnsmasq 本身不直接解析域名,而是将收到的 DNS 查询请求转发给上游的公共 DNS 服务器(如 Google DNS、Cloudflare DNS),配置上游服务器是第一步。
在配置文件中,使用 server= 指令来指定,要使用 Cloudflare 和 Google 的 DNS,可以添加以下行:

server=1.1.1.1
server=8.8.8.8
Dnsmasq 会在这几个服务器之间进行负载均衡和故障转移,提高解析的可靠性。
| 服务商 | 主 DNS | 备用 DNS | 特点 |
|---|---|---|---|
| Cloudflare | 1.1.1 | 0.0.1 | 速度快,注重隐私 |
| 8.8.8 | 8.4.4 | 稳定,全球覆盖广 | |
| Quad9 | 9.9.9 | 112.112.112 | 内置恶意软件拦截 |
启用本地域名解析
这是 Dnsmasq 最实用的功能之一,你可以为局域网内的设备指定易于记忆的域名,nas.local 指向你的网络存储服务器 IP,使用 address= 指令即可实现。
格式为 address=/域名/IP地址。
address=/nas.local/192.168.1.100
address=/router.lan/192.168.1.1
address=/printer.local/192.168.1.50
配置保存并重启服务后,在局域网内任何设备上访问 nas.local,都会被直接解析到 168.1.100,无需再记忆复杂的 IP 地址。
配置监听地址与接口
出于安全考虑,你需要明确指定 Dnsmasq 监听的网络接口或 IP 地址。
- 仅本机使用:如果只希望本机使用 Dnsmasq 的缓存功能,可以配置为:
listen-address=127.0.0.1 - 局域网内共享:如果希望局域网内所有设备都能使用此 DNS 服务,则需要监听局域网接口的 IP 地址,假设服务器 IP 为
168.1.10:listen-address=192.168.1.10或者,你也可以指定接口名称,如
listen-address=eth0,请确保防火墙开放了 53 端口(TCP 和 UDP)。
DNS 缓存设置
Dnsmasq 默认开启 DNS 缓存,缓存大小可以通过 cache-size 参数调整,默认值通常是 150,对于大多数家庭或小型办公环境已足够,如果网络设备较多,可以适当增大此值。
cache-size=1000
高级应用:广告拦截
利用 Dnsmasq 的本地解析功能,可以轻松实现整个局域网的广告拦截,原理是将已知的广告域名列表指向一个无效地址(如 0.0.0),使得广告请求无法连接到真实服务器。

- 获取广告域名列表:网络上有很多维护良好的广告域名 hosts 文件,可以使用
wget或curl定期下载。 - 配置 Dnsmasq 加载列表:在
dnsmasq.conf中,使用addn-hosts指令指向这个文件。addn-hosts=/etc/dnsmasq-adblock.hosts - 创建自动化脚本:可以创建一个简单的脚本来下载并更新列表,然后设置定时任务(cron)自动执行。
服务管理与验证
所有配置修改完成后,需要重启 Dnsmasq 服务使其生效。
sudo systemctl restart dnsmasq
检查服务状态:
sudo systemctl status dnsmasq
要验证 DNS 是否正常工作,可以在客户端设备上将 DNS 服务器指向 Dnsmasq 所在的 IP,然后使用 dig 或 nslookup 命令进行测试。
dig www.google.com
观察输出中的 Query time,首次查询会较慢(因为需要向上游请求),再次查询时,时间会显著缩短,这证明缓存正在生效,可以 dig nas.local 来测试本地域名解析。
相关问答 (FAQs)
问题1:我已经修改了 /etc/dnsmasq.conf 文件,但为什么配置没有生效?
解答: 这是最常见的问题之一,原因通常有两个:您需要重启 Dnsmasq 服务才能让新的配置生效,请使用 sudo systemctl restart dnsmasq 命令,请确保您的客户端设备(如电脑、手机)的 DNS 设置已经指向了运行 Dnsmasq 的服务器 IP 地址,并且其自身的 DNS 缓存已清除(在 Windows 上可以使用 ipconfig /flushdns)。
问题2:Dnsmasq 和 BIND 这样的专业 DNS 服务器软件有何区别?我应该选择哪个? 解答: Dnsmasq 和 BIND 的设计目标和定位完全不同,Dnsmasq 是一个轻量级的转发器和缓存服务器,专注于为小型网络提供快速、易用的 DNS 缓存和本地解析功能,配置简单,资源消耗极低,而 BIND 是一款功能全面、重量级的权威 DNS 服务器软件,用于管理域名、解析记录,是互联网基础设施的核心组件,对于家庭用户、小型企业或仅需 DNS 缓存和内网解析的场景,Dnsmasq 是最佳选择,如果您需要搭建一个对外提供权威解析服务的域名服务器,那么应该选择 BIND。