与其逐台设备加密,不如在网关统一做:路由器是内网所有设备的 DNS 入口,改一次,手机、电脑、电视全部受益。
路由器通过 DHCP 把自己的局域网地址作为 DNS 服务器下发给内网所有设备,所以在路由器上改上游 DNS,全屋设备自动切换,无需逐台配置。OpenWrt 在 LuCI「网络 → 接口 → LAN → DHCP 设置」或 /etc/config/dhcp 的 list server 里填上游,加密上游需额外装 https-dns-proxy(DoH)或 stubby(DoT),把本地监听地址填进上游;华硕梅林在「外部网络 → 互联网连接 → DNS 隐私协议」选 DoT;爱快在「网络设置 → DNS 设置」配置。注意:设备到路由器这一段是内网明文(可接受),路由器到上游才是加密段;dnsmasq 缓存按 TTL 生效,改配置后记得重启 dnsmasq。
网关是天然的统一点
家里通常有手机、平板、笔记本、电视、游戏机、NAS 等一堆设备。逐台配加密 DNS 既麻烦,还总有设备漏掉——尤其是电视 IoT 这类根本没有加密 DNS 设置项的设备。路由器则不同:DHCP 协议在给每台设备分配 IP 时,会顺手把「DNS 服务器是谁」一起下发。默认下发的就是路由器自己,所以所有设备的查询都会先送到路由器,路由器再代为向上游递归。把上游换成加密解析,等于全网一次性升级。
需要理解链路分两段:设备 → 路由器走的是你的局域网,明文但可信;路由器 → 互联网上游才是会被窃听、劫持的一段,加密就加在这一段(DoT 853 / DoH 443)。
默认 dnsmasq 的配置位置与加密方案
登录 LuCI,进入「网络 → 接口 → LAN → DHCP 设置」,在「自定义 DNS 服务器」填入上游地址(如 223.5.5.5);也可以直接编辑 /etc/config/dhcp,在主配置段加 list server '223.5.5.5'。OpenWrt 官方文档对 DHCP/DNS 设置有完整说明。
dnsmasq 本身只会明文转发,要加密需加一个本地代理:装 https-dns-proxy(DoH)或 stubby(DoT),它们在本地 127.0.0.1 的某个端口监听,再把查询加密发往上游。然后在 dnsmasq 上游列表填 127.0.0.1#端口号,dnsmasq 就会把查询交给加密代理。OpenWrt 官方 wiki 的 DNS over TLS 页面对这套组合有逐步指引。
两家国产常见固件的图形化位置
| 固件 | DNS 设置入口 | 加密上游 |
|---|---|---|
| 华硕梅林 / ASUSWRT | 外部网络(WAN) → 互联网连接 → DNS 服务器 | 同页「DNS 隐私协议」选 DNS over TLS (DoT),填预设或自定义主机名 |
| 爱快 iKuai | 网络设置 → DNS 设置 | 在 DNS 设置中配置上游服务器,固件内可选加密转发 |
| OpenWrt | 网络 → DHCP/DNS | 装 https-dns-proxy / stubby 后填本地端口 |
华硕系固件(梅林为其增强衍生)在 WAN 设置页直接提供 DNS 隐私协议开关:选 DoT 后会出现主机名栏,填 dns.23-4.cn 这类域名即可,不需要插件,依据华硕官方 FAQ 的操作路径。爱快则在 Web 后台「网络设置」菜单下的 DNS 设置里集中管理上游。三家改完都点「保存/应用」,路由器重新广播 DHCP 后设备即生效。
dnsmasq 的缓存机制是排错时最容易踩的坑
dnsmasq 会把上游返回的解析结果按记录自带的 TTL(生存时间)缓存起来:同一域名在 TTL 内再次查询,路由器直接回缓存、不再问上游,既快又省上游流量。这带来一个副作用:你改了上游 DNS 后,已经在缓存里的旧结果不会立刻刷新,而是要等 TTL 到期。
/etc/init.d/dnsmasq restart 清空缓存重测。/etc/config/dhcp 中的 list server。要做加密上游则安装 https-dns-proxy 或 stubby 包,把它们的本地地址填进上游列表。