在 linux 上使用 clash 订阅
2023-01-04 更新
注意这篇文章的信息已经过时,没有必要再通过这么复杂的方法管理订阅,直接下载 Clash For Windows 即可。虽然名字叫 “For Windows” 但其实是 electron 打包的,因此也可以在 linux 平台上使用。
背景
linux 啥都好,就是日常使用的软件不够丰富,就比如 clash: windows 和 mac 上都有专门的图形化界面,而 linux 上就没有,只有简陋的命令行。使用自建 vps 倒也罢了,如果你使用的是机场,那么订阅规则总不可能自己一个个地手动去写吧?
最近我的 vps 故障了,于是就试用了几天机场,虽然对它的安全性抱有顾虑,但它的速度实在是太香了,那么我们有没有什么办法愉快地在 linux 平台上管理我们的机场订阅呢?
简单的方法是有的,据我所知,目前惟一一个支持图形化界面自动管理订阅的软件是:QV2ray ,通过它你能很方便地管理 ssr,v2ray 的订阅规则。QV2ray 的本体并不支持 trojan 规则,好在官方提供了一个 QvPlugin-Trojan 插件,通过它你也可以很方便地管理 trojan 订阅。
它的界面是这样的:
那为什么还要去折腾 clash 呢?从我的经验看,主要有下面几个理由:
- clash 的分流功能更为强大,网络上有很多共享的自动代理切换规则都是基于 clash
- QV2ray 还不够成熟,使用不规则的 https 端口时会出现证书验证失败的问题,需要手动忽略证书
- 个人感觉 clash 的性能比 QV2ray 稍强
顺带一提,如果你使用的是 trojan-go 那么你也只能使用 QV2ray ,因为 clash 只支持 trojan 不支持 trojan-go.
clash 的安装及使用
安装
本节简要介绍了如何在 linux 上安装 clash 。
通过包管理器安装
如果你使用的是 arch ,那么可以通过 aur 很方便地安装,只要执行 yay clash
就可以了,这样的好处是会自动生成 service 文件,可以方便你通过 systemctl 开机启动 clash.
通过 go 安装
clash 是基于 golang 实现的,因此你也可以通过 golang 编译安装,如果你使用的不是 arch ,那么你只能通过这种方式安装了。命令是 go get -u github.com/Dreamacro/clash
,之后会在 ~/go/bin
目录下生成二进制文件,如果不在这个目录,那么你也可以通过 go env
命令查看 gopath
的具体位置。
通过这种方式安装的问题是你需要手动地添加 service 文件,这里我把上一步生成的 serivce 文件贴出来:
[Unit]
Description=A rule based proxy in Go for %i.
After=network.target
[Service]
Type=exec
User=%i
Restart=on-abort
ExecStart=/usr/bin/clash
[Install]
WantedBy=multi-user.target
把这个文件放到 /usr/lib/systemd/system/clash@.service
,你需要修改内容是 ExecStart
,将其改成 clash 二进制文件所在的路径。
启动
在配置好 service 文件后,systemctl 的命令是:
sudo systemctl enable clash@<username> # 开机自启
sudo systemctl start clash@<username> # 启动
sudo systemctl stop clash@<username> # 停止
在默认情况下,clash 会监听三个端口:
- http 代理端口:7890
- socks 代理端口:7891
- clash restful 配置服务端口:9090 ,这个端口一般是提供给前端管理页面使用的
在系统中配置好相应的代理服务后就可以科学上网了。
配置文件
配置文件的路径是: ~/.config/clash/config.yaml
下面生成的配置就需要贴到这个文件中。
clash 订阅导入原理
在 linux 上导入订阅需要用到两个工具:
- subconverter subconverter 的作用是将订阅连接转换成 clash 配置。
- sub-web sub-web 是 subconverter 的前端,提供了一个方便的浏览器页面。
现在你 google clash 订阅,出来的无非就是这两个东西。 sub-web 的本质就是一个静态 html 页面,你能搜索到很多人提供的托管网站,但问题是并不安全,你并不知道他们会不会偷偷记录下你的订阅连接,所以最好的方法是本地安装。
本地安装 sub-web
sub-web 是一个 nodejs 项目,为了编译这个项目,你需要安装 nodejs 环境并安装 yarn 。
从 github clone 这个项目后,使用 yarn install
, yarn serve
就能启动。
安装 subconverter
这个比较简单,作者提供了 release ,直接下载 subconverter_linux64.tar.gz
文件解压后在目录下执行 subconverter
命令,就能启动服务,默认端口是 25500
使用
按照上述步骤启动 sub-web 和 subconverter 之后,访问 sub-web 的浏览器地址,这个地址在执行 yarn server
后会在终端提供,默认是 http://localhost:8080/ 。
使用很简单,只需要填入订阅连接和后端地址就可以了:
将生成的连接复制到新标签页访问,你就能得到一个完整的 clash 配置,将其复制到 ~/.config/clash/config.yaml
文件中,重启 clash 就可以了。
通过 clash-dashboard 管理代理
订阅连接里一般会提供很多的代理服务器,clash 会自动选择最快的一个,有时候你或许会想要手动使用其中某个服务器,这个时候就需要用到 clash-dashboard 了。
和 sub-web 一样,这也是一个前端项目,依次执行 yarn install
, yarn start
就可以了,由于这个项目使用的是 vite 构建,你可能需要执行 yarn global add vite
安装。
和 sub-web 不同,clash-dashboard 并不需要 web 容器,因此你也可以通过 后来我发现其实还是需要 web 容器的,奇怪,印象中以前的版本是不需要的。yarn build
生成静态 html 页面,然后直接在文件访问这个文件。
界面是这样的:
通过 netlify 托管 sub-web 和 clash-dashboard
在本地使用这些服务虽然很安全,但也很麻烦,幸运的是 netlify 上提供了免费的静态网站托管服务。
fork 项目
由于 netlify 只能托管自己的 github 项目,因此你需要 fork web-web 和 clash-dashboard
部署
在 netlify 上部署静态网站非常简单,只要点击几次鼠标就可以了。
等待一段时间后,你就可以访问这些网站了。这样做的好处是以后你只需要在本地启动一个 subconverter 就可以了。
待解决的问题
目前 subconverter 似乎并不能自动将配置写入到 clash ,需要手动复制,如果遇到订阅内容频繁变更的情况就很麻烦了。
clash 的 api 似乎支持写入配置,我想以后可以写一个脚本自动化地做这件事情。