Clash 部署


命令行版

这是为了没有gui界面的linux服务器所写的教程,因此全部使用命令行。

源码安装

安装

选择版本

基于不可抗力因素,请自行进行寻找镜像 fork ,后然后进行编译

安装 clash

//注意自己改文件名
sudo gzip -d clash-linux-armv7-v1.13.0
sudo mkdir /opt/clash
sudo mv clash-linux-armv7-v1.13.0 /opt/clash/clash
cd /opt/clash
chmod +x /opt/clash/clash
//下载配置信息
sudo mkdir -p ~/.config/clash && cd ~/.config/clash
sudo wget -O config.yaml [订阅链接]
sudo wget -O Country.mmdb http://www.sub-speeder.com/client-download/Country.mmdb

此处这个 Country.mmdb 不太好下载,可以尝试自己下载来,直接上传到服务器上。

也可以考虑使用我的镜像版本:

sudo wget -O Country.mmdb https://github.com/zouxingyuks/Speed/blob/main/clash/Country.mmdb

clash的配置文件在~/.config/clash/config.yaml,打开后添加基本配置(如果有就不用添加了)

port: 7890
socks-port: 7891
allow-lan: true
mode: Rule
log-level: info
secert: 123456 // 增加这一行, 如果你希望你的clash web要密码访问可以在这块配置密码, 如果不需要直接注释掉即可
#此处必须是0.0.0.0 才可以通过局域网访问,也就是说要想通过web管理,必须填0.0.0.0
external-controller: 0.0.0.0:9090

启动

cd /opt/clash
./clash -d ~/.config/clash .

在本地测试服务器端口是否可达,如果访问不通,排查云主机是否开放了端口。

telnet [服务器IP] 7890

如果在配置文件中使用的是 mixed-port,则 socks5 和 http 代理共用 7980 端口,代理地址都为

username:passwd@[服务器IP]:7890

设置系统代理

sudo nano /etc/environment

加入以下三行

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"

修改sudo文件

sudo visudo

在此处加入

Defaults env_keep+="http_proxy https_proxy no_proxy"

重启

reboot

设置clash开机启动

将配置文件移动到/etc

sudo mv ~/.config/clash /etc

添加启动信息

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

输入以下内容,clash -d的意思是指定配置文件路径,这里已经改成了/etc/clash

[Unit]
Description=clash daemon

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

[Install]
WantedBy=multi-user.target

重新加载systemctl daemon

sudo systemctl daemon-reload

启动Clash

sudo systemctl start clash.service

设置Clash开机自启动

sudo systemctl enable clash.service

Clash相关的管理命令

#启动Clash
sudo systemctl start clash.service
#重启Clash
sudo systemctl restart clash.service
#查看Clash运行状态
sudo systemctl status clash.service
#禁用全局代理
unset http_proxy
unset https_proxy
#启用全局代理
set http_proxy
set https_proxy

配置定时更新订阅:

先撸个脚本,别忘了设可执行权限

#!/bin/bash

# 定义颜色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color

# 配置信息
CONFIG_PATH="/etc/clash"
CONFIG_FILE="$CONFIG_PATH/config.yaml"
BACKUP_FILE="$CONFIG_PATH/configbackup.yaml"
SUB_URL="【此处填入自己的订阅】"
LOG_FILE="/var/log/clash/update.log"

# 日志函数
log_message() {
    local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
    echo -e "${timestamp} - $1" | tee -a "$LOG_FILE"
}

# 错误处理函数
handle_error() {
    log_message "${RED}错误: $1${NC}"
    # 恢复备份(如果存在)
    if [ -e "$BACKUP_FILE" ]; then
        mv "$BACKUP_FILE" "$CONFIG_FILE"
        log_message "${YELLOW}已恢复配置文件备份${NC}"
    fi
    exit 1
}

# 检查root权限
if [ "$(id -u)" != "0" ]; then
    handle_error "此脚本需要root权限运行"
