TUN 打开后,网站能访问,但内核 DNS 没有看到预期查询,应先确认应用实际使用哪种 DNS。dns-hijack 根据连接条件把请求导入内部 DNS,它不是对所有解析协议都有效的万能开关。本文依据当前 mihomo 文档,客户端可能对字段作进一步封装。
先解释这两行
tun:
dns-hijack:
- any:53
- tcp://any:53
这是 DNS 劫持字段的教学片段,不是完整 TUN 配置。没有协议前缀时,手册说明按 UDP 处理;第二行指定 TCP。它们针对 53 端口连接,不等于自动覆盖通过 HTTPS 等方式发送的所有 DNS 查询。
不要直接把片段覆盖原 tun 部分,否则可能丢掉已有路由和排除项。先在客户端查看实际配置是否已经包含相应字段,再决定是否需要调整。
平台限制要一起读
手册说明,macOS 和 Windows 无法自动劫持发往局域网的 DNS 请求;Android 开启私人 DNS 时,也无法自动劫持 DNS。遇到这些条件,内核没有记录不一定表示 TUN 整体失败。
例如系统指向路由器局域网 DNS,或者应用启用独立加密解析,应先记录该路径。用于对照时可以在自己管理的设备上临时切换一个解析设置,完成后恢复原值;企业设备需遵守已有管理配置。
用连接记录拆分问题
先看普通目标请求是否进入 TUN,再看 DNS 请求是否进入内部解析器。前者有、后者无,重点核对 DNS 路径;两者都无,继续检查接管、路由和应用排除。网页成功也可能用了缓存,不足以证明这次发生了新解析。
不要因为看不到 DNS 就同时关闭 IPv6、改 MTU、删除网卡。保留系统、客户端、内核版本以及解析方式,一项项验证。相关:代理模式笔记。依据:mihomo TUN 中 dns-hijack 与平台限制。本文未进行跨平台设备测试。