cndaqiang Web Linux DFT

Linux使用clash

2020-07-17
cndaqiang
RSS

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: 
...

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
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 
#新配置文件
$CLASHDIR/subconverter/subconverter -g --artifact "cndaqiang"

#添加自定义的规则, 如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               


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

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


上一篇 JavaScript学习

下一篇 月饼试吃


评论


广告

目录

广告
访客数据