fi

# 确保必要目录存在
mkdir -p "$CONFIG_PATH" 2>/dev/null
mkdir -p "$(dirname "$LOG_FILE")" 2>/dev/null

# 检查clash服务是否安装
if ! systemctl list-unit-files | grep -q clash.service; then
    handle_error "未检测到Clash服务"
fi

log_message "${GREEN}开始更新Clash配置${NC}"

# 停止clash服务
log_message "停止Clash服务..."
systemctl stop clash.service || handle_error "无法停止Clash服务"

# 清除代理设置
unset https_proxy http_proxy
log_message "已清除代理设置"

# 备份现有配置
if [ -f "$CONFIG_FILE" ]; then
    cp "$CONFIG_FILE" "$BACKUP_FILE" || handle_error "无法备份配置文件"
    log_message "已备份现有配置文件"
fi

# 下载新配置
log_message "开始下载新配置文件..."
if wget --timeout=10 --tries=3 -O "$CONFIG_FILE" "$SUB_URL" 2>/dev/null; then
    # 验证yaml格式
    if command -v python3 >/dev/null; then
        python3 -c "import yaml; yaml.safe_load(open('$CONFIG_FILE'))" 2>/dev/null || \
            handle_error "新配置文件格式无效"
    fi
    
    log_message "${GREEN}配置文件更新成功${NC}"
    
    # 启动clash服务
    log_message "重启Clash服务..."
    systemctl restart clash.service || handle_error "无法启动Clash服务"
    
    # 等待服务完全启动
    sleep 2
    
    # 检查服务状态
    if systemctl is-active clash.service >/dev/null; then
        # 设置代理
        export http_proxy="http://127.0.0.1:7890"
        export https_proxy="http://127.0.0.1:7890"
        log_message "${GREEN}Clash服务已成功重启${NC}"
        
        # 测试连接
        if curl -s --connect-timeout 5 https://www.google.com >/dev/null; then
            log_message "${GREEN}代理连接测试成功${NC}"
        else
            log_message "${YELLOW}警告: 代理连接测试失败${NC}"
        fi
    else
        handle_error "Clash服务启动失败"
    fi
else
    handle_error "配置文件下载失败,请检查网络连接或订阅地址"
fi

# 清理旧备份
if [ -f "$BACKUP_FILE" ]; then
    rm "$BACKUP_FILE"
    log_message "已清理配置备份文件"
fi

log_message "${GREEN}配置更新完成${NC}"

补充执行权限

chmod +x update.sh

设置定时任务:

sudo crontab -e

填入以下内容

//每月1号和15号的4点30分开始更新
30 4 1,15 * * sh [脚本目录]/[脚本名称]

重启crontab,使配置生效

sudo systemctl restart cron.service

查看代理是否正常工作:

curl www.google.com

Cash Web 面板(Yacd)

当然这个有在线版,其实在线版就够用了 http://clash.razord.top/#/proxies

Yach 是 Clash Web 版的面板,可以查看服务状态,上传下载的流量统计信息。

sudo docker run -p 1234:80 -d --name yacd haishanh/yacd:master
sudo ufw allow 7890

访问 http://[服务器IP]:1234 进入页面,填写 Clash 地址,本例为 http://[服务器IP]:9090,secret 填写 config.yaml 中配置的 secret 值,添加后点击新增的链接进入页面。

yacd panel

clash 及 yacd 的部署使用到这里就记录完成了。

ShellClash

功能简介:

  • 通过管理脚本在Shell环境下便捷使用Clash
  • 支持在Shell环境下管理Clash各种功能
  • 支持在线导入Clash支持的分享、订阅及配置链接
  • 支持配置定时任务,支持配置文件定时更新
  • 支持在线安装及使用本地网页面板管理内置规则
  • 支持路由模式、本机模式等多种模式切换
  • 支持在线更新

在线安装:

