Closed permheaddamage closed 1 week ago
一种可行但不是很优雅的实现方式:
匹配bypass-0且不匹配bypass-1的请求(国内域名且不包含已排除部分)路由到一个不存在的服务node-0。 匹配bypass-2的请求(排除的域名)路由到node-1。 不匹配bypass-3的请求(其他域名)路由到node-2。
services:
- name: service-0
addr: ":443"
handler:
type: https
chain: chain-0
listener:
type: tls
chains:
- name: chain-0
hops:
- name: hop-0
nodes:
- name: node-0
addr: :1
bypasses:
- bypass-0
- bypass-1
connector:
type: tcp
dialer:
type: tcp
- name: node-1
bypass: bypass-2
connector:
type: virtual
dialer:
type: virtual
- name: node-2
bypass: bypass-3
connector:
type: virtual
dialer:
type: virtual
bypasses:
- name: bypass-0
whitelist: true
http:
url: https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/refs/heads/master/rule/Clash/ChinaMax/ChinaMax_Domain.txt
timeout: 10s
- name: bypass-1
matchers:
- .googleapis.cn
- name: bypass-2
whitelist: true
matchers:
- .googleapis.cn
- name: bypass-3
http:
url: https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/refs/heads/master/rule/Clash/ChinaMax/ChinaMax_Domain.txt
timeout: 10s
谢谢回复。我试了一下,不需要再加bypass,只要在我的代码里最后加一个节点
- name: node-2
addr: :1
connector:
type: tcp
dialer:
type: tcp
让他显式地落到这个不存在的服务就可以达到目的了。 看了一下代码,应该是因为这里没有匹配到任何node,它返回了nil,然后就隐式地走virtual去转发了 https://github.com/go-gost/x/blob/3db20563d25b171195e33f035c61512a6af4cdd9/hop/hop.go#L159
假如能有一个connector.type = reject这样的选项,就更清楚和高效了
virtual connector增加了metadata.action
选项,可以通过设置为reject
来拒绝所有连接。
nodes:
- name: node-1
connector:
type: virtual
metadata:
action: reject
dialer:
type: virtual
我做了一个规则bypass-1,国内域名都列入黑名单,不准代理。 但是playstore用到的services.googleapi.cn会被它误杀。所以我又加了一个白名单bypass-0给它放行。 这两个bypasser假如放在service或者hop层,默认是与关系,而我需要它们是或关系,满足任何一个就放行。都不满足就禁用。 所以只能做成两个node,分别由virtual放行。 但是现在测试下来,这两个node都没有命中的话,默认依然会由virtual放行。 我是不是只能再做一个node,指向一个不存在的服务?或者是否有connector.type = reject这样属性可以使用?