dnsmasq使用
2234 字
11 分钟
dnsmasq使用
一、dnsmasq介绍
1.1 简介
dnsmasq 是一个轻量级、功能强大的网络服务工具,常用于中小型网络或嵌入式系统(如路由器、虚拟化环境等)。它可以同时提供 DNS 缓存服务、DHCP 服务、TFTP 服务、PXE 启动支持等功能。
1.2 基本概述
dnsmasq 的主要目标是为本地网络提供简单易用的网络基础服务,通常用在:
- 局域网 (LAN)
- 虚拟化平台(如 libvirt、KVM、OpenStack)
- 树莓派、OpenWRT、嵌入式设备
- 容器网络(如 Docker、Podman)
它通过一个配置文件(通常是 /etc/dnsmasq.conf)集中管理网络服务。
1.3 主要功能
-
**DNS 缓存服务器:**dnsmasq 可以作为上游 DNS 的代理服务器,对解析结果进行缓存,提升网络解析速度。
-
加快域名解析速度;
-
减少外部 DNS 查询次数;
-
可配置静态域名映射(本地 DNS 记录)。
-
-
**DHCP 服务:**dnsmasq 还可以充当 DHCP 服务器,为局域网设备动态分配 IP 地址。
-
**TFTP 服务:**dnsmasq 可以提供 TFTP 服务,用于无盘启动或网络刷机。
-
**PXE 网络启动:**结合 DHCP 与 TFTP,可以让设备通过网络加载启动镜像(常用于自动化安装系统、测试环境)。
-
**DNS 重定向 / 局域网劫持:**可以用来实现简单的广告屏蔽或内部域名解析。
二、安装配置
2.1 yum安装
yum install dnsmasq -y# 验证版本dnsmasq -v2.2 软件配置
2.2.1 配置路径
/etc/dnsmasq.conf # 主配置文件(单文件模式)/etc/dnsmasq.d/ # 分模块配置目录/etc/dnsmasq.conf:
/etc/dnsmasq.conf是 dnsmasq 的主配置文件,用于配置 dnsmasq 的全局选项和参数。- 在这个文件中,你可以配置诸如监听地址、缓存大小、域名解析规则、DHCP设置等全局性的选项。
- 所有的配置都直接写入到这个文件中。
/etc/dnsmasq.d/ 目录:
/etc/dnsmasq.d/目录是一个目录,用于存放 dnsmasq 的额外配置文件。- 在这个目录中,你可以创建多个以
.conf为后缀的配置文件,每个文件可以包含特定的配置选项。 - 这种组织结构使得配置更加灵活,可以
将不同功能或用途的配置分开放置在不同的文件中,便于管理和维护。
启动时的加载顺序:
1. 读取 /etc/dnsmasq.conf2. 解析 conf-file / conf-dir 指令3. 加载 /etc/dnsmasq.d/*.conf2.2.2 模块化配置
这里不将所有配置全都放到dnsmasq.conf中,而是将配置文件拆分多个模块,放在dnsmasq.d文件夹中,而主配置文件dnsmasq.conf只作为启动文件
2.2.2.1 修改主配置文件
编辑 /etc/dnsmasq.conf,只保留这一行(其他全部注释或删除):
# 加载 /etc/dnsmasq.d/ 下所有 .conf 配置conf-dir=/etc/dnsmasq.d/,*.conf2.2.2.2 在模块文件夹下创建配置文件
- 模块 1:00-base.conf 基础核心配置
# 监听 DNS 端口(标准 53)port=53
# 不解析不带域名的主机名(避免无效广播解析),拒绝解析类似 pc01 这种无域名的请求。domain-needed
# 不返回内网私有地址的反向解析(防泄露、防污染),拒绝 10/172.16/192.168 等内网段的反向解析。bogus-priv
# 自动给简单主机名补上域名(如 test → test.lan)expand-hosts
# 定义本地域名(可选)domain=lan- 01-listen.conf 监听地址 / 网卡
# 监听本机所有 IP(内网 IP + 127.0.0.1)。明确 dnsmasq 在哪几个 IP 上提供 DNSlisten-address=127.0.0.1,192.168.1.10
# 只绑定指定网卡,不监听 0.0.0.0(更安全)强制只绑定上面列出的 IP,不监听全网卡。bind-interfaces
# 只允许在 eth0 上提供服务(可选二选一)按网卡控制,适合多网卡机器。# interface=eth0
# 排除某个网卡(可选)# except-interface=docker0- 模块 3:02-dns-cache.conf DNS 缓存配置
# 缓存条目数量(根据内存调整:512M → 10000;2G → 50000)cache-size=10000
# 不缓存“解析失败”的结果(避免一直返回错误)no-negcache
# 最小缓存 TTL(单位秒),防止上游 TTL 太短min-cache-ttl=60
# 最大缓存 TTLmax-cache-ttl=86400参数作用:
cache-size:DNS 解析结果缓存条数,越大越吃内存。no-negcache:不缓存 NXDOMAIN(域名不存在)。min/max-cache-ttl:控制缓存时间,稳定内网解析。
- 模块 4:03-upstream-dns.conf 上游公共 DNS
# 不使用系统 /etc/resolv.conf 作为上游no-resolv
# 向上游 DNS 递归查询(阿里云 + 114 示例)server=223.5.5.5server=223.6.6.6server=114.114.114.114
# 同时查询所有上游,取最快返回(可选)all-servers参数作用:
no-resolv:禁止读取系统自带 DNS,保证配置可控。server=IP:定义上游递归 DNS,可写多个。all-servers:并发查询所有上游,降低延迟。
- 04-local-hosts.conf 本地自定义域名
# 方式一:使用额外 hosts 文件(推荐)# 从自定义 hosts 读取本地域名addn-hosts=/etc/dnsmasq.hosts
echo >> /etc/dnsmasq.hosts <<EOF192.168.1.10 router.lan192.168.1.20 nas.lan192.168.1.30 pihole.lanEOF
# 方式二:直接在 dnsmasq 配置写(简单)
# 静态域名解析address=/router.lan/192.168.1.10address=/nas.lan/192.168.1.20
# 泛解析(*.test.lan → 192.168.1.100)address=/test.lan/192.168.1.100**参数作用 : **
addn-hosts:加载额外 hosts,不污染系统/etc/hosts。address=/域名/IP:强制指定域名解析结果,可做内网劫持、广告拦截。
- 05-log.conf 日志配置
# 记录所有 DNS 查询请求log-queries
# 日志输出到文件(也可以用 systemd 日志)log-facility=/var/log/dnsmasq.log
# 异步日志,不阻塞 DNS 响应log-async参数作用
log-queries:记录谁查了什么域名。log-facility:指定日志文件。log-async:异步写日志,提升性能。
2.2.2.3 验证语法和测试
# 验证语法,出现ok则代表没问题dnsmasq --test
# 启动软件systemctl start dnsmasq
# 测试dig @127.0.0.1 router.lan
# 结果如下; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.16 <<>> @127.0.0.1 router.lan; (1 server found);; global options: +cmd;; Got answer:;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 7685;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:; EDNS: version: 0, flags:; udp: 4096;; QUESTION SECTION:;router.lan. IN A
;; ANSWER SECTION:router.lan. 0 IN A 192.168.1.10
;; Query time: 0 msec;; SERVER: 127.0.0.1#53(127.0.0.1);; WHEN: Tue Feb 10 16:16:51 CST 2026;; MSG SIZE rcvd: 552.2.3 全局配置
2.2.3.1 全局参数
| 参数 | 说明 |
|---|---|
resolv-file | 定义dnsmasq从哪里获取上游DNS服务器的地址,默认从/etc/resolv.conf获取。 |
strict-order | 表示严格按照resolv-file文件中的顺序从上到下进行DNS解析,直到第一个解析成功为止。 |
listen-address | 定义dnsmasq监听的地址,默认是监控本机的所有网卡上。 |
address | 启用泛域名解析,即自定义解析A记录。例如:address=/long.com/192.168.115.10,访问long.com时的所有域名都会被解析成192.168.115.10。 |
bogus-nxdomain | 对于任何被解析到此IP的域名,将响应NXDOMAIN使其解析失效。可以多次指定,通常用于对于访问不存在的域名,禁止其跳转到运营商的广告站点。 |
server | 指定使用哪个DNS服务器进行解析,对于不同的网站可以使用不同的域名对应解析。例如:server=/google.com/8.8.8.8表示对于google.com的服务,使用谷歌的DNS解析。 |
# 在/dnsmasq.conf中创建如下内容
resolv-file=/etc/dnsmasq-resolv.conf # 指定上游DNS服务器列表文件strict-order # 按顺序查询上游DNS服务器listen-address=127.0.0.1,192.168.106.33 # 监听自身服务器IP地址addn-hosts=/etc/dnsmasq.hosts # 额外的hosts文件cache-size=10000 # 设置DNS缓存大小log-facility=/var/log/dnsmasq.log # 日志文件位置参数说明:
resolv-file:这个选项指定了 dnsmasq 应该使用的 resolv.conf 文件的位置。通常情况下,dnsmasq 会读取系统的 resolv.conf 文件来获取 DNS 服务器的配置,但是通过这个选项可以指定一个自定义的文件。strict-order:这个选项告诉 dnsmasq 在解析域名时是否应该严格按照/etc/resolv.conf中列出的 DNS 服务器顺序进行查询。如果设置为strict-order,dnsmasq 将严格按照列表顺序进行查询;如果未设置或设置为no, 则将按照最快响应的顺序进行查询。listen-address:这个选项指定了 dnsmasq 监听的 IP 地址。dnsmasq 只会在指定的 IP 地址上接收 DNS 查询请求,一般配置自身服务器的 IP 地址。addn-hosts:这个选项指定了 dnsmasq 应该读取的附加 hosts 文件的位置。dnsmasq 在解析域名时会优先查找这个文件,以便将域名解析到指定的 IP 地址。cache-size:这个选项设置了 dnsmasq 缓存的大小为 10000 条记录。它决定了 dnsmasq 可以缓存的 DNS 查询结果的数量。log-facility:这个选项指定了 dnsmasq 日志的位置。dnsmasq 将会把日志信息写入到指定的文件中。
2.2.3.2 创建需要的文件
- 创建
/etc/dnsmasq-resovl.conf
# 添加内容server=223.5.5.5server=223.6.6.6server=114.114.114.114- 创建
/etc/dnsmasq.hosts
# 添加内容echo >> /etc/dnsmasq.hosts <<EOF192.168.1.10 router.lang192.168.1.20 nas.lang192.168.1.30 pihole.langEOF2.2.3.3 验证语法和测试
# 验证语法,出现ok则代表没问题dnsmasq --test
# 启动软件systemctl start dnsmasq
# 测试dig @127.0.0.1 router.lang
# 结果如下; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.16 <<>> @127.0.0.1 router.lang; (1 server found);; global options: +cmd;; Got answer:;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 14737;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:; EDNS: version: 0, flags:; udp: 4096;; QUESTION SECTION:;router.lang. IN A
;; ANSWER SECTION:router.lang. 0 IN A 192.168.1.10
;; Query time: 0 msec;; SERVER: 127.0.0.1#53(127.0.0.1);; WHEN: Tue Feb 10 16:36:44 CST 2026;; MSG SIZE rcvd: 56文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!
赣公网安备36072602000131号