Mihomo 配置文件怎么生成?单节点、订阅与组合订阅教程
简答:如果你只有一个节点参数,使用单节点 YAML 模板;如果已有订阅链接,优先使用 proxy-providers;如果要合并多个订阅,使用组合订阅或配置管理工具;如果还要保留自己的规则和 DNS,则用覆写模板。生成后不要只看编辑器提示,必须保存、运行 mihomo -t 校验、重新载入并检查日志和实际业务。
定义:Mihomo 配置文件是用 YAML 描述监听端口、节点、代理组、DNS、TUN 和路由规则的文本文件,常见文件名为 config.yaml,但实际读取路径由启动参数、配置目录或客户端决定。
先选生成方式:你应该用哪一种
搜索“mihomo 配置文件生成”时,最容易遇到的问题不是不会写 YAML,而是不清楚自己应该生成哪一类文件。先按输入材料选择路径:只有服务器和认证参数,就生成单节点配置;只有订阅地址,就让 Mihomo 读取 proxy-providers;有多个订阅来源,就先做组合订阅;既要自动更新节点,又要保留自己的代理组、规则和 DNS,就把节点来源与个人设置分开。
| 你的情况 | 推荐方式 | 生成结果 | 注意事项 |
|---|---|---|---|
| 只有一个节点参数 | 手写最小 YAML | proxies、proxy-groups、rules | 协议字段必须与实际节点一致 |
| 有一条订阅链接 | proxy-providers | 运行时读取节点集合 | 不要把带凭据的订阅地址公开 |
| 有多个订阅或节点来源 | 组合订阅 | 合并后的节点集合或配置 | 检查重复名称、失败来源和协议兼容性 |
| 要保留自定义规则 | 订阅加覆写模板 | 节点自动更新,个人字段独立维护 | 不要长期直接修改自动生成结果 |
官方配置文档将 Mihomo 配置拆分为通用配置、入站、出站节点、DNS、代理组和路由规则等部分,可先查看Mihomo 配置文档。如果你使用配置管理工具,Sub-Store 官方文档列出了订阅转换、多个订阅合并以及 Mihomo 配置文件输出能力,适合不想从头拼接 YAML 的用户,可参考Sub-Store 项目说明。
安全边界:订阅链接可能包含账户标识或访问凭据。输入前先检查 URL 是否带有 token、用户名或长期有效参数;优先使用自己可控的本地环境。若完整订阅地址已经公开,应联系提供方更换或撤销,而不是只删除网页或聊天记录。
单节点生成:从最小 YAML 开始
单节点适合你已经知道服务器地址、端口、协议和认证参数的情况。下面使用 Shadowsocks 结构演示字段关系,地址、密码和名称都是占位符,不能直接当作可用节点。
带注释版:
mode: rule
log-level: info
mixed-port: 7890
allow-lan: false
proxies:
- name: "我的节点"
type: ss
server: example.invalid
port: 443
cipher: aes-128-gcm
password: "请替换为真实密码"
udp: true
proxy-groups:
- name: "默认代理"
type: select
proxies:
- "我的节点"
- DIRECT
rules:
- DOMAIN-SUFFIX,example.com,默认代理
- MATCH,DIRECT
无注释版:
mode: rule
log-level: info
mixed-port: 7890
allow-lan: false
proxies:
- name: "我的节点"
type: ss
server: example.invalid
port: 443
cipher: aes-128-gcm
password: "请替换为真实密码"
udp: true
proxy-groups:
- name: "默认代理"
type: select
proxies: ["我的节点", DIRECT]
rules:
- DOMAIN-SUFFIX,example.com,默认代理
- MATCH,DIRECT
官方文档列出的常见基础字段包括唯一的 name、节点类型 type、服务器 server 和端口 port,但这只是常见基础结构,不代表所有协议只需要这些字段。不同协议还可能需要 UUID、密码、TLS、传输层、Reality 或 UDP 参数,字段应以当前 Mihomo 文档为准,可查看出站节点配置。
- 复制模板并另存为独立文件,例如
config.yaml。 - 替换
server、port、认证字段和节点名称。 - 确认代理组中的节点名称与
proxies完全一致。 - 确认规则最后一列引用的是已存在的代理组。
- 保存后执行配置校验,再交给客户端重新载入。
常见协议字段怎么填:不要只改 type
高级协议不能把上面的 type: ss 改成其他名称就结束。至少要根据协议检查以下字段;实际可用字段和兼容范围仍取决于当前内核版本以及服务端参数。
| 协议 | 通常需要核对的字段 | 容易出错的地方 |
|---|---|---|
| VLESS | server、port、uuid;TLS 时检查 servername、client-fingerprint;Reality 时检查 reality-opts.public-key 与 short-id | UUID、SNI、Reality 公钥或 short-id 只要一项不匹配,就可能无法握手 |
| Hysteria2 | server、port、认证密码;按服务端要求检查 obfs、obfs-password、sni、上下行带宽 | 不要把 Hysteria 与 Hysteria2 字段混用,也不要擅自填写带宽数值 |
| TUIC | 核对版本、服务器、端口、UUID、密码、TLS 和 UDP 相关字段 | TUIC v4/v5 的认证方式和字段不能混写 |
| VLESS WebSocket | 除 VLESS 基础字段外,检查 network: ws、路径、Host、TLS 与 SNI | 路径、Host 和 SNI 必须与服务端配置一致 |
VLESS 官方字段示例包含 UUID、TLS、Reality 参数以及 network 传输层;Hysteria 文档则单独列出了认证、协议、上下行带宽和混淆等字段。可以分别查看VLESS 出站配置和Hysteria 出站配置。文档没有覆盖你所用客户端的某个转换入口时,不要自行推断字段名称,先用当前 Mihomo 二进制校验。
有订阅链接:用 proxy-providers 自动读取节点
如果你只有一条订阅链接,通常不需要把所有节点复制进 proxies。可以让 proxy-providers 负责拉取节点,再让代理组通过 use 引用这个节点集合:
mode: rule
log-level: info
mixed-port: 7890
allow-lan: false
proxy-providers:
my-subscription:
type: http
url: "https://example.invalid/subscription"
path: ./profiles/my-subscription.yaml
interval: 3600
health-check:
enable: true
url: https://www.gstatic.com/generate_204
interval: 300
proxy-groups:
- name: "订阅节点"
type: select
use:
- my-subscription
proxies:
- DIRECT
rules:
- DOMAIN-SUFFIX,example.com,订阅节点
- MATCH,DIRECT
这里的 URL 只是占位符。官方文档说明,代理提供者可以设置更新间隔、健康检查、筛选和节点名称覆写;代理组则可以用 use 引用代理集合,可查看proxy-providers 配置和代理组配置。
生成后的检查顺序是:确认订阅请求成功;确认 provider 文件实际写入;确认代理组通过 use 引用了正确名称;确认组内出现节点;最后再测试一个明确域名。若 provider 能更新但代理组为空,优先检查 use 名称、筛选条件和订阅返回格式。
多个订阅或节点来源:组合订阅与覆写模板
组合订阅适合同时管理多个订阅、多个本地节点或不同来源的节点。Sub-Store 官方说明支持收集多个订阅、格式转换和文件托管;其链接参数文档还区分了 sourceType=subscription、sourceType=collection、完整配置模式与仅把来源转换成 proxies 的模式,可参考Sub-Store 链接参数说明。
- 在工具中分别添加订阅来源或本地节点文件,不要先把真实订阅 URL 发到公共表单。
- 选择组合订阅或 collection 类型,确认每个来源名称清晰可辨。
- 选择 Mihomo 配置输出;如果只想生成节点列表,选择写入
proxies的模式。 - 为输出配置增加代理组和规则,或将这些内容放入独立覆写模板。
- 预览输出结果,检查节点名称是否重复、是否存在空代理组以及是否混入不支持的协议。
- 下载或复制 YAML 后,用实际 Mihomo 内核进行校验,再导入客户端。
推荐的文件关系是“订阅或组合订阅负责节点,覆写模板负责代理组、规则、DNS 和命名”。这样更新节点时不会直接覆盖个人设置。官方代理提供者也支持对加载节点增加前缀、后缀、名称替换和部分字段覆写,但高级覆写语法应先确认当前版本支持范围。
敏感信息自查:不要把带 token 的输出链接写进公开仓库、截图或工单;不要把完整订阅链接当作普通示例贴出;如果必须排错,先遮盖域名后的身份参数,并在泄露后更换订阅。
生成后的校验闭环:语法、字段、运行时分开检查
“生成成功”不等于“配置可用”,至少要分三层检查:
| 层级 | 检查方法 | 预期结果 | 失败后的下一步 |
|---|---|---|---|
| YAML 语法 | mihomo -t -f ./config.yaml | 出现配置测试成功提示 | 按报错行检查缩进、冒号、引号和列表 |
| 字段与引用 | 查看启动日志、代理组和 provider 状态 | 节点被读取,组内有可选节点 | 检查协议字段、名称、use、筛选和版本支持 |
| 运行时连通性 | 查看规则命中、DNS、端口和实际业务 | 目标应用流量进入正确代理组 | 区分节点认证、DNS、TUN、IPv6、端口冲突和业务故障 |
命令行环境中,在配置文件所在目录执行:
cp config.yaml config.yaml.bak
mihomo -t -f ./config.yaml
如果使用配置目录,可按实际启动方式执行类似 mihomo -d /path/to/mihomo-config,然后查看启动日志。官方服务文档展示了用 -d 指定配置目录、重新载入服务和查看日志的方式,可参考Mihomo 服务启动文档。
- 编辑配置:先备份旧文件,并记录改动字段。
- 保存:确认使用空格缩进,不要混入 Tab。
- 校验:先运行
mihomo -t,解决语法和字段错误。 - 重新载入:在客户端执行重载、切换配置或重启内核。
- 查看日志:确认端口、provider、DNS、规则和节点初始化状态。
- 验证业务:测试具体域名或办公应用,不要只看客户端的“已连接”。
DNS 和 TUN 不建议一开始全部启用。DNS 的 Fake-IP、IPv6、DNS 劫持和规则匹配属于运行时行为,应根据实际客户端和系统验证。官方 DNS 文档列出了 fake-ip、real-ip、IPv6 和 nameserver-policy 等配置;TUN 文档也说明不同系统对 DNS 劫持和路由方式存在差异,可查看DNS 配置和TUN 配置。
版本兼容与导入前检查
Mihomo 内核、桌面客户端和配置生成工具并不一定同步支持所有字段。遇到“配置能生成但客户端启动失败”,按以下顺序排查:
- 确认客户端实际使用的内核名称和版本,不要只看客户端界面版本。
- 用该客户端附带或实际调用的 Mihomo 内核执行
-t,不要用另一台设备上的旧二进制代替。 - 删除最近加入的高级字段,先用基础节点、单一代理组和
MATCH规则验证。 - 逐项恢复 TLS、Reality、WebSocket、DNS、TUN 或健康检查字段。
- 若订阅转换工具提示协议不支持,保留原始订阅并核对输出模式,不要把不完整节点强行写入配置。
规则按从上到下匹配,MATCH 通常放在最后;代理组名称、provider 名称和规则引用必须保持一致。官方路由规则文档明确说明规则按顺序匹配,可查看Mihomo 路由规则。
常见问题
Mihomo 配置文件一定要叫 config.yaml 吗?
不一定。config.yaml 只是常见文件名,实际读取哪份配置由启动参数、配置目录或客户端决定。关键是用实际运行的 Mihomo 内核校验同一份文件,并确认客户端重新载入的也是它。
只有订阅链接,没有节点参数,应该怎么生成?
优先使用 proxy-providers,或使用支持 Mihomo 输出的订阅管理工具。生成后检查 provider 是否更新、代理组是否通过 use 引用了它、组内是否出现节点,再运行 mihomo -t。
多个订阅怎么合并成一个 Mihomo 配置?
先在组合订阅工具中添加多个来源,选择 collection 或组合订阅,再选择 Mihomo 配置输出;随后检查重复节点名、空代理组、失败来源和不支持协议,最后用实际内核校验。
VLESS Reality、Hysteria2 或 WebSocket 可以自动生成吗?
可以由支持这些协议的转换工具或模板生成,但不能只修改 type 字段。VLESS Reality 至少要核对 UUID、TLS、SNI、Reality 公钥和 short-id;Hysteria2 要核对认证、端口、混淆和 TLS;WebSocket 还要核对路径、Host 和传输层。字段以当前 Mihomo 文档和服务端参数为准。
为什么生成的 YAML 看起来正确,Mihomo 仍然启动失败?
常见原因包括 Tab 缩进、代理组引用不存在、端口冲突、协议字段不完整、当前内核不支持某字段或订阅输出格式不兼容。先执行 mihomo -t,再看启动日志;不要只根据编辑器的语法高亮判断。
订阅更新后,自己写的规则为什么消失?
因为你直接修改了自动生成的完整结果。应把订阅或组合订阅作为节点来源,把代理组、规则、DNS 和命名放到覆写模板或独立配置中。每次更新后重新生成、备份并再次校验。
把订阅链接交给在线转换工具安全吗?
不能默认安全。订阅链接可能包含凭据,使用前应查看工具的处理方式和部署位置;优先选择自己可控的本地环境,不要公开分享完整 URL。若已经泄露,应尽快更换或撤销订阅。