前言

本文记录一下 clash on linux 的配置流程

安装 Clash

  1. 下载当前操作系统与 CPU 架构对应的包文件

    以下几种方法都可以查看系统版本(部分云厂商服务器会改动一些版本名):

    1
    2
    3
    4
    uname -a
    grep 'VERSION=' /etc/os-release
    lsb_release -a | grep Description
    hostnamectl | grep Ubuntu

    容器内需要使用以下命令查看容器系统版本:

    1
    cat /etc/issue

    我的服务器当前的系统版本为Ubuntu 20.04.5 LTS,所以直接下载linux-amd64版本即可,我下载的版本为clash-linu 1.13.0 ,最新的版本可以去github release查看

    1
    wget -O clash.gz https://github.com/Dreamacro/clash/releases/download/v1.13.0/clash-linux-amd64-v1.13.0.gz
  2. 下载好后解压安装包中 clash 到 /usr/local/bin/ 目录下,并删除压缩包文件

    1
    2
    3
    gzip -dc clash.gz > /usr/local/bin/clash
    chmod +x /usr/local/bin/clash
    rm -f clash.gz
  3. 创建配置文件目录,并下载 MMDB 文件

    1
    2
    mkdir /etc/clash
    wget -O /etc/clash/Country.mmdb https://www.sub-speeder.com/client-download/Country.mmdb
  4. 创建 systemd 配置文件 /etc/systemd/system/clash.service

    1
    sudo nano /etc/systemd/system/clash.service

    示例如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    [Unit]
    Description=clash daemon

    [Service]
    Type=simple
    User=root
    ExecStart=/usr/local/bin/clash -d /etc/clash/
    Restart=on-failure

    [Install]
    WantedBy=multi-user.target
  5. 重载 systemctl daemon

    1
    systemctl daemon-reload

配置代理上网

  1. 导入已有的科学上网订阅链接,机场这里就不推荐了

    1
    wget -O /etc/clash/config.yaml [订阅链接]
  2. 设置系统代理,添加配置文件 /etc/profile.d/proxy.sh 并在其中写入如下内容:

    1
    2
    3
    export http_proxy="http://127.0.0.1:7890"
    export https_proxy="http://127.0.0.1:7890"
    export no_proxy="localhost, 127.0.0.1"
  3. 重载 /etc/profile 配置

    1
    source /etc/profile
  4. 启动 clash 服务,并设置为开机自动启动

    1
    2
    systemctl start clash
    systemctl enable clash
  5. 测试 goolge.com 访问

    1
    2
    3
    4
    5
    6
    7
    curl google.com
    <HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
    <TITLE>301 Moved</TITLE></HEAD><BODY>
    <H1>301 Moved</H1>
    The document has moved
    <A HREF="http://www.google.com/">here</A>.
    </BODY></HTML>

配置 web-ui dashboard

  1. 克隆 clash-dashboard 项目到本地

    1
    git clone -b gh-pages --depth 1 https://github.com/Dreamacro/clash-dashboard /opt/clash-dashboard
  2. 修改 clash 配置文件中 external-ui 的值为 /opt/clash-dashboard

    1
    external-ui: /opt/clash-dashboard
  3. 重启 clash 服务

    1
    systemctl restart clash
  4. 通过浏览器访问 clash ui 面板,未配置域名的话可以通过ssh port forward 实现本地访问

    https://kevinello-1302687393.file.myqcloud.com/picgo/2023/03/04/202303041756380-a3c480.png

配置定时更新订阅

使用如下脚本填写相关配置项目并放入 /etc/cron.weekly 目录下,每周自动更新订阅配置文件即可

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#!/usr/bin/env bash

# 订阅链接地址
SUBSCRIBE=""
# web-ui存放目录,留空则保持默认不修改
WEB_UI=""
# API 端口,留空则保持默认不修改
CONTROLLER_API_PROT=""
# API 口令,留空则保持默认不修改
SECRET=""

CLASH_CONFIG="/etc/clash/config.yaml"

if [ -z "${SUBSCRIBE}" ]; then
echo "Subscription address cannot be empty"
exit 1
fi

systemctl stop clash

wget --no-proxy -O ${CLASH_CONFIG} ${SUBSCRIBE}

if [ -n "${WEB_UI}" ]; then
sed -i "s?^#\{0,1\} \{0,1\}external-ui.*?external-ui: ${WEB_UI}?" ${CLASH_CONFIG}
fi

if [ -n "${CONTROLLER_API_PROT}" ]; then
sed -i "s?^external-controller.*?external-controller: '0.0.0.0:${CONTROLLER_API_PROT}'?" ${CLASH_CONFIG}
fi

if [ -n "${SECRET}" ]; then
sed -i "s?^secret.*?secret: '${SECRET}'?" ${CLASH_CONFIG}
fi

systemctl start clash

上述脚本写入 /etc/cron.weekly/clash.sh 并配置好相关变量后,保存退出并赋予可执行权限

1
chmod +x /etc/cron.weekly/clash.sh

使用proxy-provider实现定时更新订阅

除了上面的cronjob实现定时更新订阅外,我们还可以使用 clash-premium 内核自带的proxy-provider实现自动更新订阅以及health check

示例配置如下:

1
2
3
4
5
6
7
8
9
10
proxy-providers:
bywave:
type: http
path: ./xxx.yaml
url: {订阅链接}
interval: 300
health-check:
enable: true
url: {健康检查 URL}
interval: 300