如无法连接或出现SSL连接错误,请尝试更换各种不同的安装源!

~标准Linux设备安装:

sudo -i #切换到root用户,如果需要密码,请输入密码
bash #如已处于bash环境可跳过
export url='https://fastly.jsdelivr.net/gh/juewuy/ShellClash@master' && wget -q --no-check-certificate -O /tmp/install.sh $url/install.sh  && bash /tmp/install.sh && source /etc/profile &> /dev/null

或者

sudo -i #切换到root用户,如果需要密码,请输入密码
bash #如已处于bash环境可跳过
export url='https://gh.jwsc.eu.org/master' && bash -c "$(curl -kfsSl $url/install.sh)" && source /etc/profile &> /dev/null

~路由设备使用curl安装

#GitHub源(可能需要代理)
export url='https://raw.githubusercontent.com/juewuy/ShellClash/master' && sh -c "$(curl -kfsSl $url/install.sh)" && source /etc/profile &> /dev/null

或者

#jsDelivrCDN源
export url='https://fastly.jsdelivr.net/gh/juewuy/ShellClash@master' && sh -c "$(curl -kfsSl $url/install.sh)" && source /etc/profile &> /dev/null

或者

#作者私人源
export url='https://gh.jwsc.eu.org/master' && sh -c "$(curl -kfsSl $url/install.sh)" && source /etc/profile &> /dev/null

~路由设备使用wget安装

#GitHub源(可能需要代理)
export url='https://raw.githubusercontent.com/juewuy/ShellClash/master' && wget -q --no-check-certificate -O /tmp/install.sh $url/install.sh  && sh /tmp/install.sh && source /etc/profile &> /dev/null

或者

#jsDelivrCDN源
export url='https://fastly.jsdelivr.net/gh/juewuy/ShellClash@master' && wget -q --no-check-certificate -O /tmp/install.sh $url/install.sh  && sh /tmp/install.sh && source /etc/profile &> /dev/null

~老旧设备使用低版本wge安装

#作者私人http内测源
export url='http://t.jwsc.eu.org' && wget -q -O /tmp/install.sh $url/install.sh  && sh /tmp/install.sh && source /etc/profile &> /dev/null

~DOCKER环境下安装:

请参考 ShellClash_docker 一键脚本和镜像

本地安装:

如使用在线安装出现问题,请参考:本地安装ShellClash的教程 | Juewuy’s Blog 使用本地安装!

使用脚本:

安装完成管理脚本后,执行如下命令使用~

clash 		#进入对话脚本
clash -h 	#脚本帮助及说明
clash -u 	#卸载脚本
clash -t 	#测试模式运行
clash -s start 	#启动服务
clash -s stop 	#停止服务

运行时的额外依赖

大部分的设备/系统都已经预装了以下的大部分依赖,使用时如无影响可以无视之

curl/wget		必须		全部缺少时无法在线安装及更新,无法使用节点保存功能
iptables/nftables	重要		缺少时只能使用纯净模式
crontab			较低		缺少时无法启用定时任务功能
net-tools		极低		缺少时无法正常检测端口占用
ubus/iproute-doc	极低		缺少时无法正常获取本机host地址

GUI 版本

安装 clash for windows(其实应该叫 Clash GUI 的)

https://github.com/Fndroid/clash_for_windows_pkg/releases/

下载 Linux 版本的压缩包

wget https://github.com/Fndroid/clash_for_windows_pkg/releases/download/0.20.22/Clash.for.Windows-0.20.22-x64-linux.tar.gz

解压压缩包

//文件名自己换
tar -xvf Clash.for.Windows-0.20.22-x64-linux.tar.gz

重命名与移动

mv Clash\ for\ Windows-0.20.22-x64-linux clash
sudo mv clash /opt
cd /opt/clash

相关文章

参考资料


如果本文帮助到了你,帮我点个广告可以咩(o′┏▽┓`o)


评论
  目录