Clash For Magisk使用教程
𝐄𝟓 𝟖𝟔 𝟗𝟓注意: 本文所提到的Clash For Magisk意指由kalasutra开发的使用shell启动clash内核并创建iptables tproxy规则在Android上实现透明代理的Magisk模块.
如果你并没有听说过Magisk, 我更建议你使用Clash For Android.
一、安装模块
建议: 如果你正在使用或者之前使用过Clash For Magisk模块旧版本, 建议完全卸载旧模块并删除干净旧模块数据, 比如删除默认配置目录/data/clash
以期避免某些问题.
下载模块(建议在Telegram频道下载, 你也可以去Github自己打包)通过Magisk Manager从本地安装, 然后重启手机, 当然如果你想一次配置完模块并使用, 建议刷完模块后不要立即重启, 配置完基本配置一并重启设备.
注意: Magisk在线模块仓库里的Clash for Magisk模块(它已经断更好久了 〒▽〒 )并不是本文所说的Clash For Magisk模块(它并没有上架仓库)哦!
二、基本配置
使用支持Root的文件管理器打开模块默认配置目录/data/clash
, 把符合clash配置规范的配置文件重命名为config.yaml
放到该目录, 然后下载GeoIP Country mmdb文件, 解压提取, 重命名为Country.mmdb
(或者使用这个地址直接下载)到该目录.
注意: 模块工作时, 会在Clash配置目录(默认为模块默认配置目录)的run
文件夹下生成适用于Clash For Magisk模块的配置文件且
从第一行到proxies:的前一行
使用的是template
文件的内容.
即如需更改实际运行时所使用的Clash配置文件的proxies:之前的内容(Clash本身的特性大多在此处定义)可通过更改template
文件实现.
现在, 准备工作已经完成, 你可以尝试重启手机, 浏览器打开 http://clash.razord.top 或者 http://yacd.haishan.me 享受模块带来的快乐啦>_<.
如果你担心在线版本的控制面板存在隐私问题, Clash For Magisk模块本身已配置本地控制面板, 浏览器打开 http://127.0.0.1:9090/ui 即可使用.
注意: 除刷完模块后需要一次重启外, 此后启停Clash For Magisk并不需要重启手机, 通过Magisk Manager启用与禁用Clash For Magisk模块即可实时控制Clash服务启停, 或者通过Dashboard软件控制启停.
重启手机后, 上述过程亦可以通过Dashboard软件来完成: 点击左上角菜单、订阅下载、更新GeoIp、点击右上角菜单、重启(启动)Clash. 建议到频道下载最新安装包.
注: 命令行启动停止Clash For Magisk服务的命令(需要root权限):
/data/adb/modules/Clash_For_Magisk/scripts/clash.service -k && /data/adb/modules/Clash_For_Magisk/scripts/clash.tproxy -k
#停止
/data/adb/modules/Clash_For_Magisk/scripts/clash.service -s && /data/adb/modules/Clash_For_Magisk/scripts/clash.tproxy -s
#启动
不过我更建议用以下命令:
touch /data/adb/modules/Clash_For_Magisk/disable
#停止
rm -f /data/adb/modules/Clash_For_Magisk/disable
#启动
类Tasker软件可能会用到.
三、高级配置
注意: 下文所涉及到的更改文件的操作, 均要重启模块生效. 当然, 更改clash的配置文件可以考虑使用RESTful API来重载.
1.更改Clash配置目录:
打开模块默认配置目录下的clash.config
(模块的特性大多在此定义)文件, 更改Clash_data_dir
的值为你喜欢的目录. 因模块本身设计, 更改后模块默认配置目录并不会删除且模块配置文件clash.config
亦不会移动. 所以强烈建议如非必要不要改动.
2.更改模块工作模式:
模块默认接管所有应用流量. 你如果并不想某些应用的流量通过Clash服务, 则可以打开模块默认配置目录, 将clash.config
文件里的mode
值改为blacklist
(黑名单且为默认值)并在packages.list
文件里写入相应应用的包名, 一行一个. 如果想仅部分应用的流量通过Clash服务处理, 则更改mode
值为whitelist
(白名单)且packages.list
文件里一行一个写入包名. 在此之外, 你还可以仅启动Clash内核, 更改mode
值为core
即可.
3.自动更新订阅:
请打开模块默认配置目录下的clash.config
文件, 将auto_subscription
的值改为true
(默认值)并在subscription_url
后填写你的clash订阅地址. 模块默认每天凌晨两点更新订阅, 你可以通过查看Clash配置目录下的run
文件夹里的run.logs
日志文件查看订阅是否更新成功(或查看相关文件时间戳), 如需更改自动订阅的时间, 可更改update_interval
的值, 请自行学习Crontab相关内容.
注: 你也可以手动更新订阅, 通过终端运行
/data/adb/modules/Clash_For_Magisk/scripts/clash.tool -s
命令即可(需要root权限).
4.更新Clash内核:
截至本文发布之前, 模块自带内核版本为开源版本的v1.6.5
, 如需更新, 可自行下载适用于你系统版本(一般为armv8)的最新内核文件解压提取重命名为clash替换 /data/adb/modules/Clash_For_Magisk/system/bin
目录下的clash文件即可, Linux版本内核可能存在未知问题, 建议到此频道下载最新Android内核. 亦或者更改clash.config
文件中Clash_bin_path
的值为新内核位置.
如需使用Rule Providers可自行替换Premium内核或开源的experimental-clash内核.
注: 更新内核需要重启手机生效, 你可以通过终端运行clash -v
命令(需要root权限)查看内核版本. 模块并没有tun相关代码(如有需求可以尝试使用已经停更的Clash Premium For Magisk模块)所以并不支持所有Premium内核特性!!
5.更新本地控制面板:
安装模块时会自动配置razord控制面板, 如需更新, 可自行去该项目gh-pages分支下载替换掉Clash配置目录下相应文件. 文件直达链接.
如果你更喜欢haishanh的yacd控制面板, 你也可以自行下载该项目gh-pages分支文件配置. 文件直达链接.
一种配置方法: 下载面板文件解压到Clash配置目录某目录, 更改template文件里external-ui: 后的文件夹名称为该目录名重启Clash服务即可.
6.配合类Adguard应用使用:
更改模块工作模式为core, 类Adguard应用设置代理(socks5或http均可).
本文无义务讲解clash的配置方法, clash本身的特性强烈建议查看clash官方wiki configuration !!
注意: 若更改enhanced-mode
为fake-ip
(可配置fake-ip-filter以期解决WiFi验证问题), 请将clash.config
文件reserved_ip
字符串中的198.18.0.0/15
删除!!!!!
警告: fake-ip 会使模块工作模式中的黑白名单失效!
四、可能出现的问题
强烈建议: 如果出现无法启动等问题, 大概率是Clash配置文件的问题, 你可以终端(MT管理器或者Termux均可)运行以下命令测试配置文件(需要root权限)自查问题:
clash -d /data/clash/ -t -f /data/clash/config.yaml
根据提示解决即可. 看不懂请借助翻译软件.
注: 请注意你所需的clash内核版本. 如果出现提示不支持RULE-SET规则请更换Premium内核或开源的experimental-clash内核. 如果提示Get某网页链接资源失败与53端口提示, 这是正常现象, 原因参考此处和这里, 解决方法为在/data/adb/modules/Clash_For_Magisk/system/etc/文件夹下添加名为resolv.conf的文件, 文件内容类似下图即可.
也可以尝试提前下载该网页资源文件参看官方wiki配置.
1.墙外网站比如Google、YouTube、Fackbook、GitHub等网站无法连接.
建议使用fake-ip
模式,
尝试删除template
文件里的fallback-filter: 及其后字段后重新启动模块(注意回车符).
一并建议禁用本机(模块默认禁用, 可在clash.config文件设置)或者路由器的IPv6.
2.clash连接日志里显示的所有连接源为ip地址, 规则无法生效且有概率无法上网.
请关闭系统和浏览器的安全DNS(有的系统也称之为私人DNS)和相关DNS模块或者应用后重启模块再次尝试.
3.模块无法启动, 查看run.logs日志文件显示为端口未检测到、端口未启动.
可能端口被其他程序占用, 请尝试更改端口.
检查是否缺失Geoip数据库文件. 如果出现设备重启后数据库概率丢失, 可以考虑使用chattr命令保护, 参考命令为/data/adb/magisk/busybox chattr +i /data/clash/Country.mmdb
.
请不要删除template文件中的tproxy-port
端口, 这是模块赖以工作的必须条件!!
建议重新下载template文件替换原文件后再次启动尝试.
若确定一定不存在端口占用问题, 可以删除clash.service脚本里的端口检查判断语句:
if ! (${scripts_dir}/clash.tool -p) ; then kill -15 `cat ${Clash_pid_file}` rm -rf ${Clash_pid_file} echo "err: 端口未检测到,已停止clash内核以及后续逻辑." >> ${CFM_logs_file} exit 1 fi
后重启模块再次尝试, 若仍无法启动, 可以考虑手动启动clash内核查看端口是否正常启动, clash内核启动命令为(需要root权限):
/system/bin/clash -d /data/clash/ -f /data/clash/config.yaml
若发现无法打印出(请提前更改config.yaml配置文件中日志级别为info或更高否则可能无打印日志信息)端口信息(具体表现是可能卡在某个策略组初始化加载处, 此bug已在多设备复现, 目前不清楚是内核还是系统原因 date: 2021-07-26), 则可以考虑更换内核(可以仅更改内核路径以减少调试时间)尝试再次启动, 如若仍无法加载端口, 可用Clash RESTful API临时解决, 具体方法:
复制template文件至run文件夹下并重命名为config.yaml, 删除clash.service脚本中关于合并template与用户配置文件的语句:
sed -i '/^[ ]*$/d' ${template_file} cp -f ${template_file} ${temporary_config_file}.swp while [ $(du ${temporary_config_file}.swp | awk '{print $1}') = $(du ${template_file} | awk '{print $1}') ] ; do sleep 1 cp -f ${template_file} ${temporary_config_file}.swp && echo "\n" >> ${temporary_config_file}.swp sed -n -E '/^proxies:$/,$p' ${Clash_config_file} >> ${temporary_config_file}.swp sed -i '/^[ ]*$/d' ${temporary_config_file}.swp done mv -f ${temporary_config_file}.swp ${temporary_config_file} \ && echo "" > ${CFM_logs_file} || echo "err:配置文件合并失败" #旧版本合并语句为 cat ${template_file} > ${temporary_config_file} && echo '\n' >> ${temporary_config_file} sed -n -E '/^proxies:$/,$p' ${Clash_config_file} >> ${temporary_config_file}
重启模块, 然后将手动合并后的配置文件(即用户配置文件中
从第一行到proxies:的前一行
使用的是template
文件的内容)复制至run文件夹下替换已经存在的config.yaml文件, 最后利用Clash RESTful API重载配置, 参考命令为(需要root权限):
curl -X PUT -H "Content-Type: application/json" -d '{"path": "/data/clash/run/config.yaml"}' http://127.0.0.1:9090/configs
3.设备开启热点共享连接设备无网络.
请保持allow-lan: true
且保证dns监听地址由127.0.0.1
改为0.0.0.0
.可在控制面板临时打开亦可在template文件中更改. 可能还需要打开至少socks端口、http端口、mixed端口之一.
4.其他问题.
可以去Telegram频道和Telegram群聊了解, 欢迎加入讨论.
请确定本教程无法解决你的问题后准确描述你的问题且提供相关日志. 强烈建议提前了解提问的智慧.
五、自主玩法
1.查看clash日志:
正常来说在控制面板即可查看部分日志且可能不受log-level值的影响, 但毕竟不方便, 如果想详细查看clash运行日志, 可以借助curl命令, 下面是一个示例:
curl -v http://127.0.0.1:9090/logs?level=debug
亦或者更改clash.service脚本中关于clash启动的部分以重定向输出运行日志到文件.
nohup ${Clash_bin_path} -d ${Clash_data_dir} -f ${temporary_config_file} > /dev/null 2>&1 & 改为 nohup ${Clash_bin_path} -d ${Clash_data_dir} -f ${temporary_config_file} > 日志文件路径 2>&1 &
2.配置本地subconverter:
可以借助termux搭建或者封装成Magisk模块, 配置本地生成模式, 修改clash.tool里关于订阅更新的函数.
#Termux搭建示例, 不使用root权限可能无法解压和启动. su -c 'wget https://github.com/tindy2013/subconverter/releases/latest/download/subconverter_aarch64.tar.gz && tar -zxvf subconverter_aarch64.tar.gz' #启动示例 su -c './subconverter/subconverter' #如果需要常驻后台, 请了解&或者nohup相关命令. #如果需要开机自启, 请了解Magisk模块开发, 开发者指南:https://topjohnwu.github.io/Magisk/guides.html.
clash.tool脚本subscription函数改动示例:
subscription() { if [ "${auto_subscription}" = "true" ] ; then ${subconverter_path}/subconverter -g > /dev/null 2>&1 if [ $? -eq 0 ] ; then cp -f ${subconverter_path}/config.yaml ${Clash_config_file} ${scripts_dir}/clash.service -k && ${scripts_dir}/clash.tproxy -k sleep 5 ${scripts_dir}/clash.service -s && ${scripts_dir}/clash.tproxy -s if [ "$?" = "0" ] ; then echo "info: 订阅更新成功,CFM已成功重启." >> ${CFM_logs_file} else echo "err: 订阅更新成功,CFM重启失败." >> ${CFM_logs_file} fi else echo "wro: 订阅更新失败,配置文件未发生变化." >> ${CFM_logs_file} fi else exit 0 fi } ##subconverter_path变量为subconverter文件夹路径, 更新订阅后可以考虑利用Clash RESTful API重载配置而不是重启clash服务.
本文最后更新时间: 2021-10-18