这份文档面向维护者、Fork 使用者和想基于本仓库生成“自己的代理配置集”的用户。
本项目的生成流程可以理解为:
Base/ -> 原始配置、模板、规则定义
program/ -> Go 生成器
Config/ -> 生成产物
Wireguard_Easytier/ -> Easytier_Wireguard 相关产物
最重要的目录如下:
Base/DNS.yaml:DNS 基础数据Ports.yaml:端口配置Fake_IP_Filter.yaml:Fake-IP 相关列表Test_URL.yaml:连通性测试地址Head/:各平台代理工具的头模板Rules/RemoteRules.yaml:规则条目定义Rules/RemoteRulesLinkBase.yaml:规则源 URL 模板与工具映射
program/cmd/proxyrules/:CLI 入口internal/service/:生成流程internal/render/:各工具渲染器
Config/- 生成后的 Mihomo / Stash / Loon / Surge / Box4Root 配置
Wireguard_Easytier/- Easytier 相关脚本与模块输出
这个程序生成的是“规则框架 + DNS 策略 + 策略组 + 规则源引用 + 平台模板整合”后的配置集。
它不是节点订阅管理器,也不会替你保存真实机场订阅。
通常的使用方式是:
- Mihomo / Stash:把生成出的覆写文件或脚本导入到客户端,再让客户端加载你自己的订阅
- Loon / Surge:生成带策略组和规则的配置骨架,再接入你自己的节点来源
- Box4Root:生成可直接修改订阅地址的完整模板文件
如果你只是想做一套“自己的规则与模板风格”,一般只需要改 Base/ 下面的文件,不需要改 Go 代码。
- Go
1.23或更高版本 - Windows / macOS / Linux 均可,只要能运行 Go
检查版本:
go version先进入生成器目录:
cd program生成全部配置:
go run ./cmd/proxyrules --tool all只生成 Mihomo 系:
go run ./cmd/proxyrules --tool mihomo
--tool mihomo会同时生成:
Config/Mihomo/Config/Box4Root/
只生成 Stash:
go run ./cmd/proxyrules --tool stash一次生成多个目标:
go run ./cmd/proxyrules --tool mihomo,stash,surge输出到自定义目录:
go run ./cmd/proxyrules --tool all --output D:\Temp\ProxyRulesOutput用测试节点预览国家分组效果:
go run ./cmd/proxyrules --tool mihomo --test
--test不会读取你的真实订阅,只会使用内置测试节点名来验证国家分组、策略组和脚本逻辑。
运行测试:
go test ./...输出到:
Config/Mihomo/Config/Box4Root/
会生成:
mihomo_config_ipv6-1_full-0.yamlmihomo_config_ipv6-1_full-1.yamlmihomo_config_ipv6-0_full-0.yamlmihomo_config_ipv6-0_full-1.yamlmihomo_convert_args.jsmihomo_convert_ipv6-1_full-0.jsmihomo_convert_ipv6-1_full-1.jsmihomo_convert_ipv6-0_full-0.jsmihomo_convert_ipv6-0_full-1.jsBox4Root_mihomo_config.yamlBox4Root_mihomo_config_no_ipv6.yamlBox4Root_mihomo_config_tun.yamlBox4Root_mihomo_config_tun_no_ipv6.yaml
说明:
ipv6-1表示启用 IPv6ipv6-0表示禁用 IPv6full-1表示完整配置full-0表示基础配置Box4Root_mihomo_config_tun*表示tun.enable = trueBox4Root_mihomo_config*表示tun.enable = false
输出到 Config/Stash/:
Stash_config_full.yamlStash_config_full_no_ipv6.yamlStash_override.stoverrideStash_override_no_ipv6.stoverride
输出到 Config/Loon/:
Loon_config.lcfLoon_config_no_ipv6.lcf
输出到 Config/Surge/:
Surge_config.confSurge_config_no_ipv6.conf
输出到:
- 默认输出根目录是
Config时:Wireguard_Easytier/Mihomo/ - 自定义输出根目录时:
<你的输出目录>/Wireguard_Easytier/Mihomo/
额外说明:
- 每次运行生成器时,都会同步刷新
Wireguard_Easytier/Surge/Easytier.sgmodule - 当选择
--tool easytier时,还会额外生成 Mihomo 版 Easytier JS 产物
注意:
easytier依赖输出根目录下Mihomo/中已经生成好的mihomo_convert_*.js- 最稳妥的用法是直接执行:
go run ./cmd/proxyrules --tool all或者:
go run ./cmd/proxyrules --tool mihomo,easytier当前推荐结构:
DNS:
IP:
- 119.29.29.29
- '2402:4e00::'
Default_DoH:
- https://doh.pub/dns-query
- https://cloudflare-dns.com/dns-query
Proxy_Server_DoH:
- https://doh.pub/dns-query
Direct_DoH:
- https://doh.pub/dns-query
Fallback_DoH:
- https://cloudflare-dns.com/dns-query
- https://dns.google/dns-query当前生成器中的主要含义:
IP:用于default-nameserverDefault_DoH:用于主nameserverProxy_Server_DoH:用于 Mihomo / Stash / Box4Root 的proxy-server-nameserverDirect_DoH:用于direct-nameserverFallback_DoH:保留在通用 DNS 模型中,作为补充上游池
如果你只想改 DNS,通常只需要改这一个文件,再重新生成。
这里维护:
Fake_IP_FilterSurge_Always_Real_IP
影响:
- Mihomo / Stash / Box4Root 的
fake-ip-filter - Loon / Surge 的真实 IP 相关配置
这里控制:
- Mihomo
mixed-port - 通用 HTTP / SOCKS5 端口
这里控制:
internet-test-urlproxy-test-url
用于 Loon / Surge 等平台的连通性测试设置。
这是最常改的地方。
当前模板文件:
Base/Head/Head_Mihomo.yamlBase/Head/Head_Box4Root.yamlBase/Head/Head_Stash.yamlBase/Head/Head_Loon.confBase/Head/Head_Surge.conf
适合在这里改的内容:
- DNS 块里的固定字段
- 日志级别
sniffertunprofile- UI 设置
- 默认注释
如果你有自己的固定风格,优先改头模板,而不是每次手动改生成结果。
这里定义“有哪些规则组”“每个规则组的名字是什么”“对应哪个规则源分类”“行为类型是什么”“远程文件路径是什么”。
适合做的事:
- 新增规则组
- 删除不需要的规则组
- 调整规则名称
- 更换某个规则组对应的远程规则文件
这里定义:
- 每个规则分类的 URL 模板
- 不同平台代理工具在不同规则源中的工具名映射
- 文件扩展名映射
只有当你要接入新的规则源,或者现有规则源的 URL 模板变化时,才需要改这里。
在以下 YAML 模板中使用:
Base/Head/Head_Mihomo.yamlBase/Head/Head_Box4Root.yamlBase/Head/Head_Stash.yaml
推荐写法:
default-nameserver: "$DNS_IP_List"
direct-nameserver: "$DNS_Direct_DoH_List"
proxy-server-nameserver: "$DNS_Proxy_Server_DoH_List"
nameserver: "$DNS_Default_DoH_List"
fake-ip-filter: "$Fake_IP_Filter_List"当前常用占位符:
"$DNS_IP_List""$DNS_Default_DoH_List""$DNS_Direct_DoH_List""$DNS_Proxy_Server_DoH_List""$Fake_IP_Filter_List"
这些 DNS 占位符不仅会影响 Mihomo / Stash / Box4Root 的 YAML 输出,也会同时影响 Mihomo 的 mihomo_convert_*.js 与 mihomo_convert_args.js,因为 JS 的 DNS 模板现在与 Mihomo 头模板共用同一套 DNS 合成结果。
以下是在 rules 字段上的额外占位符 "$ProxyRules_Pack",当前标准写法是:
rules:
- YOUR,RULES_1,HERE
- "$ProxyRules_Pack"
- YOUR,RULES_2,HERE作用:
- 生成器会把完整规则包插入到这个占位符所在的位置
- 这样你可以精确控制自定义规则放在规则包前面还是后面
用例:
rules:
- DST-PORT,53,DNS_Hijack
- "$ProxyRules_Pack"这会让 DNS_Hijack 永远位于规则组最上面。
如果 rules 中没有 "$ProxyRules_Pack",生成器会回退到“普通生成模式”,直接使用默认生成的规则包,不会把头模板里的自定义 rules 与规则包做位置混排。
在以下文本模板中使用:
Base/Head/Head_Loon.confBase/Head/Head_Surge.conf
当前文本头模板同时支持两种写法:
{DNS_IP_list}
{DNS_Default_DoH_List}
{DNS_DoH_list}
{Fake_IP_Filter_list}
{Surge_Always_Real_IP_List}
"$DNS_IP_list"
"$DNS_Default_DoH_List"
"$Fake_IP_Filter_list"
"$Surge_Always_Real_IP_List"
例如:
dns-server = "$DNS_IP_list",system
doh-server = "$DNS_Default_DoH_List"
real-ip = "$Fake_IP_Filter_list"常用文本占位符:
"$DNS_IP_list""$DNS_Default_DoH_List""$DNS_Proxy_Server_DoH_List""$DNS_Direct_DoH_List""$Fake_IP_Filter_list""$Surge_Always_Real_IP_List"
如果你是第一次做自己的配置集,建议按这个顺序:
编辑:
Base/DNS.yamlBase/Fake_IP_Filter.yaml
编辑:
Base/Head/Head_Mihomo.yamlBase/Head/Head_Box4Root.yamlBase/Head/Head_Stash.yamlBase/Head/Head_Loon.confBase/Head/Head_Surge.conf
编辑:
Base/Rules/RemoteRules.yamlBase/Rules/RemoteRulesLinkBase.yaml
cd program
go test ./...
go run ./cmd/proxyrules --tool all重点检查:
Config/Mihomo/Config/Box4Root/Config/Stash/Config/Loon/Config/Surge/
改:
Base/DNS.yamlBase/Fake_IP_Filter.yaml
然后执行:
cd program
go run ./cmd/proxyrules --tool mihomo,stash,loon,surge改:
Base/Head/Head_Mihomo.yamlBase/Head/Head_Box4Root.yaml
然后执行:
cd program
go run ./cmd/proxyrules --tool mihomo改:
Base/Rules/RemoteRules.yaml
如果新规则来自全新规则源,还要同时改:
Base/Rules/RemoteRulesLinkBase.yaml
然后执行:
cd program
go run ./cmd/proxyrules --tool all执行:
cd program
go run ./cmd/proxyrules --tool mihomo --testConfig/Mihomo/mihomo_convert_args.js 是可调参版本。
需要注意:
- 这个 JS 的 DNS 块并不是一套独立配置
- 它会继承 Mihomo 头模板中的 DNS 合成结果
- 因此你在
Base/Head/Head_Mihomo.yaml中使用的"$DNS_IP_List"、"$DNS_Default_DoH_List"、"$DNS_Proxy_Server_DoH_List"、"$DNS_Direct_DoH_List"、"$Fake_IP_Filter_List"也会同步影响 JS 输出
目前支持的参数有:
ipv6=0|1full=0|1threshold=<数字>
其中:
ipv6:是否启用 IPv6full:是否使用完整配置threshold:某国家节点数量小于该值时,不显示该国家分组
示例:
https://example.com/mihomo_convert_args.js#ipv6=1&full=0&threshold=2
这是设计如此。
因为 Box4Root 使用 Mihomo 系渲染链路,所以它跟随 Mihomo 一起生成。
因为生成器对部分区域是“程序负责生成”的:
proxy-groupsrule-providersrules
Mihomo / Stash / Box4Root 的 DNS 也会由程序把动态值写进去,但头模板中不属于动态字段的固定内容会被保留。
因为 Easytier 需要先读取 Mihomo 目录下已生成的 mihomo_convert_*.js。
请先执行:
go run ./cmd/proxyrules --tool mihomo,easytier或直接:
go run ./cmd/proxyrules --tool all因为这个程序不是订阅下载器。
它生成的是配置框架,真实节点一般由:
- 客户端的远程订阅
proxy-providers- 覆写脚本运行时传入的代理列表
来提供。
- 先改
Base/,再生成,不要直接手改Config/后忘记同步 - 改 DNS 或模板后,至少跑一次
go run ./cmd/proxyrules --tool all - 改渲染逻辑后,先跑
go test ./... - 如果仓库公开,尽量不要把私人订阅 URL 直接提交到
Base/Head/Head_Box4Root.yaml
如果你只想最快做出自己的版本:
- Fork 本仓库
- 修改
Base/DNS.yaml - 修改
Base/Head/下你关心的平台模板 - 如有需要,修改
Base/Rules/RemoteRules.yaml - 执行:
cd program
go run ./cmd/proxyrules --tool all- 从
Config/和Wireguard_Easytier/拿走生成结果
做到这一步,你就已经拥有一套可持续维护、可重复生成的“自己的代理配置集”了。