openwrt本地管理v2ray节点 生成订阅地址 并设置分流规则本地转换 保护隐私
为了在openClash使用自己的零散节点,全程在openwrt本地使用,不提供对外服务。
服务有两部分组成:
- 在本地docker部署节点管理面板,把零散节点转成订阅地址。
- 在本地docker部署订阅规则转换服务,把上一步的订阅地址根据规则自动转换成新的订阅地址,提供给openClash使用。
环境准备:
- openwrt with docker 作为主路由
- openClash 手动安装到openwrt 安装流程见最后参考
本文部署全程在openwrt系统内置的docker里执行,且只提供服务给openwrt系统自己使用,不对外服务。docker具有通用性,大概也许可能你可以在其他地方部署取决于你自己。
我们假定openwrt路由器的地址是192.168.2.1
1. 部署本地订阅管理面板
挑选了一个只有核心功能,没有其他乱七八糟功能的极简节点管理面板: https://github.com/gooaclok819/sublinkX 如图所示,非常精简,只有节点管理和订阅管理,模板管理我们不关心直接默认。

下边是项目原始的docker命令,我们配置到openwrt的docker页面里使用。
1 | docker run --name sublinkx -p 8000:8000 \ |
1.1 拉取镜像

在菜单栏找到docker -> 镜像,填写我们需要的镜像jaaksi/sublinkx:latest点击拉取。如果报错直接配置docker镜像。
1.2 启动容器
在菜单栏找到docker -> 容器,点击添加创建一个新容器如下配置:


配置容器时区 TZ=Asia/Shanghai
配置挂载
1 | # 绑定挂载,就是映射你本地的文件夹到容器内,能够让容器存储数据到宿主机 |
/mnt/myDocker/sublinkx这个路径是我自己在openwrt系统里创建的。
暴露端口 10008:8000/tcp
然后点击提交就创建好了容器。
回到容器页面,勾选你刚创建的容器,点击下边的启动就开始运行了。
浏览器访问 http://192.168.2.1:10008/ 默认账号admin 密码123456
1.3 配置节点并获取订阅地址
点击节点列表 -> 添加节点 -> 添加你的节点进去,设置一个分组并保存。

点击订阅列表 -> 添加订阅 -> 如下图填写,并勾选UDP,勾选你刚才添加的几个节点,然后点保存。

这时候回到了订阅列表页面,点击客户端复制你的clash订阅地址,假如是http://192.168.2.1:10008/c/?token=99999999999999&client=clash这个后边会用到。
这时候相当于在本地部署了一个机场,并能提供节点订阅服务。
2. 部署订阅地址->第三方规则转换服务
这个服务就是把普通的机场订阅地址,根据第三方好的分流规则,转成新的订阅地址,填写到openclash里使用。
2.1 第一种使用zsokami/cvt
这个项目内置自己的分流规则 https://github.com/zsokami/ACL4SSR 分流规则简单好用
2.1.1 部署服务
我们部署同作者的转换服务 https://github.com/zsokami/cvt 先把仓库打包到本地,上传到openwrt系统内并解压,比如最终项目的目录是/mnt/myDocker/cvt/cvt-main,我们同样使用docker启动,可是官方没有提供docker启动方式,我们开始自己构建一个:
1 | docker run -it -p 10009:8000 \ |
和前文一样openwrt的镜像界面拉一下镜像denoland/deno:2.4.5,我们使用deno基础镜像启动本项目,然后到openwrt的容器界面创建一个新容器,如下:


配置容器时区 TZ=Asia/Shanghai
配置挂载
1 | # 绑定挂载,就是映射你本地的文件夹到容器内,能够让容器存储数据到宿主机 |
/mnt/myDocker/cvt/cvt-main这个路径就是你刚才放这个项目的目录。
暴露端口 10009:8000/tcp
配置启动命令run -A /app/scripts/server.ts 8000就是用demo启动这个纯前端的项目。
然后点击提交就创建好了容器。然后勾选容器并点击启动。
这时候浏览器检查 http://192.168.2.1:10009/version 有版本号就代表部署好了,没有其他的web界面,只提供api。
2.1.2 转换订阅
刚部署的服务内置了同作者的分流规则。我们直接手动拼接订阅转换地址即可使用。就是cvt地址http://192.168.2.1:10009/+你的订阅地址,如下:http://192.168.2.1:10009/http://192.168.2.1:10008/c/?token=99999999999999&client=clash
这个地址是直接可以配置到openclash里使用的。
2.1.3 配置到openclash
找到openclash -> 配置订阅 -> 添加新的配置
填写上边拼接的转换订阅地址 http://192.168.2.1:10009/http://192.168.2.1:10008/c/?token=99999999999999&client=clash

不要勾选在线订阅转换,因为我们已经转换了。
直接添加订阅地址,然后保存。
回到配置订阅的页面列表,勾选启用你刚创建的,然后点击更新配置,这时候去运行日志里能看到自动下载你的订阅地址并重启了openclash,等一会就能用了。
cvt的方式到这里就完成了。可以去openclash自带的zashboard面板里查看,规则比较精简。


2.1.4 问题
没啥问题,简单好用,下边是他内置的分流规则
https://github.com/zsokami/cvt/blob/main/scripts/update_rules.ts
2.2 第二种使用subconverter通用转换服务+第三方规则
2.2.1 部署subconverter
subconverter是一个不内置规则的通用订阅转换服务,我们需要配置第三方的分流规则。
依旧使用docker部署,这次他官方提供了方法:
https://github.com/tindy2013/subconverter
https://github.com/tindy2013/subconverter/blob/master/README-docker.md
1 | docker run -d --restart=always -p 25500:25500 tindy2013/subconverter:latest |
把上边的docker命令配置到openwrt的容器里创建并启动。
浏览器打开 http://192.168.2.1:25500/version 检查一下是否启动成功。
这时候你的订阅转换服务地址为 http://192.168.2.1:25500/sub
同样只提供api没有web界面。
2.2.2 挑选第三方分流规则
使用他的Custom_Clash.ini分流配置 https://testingcf.jsdelivr.net/gh/Aethersailor/Custom_OpenClash_Rules@main/cfg/Custom_Clash.ini
2.2.3 配置到openclash
找到openclash -> 配置订阅 -> 添加新的配置
填写最开始的原始订阅地址 http://192.168.2.1:10008/c/?token=99999999999999&client=clash

勾选在线订阅转换
填写订阅转换服务地址为自定义地址:http://192.168.2.1:25500/sub
选择订阅转换模板为自定义模板
填写自定义模板地址为 https://testingcf.jsdelivr.net/gh/Aethersailor/Custom_OpenClash_Rules@main/cfg/Custom_Clash.ini
启用添加Emoji和UDP支持
最后保存设置,并和之前一样,更新配置,查看openclash的运行日志,看到成功下载订阅配置,成功重启,即可使用。
2.2.4 问题
这个分流规则很复杂,你准备的订阅地址最好是大机场的,节点很丰富的那种,不然缺失的配置自动设置成了direct,会导致很多分流走直连。
3. 最后
节点都是零散的且不多的时候,觉得第一种方式最省心最简单。如果你购买了大机场的丰富订阅的话,选第二种会更好。
参考
openclash的配置方案:
https://github.com/Aethersailor/Custom_OpenClash_Rules/wiki/OpenClash-%E8%AE%BE%E7%BD%AE%E6%96%B9%E6%A1%88
其他订阅转换服务搭建:
https://github.com/bestnite/sub2clash#clash-meta
openclash安装方式:
https://github.com/vernesong/OpenClash/releases