希望添加的功能
环境:v0.7.3,x86_64 Alpine(OpenRC) / FnOS(systemd) 多站点部署,WebUI「规则管理 → 本地规则 → 重定向」日常维护 rule/rewrite.txt。
痛点:内网域名需要本地解析,A 记录用 rewrite 的 IPv4 映射没问题;但同一域名要同时返回自己的 IPv6 时做不到,只能另用防火墙(Panabit)打补丁。
我已确认这不是「rewrite 不支持 IPv6」(用独立配置起隔离实例实测):
t6.local 2001:db8::1234 → AAAA 正常返回,说明 IPv6 字面量是支持的;
- 但一条规则只能有一个目标:
parseRewriteTarget 里 strings.Fields(s) 要求恰好 2 字段,写 3 字段会启动即 FATAL rule must have 2 fields, but got 3;同一域名写两行则后者覆盖前者,结果该域名的 A 查询被命中后返回空应答且不 fall through,A 记录直接消失(静默故障,已复现)。
希望支持(任选其一即可):
- 最小改动、收益最大:让 rewrite 的 API 支持多文件。现在
Init 里是 ruleFile: cfg.Files[0],/show 与 /post 只作用于第一个文件;若能支持 /plugins/<tag>/show?file=1(或按文件建子路由),WebUI 就能给第二个文件再挂一个编辑框,其它都不用改。
- 插件级双栈:增加
files_v4 / files_v6(或 dual_stack: true 时一行写 域名 v4 v6),由插件内部按 qtype 自动分派,配置里不必再拆两个实例。
- WebUI 侧:允许「本地规则」侧栏额外挂自定义规则文件(目前
ListManager 的列表是硬编码的 9 项 + 专属分流组)。
我目前的等价做法(已在生产验证):拆两个 rewrite 实例 + 入口序列按 qtype 分流,注意 v6 必须先于 v4:
- matches: "qtype 28"
exec: $rewrite_v6
- exec: $rewrite
可行,但第二个文件在 WebUI 里不可见,只能手改。
另外想请教:仓库只提交了 coremain/www/assets/vue-log/* 的构建产物,没有 package.json / *.vue 源码,社区无法为 WebUI 增加菜单/标签。前端源码是不打算公开,还是愿意接受 PR?如愿意,上面第 3 点我可以直接提 PR。
结论:如认可第 1 点(多文件 API),这是个很小的改动,我可以直接提 PR。
希望添加的功能
环境:v0.7.3,x86_64 Alpine(OpenRC) / FnOS(systemd) 多站点部署,WebUI「规则管理 → 本地规则 → 重定向」日常维护
rule/rewrite.txt。痛点:内网域名需要本地解析,A 记录用 rewrite 的 IPv4 映射没问题;但同一域名要同时返回自己的 IPv6 时做不到,只能另用防火墙(Panabit)打补丁。
我已确认这不是「rewrite 不支持 IPv6」(用独立配置起隔离实例实测):
t6.local 2001:db8::1234→ AAAA 正常返回,说明 IPv6 字面量是支持的;parseRewriteTarget里strings.Fields(s)要求恰好 2 字段,写 3 字段会启动即 FATALrule must have 2 fields, but got 3;同一域名写两行则后者覆盖前者,结果该域名的 A 查询被命中后返回空应答且不 fall through,A 记录直接消失(静默故障,已复现)。希望支持(任选其一即可):
Init里是ruleFile: cfg.Files[0],/show与/post只作用于第一个文件;若能支持/plugins/<tag>/show?file=1(或按文件建子路由),WebUI 就能给第二个文件再挂一个编辑框,其它都不用改。files_v4/files_v6(或dual_stack: true时一行写域名 v4 v6),由插件内部按 qtype 自动分派,配置里不必再拆两个实例。ListManager的列表是硬编码的 9 项 + 专属分流组)。我目前的等价做法(已在生产验证):拆两个 rewrite 实例 + 入口序列按 qtype 分流,注意 v6 必须先于 v4: