本篇不涉及机场/节点,也并不是科学上网教程。只是因为Arch官网上的clash教程实在太简洁,所以记录一下我捣鼓这玩意的过程。

Clash主程序安装

安装主程序非常简单,如官网所说,我们只需要安装官方源里的包就好了:

1
$ sudo pacman -S clash

然后手动下载一个叫Country.mmdb的玩意,咱也不用了解这是什么个原理,但如果想出去得用到这玩意就是了。下好之后放到~/.config/clash里(可能要新建文件夹)。

1
2
3
4
5
6
$ mkdir -p ~/.config/clash
$ cd ~/.config/clash
# 阿里源
$ wget http://www.ideame.top/mmdb/Country.mmdb
# Github Release (国内网络可能不稳)
$ wget https://raw.githubusercontent.com/alecthw/mmdb_china_ip_list/release/Country.mmdb

然后可以把clash的配置文件xxx.yaml放到上面的文件夹里面,名字建议使用config.yaml毕竟这样就可以少写一个参数了,启动:

1
2
3
# 参数:-d,运行环境所在的文件夹,包括Country.mmdb、配置文件等
# 参数:-f,启用配置文件,默认是config.yaml
$ clash -d ~/.config/clash -f config.yaml&

一切顺利的话可能会看到一些:

1
INFO[0000] Start initial compatible provider XXXX

它们是clash配置文件内的分组,没啥用,完事。

开始使用

上面说到咱成功启动了clash,但要让各种流量自动从clash的端口进出,我们需要打开LAN许可并设置端口。

在配置文件config.yaml的开头(可能)有这些参数:

1
2
3
4
port: 7890                  # HTTP/HTTPS 端口
allow-lan: true # 允许局域网内连接
external-controller: :9090 # 外置管理器端口,后面会用到
secret: # 外置管理器连接密钥

如上,假如我们允许局域网连接,那么其他软件就可以设置proxy为http://127.0.0.1:7890,从而(其他协议如SOCK5同理,只需要写上对应参数就行)。

此外,我用了网页YACD可视化界面,登陆端口使用127.0.0.1:9090(就是上面提到的外置管理器端口)。它支持LAN端口更改、节点选择、流量记录等功能,这里不详细说了。

自启动管理

到目前为止,我们的clash还是需要手动启动,但如果有高强度冲浪选手需要开机自启动咋办呢。这里介绍基于systemd的自启动设置。

要使用systemd来控制软件服务,需要写一个*.service配置文件。正巧,如果是通过pacman来安装clash的话,他其实已经在/usr/lib/systemd/user写了一个简单的clash.service文件,可以在PKGBUILD里面看到。

下面介绍的是基于当前用户的自启动,我把配置文件直接放在~/.config/systemd/user里面。但如果要控制其他用户,则应当放在/usr/lib/systemd/user或者/usr/lib/systemd/system内,步骤类似,这里不详细介绍。

咱们把他复制过来:

1
2
3
4
$ mkdir -p ~/.config/systemd/user
$ cd ~/.config/systemd/user
$ cp /usr/lib/systemd/user/clash.service ./
$ cat clash.service

内容如下:

1
2
3
4
5
6
7
8
9
10
11
[Unit]
Description=A rule based proxy in Go.
After=network.target

[Service]
Type=exec
Restart=on-abort
ExecStart=/usr/bin/clash

[Install]
WantedBy=default.target

这里我们只需要关注ExecStart参数,他相当于是systemd启动clash的命令。对比上面我们自己写的命令后发现,他少了点东西:

  • -d,运行环境所在的文件夹
  • -f,启动配置文件(但我用的是默认名所以可以不写这个

据此,修改上述参数为:(注意这里不能用“~”代指用户目录,要写全路径)

1
ExecStart=/usr/bin/clash -d /home/{username}/.config/clash

systemd给重载一下,并尝试启动:

1
2
$ systemctl daemon-reload --user
$ systemctl start clash --user

使用systemctl status clash --user查看一下服务启动情况,如果输出无异常那就成了。

现在可以打开自启服务:

1
$ systemctl enable clash --user

然后在当前用户目录~/.config/systemd/内就会生成一个指向clash.service的链接,从而为这个用户创建了自启动。(如果是系统层面的自启动,会创建在/etc/systemd/system内)

完事。

订阅设置

此外,像我这种懒人,是通过机场订阅节点的,所以也需要一个工具来更新订阅(不然每次都得手动下载配置文件也挺麻烦的)。这里用了官网推荐的clashup,一个AUR包。

根据作者提供的Github介绍,我们需要创建~/.config/clash/clashup.json并写入:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{
// 端口设置,会覆盖下载后的配置
"http_port": 7890,
"socks5_port": 7891,
"redir_port": 7892,
"allow_lan": true,
"external_controller": "127.0.0.1:9090",
// 订阅链接,以及它是否被墙
"subscribe_url": "",
"is_subscribe_banned": false,
"custom_rules": [],
// 如果下面这俩都写了,则clashup也会顺带更新Country.mmdb
"mmdb_file_url": "http://www.ideame.top/mmdb/Country.mmdb",
"mmdb_version_url": "http://www.ideame.top/mmdb/version"
}

实际上很多参数和clash的配置文件config.yaml是一样的,他的目的是覆盖下载后的文件内的对应配置,所以也算是一个端口管理工具。

现在利用clashup --update命令即可更新配置文件,别忘了还要restart一下clash服务。

需要注意的是,clashup更新的文件只能是config.yaml(如果没有则会创建)。所以使用这玩意的时候,clash配置文件名并不能随便取。当然,更新后把文件重命名也不是不行。