JS 覆写脚本:hosts / DNS 处理流程
本页说明 Mihomo JS 覆写脚本 script_override.js 在三种订阅输入状态下处理 hosts 与节点 DNS 的步骤。
核心原则:hosts 决定要解析哪个名字;节点 DNS 优先级决定这个名字从哪里取得地址。
情形一:只有 hosts 真假映射
订阅未提供私有 DoH;节点原始 server 使用 hosts 左侧的假域名。
检查生效条件
需满足
use-hosts=true,且dns.listen与节点解析入口在对应端口形成回环。命中 hosts 映射
节点
server从左侧假域名改写为右侧真域名。确认最终目标仍是域名
改写后的
server仍需继续进行 DNS 解析。使用模板全局解析器
订阅没有私有 DoH,因此节点域名由模板全局
proxy-server-nameserver解析。
情形二:只有私有 DoH
订阅未使用 hosts 映射;节点原始 server 是真实域名。
选择节点解析来源
按以下顺序取值,优先级从高到低:
proxy-server-nameserver-policyproxy-server-nameserver(仅私有)nameserver-policynameserver(仅私有)
写入最终节点 policy
脚本把选出的私有解析来源整理到
dns.proxy-server-nameserver-policy。解析节点域名
需要私有解析的节点域名由对应的私有 DoH 解析。
保留全局兜底
没有命中 policy 的域名仍由模板全局
proxy-server-nameserver解析。
情形三:hosts 与私有 DoH 同时存在
订阅同时包含假域名映射和私有 DoH;先确定最终域名,再迁移适用的解析策略。
先改写节点名称
hosts 命中后,将节点
server改写成最终要连接的域名。确定 policy 覆盖范围
只有改写后最终仍是域名的节点,才需要相应的 DNS policy。
迁移私有解析来源
按节点 DNS 优先级,将订阅中的私有来源关联到最终域名:
- 节点专用 policy
- 节点专用 DNS
- 普通 policy
- 普通 DNS
保留模板全局兜底
模板全局
proxy-server-nameserver始终保留,用于没有命中 policy 的域名。