记录一下Linux上纯命令行环境下的Clash基本使用方法,前提是已经在Windows上有配置好的clash。

安装

Github仓库 下载预编译包, 例如 clash_2.0.24_linux_amd64.tar.gz,然后上传到Linux服务器中,解压到本地

1
2
cd ~/clash
tar --gzip -xf clash_2.0.24_linux_amd64.tar.gz

其中主要就是一个clash可执行文件,将路径添加PATH或者将其复制到~/.local/bin即可。

测试一下是否安装成功

1
clash -v

配置

假定在Windows上已有一个配置完成可以正常使用的clash,我们需要从Home Directory直接获取两个文件:

  • profiles/文件夹中选择一个可用的配置文件xxx.yml,复制并将其改名为 config.yaml
  • Country.mmdb文件,这是一个 IP 地址定位数据库,供规则分流时使用。如果在启动时没有找到,clash会尝试自动下载,下载可能需要几分钟。

将这两个文件传送到Linux服务器中,存放在 ~/.config/clash 目录下(或者全局级配置目录/etc/clash)。

除了复制已有的配置文件,也可以直接从订阅链接获取,例如使用wget命令(注意链接必须用引号包起来)

1
wget -O config.yaml 'http://example.com/shortURL'

使用curl命令则必须要加上-L选项,否则不会自动跟随重定向

1
curl -L -o config.yaml 'http://example.com/shortURL'

有的链接可能需要在最后加上&clash

至于Country.mmdb就不用管了,让clash在启动时自己下载即可。(后续发现有的情况下下载失败,还是复制过去吧)

对于订阅链接的更新,可以设置定时任务或者手动执行上述命令即可。

使用

在一个会话中启动clash,默认就会监听127.0.0.1的7890,7891端口

1
./clash

然后在另一个会话中,通过选项手动指定代理,例如

1
you-get -x 127.0.0.1:7890 <url>

通常的教程中会涉及代理相关的环境变量设置,例如

1
2
3
4
5
6
7
8
9
10
11
export http_proxy="http://127.0.0.1:7890"
export https_proxy="http://127.0.0.1:7890"
export socks_proxy="socks5://127.0.0.1:7891"
export all_proxy="socks5://127.0.0.1:7891"
export no_proxy="localhost, 127.0.0.1"

unset http_proxy
unset https_proxy
unset socks_proxy
unset all_proxy
unset no_proxy

因为不同应用程序对这些变量的支持程度不尽相同(例如curl支持all_proxy,但是wget不支持),懒得设置这些环境变量, 更方便的做法是通过 ProxyChains 工具使用代理。

首先通过apt-get命令直接安装到本地,然后修改 /etc/proxychains4.conf 文件,对配置文件的修改看示例即可,例如在最后加上

1
socks5 127.0.0.1 7891

在命令之前使用proxychains4就可以强制它使用相关代理

1
proxychains4 ...

例如

1
2
proxychains4 git clone xxx
proxychains4 npm install

可以加上-qproxychains4使用静默模式,不干扰命令自身的输出

1
2
proxychains4 -q curl http://example.com
proxychains4 -q you-get <url>

注意:

  • 这些代理对ping命令都不生效,因为协议不同,可以用curl命令进行测试。
  • 这里只关注了手动开启clash,还可以通过 systemd 设置服务自动开启。

补充

分流代理的危险性

目前绝大多数的代理都采用了国内国外分流代理的策略,但是这其实存在显而易见的危险。 使用分流代理的方式容易泄露自身的隐私信息,包括但不限于 IP 地址,浏览器以及硬件指纹等等一系列信息,并且可以将代理 IP 与真实 IP 进行对应。 一个最常见的例子就是如果某个国外的网站使用了百度统计脚本,此时代理 IP 与真实 IP 的对应关系就可以轻松被这个网站获取。另一个例子就是一些恶意的邮件,比如使用国外的邮箱服务时,接收到了一个恶意邮件,这个邮件中嵌入了一些国内的资源如图片,那么真实 IP 等信息也可以被轻松获取。—— Arch Linux 安装使用教程

自定义规则

参考https://chenjuefei.com:444/117.html

由于clash每次更新订阅的时候都会自动应用所有规则,但是我们有时需要对规则进行自定义的修改,此时就非常不便。 可以考虑在规则之上添加parser自定义规则,它的作用是在每次更新后自动执行javascript代码,对规则以预处理的方式进行修改, 达到添加自定义规则,防止更新覆盖的目的。

下面的代码的作用是:添加example.com的直连规则,对于MATLAB相关网站直连,移除所有含有bing的规则。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
parsers:
- url: <url>
code: |
module.exports.parse = async (raw, { yaml }, { name, url, interval, selected }) => {
const obj = yaml.parse(raw);

const directRule = 'DOMAIN-SUFFIX,example.com,DIRECT';
obj.rules.unshift(directRule);

const directDomains = [
'DOMAIN-SUFFIX,mathworks.com,DIRECT',
'DOMAIN-SUFFIX,mathworks.cn,DIRECT',
'DOMAIN-SUFFIX,matlab.com,DIRECT',
];

for (let i = directDomains.length - 1; i >= 0; i--) {
obj.rules.unshift(directDomains[i]);
}
obj.rules.unshift(...directRules);

// 过滤掉包含 "bing" 的规则
obj.rules = obj.rules.filter(rule => !rule.includes("bing"));
return yaml.stringify(obj);};

其中的<url>改为对应的订阅链接即可,通常形如https://xxx.com/xxx?clash=1&extend=1

为了配置的修改生效,最好重启clash。