Skip to content

[Feature request] rewrite 支持同一域名同时下发 A/AAAA(本地双栈),并让 API 支持第二个规则文件 #59

Description

@asyowish

希望添加的功能

环境: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 字面量是支持的;
  • 但一条规则只能有一个目标:parseRewriteTargetstrings.Fields(s) 要求恰好 2 字段,写 3 字段会启动即 FATAL rule must have 2 fields, but got 3;同一域名写两行则后者覆盖前者,结果该域名的 A 查询被命中后返回空应答且不 fall through,A 记录直接消失(静默故障,已复现)。

希望支持(任选其一即可)

  1. 最小改动、收益最大:让 rewrite 的 API 支持多文件。现在 Init 里是 ruleFile: cfg.Files[0]/show/post 只作用于第一个文件;若能支持 /plugins/<tag>/show?file=1(或按文件建子路由),WebUI 就能给第二个文件再挂一个编辑框,其它都不用改
  2. 插件级双栈:增加 files_v4 / files_v6(或 dual_stack: true 时一行写 域名 v4 v6),由插件内部按 qtype 自动分派,配置里不必再拆两个实例。
  3. 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。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions