dnsmasq 配置参数详解

dnsmasq 2.91 核心配置参数逐项详解,覆盖 port/domain-needed/bogus-priv/address/server/dhcp-range/interface 等常用指令的默认值、含义、写法与生产模板,配实测回显。

dnsmasqdnsmasq配置参数详解DNSDHCPLinux运维2026/10/09

dnsmasq 配置参数详解

目标:系统讲解 dnsmasq 2.91 配置主文件 /etc/dnsmasq.conf 的常用参数——port、domain-needed、bogus-priv、address=、server=、dhcp-range=、interface= 等——给出各参数真实默认值、含义、写法和一套生产配置模板,并附实测回显。已在 Ubuntu 22.04 + dnsmasq 2.91 环境逐条实测。

一、环境信息

项目值
dnsmasq 版本2.91-0ubuntu0.22.04.2
配置主文件/etc/dnsmasq.conf
配置目录/etc/dnsmasq.d/(自动加载)
默认缓存条数150(cache-size)
默认监听端口53(port)
默认 EDNS 报文上限1232(edns-packet-max)
默认租约文件/var/lib/misc/dnsmasq.leases
默认 resolv 文件/etc/resolv.conf(resolv-file)
服务托管systemd(dnsmasq.service)

二、前置条件

  • 已安装 dnsmasq(apt install dnsmasq)并能正常启动。
  • 每次改配置建议先 dnsmasq --test -C <file> 校验语法,再 systemctl restart dnsmasq。
  • 了解本机网卡名(ip addr 查看,示例为 eth0)、局域网 IP(示例 172.17.0.14)、上游 DNS(示例 192.168.146.2)。示例值需替换为真实值。

三、参数查看与修改方式

3.1 查看自带帮助与默认值

dnsmasq --help

实测回显(节选,含参数默认值):

-c, --cache-size=<integer>   Specify the size of the cache in entries (defaults to 150).
-p, --port=<integer>         Specify port to listen for DNS requests on (defaults to 53).
-P, --edns-packet-max=<integer>  Maximum supported UDP packet size for EDNS.0 (defaults to 1232).
-D, --domain-needed          Do NOT forward queries with no domain part.
-b, --bogus-priv             Fake reverse lookups for RFC1918 private address ranges.
-A, --address=/<domain>/<ipaddr>  Return ipaddr for all hosts in specified domains.
-S, --server=/<domain>/<ipaddr>   Specify address(es) of upstream servers with optional domains.
-F, --dhcp-range=<ipaddr>,...     Enable DHCP in the range given with lease duration.
-l, --dhcp-leasefile=<path>  Where to store DHCP leases (defaults to /var/lib/misc/dnsmasq.leases).

3.2 配置生效与语法校验

配置文件放在 /etc/dnsmasq.conf 或 /etc/dnsmasq.d/ 下。改完先校验:

dnsmasq --test -C /etc/dnsmasq.conf

实测回显:

dnsmasq: syntax check OK.

校验通过后重启生效:

sudo systemctl restart dnsmasq

💡 说明:所有参数均可用「长选项名」(如 dhcp-range=)写在配置文件里,同时也可作为命令行参数(如 --dhcp-range=)。配置里一行一个参数,# 表示注释。

四、参数总览(常用)

参数默认作用
port53DNS 监听端口;0=只做 DHCP/TFTP 不做 DNS
domain-needed关不转发无点主机名查询
bogus-priv关屏蔽 RFC1918 私有地址反向查询的转发
cache-size150DNS 缓存条目数
address=/域/IP无指定域名解析到固定 IP(本地权威)
server=/域/上游读 resolv.conf指定上游 DNS(可按域名分流)
dhcp-range=起,止,租期无启用 DHCP 并定义分配段
interface=全部接口限定监听的网卡
listen-address=全部地址限定监听的 IP
resolv-file/etc/resolv.conf上游 DNS 来源文件
local=/域无只本地解析不转发该域
dhcp-authoritative关声明本机为权威 DHCP 服务器
no-resolv关不读 resolv.conf(配合 server= 用)

五、核心参数分类详解

5.1 基础监听与端口

port(=53):DNS 服务监听端口。

port=53

💡 说明:设为 0 时完全关闭 DNS 功能,只保留 DHCP/TFTP。若本机 53 被其他进程占用,可换端口或改绑定接口(见 interface)。

interface:只监听指定网卡。dnsmasq 默认监听全部接口,指定后可避免与 systemd-resolved 冲突:

interface=eth0
bind-interfaces

listen-address:只监听指定 IP:

listen-address=172.17.0.14

5.2 转发与过滤(domain-needed / bogus-priv)

domain-needed:不转发无点号(无域部分)的查询,减少不必要上游请求:

domain-needed

bogus-priv:对内网私有地址段(RFC1918)的反向查询直接返回本地答案,不送到公网:

bogus-priv

5.3 本地域名解析(address=)

address=:把指定域名的 A/AAAA 记录固定解析到指定 IP,实现本地权威/泛解析/广告屏蔽:

address=/test.local/10.10.0.99
address=/example.com/0.0.0.0

实测验证(address=/test.local/10.10.0.99):

dig @172.17.0.14 test.local +short

实测回显:

10.10.0.99

💡 说明:写法为 address=/域名/IP,域名可多个用 / 分隔,如 address=/baidu.com/qq.com/0.0.0.0;用 /#/IP 可做全域名泛解析。

5.4 上游 DNS(server= / resolv-file / no-resolv)

server=:指定上游 DNS,可整体指定或按域名分流:

# 全局上游
server=192.168.146.2
# 仅某域走指定上游
server=/example.com/8.8.8.8
# 反向域(192.168.0.0/24 → 3.168.192.in-addr.arpa)走指定上游
server=/3.168.192.in-addr.arpa/10.1.2.3

resolv-file / no-resolv:控制上游来源。默认读 /etc/resolv.conf;no-resolv 后只采用 server= 显式指定的上游:

no-resolv
server=192.168.146.2

实测验证(转发 example.com 成功):

dig @172.17.0.14 example.com +short

实测回显:

172.66.147.243
104.20.23.154

5.5 DHCP(dhcp-range= / dhcp-option= / dhcp-authoritative)

dhcp-range=:启用 DHCP 并给出分配起止与租期,是 DHCP 服务的关键参数:

# 起,止,租期(dh 表示小时)
dhcp-range=172.22.10.10,172.22.10.100,12h
# 带子网掩码的写法
dhcp-range=192.168.0.50,192.168.0.150,255.255.255.0,12h

实测验证(客户端 udhcpc 收获租约 172.22.10.57,租期 43200 秒=12h):

udhcpc: lease of 172.22.10.57 obtained, lease time 43200

服务器端日志:

dnsmasq-dhcp: DHCPACK(eth0) 172.22.10.57 76:67:f6:ad:41:70
dnsmasq-dhcp: sent size:  4 option: 51 lease-time  12h

dhcp-option=:给客户端下发附加选项(网关、DNS 等):

dhcp-option=option:router,172.22.0.2
dhcp-option=option:dns-server,172.22.0.2

dhcp-authoritative:声明本机为局域网唯一权威 DHCP,加快客户端收敛:

dhcp-authoritative

5.6 租约与缓存

dhcp-leasefile:租约文件(默认 /var/lib/misc/dnsmasq.leases):

dhcp-leasefile=/var/lib/misc/dnsmasq.leases

cache-size:DNS 缓存条目数,常见取 1000:

cache-size=1000

六、生产配置模板

适用环境:816GB 内存、普通 SATA/NVMe 磁盘的小型局域网服务器(10200 台客户端),CPU 2 核即可。日志交给 journald(systemd),租约落盘,DHCP 权威开启。

# ========== 基础 ==========
port=53
cache-size=1000
domain-needed
bogus-priv
no-host-record

# ========== 监听 ==========
interface=eth0
bind-interfaces
listen-address=172.17.0.14

# ========== 上游 DNS ==========
no-resolv
server=192.168.146.2
server=114.114.114.114

# ========== 本地泛解析 ==========
address=/test.local/10.10.0.99

# ========== DHCP ==========
dhcp-range=172.22.10.10,172.22.10.200,12h
dhcp-option=option:router,172.22.0.2
dhcp-option=option:dns-server,172.22.0.2
dhcp-authoritative
dhcp-leasefile=/var/lib/misc/dnsmasq.leases

# ========== 日志 ==========
log-queries
log-dhcp

⚠️ 注意:listen-address、server、dhcp-range、网关 172.22.0.2 等请替换为实际局域网地址。模板里 server= 提供了备用的 114.114.114.114 作二线上游。

七、常见问题(FAQ)

7.1 Q1:配置里多个 server= 会怎么选

dnsmasq 对同一查询会轮询 server= 列出的上游(默认随机顺序),strict-order 参数可改为严格按顺序。域分流用 server=/域/上游,优先于全局上游。

7.2 Q2:为什么局域网设备分到 DHCP 后上不了网

先确认 dhcp-option=option:router 网关地址正确、dhcp-option=option:dns-server 指向 dnsmasq 能解析的上游。可 cat /var/lib/misc/dnsmasq.leases 看租约是否正常;再看 journalctl -u dnsmasq 有无 DHCPNACK。

7.3 Q3:address= 与 server= 同时命中同一域谁生效

address= 本地权威优先,dnsmasq 直接返回而不转发;server=/域/上游 只影响需要转发的查询。想屏蔽某域就用 address=/域/0.0.0.0,无需到上游。

7.4 Q4:改完配置怎么快速生效且不出错

一条命令校验成功后重启:

dnsmasq --test -C /etc/dnsmasq.conf && sudo systemctl restart dnsmasq

7.5 Q5:listen-address 写成 127.0.0.1 后局域网查不到

127.0.0.1 只监听本机回环,局域网其他主机自然无法用 dnsmasq。改成服务器局域网 IP(返回查 ip addr)。

八、参考链接