Skip to content

解析服务 (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.0DNS 服务监听 IP,建议填写具体 IP
监听端口整数53DNS 服务监听端口
缓存大小整数150DNS 缓存条目数量,建议 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国内速度快
Google8.8.8.8 / 8.8.4.4全球可用,国内可能较慢
Cloudflare1.1.1.1 / 1.0.0.1注重隐私,速度快
114 DNS114.114.114.114国内老牌 DNS

自定义解析规则

字段类型必填说明
Hosts 规则文本自定义域名解析,格式同 /etc/hosts
额外配置文本高级 DNSMasq 原生配置项

配置示例

示例 1:内网服务域名解析

将内网服务映射到友好域名,局域网内所有设备均可通过域名访问:

上游 DNS 配置:

223.5.5.5
8.8.8.8

Hosts 规则:

# 内网 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 会立即拒绝连接,用户体验更好

使用现成的广告过滤列表

可以从以下来源获取广告域名列表,复制到 Hosts 规则中:

示例 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 服务器(推荐)

  1. 登录路由器管理页面
  2. 找到 DHCP 设置LAN 设置
  3. 首选 DNS 服务器 改为 NetPanel 所在设备的 IP(如 192.168.1.10
  4. 保存设置,等待设备重新获取 IP 后生效

方法二:单台设备手动配置

Windows:

  1. 网络连接 → 属性 → IPv4 属性
  2. 手动设置 DNS:首选 192.168.1.10(NetPanel IP)

Linux:

bash
# 临时修改(重启后失效)
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.conf

macOS: 系统偏好设置 → 网络 → 高级 → DNS → 添加 192.168.1.10


常见问题排查

问题:DNS 服务无法启动

原因解决方案
53 端口被占用检查是否有其他 DNS 服务运行(`netstat -tlnp
权限不足Linux 上监听 53 端口需要 root 权限或 CAP_NET_BIND_SERVICE
系统 resolved 冲突Ubuntu 需先禁用 systemd-resolvedsudo systemctl disable systemd-resolved

使用高位端口避免权限问题

如果无法获取 root 权限,可将监听端口改为 5353 等高位端口,然后在路由器上配置 DNS 转发到该端口。

问题:自定义域名无法解析

  1. 确认 DNSMasq 服务已启用并正常运行
  2. 确认设备的 DNS 服务器已指向 NetPanel IP
  3. 检查 Hosts 规则格式是否正确(IP 在前,域名在后,空格分隔)
  4. 尝试 nslookup nas.local 192.168.1.10 直接查询验证

问题:上游 DNS 解析失败

  1. 检查 NetPanel 所在设备是否能访问外网
  2. 尝试更换上游 DNS 服务器(如从 8.8.8.8 换为 223.5.5.5
  3. 检查防火墙是否允许 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 反向代理,两者配合可以实现完整的内网域名访问方案:

  1. DNSMasq 将 nas.local 解析到 NetPanel IP
  2. Caddy 监听该域名并反向代理到实际服务
  3. 局域网设备通过 https://nas.local 访问内网服务

与系统 hosts 文件的区别

DNSMasq 的 Hosts 规则只对将 DNS 指向 NetPanel 的设备生效,而系统 /etc/hosts 只对本机生效。DNSMasq 适合为整个局域网提供统一的域名解析服务。

基于 GPL-3.0 许可证发布