1. 简介

对于日常使用的桌面系统,我们直接使用已有的 Clash GUI 客户端就可以很方便地实现代理。但对于服务器系统来说,往往都是非 GUI 的,因此我们只能通过 CLI 来配置代理。个人目前使用 Clash + Proxychains 组合。

2. Clash

Clash 用来实现网络流量的代理转发。

2.1 安装

Clash 开源仓库下载对应的系统版本到服务器上合适的位置,然后解压、重命名并提权。解压 .gz 包使用 gunzip 命令,以个人操作为例:

1
2
3
4
5
mkdir clash
cd clash
# 将 clash 包放置在此目录下
gunzip clash-linux-amd64-v3-v1.11.12.gz # 解压
mv clash-linux-amd64-v3-v1.11.12 clash # 重命名

2.2 配置

从自己的订阅机场获取到对应的订阅配置文件,重命名为 config.yaml,然后上转到服务器上的相同目录下。或者也可以直接从本地的 Clash GUI 客户端拿到其下载好的 config.yaml 文件上传到服务器(以及 Country.mmdb 也可一起上传)。然后便可以启动 Clash:

1
2
cd clash
./clash -d .

如果需要报错端口已被占用,可以打开 config.yml 修改成其它端口。

此外,为了方便使用,还可以创建一个 Systemd 服务进程来维护 Clash,创建并编辑文件 ~/.config/systemd/user/clash.service

1
2
3
4
5
6
7
8
[Unit]
Description=Clash Daemon

[Service]
ExecStart=/data/zhangjianghui/clash/clash -d /data/zhangjianghui/clash

[Install]
WantedBy=default.target

然后使用以下命令启动/关闭服务:

1
2
3
4
systemctl --user enable clash.service 	# 开机自启
systemctl --user start clash.service # 启动
systemctl --user stop clash.service # 停止
systemctl --user status clash.service # 查看服务状态

如果查看服务状态正常,则说明配置完成。

3. Proxychains

Proxychains 用来重定向网络连接,在所有命令前加上 proxychains,则会强制命令通过 Proxychains 指定的代理网址和端口访问网络。

3.1 安装

首先安装 Proxychains,在 Ubuntu20.04 上最新版为 proxychains4

1
sudo apt install proxychains4

如果无 Root 权限,可以本地编译安装。首先到 Proxychains-NG 仓库下载好软件包,然后解压,进入目录开始本地编译安装:

1
2
3
./configure --prefix=/path/to/install
make
make install

运行正常后即成功将 Proxychains-NG 安装到了 /path/to/install 中,/path/to/install 一般建议设置为目录 $HOME/.local。安装成功后,还需要将 /path/to/install/bin 加入到 Shell 的 PATH 环境变量中。以 Bash Shell 为例,将以下配置追加到 ~/.bashrc 中(如果已有该配置则跳过):

1
PATH="${HOME}/.local/bin:$PATH"

配置完 PATH 环境变量后,重启 Shell,即可在 Shell 下正常使用 proxychainsproxychains4 命令了。

3.2 配置

然后配置 Proxychains 的代理网址和端口。由于我们已经在本地配置并启动了 Clash 服务,故 Clash 的代理网址和端口也是我们需要配置给 Proxychains 的,具体查看 Clash 目录下的 config.yaml 中的配置。以个人为例,创建并编辑文件 ~/.proxychains/proxychains.conf

1
2
3
4
[ProxyList]
socks5 127.0.0.1 1089
#http 127.0.0.1 1089
#https 127.0.0.1 1089

配置完后,可以使用以下命令测试能否正常访问外网:

1
proxychains curl -sSf www.google.com > /dev/null

以后如果想要使用代理,则在命令前加上 proxychains 即可;如果不想要使用代理,则不用加 proxychains,正常使用命令即可。

附录