cndaqiang Web Linux DFT

Linux使用clash

2020-07-17
cndaqiang
RSS

2022-06-20更新

linux的shell客户端:ShellClash

可以很简单的在服务器和openwrt等系统上布置clash.

2022-02-23更新

linux的GUI客户端:CFW有了,适合linux作为主力机的用户

wget https://github.com/Fndroid/clash_for_windows_pkg/releases/download/0.19.8/Clash.for.Windows-0.19.8-x64-linux.tar.gz
tar xzvf Clash.for.Windows-0.19.8-x64-linux.tar.gz
cd Clash\ for\ Windows-0.19.8-x64-linux/
./cfw

下面的方法适合一台服务器上运行clash,给局域网内其他机器提供代理

参考

linux环境使用clash实现网络代理访问外网
Clash For Linux自动更新订阅配置

文件说明

  • 客户端,可执行程序:clash
    项目地址:https://github.com/Dreamacro/clash
  • 配置文件:~/.config/clash/config.yaml
    里面放着clash的接口,控制参数,链接信息等
  • ip数据库~/.config/clash/Country.mmdb
    启动程序后会自动下载,下载失败,终端会提示错误,复制提示的下载链接,手动下载放到~/.config/clash/config.yaml

下载客户端

下载页面,https://github.com/Dreamacro/clash/releases

wget https://github.com/Dreamacro/clash/releases/download/v1.9.0/clash-linux-amd64-v1.9.0.gz
gzip -d clash-linux-amd64-v1.9.0.gz

初始化程序

(python37) cndaqiang@girl:~/MyTools/clash$ ./clash-linux-amd64-v0.19.0

若无~/.config/clash/config.yaml~/.config/clash/Country.mmdb会提示,然后自动下载

cndaqiang@GIRL clash$ ./clash-linux-amd64-v1.9.0
INFO[0000] Can't find config, create a initial config file
INFO[0000] Can't find MMDB, start download
FATA[0011] Initial configuration directory error: Can't initial MMDB: Can't download MMDB: Get "https://github-production-release-asset-2e65be.s3.amazonaws.com/231014917/281a0e00-c369-11ea-8903-79a958b78b99?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20200717%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20200717T124944Z&X-Amz-Expires=300&X-Amz-Signature=95c6abc781a12fad2be03e640220a1f01f67e580d60d4510b9d80e233a164fbc&X-Amz-SignedHeaders=host&actor_id=0&repo_id=231014917&response-content-disposition=attachment%3B%20filename%3DCountry.mmdb&response-content-type=application%2Foctet-stream": net/http: TLS handshake timeout 

如果下载ip数据库失败,人为代理下载后放到~/.config/clash/

配置文件

编辑~/.config/clash/config.yaml文件,买的机场也提供相应的配置文件,也可以把机场提供的订阅地址按照下面的方式生成配置文件

#http代理
port: 10091
#socks代理
socks-port: 10092
#是否允许局域网连接
allow-lan: true
#运行模式: 规则Rule,全局Global,直连Direct
mode: Global
log-level: silent
#网页管理ip和端口
external-controller: '0.0.0.0:10090'
#管理密码
secret: ''
#一堆代理
Proxy:
  -
    name: xxxx
    type: trojan
    server: xxxx
    port: xxxx
    password: xxxx
    sni: xxx

常用配置参数

mixed-port: 10092
allow-lan: true
mode: Rule
bind-address: '192.168.192.204'
external-controller: 192.168.192.204:9090
ipv6: true

分组设置

proxy-groups:
  - name: 🔰 节点选择 #组名
    type: select     #类型,选择
    proxies:         #选项
      - ♻️自动选择   #其他分组
      - 🎯 全球直连  #其他分组
      - 公益|新加坡高速节点|H.K中转|1Gps  #代理节点
  - name: ♻️自动选择
    type: url-test #测试url
    url: http://www.gstatic.com/generate_204
    interval: 300
    proxies:
      - 公益|新加坡高速节点|H.K中转|1Gps

规则

指定符合规则的域名采用的分组

rules:
 - DOMAIN-SUFFIX,local,🎯 全球直连
 - IP-CIDR,192.168.0.0/16,🎯 全球直连,no-resolve
 - DOMAIN-SUFFIX,android.com,🔰 节点选择
 - DOMAIN-KEYWORD,XLLiveUD,🎯 全球直连
 - GEOIP,CN,🎯 全球直连
 - MATCH,🐟 漏网之鱼    #其他网站选择🐟 漏网之鱼分组

