自定义 v2ray-core 配置

本节介绍如何利用 core 生命周期钩子自定义 v2ray-core 配置。

自定义 v2ray-core 配置

下面介绍利用 core 生命周期钩子修改 v2ray-core 的 config.json,使得自定义配置文件成为可能。生命周期钩子的介绍见 生命周期钩子 一节。

下面使用脚本在 v2ray-core 启动前添加一个支持 sniffing 的 sniffing-socks 入站,并修改路由部分使得该端口的分流模式跟随规则端口。

首先确保 /usr/bin/python 可用。

编写如下 python 脚本,将其存储于 /etc/v2raya/core-hook.py

#!/usr/bin/python

import argparse
from os import path
import json

def main():
    # parse the arguments
    parser = argparse.ArgumentParser()
    parser.add_argument('--v2raya-confdir', type=str, required=True)
    parser.add_argument('--stage', type=str, required=True)
    args = parser.parse_args()

    # we only modify the config file at the pre-start stage
    if args.stage != 'pre-start':
        return

    # read the content from the config.json
    conf_path = path.join(args.v2raya_confdir, 'config.json')
    with open(conf_path) as f:
        conf = json.loads(f.read())

    # append a socks with sniffing and routing rule inbound
    sniffing_socks = {'port': 11698, 'protocol': 'socks', 'listen': '0.0.0.0', 'sniffing': {'enabled': True}, 'tag': 'sniffing-socks'}
    conf['inbounds'].append(sniffing_socks)

    # add routing rule support for this inbound (follow the rule port)
    for rule in conf['routing']['rules']:
        if 'inboundTag' not in rule:
            continue
        with_rule = False
        for tag in rule['inboundTag']:
            if tag.startswith('rule-http'):
                with_rule = True
                break
        if with_rule:
            rule['inboundTag'].append(sniffing_socks['tag'])
            
    # write back to the file
    with open(conf_path, 'w') as f:
        f.write(json.dumps(conf))

if __name__ == '__main__':
    main()

赋予可执行权限:

sudo chmod +x /etc/v2raya/core-hook.py

启动 v2raya 时添加参数 --core-hook /etc/v2raya/core-hook.py

在 Github 上编辑此页

最后更新于: 2022年07月10日 21:42:55 +0800

贡献者: mzz2017