# Dnsmasq安装配置
Dnsmasq 是一个轻量级的 DNS 转发器和 DHCP 服务器,适用于小型网络。它可以将 DNS 查询缓存到本地,从而提高网络访问速度,并支持 DHCP 功能,为局域网设备分配 IP 地址。以下是 Dnsmasq 的安装、配置和使用指南。
# 安装
在 Arch Linux 上安装 Dnsmasq:
sudo pacman -S dnsmasq
# 配置
# 基本配置
Dnsmasq 的主要配置文件位于 /etc/dnsmasq.conf
。以下是一些常见的配置选项:
监听地址: 默认情况下,Dnsmasq 只监听本地回环地址
127.0.0.1
。如果你希望局域网中的其他设备也能使用 Dnsmasq,可以添加局域网 IP 地址:listen-address=127.0.0.1,192.168.1.123
上游 DNS 服务器: Dnsmasq 会从
/etc/resolv.conf
中读取上游 DNS 服务器。你可以通过resolv-file
选项指定自定义的上游 DNS 文件:resolv-file=/etc/resolv.dnsmasq.conf
在
/etc/resolv.dnsmasq.conf
中添加上游 DNS 服务器,例如:nameserver 8.8.8.8 nameserver 114.114.114.114
缓存设置: 你可以通过
cache-size
选项设置 DNS 缓存的大小:cache-size=1000
本地域名解析: Dnsmasq 会优先解析
/etc/hosts
文件中的域名。你可以通过addn-hosts
选项添加额外的 hosts 文件:addn-hosts=/etc/dnsmasq.hosts
# 高级配置
泛域名解析: 你可以通过
address
选项实现泛域名解析。例如,将所有.local
域名解析到192.168.1.100
:address=/local/192.168.1.100
屏蔽广告: 通过将广告域名解析到
127.0.0.1
,可以屏蔽网页广告:address=/ad.youku.com/127.0.0.1 address=/ad.iqiyi.com/127.0.0.1
DHCP 功能: 如果需要启用 DHCP 功能,可以在配置文件中添加以下内容:
interface=eth0 dhcp-range=192.168.1.50,192.168.1.150,12h
这将为
eth0
接口分配192.168.1.50
到192.168.1.150
的 IP 地址,租期为 12 小时。
# 启动与测试
启动 Dnsmasq:
sudo systemctl start dnsmasq sudo systemctl enable dnsmasq
测试 DNS 缓存: 使用
dig
命令测试 DNS 查询速度:dig archlinux.org | grep "Query time"
第一次查询时间较长,第二次查询由于缓存的存在,时间会显著缩短。
# 清除 DNS 缓存
如果需要清除 Dnsmasq 的 DNS 缓存,可以重启 Dnsmasq 服务:
sudo systemctl restart dnsmasq
# DNS 缓存配置
Dnsmasq 的核心功能之一是 DNS 缓存,通过缓存 DNS 查询结果,可以显著提升网络访问速度。
# 配置步骤:
设置缓存大小: 在
/etc/dnsmasq.conf
中,通过cache-size
参数设置缓存大小。默认值为 150,建议根据网络规模调整:cache-size=1000
启用负缓存: 负缓存可以记录“域名不存在”的查询结果,避免重复查询不存在的域名:
neg-ttl=3600
如果需要禁用负缓存,可以取消注释
no-negcache
:#no-negcache
设置上游 DNS 服务器: 通过
resolv-file
指定上游 DNS 服务器文件,例如/etc/resolv.dnsmasq.conf
:resolv-file=/etc/resolv.dnsmasq.conf
在
resolv.dnsmasq.conf
中添加上游 DNS 服务器:nameserver 8.8.8.8 nameserver 114.114.114.114
严格顺序解析: 启用
strict-order
参数,强制按照上游 DNS 服务器列表的顺序解析域名:strict-order
# DHCP 服务配置
Dnsmasq 可以作为 DHCP 服务器,为局域网设备分配 IP 地址。
# 配置步骤:
设置 DHCP 地址池: 在
/etc/dnsmasq.conf
中,通过dhcp-range
参数定义 IP 地址范围和租期:dhcp-range=192.168.1.50,192.168.1.150,12h
静态 IP 分配: 通过
dhcp-host
参数为特定设备分配固定 IP 地址:dhcp-host=11:22:33:44:55:66,192.168.1.100
配置网关和 DNS: 使用
dhcp-option
参数为 DHCP 客户端分配网关和 DNS 服务器:dhcp-option=3,192.168.1.1 # 网关 dhcp-option=6,8.8.8.8,114.114.114.114 # DNS 服务器
记录 DHCP 租约: 通过
dhcp-leasefile
参数记录 DHCP 分配的 IP 地址:dhcp-leasefile=/var/lib/dnsmasq/dnsmasq.leases
# 日志记录与调试
Dnsmasq 支持详细的日志记录,便于排查问题。
# 配置步骤:
启用查询日志: 在
/etc/dnsmasq.conf
中,启用log-queries
记录 DNS 查询日志:log-queries
自定义日志文件: 通过
log-facility
参数指定日志文件路径:log-facility=/var/log/dnsmasq.log
日志轮转配置: 使用
logrotate
配置日志轮转,避免日志文件过大:/var/log/dnsmasq.log { monthly missingok notifempty delaycompress postrotate /bin/kill -HUP $(cat /var/run/dnsmasq.pid 2>/dev/null) 2>/dev/null || true endscript }
# 泛域名解析与域名控制
Dnsmasq 支持泛域名解析和域名重定向功能,适用于内网 DNS 管理。
# 配置步骤:
泛域名解析: 通过
address
参数实现泛域名解析,例如将所有.local
域名解析到192.168.1.100
:address=/local/192.168.1.100
屏蔽广告域名: 将广告域名解析到
127.0.0.1
,实现广告屏蔽:address=/ad.youku.com/127.0.0.1 address=/ad.iqiyi.com/127.0.0.1
域名重定向: 将特定域名解析到指定 IP 地址,例如将
example.com
解析到192.168.1.200
:address=/example.com/192.168.1.200
# 高级功能与优化
Dnsmasq 还支持 TFTP 服务、PXE 启动等高级功能。
# 配置步骤:
启用 TFTP 服务: 在
/etc/dnsmasq.conf
中,启用 TFTP 服务并指定文件目录:enable-tftp tftp-root=/var/lib/tftpboot
PXE 启动支持: 通过
dhcp-boot
参数配置 PXE 启动文件:dhcp-boot=pxelinux.0
优化 DNS 查询: 通过
dns-forward-max
参数限制并发 DNS 查询数量,避免资源耗尽:dns-forward-max=150
# 常见问题排查
Dnsmasq 无法启动:
- 检查配置文件语法:
dnsmasq --test
。 - 确保端口 53 未被占用:
netstat -tunlp | grep 53
。 - 使用
sudo
权限启动服务。
- 检查配置文件语法:
DNS 查询失败:
- 检查上游 DNS 服务器配置。
- 使用
nslookup
或dig
测试 DNS 解析。
DHCP 地址冲突:
- 调整 DHCP 租约时间。
- 确保网络中只有一个 DHCP 服务器。
# 参考
- Arch Wiki: Dnsmasq (opens new window)
- CSDN: 自建DNS服务器 (opens new window)
- 腾讯云: Dnsmasq详细解析 (opens new window)