Xray 合并配置文件时 也合并路由规则

最近Xray的更新加了一个新功能, 当加载多个配置文件时, 把其中的inbound和outbound进行合并.

如果我们想把路由规则也合并呢?

修改几行代码就可以了.

这次我们要在windows环境下编译Xray.

安装 go 环境 (官方)

https://go.dev/dl/

运行安装文件, 像其它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 rules
if 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. 

评论

The Hot3 in Last 30 Days

RackNerd VPS搭Hysteria2 HY2梯子 年付 $10.98 1G端口 3T流量 17G存储 1GB内存

RackNerd VPS搭V2Ray WSS梯子 年付 $10.98 1G端口 3T流量 17G存储 1GB内存