规则定义

  • DOMAIN-SUFFIX:域名后缀匹配
  • DOMAIN:域名匹配
  • DOMAIN-KEYWORD:域名关键字匹配
  • IP-CIDR:IP 段匹配
  • SRC-IP-CIDR:源 IP 段匹配
  • GEOIP:GEOIP 数据库(国家代码)匹配
  • DST-PORT:目标端口匹配
  • SRC-PORT:源端口匹配
  • PROCESS-NAME:源进程名匹配
  • RULE-SET:Rule Provider 规则匹配
  • MATCH:全匹配

规则靠前的优先级高,我们要插入自定义规则,要插在MATCH:全匹配的前面

运行

cndaqiang@GIRL clash$ ./clash-linux-amd64-v1.9.0

浏览器添加设置的http/socks代理

其他

dashboard配置

公共dashboard

网页打开http://clash.razord.top/,选择设置,点击编辑外部控制设置旁边的蓝色ip:端口
其他的GUI管理网页也是可以的http://yacd.haishan.me/.

填入配置文件中的管理ip端口密码,连上clash 之后可以继续在这里设置端口和其他管理
这里的结果并不会保存到配置文件,就是临时生效 在代理里选择使用的服务器

私有dashboard

cd $CLASHDIR/ui
git clone git@github.com:Dreamacro/clash-dashboard.git
cd 
git checkout gh-pages

