Mihomo 内核适配 Clash for Windows / Clash Verge
原版 Clash 内核的 Http 混淆默认 UA 为 Go-http-client/1.1 ,如果开启了 Http 混淆(shadowsocks + v2ray-plugin)会被精准打击,切换修改 UA 的内核(Mihomo)可以解决这个问题。
原版 Clash 内核已经不维护了,建议切换到新分支 Mihomo 内核。
目前 Windows平台 clashN 和 Mac平台 ClashX.Meta 是原生支持 Mihomo 内核的 Clash GUI,可以直接使用。
Mihomo 内核原版编译的二进制执行文件无法直接替换 Clash for Windows / Clash Verge 的 Clash 内核。查看源码后,发现 Mihomo 内核加载配置目录与原版 Clash 内核不同,修改一下即可替换。
修改源码
在 main.go 中修改 init() 函数:
func init() {
// 获取用户主目录
userHomeDir, err := os.UserHomeDir()
if err != nil {
fmt.Println("Error getting user home directory:", err)
os.Exit(1)
}
// 设置默认的配置目录值
defaultConfigDir := filepath.Join(userHomeDir, ".config", "clash")
flag.StringVar(&homeDir, "d", defaultConfigDir, "set configuration directory")
flag.StringVar(&configFile, "f", os.Getenv("CLASH_CONFIG_FILE"), "specify configuration file")
flag.StringVar(&externalUI, "ext-ui", os.Getenv("CLASH_OVERRIDE_EXTERNAL_UI_DIR"), "override external ui directory")
flag.StringVar(&externalController, "ext-ctl", os.Getenv("CLASH_OVERRIDE_EXTERNAL_CONTROLLER"), "override external controller address")
flag.StringVar(&secret, "secret", os.Getenv("CLASH_OVERRIDE_SECRET"), "override secret for RESTful API")
flag.BoolVar(&geodataMode, "m", false, "set geodata mode")
flag.BoolVar(&version, "v", false, "show current version of mihomo")
flag.BoolVar(&testConfig, "t", false, "test configuration and exit")
flag.Parse()
}
编译源码
- 需要安装 golang make
执行编译命令
make
替换内核
Windows 平台
将编译的内核重命名为 clash-win64.exe
关闭 Clash for Windows,解压下载文件后替换原内核
内核目录(两个目录其中一个,取决于安装时是否选择为全部用户安装,第二个记得把用户名替换为自己的):
C:\Program Files\Clash for Windows\resources\static\files\win\x64
C:\Users\用户名\AppData\Local\Programs\Clash for Windows\resources\static\files\win\x64
可以提前复制一下原版内核副本做备份,替换 clash-win64.exe (.exe可能是隐藏的) 。
- 重新打开 Clash for Windows 使用,注意如果需要使用 TUN Mode,需要右键以管理员身份运行
Clash Verge
Clash Verge 也可以一样操作
C:\Users\用户名\AppData\Local\Clash Verge
将下载好的文件解压后,重命名为 clash.exe (.exe可能是隐藏的),替换即可
Mac 平台
PS:如果首次安装 Clash for Windows 提示已损坏,可以在终端运行 sudo xattr -r -d com.apple.quarantine /Applications/Clash\ for\ Windows.app
将编译的内核重命名为 clash-darwin
关闭 Clash for Windows,解压下载文件后替换原内核,在终端执行
# 备份原版内核
mv /Applications/Clash\ for\ Windows.app/Contents/Resources/static/files/darwin/arm64/clash-darwin /Applications/Clash\ for\ Windows.app/Contents/Resources/static/files/darwin/arm64/clash-darwin.bak
# 替换内核
mv clash-darwin /Applications/Clash\ for\ Windows.app/Contents/Resources/static/files/darwin/arm64/clash-darwin
# 授予新内核权限
sudo chown root:admin /Applications/Clash\ for\ Windows.app/Contents/Resources/static/files/darwin/arm64/clash-darwin
sudo chmod +sx /Applications/Clash\ for\ Windows.app/Contents/Resources/static/files/darwin/arm64/clash-darwin
- 重新打开 Clash for Windows 使用即可