解析服务 (DNSMasq)
解析服务功能内置了轻量级 DNS 服务器(基于 DNSMasq),支持自定义 DNS 解析规则和上游 DNS 配置,可用于局域网内的本地 DNS 服务。
技术原理
DNS 解析工作流程
当局域网设备发起域名查询时,DNSMasq 作为本地 DNS 服务器处理请求:
局域网设备 DNSMasq(NetPanel) 上游 DNS
│ │ │
│ 查询 nas.local │ │
│─────────────────────────────>│ │
│ │ │
│ 命中本地 Hosts 规则? │
│ ┌─────────┴──────────┐ │
│ 是 否 │
│ │ │ 转发查询 │
│ │ │─────────────────>│
│ │ │ 返回结果 │
│ │ │<─────────────────│
│ │ │ │
│ 返回 192.168.1.100 │ 返回上游 DNS 结果 │ │
│<────────────────────┴────────────────────│ │DNSMasq 核心特性
| 特性 | 说明 |
|---|---|
| 本地 Hosts 解析 | 优先匹配自定义 Hosts 规则,无需查询上游 |
| DNS 缓存 | 缓存上游查询结果,减少重复查询延迟 |
| 上游转发 | 未命中本地规则时,转发到配置的上游 DNS |
| 轻量高效 | 专为嵌入式和家庭网络设计,资源占用极低 |
功能概述
- 提供局域网 DNS 服务,统一管理内网域名解析
- 支持自定义域名解析规则(Hosts 规则)
- 支持配置多个上游 DNS 服务器(支持故障转移)
- 支持 DNS 缓存,加速解析响应
- 支持广告域名过滤,实现全局去广告
配置说明
进入 解析服务 页面:
基础配置
| 字段 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
| 启用 | 布尔 | ✅ | false | 是否启用 DNS 服务 |
| 监听地址 | 字符串 | ❌ | 0.0.0.0 | DNS 服务监听 IP,建议填写具体 IP |
| 监听端口 | 整数 | ❌ | 53 | DNS 服务监听端口 |
| 缓存大小 | 整数 | ❌ | 150 | DNS 缓存条目数量,建议 150~500 |
上游 DNS 配置
| 字段 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
| 上游 DNS | 字符串 | ❌ | 8.8.8.8 | 上游 DNS 服务器,每行一个,按顺序尝试 |
常用上游 DNS 服务器:
| 服务商 | 地址 | 特点 |
|---|---|---|
| 阿里云 | 223.5.5.5 / 223.6.6.6 | 国内速度快,推荐国内用户 |
| 腾讯云 | 119.29.29.29 / 182.254.116.116 | 国内速度快 |
8.8.8.8 / 8.8.4.4 | 全球可用,国内可能较慢 | |
| Cloudflare | 1.1.1.1 / 1.0.0.1 | 注重隐私,速度快 |
| 114 DNS | 114.114.114.114 | 国内老牌 DNS |
自定义解析规则
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| Hosts 规则 | 文本 | ❌ | 自定义域名解析,格式同 /etc/hosts |
| 额外配置 | 文本 | ❌ | 高级 DNSMasq 原生配置项 |
配置示例
示例 1:内网服务域名解析
将内网服务映射到友好域名,局域网内所有设备均可通过域名访问:
上游 DNS 配置:
223.5.5.5
8.8.8.8Hosts 规则:
# 内网 NAS 服务
192.168.1.100 nas.local
192.168.1.100 photos.local
# 路由器管理页
192.168.1.1 router.local
# EasyTier 虚拟网络设备
10.144.144.1 home-server.local
10.144.144.2 office-pc.local
# 本地开发环境
127.0.0.1 dev.local
127.0.0.1 api.dev.local配置后,将路由器 DHCP 的 DNS 服务器地址改为 NetPanel 所在设备的 IP,局域网内所有设备即可通过域名访问内网服务。
示例 2:广告过滤
将广告域名解析到 0.0.0.0,实现全局广告屏蔽:
Hosts 规则(部分示例):
# 广告域名屏蔽(解析到黑洞地址)
0.0.0.0 ads.example.com
0.0.0.0 tracking.example.com
0.0.0.0 analytics.example.com
# 也可使用 127.0.0.1(会有连接超时,不如 0.0.0.0 干净)
# 0.0.0.0 会立即拒绝连接,用户体验更好示例 3:开发环境域名
为本地开发项目配置域名,方便多项目切换:
Hosts 规则:
# 前端开发服务
127.0.0.1 frontend.dev
127.0.0.1 admin.dev
# 后端 API
127.0.0.1 api.dev
127.0.0.1 auth.dev
# 数据库管理工具
127.0.0.1 db.dev示例 4:额外配置(高级用法)
使用 DNSMasq 原生配置语法实现高级功能:
# 为特定域名指定专用上游 DNS(分流解析)
server=/google.com/8.8.8.8
server=/baidu.com/223.5.5.5
# 禁止解析某个域名(返回 NXDOMAIN)
address=/blocked-site.com/
# 设置 DNS 查询超时
dns-forward-max=150
# 不读取系统 /etc/hosts
no-hosts路由器 DNS 设置
要让局域网内所有设备自动使用 NetPanel 的 DNS 服务,需要在路由器中配置:
方法一:修改 DHCP DNS 服务器(推荐)
- 登录路由器管理页面
- 找到 DHCP 设置 或 LAN 设置
- 将 首选 DNS 服务器 改为 NetPanel 所在设备的 IP(如
192.168.1.10) - 保存设置,等待设备重新获取 IP 后生效
方法二:单台设备手动配置
Windows:
- 网络连接 → 属性 → IPv4 属性
- 手动设置 DNS:首选
192.168.1.10(NetPanel IP)
Linux:
# 临时修改(重启后失效)
echo "nameserver 192.168.1.10" | sudo tee /etc/resolv.conf
# 永久修改(systemd-resolved)
sudo systemctl disable systemd-resolved
echo "nameserver 192.168.1.10" | sudo tee /etc/resolv.confmacOS: 系统偏好设置 → 网络 → 高级 → DNS → 添加 192.168.1.10
常见问题排查
问题:DNS 服务无法启动
| 原因 | 解决方案 |
|---|---|
| 53 端口被占用 | 检查是否有其他 DNS 服务运行(`netstat -tlnp |
| 权限不足 | Linux 上监听 53 端口需要 root 权限或 CAP_NET_BIND_SERVICE |
| 系统 resolved 冲突 | Ubuntu 需先禁用 systemd-resolved(sudo systemctl disable systemd-resolved) |
使用高位端口避免权限问题
如果无法获取 root 权限,可将监听端口改为 5353 等高位端口,然后在路由器上配置 DNS 转发到该端口。
问题:自定义域名无法解析
- 确认 DNSMasq 服务已启用并正常运行
- 确认设备的 DNS 服务器已指向 NetPanel IP
- 检查 Hosts 规则格式是否正确(IP 在前,域名在后,空格分隔)
- 尝试
nslookup nas.local 192.168.1.10直接查询验证
问题:上游 DNS 解析失败
- 检查 NetPanel 所在设备是否能访问外网
- 尝试更换上游 DNS 服务器(如从
8.8.8.8换为223.5.5.5) - 检查防火墙是否允许 UDP 53 端口出站流量
性能优化建议
| 优化项 | 建议 |
|---|---|
| 缓存大小 | 家庭网络建议设置 300~500,减少重复查询 |
| 上游 DNS 选择 | 优先选择地理位置近的 DNS,减少延迟 |
| 多上游 DNS | 配置 2~3 个上游 DNS,提高可用性 |
| 监听地址 | 指定具体 IP 而非 0.0.0.0,减少不必要的监听 |
注意事项
端口 53 权限
在 Linux 上,监听 53 端口需要 root 权限或 CAP_NET_BIND_SERVICE 能力。如果权限不足,可以改用 5353 等高位端口,然后在路由器上配置 DNS 转发。
与 Caddy 配合使用
DNSMasq 提供内网域名解析,Caddy 网站服务 提供 HTTP/HTTPS 反向代理,两者配合可以实现完整的内网域名访问方案:
- DNSMasq 将
nas.local解析到 NetPanel IP - Caddy 监听该域名并反向代理到实际服务
- 局域网设备通过
https://nas.local访问内网服务
与系统 hosts 文件的区别
DNSMasq 的 Hosts 规则只对将 DNS 指向 NetPanel 的设备生效,而系统 /etc/hosts 只对本机生效。DNSMasq 适合为整个局域网提供统一的域名解析服务。