可以把clash-dashboard目录直接放到服务器的web目录,进行访问(http://mom/clash-dashboard/#/proxies),也可以用clash提供的web服务(192.168.192.204/ui)进行访问,使用clash的服务需要添加参数external-ui

external-controller: 192.168.192.204:9090
external-ui: /home/cndaqiang/soft/clash/ui/clash-dashboard

也可以用其他的dashboard:yacd

添加到快捷脚本

#启动clash
pkill -f clash-linux-amd64-v1.9.0; sleep 10; nohup $HOME/MyTools/clash/clash-linux-amd64-v1.9.0 > /tmp/clash.pid &

订阅相关

subconverter转换订阅url为clash配置文件

下载subconverter,解压,

wget https://github.com/tindy2013/subconverter/releases/download/v0.7.1/subconverter_linux64.tar.gz
tar xzvf subconverter_linux64.tar.gz

利用下面两种方式生成config.yml,并复制到clash配置目录

cndaqiang@GIRL subconverter$ cp config.yml ~/.config/clash/config.yaml

通过http转换订阅文件

适合搭建转换服务器,供所有的机器使用

cndaqiang@GIRL subconverter$ ./subconverter
2022/02/21 Mon 21:15:44.125582 [1058 10739384][INFO] SubConverter v0.7.1 starting up..
2022/02/21 Mon 21:15:44.127224 [1058 10739384][INFO] Reading preference settings...
......
2022/02/21 Mon 21:15:44.164532 [1058 10739384][INFO] Startup completed. Serving HTTP @ http://0.0.0.0:25500

使用http获取clash配置文件, 网址规则详见README-cn.md,注意要把订阅连接转为URLEncode,示例

cndaqiang@GIRL tmp$ curl -s "http://127.0.0.1:25500/sub?target=clash&url=http%3A%2F%2Fdy.clashweb.site%2Fapi%2Fv1%2Fclient%2Fsubscribe%3Ftoken%3Dcndaqiangstoken" > config.yaml
cndaqiang@GIRL tmp$ head  config.yaml
port: 7890
socks-port: 7891
allow-lan: true
mode: Rule
log-level: info
external-controller: :9090
proxies:
  - {name: 日本01-CM-2.0, server: xxx.gz.cm.888022.site, port: 32224, type: ss, cipher: chacha20-ietf-poly1305, password: ec684a62-be94-47f6-820c-779e4d921234, udp: true}
  ...

根据URLEncode的格式也可以自己写一个

cndaqiang@GIRL tmp$ curl -s "http://127.0.0.1:25500/sub?target=clash&url="$(echo "http://dy.clashweb.site/api/v1/client/subscribe?token=cndaqiangstoken" | sed  "s|/|%2F|g" | sed  "s|:|%3A|g"  | sed  "s|?|%3F|g")

[推荐]命令行转换

修改配置文件,自定义配置类型[cndaqiang],url可以为文件也可以为订阅地址

cndaqiang@GIRL subconverter$ vi generate.ini
#内容如下
[cndaqiang]
path=config.yml
target=clash
ver=4
url=http://dy.clashweb.site/api/v1/client/subscribe?token=cndaqiangstoken

生成配置文件config.yml

cndaqiang@GIRL subconverter$ ./subconverter -g --artifact "cndaqiang"
#这里生成的是config.yml,配置文件时yaml
cndaqiang@GIRL subconverter$ cp config.yml ~/.config/clash/config.yaml

自定义subconverter生成的配置文件

简单粗暴就直接修改vi base/all_base.tpl就可以

...
port: { { default(global.clash.http_port, "7890") } }
...

vi pref.toml中设置模板也可以

...
[[template.globals]]
key = "clash.http_port"
value = "7890"
...

有配置文件后,启动clash即可

cndaqiang@GIRL clash$ ./clash-linux-amd64-v1.8.0
INFO[0000] Start initial compatible provider 🔰 节点选择
INFO[0000] Start initial compatible provider 🛑 全球拦截
INFO[0000] Start initial compatible provider 🚫 运营劫持

1.9版本虽然报错ERRO[0000] Start DNS server error: missing port in address,但是不影响使用

新服务器从头配置clash

cd $HOME/soft
CLASHDIR=$PWD/clash
mkdir $CLASHDIR
mkdir $CLASHDIR/bin
mkdir $CLASHDIR/log
mkdir $CLASHDIR/ui
cd $CLASHDIR
#gitee备份
version=clash-linux-amd64-v1.9.0
wget http://cndaqiang.gitee.io/packages//mirrors/clash/${version}.gz
gzip -d ${version}.gz
chmod +x $version
#生成配置文件
./$version
#初始化完成后终止

#下载subconvert
wget https://github.com/tindy2013/subconverter/releases/download/v0.7.1/subconverter_linux64.tar.gz
tar xzvf subconverter_linux64.tar.gz
cd $CLASHDIR/subconverter
cat >> generate.ini <<EOF
[cndaqiang]
path=config.yml
target=clash
ver=4
url=http://dy.clashweb.site/api/v1/client/subscribe?token=cndaqiangstoken
#当网络环境不好时,使用提前下载后放到本地的www目录临时启用也可
EOF
#

#本地dashboard可选
cd $CLASHDIR/ui
git clone git@github.com:Dreamacro/clash-dashboard.git
git checkout gh-pages
     
#改clash参数          
vi base/all_base.tpl
#
./subconverter -g --artifact "cndaqiang"
cp $CLASHDIR/subconverter/config.yml $HOME/.config/clash/config.yaml


#执行
ln -s $CLASHDIR/$version $CLASHDIR/bin/clash
$CLASHDIR/bin/clash


#配置文件使用系统服务启动
cd $CLASHDIR/bin/
cat >  restart-clash.sh <<EOF
#!/bin/bash
PIDFILE=$CLASHDIR/log/clash.pid
if [ -f \$PIDFILE ]
then
kill -9 \$(cat \$PIDFILE )
fi
#生成新的PID文件
echo \$\$ > \$PIDFILE 
#新配置文件
rm -rf $CLASHDIR/subconverter/config.yml
$CLASHDIR/subconverter/subconverter -g --artifact "cndaqiang"
if [ -f $CLASHDIR/subconverter/config.yml ]
then
        echo 下载$CLASHDIR/subconverter/config.yml成功
        cp $CLASHDIR/subconverter/config.yml $CLASHDIR/subconverter/config.yml.bak
else
        echo 下载失败,使用备份$CLASHDIRh/subconverter/config.yml.bak
        cp $CLASHDIR/subconverter/config.yml.bak $CLASHDIR/subconverter/config.yml
fi


#添加自定义的规则, 如libgen走代理
line=\$(grep -rn rules $CLASHDIR/subconverter/config.yml | awk  -F: '{ print \$1 }')

sed -i \${line}a'\ - DOMAIN-KEYWORD,libgen,♻️ 自动选择          ' $CLASHDIR/subconverter/config.yml
sed -i \${line}a'\ - DOMAIN-KEYWORD,sci-hub,♻️ 自动选择         ' $CLASHDIR/subconverter/config.yml      
sed -i \${line}a'\ - DOMAIN-KEYWORD,sciencedirect,🎯 全球直连   ' $CLASHDIR/subconverter/config.yml    
sed -i \${line}a'\ - DOMAIN-SUFFIX,aps.org,🎯 全球直连          ' $CLASHDIR/subconverter/config.yml       
sed -i \${line}a'\ - DOMAIN-SUFFIX,webofscience.com,🎯 全球直连 ' $CLASHDIR/subconverter/config.yml             
sed -i \${line}a'\ - DOMAIN-SUFFIX,iop.org,🎯 全球直连          ' $CLASHDIR/subconverter/config.yml           
sed -i \${line}a'\ - DOMAIN-SUFFIX,scitation.org,🎯 全球直连    ' $CLASHDIR/subconverter/config.yml                 
sed -i \${line}a'\ - DOMAIN-SUFFIX,elsevier.com,🎯 全球直连     ' $CLASHDIR/subconverter/config.yml                
sed -i \${line}a'\ - DOMAIN-SUFFIX,wiley.com,🎯 全球直连        ' $CLASHDIR/subconverter/config.yml             
sed -i \${line}a'\ - DOMAIN-SUFFIX,acs.org,🎯 全球直连          ' $CLASHDIR/subconverter/config.yml           
sed -i \${line}a'\ - DOMAIN-SUFFIX,nih.gov,🎯 全球直连          ' $CLASHDIR/subconverter/config.yml           
sed -i \${line}a'\ - DOMAIN-SUFFIX,springer.com,🎯 全球直连     ' $CLASHDIR/subconverter/config.yml                
sed -i \${line}a'\ - DOMAIN-SUFFIX,nature.com,🎯 全球直连       ' $CLASHDIR/subconverter/config.yml              
sed -i \${line}a'\ - DOMAIN-SUFFIX,science.org,🎯 全球直连      ' $CLASHDIR/subconverter/config.yml               
sed -i \${line}a'\ - DOMAIN-SUFFIX,jps.jp,🎯 全球直连      ' $CLASHDIR/subconverter/config.yml               
sed -i ${line}a'\ - DOMAIN-SUFFIX,xiaomi.eu,♻️ 自动选择      ' /home/cndaqiang/soft/clash/subconverter/config.yml

diff $CLASHDIR/subconverter/config.yml $HOME/.config/clash/config.yaml
#如果两个文件一致,就直接开启clash,如果不一致就生成备份旧文件并下载替换新的文件
if [ ! "\$?" == 0 ]
then
  cp  $CLASHDIR/subconverter/config.yml $HOME/.config/clash/config.yaml
fi
#
#执行
$CLASHDIR/bin/clash | tee $CLASHDIR/log/clash.log
EOF

chmod +x restart-clash.sh
#终止文件
cat >  stop-clash.sh <<EOF
#!/bin/bash
PIDFILE=$CLASHDIR/log/clash.pid
if [ -f \$PIDFILE ]
then
kill -9 \$(cat \$PIDFILE )
fi
EOF
chmod +x stop-clash.sh

#配置基于用户身份(把cndaqiang换成自己的用户名)的系统服务
cat > $CLASHDIR/bin/clash.service <<EOF
[Unit]
[Service]
User=cndaqiang
Group=cndaqiang
ExecStart=$CLASHDIR/bin/restart-clash.sh
ExecStop=$CLASHDIR/bin/stop-clash.sh
TimeoutSec=0
StandardOutput=tty
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
EOF

sudo cp $CLASHDIR/bin/clash.service /etc/systemd/system/clash.service
#启动服务
sudo systemctl start clash
#开机启动
sudo systemctl enable clash

#如只在zerotier的内网使用clash,在`/etc/rc.local`中添加
systemctl start clash

#计划任务,每天一点更新clash
crontab -e
0 1 * * * systemctl restart clash

Openwrt自定义配置文件的一种方式

安装软件包

opkg update
opkg install subconverter diffutils
CLASHDIR=$HOME/clash
mylocalconfig=$HOME/clash/mylocalconfig.yaml
mkdir -p $CLASHDIR
mkdir $CLASHDIR/bin
mkdir $CLASHDIR/log
ln -s /etc/openclash/clash $CLASHDIR/bin/
cp -r /etc/subconverter $CLASHDIR/subconverter
#可以适当修改clash生成参数
#vi base/all_base.tpl => mixed-port: N
#输入文件
cat > $CLASHDIR/subconverter/generate.ini <<EOF
[cndaqiang]
path=config.yml
target=clash
ver=4
url=http://dy.clashweb.site/api/v1/client/subscribe?token=cndaqiangstoken
#当网络环境不好时,使用提前下载后放到本地的www目录临时启用也可
EOF
#

#配置文件使用系统服务启动
cat >  $CLASHDIR/bin/restart-clash.sh <<EOF
#!/bin/bash
PIDFILE=$CLASHDIR/log/clash.pid
if [ -f \$PIDFILE ]
then
kill -9 \$(cat \$PIDFILE )
fi
#生成新的PID文件
echo \$\$ > \$PIDFILE
#
#新配置文件
rm -rf $CLASHDIR/subconverter/config.yml
cd $CLASHDIR/subconverter/
subconverter -g --artifact "cndaqiang"
if [ -f $CLASHDIR/subconverter/config.yml ]
then
        echo 下载$CLASHDIR/subconverter/config.yml成功
        cp $CLASHDIR/subconverter/config.yml $CLASHDIR/subconverter/config.yml.bak
else
        echo 下载失败,使用备份$CLASHDIRh/subconverter/config.yml.bak
        cp $CLASHDIR/subconverter/config.yml.bak $CLASHDIR/subconverter/config.yml
fi
#
#添加自定义的规则, 如libgen走代理
line=\$(grep -rn rules $CLASHDIR/subconverter/config.yml | awk  -F: '{ print \$1 }')
sed -i \${line}a'\ \ - DOMAIN-KEYWORD,libgen,♻️ 自动选择           ' $CLASHDIR/subconverter/config.yml
sed -i \${line}a'\ \ - DOMAIN-KEYWORD,sci-hub,♻️ 自动选择          ' $CLASHDIR/subconverter/config.yml      
sed -i \${line}a'\ \ - DOMAIN-KEYWORD,sciencedirect,🎯 全球直连   ' $CLASHDIR/subconverter/config.yml    
sed -i \${line}a'\ \ - DOMAIN-SUFFIX,aps.org,🎯 全球直连          ' $CLASHDIR/subconverter/config.yml       
sed -i \${line}a'\ \ - DOMAIN-SUFFIX,webofscience.com,🎯 全球直连 ' $CLASHDIR/subconverter/config.yml             
sed -i \${line}a'\ \ - DOMAIN-SUFFIX,iop.org,🎯 全球直连          ' $CLASHDIR/subconverter/config.yml           
sed -i \${line}a'\ \ - DOMAIN-SUFFIX,scitation.org,🎯 全球直连    ' $CLASHDIR/subconverter/config.yml                 
sed -i \${line}a'\ \ - DOMAIN-SUFFIX,elsevier.com,🎯 全球直连     ' $CLASHDIR/subconverter/config.yml                
sed -i \${line}a'\ \ - DOMAIN-SUFFIX,wiley.com,🎯 全球直连        ' $CLASHDIR/subconverter/config.yml             
sed -i \${line}a'\ \ - DOMAIN-SUFFIX,acs.org,🎯 全球直连          ' $CLASHDIR/subconverter/config.yml           
sed -i \${line}a'\ \ - DOMAIN-SUFFIX,nih.gov,🎯 全球直连          ' $CLASHDIR/subconverter/config.yml           
sed -i \${line}a'\ \ - DOMAIN-SUFFIX,springer.com,🎯 全球直连     ' $CLASHDIR/subconverter/config.yml                
sed -i \${line}a'\ \ - DOMAIN-SUFFIX,nature.com,🎯 全球直连       ' $CLASHDIR/subconverter/config.yml              
sed -i \${line}a'\ \ - DOMAIN-SUFFIX,science.org,🎯 全球直连      ' $CLASHDIR/subconverter/config.yml               
sed -i \${line}a'\ \ - DOMAIN-SUFFIX,jps.jp,🎯 全球直连           ' $CLASHDIR/subconverter/config.yml               
sed -i \${line}a'\ \ - DOMAIN-SUFFIX,xiaomi.eu,♻️ 自动选择         ' $CLASHDIR/subconverter/config.yml
#
#创建新策略组(自动筛选节点)
sourceFile=$CLASHDIR/subconverter/config.yml
includeFile=\${sourceFile}.chat.cndaqiang.in
echo "  - name: ChatGPT" > \$includeFile
hang0=\$(grep -n '自动选择' \$sourceFile | grep name | awk -F: '{ print \$1 }')
hang=\$((hang0+1))
sed -n "\${hang},\\\$p" \$sourceFile  | awk '/^[[:space:]]*-/ {exit} {print}' >> \$includeFile
#筛选节点
sed -n "\${hang},\\\$p" \$sourceFile  | awk '/name/ {exit} {print}' | grep -i GPT >> \$includeFile
#生成新的文件
awk -v line="\${hang0}" -v includeFile="\$includeFile" 'NR==line{system("cat " includeFile )} {print}' \$sourceFile > ${sourceFile}.tmp
mv ${sourceFile}.tmp \$sourceFile
rm \$includeFile
line=\$(grep -rn rules \$sourceFile | awk  -F: '{ print \$1 }')
GPT=\$(grep -i chatgpt \$sourceFile | grep name | head -1| sed 's/[,":{}]/ /g' | awk  '{ print \$3 }')
if [ \$GPT ]
then
sed -i \${line}a'\ \ - DOMAIN-KEYWORD,openai, ChatGPT           ' \$sourceFile
sed -i \${line}a'\ \ - DOMAIN-KEYWORD,perplexity, ChatGPT       ' \$sourceFile
fi
#

#
if [ ! -f $mylocalconfig ]; then touch $mylocalconfig;fi
diff $CLASHDIR/subconverter/config.yml $mylocalconfig
#如果两个文件不一致就生成备份旧文件并下载替换新的文件
if [ ! "\$?" == 0 ]
then
  cp  $CLASHDIR/subconverter/config.yml $mylocalconfig
fi
#
$CLASHDIR/bin/clash -f $mylocalconfig | tee $CLASHDIR/log/clash.log
#$CLASHDIR/bin/clash -f $mylocalconfig > $CLASHDIR/log/clash.log 2>&1 &
EOF
chmod +x $CLASHDIR/bin/restart-clash.sh

可以测试生成的文件是否可用

root@CRouter:~/clash/subconverter# /etc/openclash/clash -f config.yml

关闭文件

cat >  $CLASHDIR/bin/stop-clash.sh <<EOF
#!/bin/bash
PIDFILE=$CLASHDIR/log/clash.pid
if [ -f \$PIDFILE ]
then
kill -9 \$(cat \$PIDFILE )
fi
EOF
chmod +x $CLASHDIR/bin/stop-clash.sh

如果想共享就把mylocalconfig=/www/clashconfig/mylocalconfig.yaml就可以从openwrt的网页下载修改后的配置了http://192.168.12.1/clashconfig/mylocalconfig.yaml

也可以复制到/etc/openclash/config/mylocalconfig.yaml作为openclash的输入

我觉得openclash非常的卡,仅作为临时代理使用,我常用的还是/root/clash/bin/restart-clash.sh

openclash曾经使用的配置

  • 此次使用OpebnClash插件,白名单模式,另外配置文件中制定的端口(subconverter的配置base/all_base.tpl制定),是可以走zerotier访问的,所以可以远程访问
  • Luci>OpenClash>插件设置>定时重启,重启时间大于build-clash-config.sh时间,就可以实现定期更新配置

生成系统控制脚本

cat > $CLASHDIR/bin/myclash << EOF
#!/bin/sh /etc/rc.common

START=99
STOP=10

start() {
    echo "Starting My Clash Service"
    $CLASHDIR/bin/restart-clash.sh
    # 添加启动服务的命令
}

stop() {
    echo "Stopping My Clash Service"
    # 添加停止服务的命令
    $CLASHDIR/bin/stop-clash.sh
}

restart() {
    echo "Restarting My Clash Service"
    stop
    start
}

# 添加其他需要的函数

# 添加其他需要的逻辑

# Exit on unsupported action
run "$@"
EOF
#
chmod +x $CLASHDIR/bin/myclash
cp $CLASHDIR/bin/myclash /etc/init.d/

添加定期启动

#0 1 * * * /root/clash/bin/restart-clash.sh
0 1 * * * /etc/init.d/myclash restart

配置dashboard

wget 'https://codeload.github.com/cndaqiang/clash-dashboard/zip/refs/heads/gh-pages'
unzip -x gh-pages
mv clash-dashboard-gh-pages /www/clash-dashboard

自己创建策略并配置分流

为了避免GPT被封号,这里添加自己的节点进行GPT访问.

sourceFile=/home/cndaqiang/soft/clash/subconverter/config.yml
#添加节点
line=$(grep -n 'proxies' $sourceFile | head -1 | awk -F: '{ print $1 }')
sed -i ${line}a'\ \ - {name: "cndaqiang.ChatGPT", server: 192.168.192.10, port: 2090, type: socks5}' $sourceFile

创建一个包含所有节点的群组

sourceFile=/home/cndaqiang/soft/clash/subconverter/config.yml
includeFile=${sourceFile}.chat.cndaqiang.in
echo "  - name: 所有节点
    type: select
    proxies:
grep '{name:' $sourceFile | awk -F'name: ' '{print $2}' | awk -F', ' '{gsub(/"/, "", $1);  print "      - " $1}' >> $includeFile

不想转译了,自己添加到restart-clash.sh

#自动筛选节点
sourceFile=/home/cndaqiang/soft/clash/subconverter/config.yml
includeFile=${sourceFile}.chat.cndaqiang.in
#...............................................筛选美国节点并设置自动选择
#这是抄的“♻️自动选择”的策略,即自动测试节点的方法
echo "  - name: QS_US" > $includeFile
hang0=$(grep -n '自动选择' $sourceFile | grep name | awk -F: '{ print $1 }')
hang=$((hang0+1))
sed -n "${hang},\$p" $sourceFile  | awk '/^[[:space:]]*-/ {exit} {print}' >>    $includeFile
#筛选节点
sed -n "${hang},\$p" $sourceFile  | awk '/name/ {exit} {print}' | grep -i 美国   >> $includeFile
sed -n "${hang},\$p" $sourceFile  | awk '/name/ {exit} {print}' | grep -i US   >> $includeFile
#...............................................筛选GPT节点.
#添加自己的节点
echo "  - name: ChatGPT
    type: select
    proxies:
      - cndaqiang.ChatGPT" >> $includeFile
#亦可从"节点选择"中筛选其他的节点
hang0=$(grep -n '节点选择' $sourceFile | grep name | awk -F: '{ print $1 }')
hang=$((hang0+1))
sed -n "${hang},\$p" $sourceFile  | awk '/name/ {exit} {print}' | grep -i GPT   >> $includeFile
#..........................................................
#生成新的文件
awk -v line="${hang0}" -v includeFile="$includeFile" 'NR==line{system("cat "    includeFile )} {print}' $sourceFile > .tmp
mv .tmp $sourceFile
rm $includeFile
line=$(grep -rn rules $sourceFile | awk  -F: '{ print $1 }')
#.
GPT=$(grep -i chatgpt $sourceFile | grep name | head -1| sed 's/[,":{}]/ /g' | awk  '{ print $3 }')
if [ $GPT ]
then
sed -i ${line}a'\ \ - DOMAIN-SUFFIX,oaistatic.com, ChatGPT           ' $sourceFile
sed -i ${line}a'\ \ - DOMAIN-SUFFIX,openai.com, ChatGPT           ' $sourceFile
sed -i ${line}a'\ \ - DOMAIN-SUFFIX,chatgpt.com, ChatGPT           ' $sourceFile
sed -i ${line}a'\ \ - DOMAIN-SUFFIX,gravatar.com, ChatGPT          ' $sourceFile
sed -i ${line}a'\ \ - DOMAIN-SUFFIX,oaistatic.com, ChatGPT           ' $sourceFile
sed -i ${line}a'\ \ - DOMAIN-SUFFIX,scholar.google.com, ChatGPT           ' $sourceFile
fi

# 其他网站
https://raw.githubusercontent.com/gfwlist/gfwlist/master/gfwlist.txt
#美国节点
sed -i ${line}a'\ \ - DOMAIN-SUFFIX,ai, QS_US       ' $sourceFile
sed -i ${line}a'\ \ - DOMAIN-SUFFIX,phind.com, QS_US       ' $sourceFile
sed -i ${line}a'\ \ - DOMAIN-SUFFIX,gemini.google.com, QS_US        ' $sourceFile
# 其他网址
sed -i ${line}a'\ \ - DOMAIN-SUFFIX,github.com,♻️ 自动选择      '  $sourceFile
sed -i ${line}a'\ \ - DOMAIN-SUFFIX,githubusercontent.com,♻️ 自动选择      '   $sourceFile

mac使用clash

配置文件config.yaml中设置端口, 可以覆盖节点订阅的配置

mixed-port: 7890

本文首发于我的博客@cndaqiang.
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!


上一篇 JavaScript学习

下一篇 GPAW安装

目录

访客数据