现在我们学习 Config 中几种 route 块的写法:
routes = {
tag_route = {},
fallback_route = {},
clash_rules = "the_clash_rules.yaml",
geosite = "mygeosite_file_name.mmdb",
geosite_gfw = {}
}
所有 route 都会用到 chain 的 tag
所以我们要求每一条inbound 都要有一个 tag, 每一个 inbound 中的 chain 都要有至少一个 map
tag_route
tag_route = { { "l1", "d1" }, { "l2", "d2" }, { "l3", "d2" } },
tag_route 是一个 字符串对 的列表。对中前者为 inbound 的 tag, 后者为 outbound 的 tag。
这是一种固定的 路由模式,只要来自 l1 的 都会被发到 d1.
fallback_route
首先学一下什么是 fallback.
在一个 inbound的 chain 中,有序地排列着多个 InMapConfig, 即它们代表着多个 Map, 分别记为 map1, map2. 假设 map1 通过了,但 map2 的协议 逻辑检查失败,即 map2 检查数据,发现和 map2 对应的 协议所定义的 特征不一致,那么此时 整个 chain 就此中断。
如果就这样,一般的情况就是 在 log 中记录一下此次 异常情况, 然后继续 监听 其它请求。
但是,有时,map2 错了,我们依然认为 它是一个有效的 map1, 想要 将它转发到一个新的 outbound 上,此时就用到了 fallback_route. 这整个行为就叫 fallback.
没错。这个就是 trojan 协议的 精髓。
fallback_route = { { "listen1", "fallback_dial1" } }
fallback_route 是一个 字符串对 的列表。上面示例就是表示 inbound chain "listen1" 里失败的地方将被转发到 outbound chain "fallback_dial1" 中。listen1 和 fallback_dial1 是它们的 tag.
clash_rules
0.0.8开始,ruci 支持了clash 的分流规则的使用。clash 是一个知名的app, 它的规则被用得很多
一般直接写为 clash_rules = "myfile.yaml"
然后在 myfile.yaml 中,按 clash 配置文件中的 rules 项进行书写,如写成:
rules:
- DOMAIN-SUFFIX,ip6-localhost,Direct
- DOMAIN-SUFFIX,ip6-loopback,Direct
- DOMAIN-SUFFIX,lan,Direct
- DOMAIN-SUFFIX,local,Direct
- DOMAIN-SUFFIX,localhost,Direct
- DOMAIN-KEYWORD,baidu,Reject
就行了
ruci 支持所有 clash 中定义的 规则,而且有算法加速支持,匹配得很快!
您还可以直接把 yaml 的内容传入 clash_rules 项,但是不太建议这么做:
clash_rules = "rules:\n - DOMAIN-SUFFIX,ip6-localhost,Direct"
好处就是可以一个配置文件全搞定
geosite
配置 geosite 的 mmdb 是用于 clash_rules的。也就是说,配置了 geosite后,clash_rules中的 GEOSITE 规则就生效了
可以运行 ruci-cmd utils 中的 对应命令来下载 geosite 文件
geosite_gfw
https://github.com/e1732a364fed/geosite-gfw
geosite_gfw = {
api_url = "http://127.0.0.1:5134/check",
proxy = "127.0.0.1:10800",
only_proxy = false,
ok_ban_out_tag = { "Direct", "Reject"}
}
geosite_gfw 是一个 人工智能 gfw项目,它用过机器学习训练出的模型来判断一个 域名 倒底是会被墙还是 可以直连
主要用于 local 本地端进行分流。
proxy 选项若给出,则 geosite_gfw 会在访问不到目标地址时,使用 proxy 再访问一次。 而 若 only_proxy = true, 则 geosite_gfw 第一次方问目标地址就会使用 该 proxy.
注意,如果您配置 geosite_gfw 的 proxy 又指向回 我们的 ruci 的监听端口的话,要确保按上文的 tag_route 把该端口的监听强制导向某 outbound, 避免再次进竹 geosite_gfw 环节 造成 回环。
目前的geosite_gfw 的运行方式:
git clone https://github.com/e1732a364fed/geosite-gfw/
cd geosite-gfw
pip3 install transformers numpy scikit-learn flask requests
pip3 install torch
curl -LO "https://huggingface.co/e1732a364fed/geosite-gfw/resolve/main/bert_geosite_by_body.zip?download=true"
curl -LO "https://huggingface.co/e1732a364fed/geosite-gfw/resolve/main/bert_geosite_by_head.zip?download=true"
tar -xf bert_geosite_by_body.zip
tar -xf bert_geosite_by_head.zip
python3 classify.py --mode serve_api --port 5134
之后在 ruci 的 routes 中使用 geosite_gfw 就能生效啦。
接下来
学点难的? Infinite