Closed maxming2333 closed 3 weeks ago
Feature 2 will be of great help.
I use a diy rule-set direct
(classical one, which consists of domain and geo rules) for proxy-direct routing and dns diversion. It works well.
I add wechat mini program (WeChatAppEx.exe) process rule. Most of the website domains it accesses are not covered by geosite, and I don't want dns-resolve. I supposed it conform with the nameserver-policy usage of rule-set. But it doesn't work. I figured out it is because nameserver-policy usage of classical rule-set is to unfold the domain and geo rules while other rules is unsupported.
Is it possible to implement the feature of supporting more types of rules (port, process, and even logic rules) in nameserver-policy? This would help make meta(mihomo, now) the most powerful proxy & dns-resolve tool.
~PROCESS-NAME 是无法实现的,需要获取流量来源程序,一般 DNS 来源皆为系统~ 理解错误,是正则匹配进程名;不过正则表达式相当耗费时间,虽然是能缓存正则表达式对象,可是每次匹配依旧是大量匹配的
@Skyxim 是这样滴,因为某些进程故意会加一些 零宽字符
导致就算复制了进程名称,也无法匹配上
然后现在很多都是基于 Electron 开发的应用程序,经常会带有 xxx.app 和 xxx Helper.app 包括一些 fork 出的进程
就是一个软件,变身出来的有很多个,我这样我们可以直接使用关键字去做分流
正则主要是想着方便易用,或者您看看是否还有其他更好的实现方法
~PROCESS-NAME 是无法实现的,需要获取流量来源程序,一般 DNS 来源皆为系统~
我把maxming提出的讨论扭歪了,不好意思。无法实现的原因理解了!谢谢~
感觉关键字匹配会导致搜索复杂度指数级上升,dns的性能也会下降。
我之前一直在nameserver-policy字段里用ruleset做一些细化的分流,但是1.17开始失效了,你可以试试1.16的
引入一个 DOMAIN-REGEX 算了,分流也能用,不过的确非常影响性能
其实第一个,我已经通过另外的方法实现了,就是使用 rule-providers
config.yaml 内容:
dns:
nameserver-policy:
'rule-set:tencent': ['dhcp://en0', 'dhcp://en1', '10.1.2.3', '10.4.5.6'] # 因为有 rule-set 这个操作,所以可以使用 rule-providers 来实现功能
rules:
- RULE-SET,tencent,Office # 这里主要是触发 rule-providers 的下载行为,并且也可以把命中的规则分流到 Office 对应的 proxies 里面
rule-providers:
tencent:
type: http
behavior: classical
url: http://127.0.0.1:8013/tencent.yaml
path: ./Rules/tencent
interval: 100
tencent.yaml 内容:
payload:
# > Tencent Intranet
- DOMAIN-SUFFIX,qq.com
- DOMAIN-KEYWORD,qq
- DOMAIN-KEYWORD,tencent
但是第二个问题,因为目前 PROCESS-NAME
是全匹配,所以确实没有其他替代的方法
希望能增加一个 PROCESS-KEYWORD 或者 PROCESS-GLOB 或者 PROCESS-REGEX
以下规则里面,包含一个 零宽字符,可以看看
rules:
- PROCESS-NAME,kkkkk Helper,Office
rule-providers
请问你用的是哪个版本号的核心?1.17吗?
这个版本应该也是支持滴 v1.17.0
仔细读了一遍文档配置后,发现这个功能其实很早就支持了 @dycwuxing
我是被这段注释启发滴 @dycwuxing https://github.com/MetaCubeX/mihomo/blob/Meta/docs/config.yaml#L262-L264
我是被这段注释启发滴 @dycwuxing https://github.com/MetaCubeX/mihomo/blob/Meta/docs/config.yaml#L262-L264
谢谢,这个功能确实很早就支持了,但我自己测试下来,1.17是没生效,如果换成geosite:cn就没问题,或者核心回退到1.16也没有问题,所以想和你确认下大概的版本~
2023-12-04 16:35:58 INFO - [clash]: [37mDEBU[0m[2023-12-04T16:35:58.696764+08:00] [DNS] resolve www.baidu.com from tls://1.1.1.1:853 2023-12-04 16:35:58 INFO - [clash]: [37mDEBU[0m[2023-12-04T16:35:58.696764+08:00] [DNS] resolve www.baidu.com from tls://1.1.1.1:853 2023-12-04 16:35:58 INFO - [clash]: [37mDEBU[0m[2023-12-04T16:35:58.696764+08:00] [DNS] resolve www.baidu.com from https://1.1.1.1:443/dns-query 2023-12-04 16:35:58 INFO - [clash]: [37mDEBU[0m[2023-12-04T16:35:58.696764+08:00] [DNS] resolve www.baidu.com from https://1.0.0.1:443/dns-query 2023-12-04 16:35:58 INFO - [clash]: [37mDEBU[0m[2023-12-04T16:35:58.696764+08:00] [DNS] resolve www.baidu.com from https://1.0.0.1:443/dns-query 2023-12-04 16:35:58 INFO - [clash]: [37mDEBU[0m[2023-12-04T16:35:58.696764+08:00] [DNS] resolve www.baidu.com from https://1.1.1.1:443/dns-query
dns: nameserver:
rule-providers: ChinaMax_Classical: url: https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/rule/Clash/ChinaMax/ChinaMax_Classical.yaml path: ./rule_provider/clash/ChinaMax_Classical.yaml type: http behavior: classical interval: 3600 format: yaml
其实第一个,我已经通过另外的方法实现了,就是使用
rule-providers
config.yaml 内容:
dns: nameserver-policy: 'rule-set:tencent': ['dhcp://en0', 'dhcp://en1', '10.1.2.3', '10.4.5.6'] # 因为有 rule-set 这个操作,所以可以使用 rule-providers 来实现功能 rules: - RULE-SET,tencent,Office # 这里主要是触发 rule-providers 的下载行为,并且也可以把命中的规则分流到 Office 对应的 proxies 里面 rule-providers: tencent: type: http behavior: classical url: http://127.0.0.1:8013/tencent.yaml path: ./Rules/tencent interval: 100
tencent.yaml 内容:
payload: # > Tencent Intranet - DOMAIN-SUFFIX,qq.com - DOMAIN-KEYWORD,qq - DOMAIN-KEYWORD,tencent
但是第二个问题,因为目前
PROCESS-NAME
是全匹配,所以确实没有其他替代的方法希望能增加一个 PROCESS-KEYWORD 或者 PROCESS-GLOB 或者 PROCESS-REGEX
@dycwuxing 建议你按照我这种配置,如果没有 Office 的 proxies,可以直接写成 DIRECT 另外大小写尽量统一,rule-providers 的名称,和 rule-providers path 路径 和 尽量保持一致
对于第2个需求,也就是PROCESS的blob或正则匹配,我也觉得很有必要,尤其是同一个文件夹路径下有大量需要代理的子程序时,使用完整路径的规则写起来会很麻烦。可以单独开一个PROCESS-GLOB 或者 PROCESS-REGEX功能,用于正则匹配程序路径,并且允许缓存正则结果,具体执行的性能可以由用户自己承担。
process-name-regex也已经支持了,该issues将被关闭
Verify steps
Description
目前有一个强烈的诉求 就是以某个字符串为关键字(比如品牌名称 baidu、ali、163,因为一般品牌都会申请很多相似域名,很多都给企业内网使用),只要命中了,就走对应的 DNS,形如:
以 minimatch 形式命名
同理,
PROCESS-NAME
也需要这种功能或者使用正则,在加载配置后,直接缓存对应正则对象,这样就不用每次流量进来都需要 new 一次正则对象了,提升域名匹配性能
文档:
Possible Solution
No response