Xray 合并配置文件时 也合并路由规则
最近Xray的更新加了一个新功能, 当加载多个配置文件时, 把其中的inbound和outbound进行合并.
如果我们想把路由规则也合并呢?
修改几行代码就可以了.
这次我们要在windows环境下编译Xray.
安装 go 环境 (官方)
运行安装文件, 像其它windows软件一样安装完成.命令行检查是否输出 go 的版本,来验证是否go环境配置成功。
下载 Xray 源码
找到 Release 下载文件的地方
https://github.com/XTLS/Xray-core/releases/tag/v1.8.6
翻到最下面有源码的压缩包
下载, 解压
编译
进入源码目录
右键菜单, "在终端中打开"
设置 go 编译时用的代理$env:GOPROXY = "https://goproxy.io"
* 注意, 这一行全部都要输入
编译命令 (Xray官方)
go build -o xray.exe -trimpath -ldflags "-s -w -buildid=" ./main
第一次编译会下载很多依赖,需要一点时间,请耐心等待。
检查是否编译成功, 得到xray.exe可执行文件
修改源码
修改 infra\conf\xray.go 文件
找到 func (c *Config) Override(o *Config, fn string) 函数, 做如下修改:
上面那两行修改是 注释/屏蔽 中间的一段代码.
下面那一段源码是这样的:
// override routing rulesif len(o.RouterConfig.RuleList) > 0 {for i := range o.RouterConfig.RuleList {c.RouterConfig.RuleList = append(c.RouterConfig.RuleList, o.RouterConfig.RuleList[i])newError("[", fn, "] prepend RuleList with json: ", string(o.RouterConfig.RuleList[i])).AtInfo().WriteToLog()}}
保存, 编译. 检查是否报错, 是否得到更新的 xray.exe 文件.
使用新特性
使用方法就是按官方的标准姿势加载多个配置文件. 可以多个 -c 像这样
xray run -c 1.json -c 2.json
也可以按目录加载
xray run -confdir
不过你自己要注意这些配置文件中的 routing 的 rules 有没有互相冲突.
Github: https://github.com/crazypeace/xray-routing-rule-override
========
后记
这个修改只是为了处理一个特定场景, 没有对全部有可能的各种情况考虑周全, 所以我没有提交主线PR.
评论
发表评论