Linux 如何设置代理

安装部署
clash 是一款用 Go 语言开发的软件,所以我可以直接下载预编译的版本进行部署。

# 下载地址
https://github.com/Dreamacro/clash/releases/download/v1.8.0/clash-linux-amd64-v1.8.0.gz

软件的作者提供了多种架构下预编译的二进制文件,大家一定要注意区分。我当前下载的版本,适合在 x86_64 架构的 Linux 操作系统中运行。

下载完成后,需要解压,并赋予执行权限。

wget https://github.com/Dreamacro/clash/releases/download/v1.8.0/clash-linux-amd64-v1.8.0.gz
gzip -d clash-linux-amd64-v1.8.0.gz
chmod +x clash-linux-amd64-v1.8.0
mv clash-linux-amd64-v1.8.0 /usr/local/bin/clash

Go 语言开发的程序,其打包出的二进制文件不需要其他依赖,可以直接运行。

clash -v
得到如下返回时,意味着 clash 已经可用了。

Clash v1.8.0 linux amd64 with go1.17.3 Mon Nov  8 13:26:00 UTC 2021
配置文件
clash 运行需要依赖于一份 YAML 配置文件,默认读取 $HOME/.config/clash/config.yaml 。当没有这份文件的时候,clash 会使用默认配置生成一份,所以我们可以直接运行一下 clash ,来获取模版。

root@ubuntuserver:~# clash
INFO[0000] Can't find config, create a initial config file
INFO[0000] Can't find MMDB, start download
INFO[0000] Mixed(http+socks) proxy listening at: 127.0.0.1:7890
Control + C 退出后,就可以获取默认配置文件了。

root@ubuntuserver:~# ls $HOME/.config/clash/config.yaml
/root/.config/clash/config.yaml

接下来修改这份配置文件,追加我的代理的配置。

代理大家各不相同,我使用的是 Just My socks 提供的 ss 和 v2y 。

最终配置如下:

mixed-port: 7890
proxies:
  - name: "ss1"
    type: ss
    server: server1_of_ss
    port: 443
    cipher: aes-256-gcm
    password: "password"
  - name: "ss2"
    type: ss
    server: server2_of_ss
    port: 443
    cipher: aes-256-gcm
    password: "password"
  - name: "v2y"
    type: vmess
    server: server3_of_ss
    port: 443
    uuid: uuid
    alterId: 0
    cipher: auto
proxy-groups:
  - name: "auto"
    type: url-test
    proxies:
      - ss1
      - ss2
      - v2y
    url: 'http://www.gstatic.com/generate_204'
    interval: 300
rules:
  - DOMAIN-SUFFIX,google.com,auto
  - DOMAIN-KEYWORD,google,auto
  - DOMAIN,google.com,auto
  - DOMAIN-SUFFIX,github.com,auto
  - DOMAIN-KEYWORD,github,auto
  - DOMAIN,github.com,auto
  - IP-CIDR,127.0.0.0/8,DIRECT
  - GEOIP,CN,DIRECT
  - DST-PORT,80,DIRECT
  - SRC-PORT,7777,DIRECT
  - MATCH,auto

运行服务
我希望每次启动 Ubuntu 虚拟机, clash 都可以自动启动,所以我决定将它托管给 systemd来管理。

生成 systemd 配置文件:

cat > /etc/systemd/system/clash.service << EOF
[Unit]
Description=Clash - A rule-based tunnel in Go
Documentation=https://github.com/Dreamacro/clash/wiki
[Service]
OOMScoreAdjust=-1000
ExecStart=/usr/local/bin/clash -f /root/.config/clash/config.yaml
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF

配置开机自启,并启动 clash 服务:

systemctl enable clash
systemctl start clash

为 Linux 配置代理
clash 运行起来之后,会在 http://127.0.0.1:7890 这个地址监听 HTTP_PROXY 服务,接下来需要为 Linux 配置代理,使所有的 http 请求,都经由这个代理服务进出。设置很简单,Linux 有专门的环境变量 http_proxy https_proxy 进行相关配置,为了使每次开启终端都可以使环境变量生效,特意做了如下配置:

echo -e "export http_proxy=http://127.0.0.1:7890nexport https_proxy=http://127.0.0.1:7890" >> ~/.bashrc

重新打开一个终端,即可使配置生效。

至此,clash 在 Linux 上的配置都已经完成了。

验证效果
我所使用的 Ubuntu Server 18.04 是不带图形化界面的操作系统。所以我用了一个命令行浏览器 w3m 来验证我的 clash 是否工作正常。

w3m www.google.com

得到如下返回,说明我的目标已经达成。

在这里插入图片描述