Clash: 建议配置文件和规则分离

Created on 17 Sep 2019  ·  17Comments  ·  Source: Dreamacro/clash

clash里面配置文件中同时包含了配置和规则(包括服务器列表),这会导致每次更新订阅时,会丢失掉所有修改的配置(比如dns配置,还有redir-port),是否可以为配置信息另外定义一个文件,或者定义一个额外的配置文件,其中的配置可以覆盖原有的配置(此方案可以向前兼容)?

enhancement help wanted more info needed

Most helpful comment

比较同意节点信息和规则分离 这样就可以大家分享规则然后直接import 就可以了 也不需要再修改整个配置文件 详细可以参考 nginx 的配置分离方式

All 17 comments

提出一个完整的解决方案或者看看 #272

可以用包含文件来实现

我们可以定义
关键字include-proxy用于包含节点文件
比如

  • 包含一个文件 include-proxy: node.yml
  • 包含一些文件 include-proxy: nodes/*.yml

关键字include-rule用于包含规则文件
比如

  • 包含一个文件 include-rule: rule.yml
    考虑到rule有优先级顺序,所以无法用通配符进行包含

其实上面的两个关键字在代码中实现并没有什么区别,不过考虑到proxyrule混写进一个文件再进行包含会使得配置结构非常的混乱


我认为的比较理想的配置结构

假设 https://github.com/Dreamacro/clash/issues/272#issuecomment-523329209 中label的功能已经实现

考虑到众多节点文件的label肯定是不会非常统一的,比如label: [油管 youtu youtube] 都是表示一样东西

那么需要对关键字include-proxy进行一些扩展

include-proxy:
 file: foo.yml
 alias: # 设置别名
  - youtube # 默认第一个为正式的名字
  - 油管
  - youtu

文件结构

# config.yml
# 第一部分:程序的一些设置信息
port: 7890
...省略

# 第二部分:包含节点文件
include-proxy: nodes/*.yml

# 第三部分:定义各个标签的走向
Proxy Group:
  name: foo
  type: foo
  labels:
    - xxx
    - xxx

# 第四部分:包含规则文件
include-rule: lan.yml
include-rule: ad.yml
include-rule: apple.yml
...省略

Rule Proxy Group Proxy这三者耦合在一起,但是其他诸如allow-lan这些控制信息和他们三个没有关系。或许可以先迈出第一步把控制信息和这三个分开,而且有的wrapper(clashx/clash_for_windows_pkg)都已经这样做了,他们会把配置信息和节点规则信息分开。至于Rule Proxy Group Proxy这部分就留给#272 了

@tslling 他们目前都是用的 PUT /config 这个 API,参数不加 force

@Dreamacro 就是说clash core提供了接口来支持启动后再修改节点信息,我的意思是可以用启动参数在启动时就从不同的配置文件里加载节点信息和其他信息。

比较同意节点信息和规则分离 这样就可以大家分享规则然后直接import 就可以了 也不需要再修改整个配置文件 详细可以参考 nginx 的配置分离方式

强排,开始接触的时候,clash的配置让我模不着头脑,搞懂之后才发现设计真是……

@jackwonglstc 真是什么?展开说说?clash 配置摸不着头脑的话,你用过 v2ray 吗?

@jackwonglstc 真是什么?展开说说?clash 配置摸不着头脑的话,你用过 v2ray 吗?

我觉得v2ray 配置也很清晰啊. 几个节点 组合使用 n个in 然后m个out 然后用rule 来组合 还能一个实例监听n个端口 对应m个出口 很好用
只不过 不理解的人用起来太累
然而 clash 不支持多对多 出入口 有时候用起来不怎么方便.

一个实例监听 n 个端口

我不太明白这个需求的用途在哪里,clash 所有的 inbound proxy 都能通过一行配置来开启。收口 inbound,focus outbound,这是 clash 设计的初衷

一个实例监听n个端口

我不太明白这个需求的用途在哪里,clash所有的inbound proxy可以通过一行配置来开启。收口inbound,focus outbound,这是clash设计的初衷

先说一下我的观点吧,我是支希望 clash 支持多入多出的;clash 的优势是强大的规则,GUI 版本能非常灵活方便的实现节点切换添加修改,从大的方向来看,如果仅看重对出口的规则那不是从灵活性上来讲就有点缺失吗?
我的需求场景:配合 SwitchyOmega 浏览网页,希望做到某些标签临时走特定的服务器,如果单口入,那就需要一条域名规则指定出口,每次这样修改配置效率并不高;所以希望有多入多出,做到不同端口对应不同出口,这样就只需要通过 SwitchyOmega 插件点一下就能切换过来了。

你有这个某些标签页走特定服务器的需求其他人也可能有这个需求吧?如果单独对域名规则指定出口,通过域名规则指定出口之后所有订阅的人都可以使用这一特性。相比于SwitchyOmega 手动切换,在多人使用的场景下(这应该也是clash设计的使用场景),修改规则明显更加方便,因为不需要所有人都做出修改。

这事儿后来做了吗 ?

thanks

@TianYongwei https://github.com/Dreamacro/clash/releases/tag/premium

这个没看懂。。有懂的兄弟解释下吗?

@KevinChan0623 https://github.com/Dreamacro/clash/wiki/Premium-Core-Features

在 premium 使用了 rule-provider,尽可能分离了代理与规则,所以这个 issue 先 close。

Was this page helpful?
0 / 5 - 0 ratings

Related issues

h0cheung picture h0cheung  ·  6Comments

OneHappyForever picture OneHappyForever  ·  3Comments

ju0594 picture ju0594  ·  6Comments

FenghenHome picture FenghenHome  ·  6Comments

xdaniel9 picture xdaniel9  ·  3Comments