Dnsmasq 软件全面介绍 | AI生成和翻译

Home 2026.03

问题:dnsmasq 的全面介绍是什么?

回答:

什么是 dnsmasq?

Dnsmasq 是一款免费软件,为小型计算机网络提供 Domain Name System (DNS) 缓存、Dynamic Host Configuration Protocol (DHCP) 服务器、Router Advertisement 和网络启动 (Network Boot) 功能。它对系统资源的要求极低,可以在 Linux、BSDs、Android 和 macOS 上运行,并被大多数 Linux 发行版所包含。因此,它存在于许多家用路由器和 IoT 设备中,也被内置于 Android 系统中。

它被设计为轻量级且占用空间小,适用于资源受限的路由器和防火墙。它还被广泛用于智能手机的热点共享、便携式热点,以及在虚拟化框架中支持虚拟网络。


核心组件与功能

1. DNS 子系统

DNS 子系统为网络提供本地 DNS server,将所有查询类型转发到上游的递归 DNS server,并缓存常见的记录类型(A、AAAA、CNAME 和 PTR,以及启用 DNSSEC 时的 DNSKEY 和 DS)。本地 DNS 名称可以通过读取 /etc/hosts、从 DHCP 子系统导入名称或配置各种实用的记录类型来定义。

Dnsmasq 接收 DNS 查询,要么从较小的本地 cache 中回答,要么将其转发到真实的递归 DNS server。它会加载 /etc/hosts 的内容,以便解析全球 DNS 中未出现的本地 hostname,并为 DHCP 配置的主机回答 DNS 查询。

重要区别: Dnsmasq 是一个 forwarding/stub 解析器,而不是 recursive(递归)解析器。这意味着 dnsmasq 始终需要一个可以转发查询的递归 DNS 解析器。

2. DHCP 子系统

DHCP 子系统支持 DHCPv4、DHCPv6、BOOTP 和 PXE。支持静态和动态 DHCP lease,以及 DHCPv6 中的 stateless 模式。

Dnsmasq 的 DHCP server 支持静态和动态 DHCP lease、多网络和 IP 地址范围。DHCP server 与 DNS server 集成,允许拥有 DHCP 分配地址的本地机器出现在 DNS 中。

3. TFTP 服务器

Dnsmasq 包含一个安全的、只读的 TFTP server,允许 DHCP 主机进行网络/PXE boot,并且支持 BOOTP。它提供完整的 PXE 支持。

4. Router Advertisement (IPv6)

Router Advertisement 子系统为 IPv6 主机提供基础的自动配置。它可以独立使用,也可以与 DHCPv6 配合使用。M 位和 O 位是可配置的,用于控制主机对 DHCPv6 的使用。Router Advertisement 可以包含 RDNSS 选项。


安装

Debian / Ubuntu:

sudo apt-get install dnsmasq

CentOS / RHEL:

sudo yum install dnsmasq

Arch Linux:

sudo pacman -S dnsmasq

安装后,启用并启动服务:

sudo systemctl enable --now dnsmasq

配置文件

主要配置文件是 /etc/dnsmasq.conf。该文件包含解释各选项的注释。附加配置文件可以放置在 /etc/dnsmasq.d/ 目录中,并以 .conf 为后缀。

在应用配置前验证语法:

dnsmasq --test

关键配置示例

DNS 转发 (上游服务器)

# /etc/dnsmasq.conf
server=8.8.8.8
server=1.1.1.1

DNS 缓存 (本地解析)

listen-address=127.0.0.1
cache-size=1000

DHCP 服务器

# 在指定范围内启用 DHCP,租期为 12 小时
dhcp-range=192.168.1.50,192.168.1.150,12h

通过 MAC 地址分配静态 IP

dhcp-host=00:11:22:33:44:55,192.168.1.100

限制在特定接口

interface=eth0
bind-interfaces

调试日志

log-queries
log-facility=/var/log/dnsmasq.log

DNSSEC 验证

当启用 DNSSEC 时,dnsmasq 会验证 DNS 响应并缓存 DNSSEC 数据。在转发 DNS 查询时,dnsmasq 会请求验证响应所需的 DNSSEC 记录。响应经过验证后,结果将作为 DNS 数据包中的 Authenticated Data 位返回。

在 Arch Linux / Debian 上启用 DNSSEC:

conf-file=/usr/share/dnsmasq/trust-anchors.conf
dnssec

PXE / 网络启动

PXE 需要 DHCP 和 TFTP server;这两者都可以由 dnsmasq 提供。在 dnsmasq.conf 中的基础 PXE 设置:

enable-tftp
tftp-root=/srv/tftp
pxe-service=x86PC,"PXELINUX (BIOS)",bios/lpxelinux
pxe-service=X86-64_EFI,"PXELINUX (EFI)",efi64/syslinux.efi

Dnsmasq 也可以设置为 “proxy DHCP” 模式,当网络中已有另一个 DHCP server 运行时,仅向客户端提供 PXE 特定信息。


广告拦截 / DNS 过滤

添加到本地 /etc/hosts 文件中格式为 0.0.0.0 annoyingsite.com 的记录,可以阻止浏览器解析该域名。结合广告拦截站点列表,这可以迅速演变为本地广告拦截器。如果在路由器上执行,可以高效地为整个家庭或公司移除广告内容。

某些 ISP 会重写 NXDOMAIN 响应,当域名不存在时强制浏览器跳转到搜索页面。Dnsmasq 可以过滤掉这些“虚假”的 NXDOMAIN 记录,阻止这种可能不被欢迎的行为。


Split DNS (VPN / 内部域名)

指定的子域名可以被定向到它们自己的上游 DNS server,使 VPN 配置变得简单。

# 将内部域名路由到私有 DNS 服务器
server=/internal.company.com/10.0.0.1

Authoritative DNS 模式

Authoritative DNS 模式允许将本地 DNS 名称导出到全球 DNS 的 zone 中。Dnsmasq 充当该 zone 的 authoritative server,并在需要时为该 zone 的 secondary 提供区域传输 (zone transfer)。


常见用例

用例 dnsmasq 的作用
家庭/办公室路由器 为所有 LAN 设备提供 DNS 转发 + DHCP
开发环境 本地域名解析(例如 myapp.local
VPN 分流路由 将特定域名路由至内部 DNS
网络启动 (PXE) 为无盘启动提供 DHCP + TFTP
广告拦截 通过 /etc/hostsaddress= 指令拦截域名
IoT 网络 为受限环境提供轻量级 DHCP + DNS
虚拟机网络 libvirt/VirtualBox/VMware 客户机网络提供 DNS/DHCP

平台支持

支持的平台包括 Linux(支持 glibc 和 uclibc)、Android、*BSD 和 macOS。Dnsmasq 被包含在大多数 Linux 发行版以及 FreeBSD、OpenBSD 和 NetBSD 的 ports 系统中。Dnsmasq 提供完整的 IPv6 支持。


须知局限性


信号与运行时控制

信号 效果
SIGHUP 重新加载 /etc/hosts 和配置
SIGUSR1 将 cache 统计信息导出到日志
SIGUSR2 轮转日志文件

总结

Dnsmasq 是一款优雅的一体化网络服务守护进程,非常适合中小型网络。它的优势在于将 DNS 缓存/转发、DHCP、TFTP、PXE 启动和 IPv6 Router Advertisement 整合进一个轻量级的二进制文件中,并拥有简单且记录详尽的配置文件。它是全世界嵌入式路由器、家庭实验室、开发环境和 IoT 网络的事实标准。

参考资料:


Back Donate