全平台统一代理——Clash
代理软件的使用历程
- 使用赛风 VPN
- 听人提及到 SSR ,转用 SSR
- 每个设备分别使用 SSR
- 由于 SSR 封锁严重,跟随购买的机场换为 V2ray
- 每个设备分别使用 V2ray
- 困扰于每个平台都要运行代理软件 + V2ray 客户端不怎么好使+ Linux 运行代理程序需要命令行+手中刚好有树莓派,决定换用 Openwrt
- Openwrt 单臂路由 + SSRPlus
- 因为是单臂路由,有的设备不能自定义网关 + SSRPlus 自定义程度不够+ PassWall 莫名其妙的不能用+住校+主流机场换用了 Clash ,决定每个平台分别使用 Clash
- 决定全平台使用 Clash
Subconverter 的调教过程
虽然用了 Clash ,但机场提供的配置方案不是很符合个人需求(而且主用的机场没有 ipv6 的配置),且手中有多个机场(主用机场 + 便宜的备用机场 + 按流量付费,使用特殊节点的机场),于是使用了 subconverter 来制作 Clash 配置文件。
目的
- 将 多个 机场的订阅合并为一个
- 国内直连( ipv4 + ipv6 ),游戏平台自选直连和代理,哔哩哔哩自选直连和代理, Netflix 自选直连和代理,其他国外一律代理
- 有一个单独的文件用以手动添加一些直连的域名(用于 DDNS NAS 的域名)
- 使用 Doh 进行域名解析
配置
以默认为主,修改部分条目
/pref.ini
添加多条机场订阅并设置API密钥
[common]
api_mode=true
api_access_token=API密钥
default_url=机场订阅地址1|机场订阅地址2|机场订阅地址3
enable_insert=false
insert_url=如果需要在上面几个订阅地址外额外添加节点,可以将enable_insert设置为true并把配置地址放在这里,同样以“|”分隔
从 url 获取规则片段,并分成几个策略组
这里需要注意的是:
因为clash匹配规则是自上而下匹配,当匹配上一条规则后,后面的规则就不再进行匹配了,所以需要将一些匹配范围小的放在上面,匹配范围大的放在下面
曾经犯的错误:仅有部分节点可以使用22端口(平时是专门用一个节点代理ssh流量的),而匹配22端口的“SSHRules.list”放在了“已墙域名”(已墙域名里面有 Github 的域名)的后面,导致了无法通过ssh连接上 Github 。
[rulesets]
ruleset=DIRECT,rules/DirectDomain.list
;DirectDomain.list 手动添加的直连域名
ruleset=Proxy,rules/ProxyDomain.list
;ProxyDomain.list 手动添加的代理域名
ruleset=拦截,https://github.com/ACL4SSR/ACL4SSR/raw/master/Clash/BanAD.list,86400
ruleset=拦截,https://github.com/ACL4SSR/ACL4SSR/raw/master/Clash/BanProgramAD.list,86400
;广告域名
ruleset=DIRECT,https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/ChinaDomain.list,86400
;直连域名
ruleset=DIRECT,https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/LocalAreaNetwork.list,86400
;局域网IP段
ruleset=DIRECT,https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/rule/Clash/ChinaIPs/ChinaIPs.list,86400
ruleset=DIRECT,https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/ChinaIp.list,86400
ruleset=DIRECT,[]GEOIP,CN
;中国IP段
ruleset=SSH,rules/SSHRules.list
;针对22端口的分流
ruleset=Bilibili,https://github.com/ACL4SSR/ACL4SSR/raw/master/Clash/Ruleset/Bilibili.list,86400
;Bilibili域名
ruleset=Netflix,https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/Netflix.list,86400
;Netflix域名 IP段
ruleset=OpenAI,https://github.com/blackmatrix7/ios_rule_script/raw/master/rule/Clash/OpenAI/OpenAI.list,86400
;openai域名
ruleset=微软服务,https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/Microsoft.list,86400
;微软服务
ruleset=PT Trackers,https://github.com/ACL4SSR/ACL4SSR/raw/master/Clash/Ruleset/PrivateTracker.list,86400
;PT Trackers
ruleset=Game,https://github.com/blackmatrix7/ios_rule_script/raw/master/rule/Clash/Steam/Steam.list,86400
;steam域名
ruleset=Game,https://github.com/blackmatrix7/ios_rule_script/raw/master/rule/Clash/Epic/Epic.list,86400
;epic域名
ruleset=Game,https://github.com/blackmatrix7/ios_rule_script/raw/master/rule/Clash/Xbox/Xbox.list,86400
;Xbox域名
ruleset=Game,https://github.com/blackmatrix7/ios_rule_script/raw/master/rule/Clash/EA/EA.list,86400
;EA域名
ruleset=Proxy,https://github.com/ACL4SSR/ACL4SSR/raw/master/Clash/ProxyGFWlist.list,86400
;已墙域名
ruleset=Proxy,[]FINAL
为策略组添加节点
[proxy_groups]
custom_proxy_group=Proxy`select`.*
custom_proxy_group=SSH`select`[]DIRECT`[]Proxy`.*
custom_proxy_group=Game`select`[]DIRECT`[]Proxy`.*
custom_proxy_group=微软服务`select`.*
custom_proxy_group=PT Trackers`select`[]DIRECT`[]Proxy`.*
custom_proxy_group=Bilibili`select`[]DIRECT`[]Proxy`.*
custom_proxy_group=OpenAI`select`[]DIRECT`[]Proxy`.*
custom_proxy_group=Netflix`select`[]Proxy`.*
custom_proxy_group=拦截`select`[]REJECT`[]DIRECT`[]Proxy
/base/all_base.tpl
{% if request.target == "clash" or request.target == "clashr" %}
dns:
enable: true
ipv6: false
listen: 0.0.0.0:53
enhanced-mode: fake-ip
fake-ip-range: 198.18.0.1/16
fake-ip-filter:
- '*.lan'
- 'localhost.ptlogin2.qq.com'
- 'dns.msftncsi.com'
- 'www.msftncsi.com'
- 'www.msftconnecttest.com'
nameserver:
- https://223.5.5.5/dns-query
fallback:
- https://223.5.5.5/dns-query
fallback-filter:
geoip: true
ipcidr:
- 240.0.0.0/4
最后将其部署在了服务器上,并用 Nginx 配置了反向代理和 SSL 加密,得益于 Clash 的在多个平台上都有其客户端,将每个客户端的订阅地址修改为 subconverter 提供的配置文件地址,就可以实现了全平台的代理统一
使用 docker 部署,避免subconverter 的漏洞
可用于 subconverter 的规则片段
- github.com/Loyalsoldier/clash-rules
- github.com/ACL4SSR/ACL4SSR
- github.com/blackmatrix7/ios_rule_script
- github.com/DivineEngine/Profiles
Linux 平台的调教过程
系统为 Debian 12,X86架构
因为我的主力机是 Windows,Linux主要是作为服务器使用,故而并没有安装图形化桌面,使用的是命令行,所以这部分教程也会是命令行的版本
首先,下载Clash Meta 核心,并解压
参考命令,文件名要根据实际替换
wget https://github.com/MetaCubeX/mihomo/releases/download/v1.18.3/mihomo-linux-amd64-v1.18.3.gz && gunzip mihomo-linux-amd64-v1.18.3.gz
chmod +x mihomo-linux-amd64-v1.18.3
写这一部分的时间是2024-04-10,已经经历过了Clash生态的全面封杀,原本的Clash内核已经不再更新了,所以这里选择了Clash Meta内核
接下来,下载Country.mmdb ,并放到mihomo-linux-amd64的同一目录下
然后下载配置文件
wget https://域名或IP:端口/sub?target=clash&token=API密钥
最后,就可以启动了
./mihomo-linux-amd64-v1.18.3 -d ./
到了这一步就可以正常使用了,默认的端口应该是7890(央视,7890.jpg)
可以到其他程序中指定,也可以使用命令设置环境变量
export https_proxy="http://127.0.0.1:7890"
export http_proxy="http://127.0.0.1:7890"
将Clash Meta设置为服务,并开机自启
参考下面的配置文件在 /etc/systemd/system 创建文件
clash_meta.service
[Unit]
Description=Clash_Meta
After=network.target
[Service]
Type=simple
Restart=always
ExecStart=/home/debian/clash_meta/mihomo-linux-amd64-v1.18.3 -d /home/debian/clash_meta
User=debian
[Install]
WantedBy=multi-user.target
重载并启动
sudo systemctl daemon-reload
sudo systemctl start clash_meta
sudo systemctl enable clash_meta # 开机自启
自动更新配置文件
脚本
随便找个地方,放更新脚本(这里是和mihomo-linux-amd64-v1.18.3放在了一起
update_config.sh
#!/bin/bash
cd /home/debian/clash_meta
mv config.yaml config.yaml.back # 备份原有的配置文件
wget "https://域名或IP:端口/sub?target=clash&token=API密钥" -O config.yaml # 下载新的配置文件
sudo systemctl restart clash_meta.service # 重启 Clash Meta
设置执行权限
chmod +x update_config.sh
添加定时任务
使用命令编辑定时任务
crontab -e
在最后面新加一行
0 3 * * * "/home/debian/clash_meta/update_config.sh" > /dev/null
其中前面的时间格式为 m h dom mon dow 即 分,时,日,月,周(可以参考Wiki)
像上面的写法,就是每天的凌晨三点会执行一次(最好是选在没有人用的凌晨执行,毕竟需要重启Clash)
参考文章
- 利用 subconverter 实现订阅合并与转换
- github.com/tindy2013/subconverter
- subconverter 订阅转换及搭配 clash 使用教程
- Clash for Windows
最后修改于 2022-12-22