主题模式
Are you an LLM? You can read better optimized documentation at /asus/what-is-dnsmasq.md for this page in Markdown format
什么是 dnsmasq?它在梅林固件/科学上网插件中扮演什么角色?
在折腾华硕路由器、梅林固件或者搭建各种旁路网关时,你经常会在日志中看到一个频繁出现的名字 —— dnsmasq。
你可能会好奇,这个只有几百 KB 大小的底层服务到底有什么用?为什么一旦它报错,你家里的所有设备就瞬间无法上网?而在运行科学上网插件(如 Merlin Clash)时,它又是如何精准判断哪些网站该“直连”、哪些网站该“绕过”的?
本文将为你深度拆解 dnsmasq 的底层原理以及它在路由器和插件中的核心作用。
🧩 1. dnsmasq 的双重身份:内网的大管家
在 Linux 网络架构中,dnsmasq 是一个专为嵌入式设备(如家用路由器)设计的超轻量级网络控制工具。它主要承担两个至关重要的角色:
角色 A:内网 DHCP 服务器
- 作用:当你的手机或电脑连接路由器 Wi-Fi 时,是谁给你分配了
192.168.50.105这样的本地 IP 地址?又是谁告诉了你网关地址和子网掩码?答案就是 dnsmasq。它负责管理内网的 IP 地址池分配。
角色 B:DNS 转发器与本地缓存 (DNS Forwarder/Cache)
- 作用:当你输入
baidu.com时,你的设备会向路由器发送 DNS 域名查询。dnsmasq 在收到查询后:- 先看自己人:先检查路由器自身的 hosts 文件(如我们在 dnsmasq 自定义解析教程 里配置的 hosts.add)。如果发现匹配,直接返回结果,速度为 0 毫秒。
- 再问外网:如果本地没有,它会将查询转发给你在路由器里设置的上游 DNS(如
114.114.114.114或8.8.8.8)。 - 顺手缓存:将查询结果存在路由器的内存中(Cache),下一次局域网内其他设备再访问同一个网站时,直接从内存中秒回。
🛡️ 2. 科学上网插件如何“劫持” dnsmasq?
在梅林固件下,不论是 fancyss(科学上网插件)还是 Merlin Clash,它们实现“透明代理(即不需要在电脑上开任何代理客户端,连上 Wi-Fi 直接出海)”的灵魂基础,都是劫持并重构 dnsmasq 的解析流。
其经典的工作链路如下:
mermaid
graph TD
Client[设备发起网页访问] -->|查询 DNS| Dnsmasq[路由底层 dnsmasq]
Dnsmasq -->|匹配出海域名规则| PluginDNS[插件本地 DNS: 127.0.0.1#1053]
Dnsmasq -->|匹配国内直连域名| ChinaDNS[国内公共 DNS: 119.29.29.29]
PluginDNS -->|防污染解析/Fake IP| Core[Clash / Xray 内核]
Core -->|代理节点出海| Internet[外网目标服务器]- 规则写入: 当你在插件中开启服务时,插件会自动修改
/etc/dnsmasq.conf或在/tmp/dnsmasq.d/目录下生成一系列规则文件(通常是长达数万行的 gfwlist 域名列表)。 - 重定向配置: 规则会告诉 dnsmasq:“如果用户访问的是国外受限域名(如 google.com),不要发给国内电信 DNS,强行发给本地插件监听的解析端口(如
127.0.0.1#1053)。” - 防止 DNS 污染 (Anti-Poisoning): 插件的本地 DNS 收到请求后,通过加密隧道去海外解析,或者直接返回一个虚拟 IP(Fake IP,如
198.18.0.x),从而彻底避开了运营商的 DNS 劫持和污染。
⚠️ 3. dnsmasq 的常见故障与避坑守则
因为 dnsmasq 霸占了内网的 53 端口(DNS 服务的默认端口),一旦发生冲突,全屋网络将直接瘫痪。
1. 端口 53 冲突导致断网
很多玩家喜欢在梅林路由器或者树莓派上自建 AdGuard Home 或 Pi-hole 用于局域网去广告。
- 冲突:如果你把 AdGuard Home 的监听端口也设为
53,它会与 dnsmasq 发生严重冲突。导致两者都打不开,全屋设备由于无法获取 DNS 解析,直接提示“网络连接已断开”。 - 解决:将 AdGuard Home 的监听端口改写为
5353等高端口,然后让 dnsmasq 的上游配置指向127.0.0.1#5353即可,让两者形成上下游传递,而不是正面火拼。
2. DNS 环路死循环 (Resolv-Loop)
在配置策略路由或多网关时,容易出现“A 指向 B,B 又指回 A”的 DNS 环路,这会导致主路由 CPU 瞬间占用 100%,网络直接死锁。修改配置时必须保持单向箭头传递。
💬 总结
dnsmasq 是路由器运行的基石,也是实现无感科学上网的“隐形功臣”。理解了它的工作逻辑,在未来面对网络断流、DNS 污染或自建去广告 DNS 时,你就能更加游刃有余地进行排错。
- 配置实战:让 dnsmasq 为你做域名绑定?参考 dnsmasq 局域网本地域名解析教程。
- 开机自启:如何开机自动清理并重载 dnsmasq?参考 梅林开机脚本 services-start 编写。
