WARP + Mihomo

WARP 和 Mihomo 一起使用教程。

这不是泛用教程,而是按当前本地 mihomo.yaml 写的实际流程。核心做法是让 warp-cli 只负责本地 SOCKS5 上游,再由 Mihomo 做系统接管和分流。

Mihomo Mixed Port 7890
DNS Listen 1053
WARP SOCKS5 40000

方案原理

当前配置不是让 WARP 直接做全局隧道,而是让 warp-cli 只开放本地代理端口,再由 Mihomo 统一接管。这样链路更稳,也更容易排查。

为什么这样配

WARP 只做上游代理,Mihomo 负责 TUN、DNS 和规则分流。职责边界清楚,不容易出现重复接管默认路由的问题。

会怎么分流

私有地址、国内域名、国内 IP 直连;其余流量交给 PROXY,而 PROXY 当前首选就是 WARP

不要把 WARP 再开成全局隧道。 这套配置依赖的是 warp-cli mode proxy。 如果 WARP 和 Mihomo 同时接管全局路由,最容易出现的就是回环、重复接管或异常掉线。

一键安装脚本

我额外写了一份跨平台 Bash 安装脚本,入口统一,macOS 和 Windows 都用同一个命令思路。WARP 走系统原生安装器,Mihomo 则下载 MetaCubeX 官方 stable release,并安装到你指定的一个路径里。

macOS

要求本机已有 brew

curl -fsSLO https://clash-static-20260324.pages.dev/install_mihomo_warp.sh
bash install_mihomo_warp.sh --path "$HOME/.local/mihomo-warp/bin"
export PATH="$HOME/.local/mihomo-warp/bin:$PATH"
脚本会用 Homebrew cask 安装 Cloudflare WARP。

Windows Git Bash

要求本机已有 Git Bashwinget

curl -fsSLO https://clash-static-20260324.pages.dev/install_mihomo_warp.sh
bash install_mihomo_warp.sh --path "$HOME/.local/mihomo-warp/bin"
export PATH="$HOME/.local/mihomo-warp/bin:$PATH"
脚本会调用 winget.exe 安装 Cloudflare WARP。
原始脚本文件也一起发布了。 线上地址是 ./install_mihomo_warp.sh, 页面下方流程和这个脚本是配套的。
#!/usr/bin/env bash

set -euo pipefail

Usage:
  bash scripts/install_mihomo_warp.sh [--path INSTALL_DIR] [--skip-warp] [--skip-mihomo]

Notes:
  - macOS uses Homebrew cask to install Cloudflare WARP.
  - Windows expects Git Bash and uses winget.exe to install Cloudflare WARP.
  - Mihomo is downloaded from the latest stable MetaCubeX GitHub release.

启动顺序

顺序不能乱。先把 WARP 的本地代理准备好,再让 Mihomo 引用它。否则 Mihomo 启来以后,上游节点还没准备好,后续只会让排查更脏。

01

确认本机命令可用

先确认 `warp-cli` 和 `mihomo` 都在 PATH 里。

warp-cli --version
mihomo -v
02

把 WARP 切到代理模式

这里的关键不是“连接 WARP”,而是“以代理模式连接 WARP”,并固定到 40000 端口,保持和当前配置一致。

warp-cli mode proxy
warp-cli proxy port 40000
warp-cli connect
warp-cli status
03

校验 Mihomo 配置

不要跳过这一步。先测语法,确认当前 mihomo.yaml 没问题,再启动。

cd /Users/kangyuantong/Desktop/workspace/clash
mihomo -t -f mihomo.yaml
04

启动 Mihomo

可以前台跑,也可以挂后台。

mihomo -f mihomo.yaml

# or
nohup mihomo -f mihomo.yaml > mihomo.log 2>&1 &

如何验证

验证目标只有三个:WARP 端口在监听,Mihomo 端口在监听,流量确实能经由 127.0.0.1:7890 走出去。

看 WARP 代理端口

lsof -nP -iTCP:40000 -sTCP:LISTEN

看 Mihomo 监听端口

lsof -nP -iTCP:7890 -sTCP:LISTEN

看后台日志

tail -f mihomo.log

做一次代理请求

curl --proxy socks5h://127.0.0.1:7890 \
  https://www.cloudflare.com/cdn-cgi/trace
规则文件首次为空是正常现象。 当前配置使用的是 rule-providers, 所以 ruleset/ 会在 Mihomo 首次成功启动后自动下载真实规则。

常见问题

  1. WARP 已连接,但 Mihomo 还是不通。 先看 warp-cli status 是不是代理模式,再看 127.0.0.1:40000 是否真的在监听。
  2. 40000 端口被占用。 把 WARP 代理端口改到别的值,然后同步修改 mihomo.yaml 里的上游节点端口。
  3. Mihomo 启动正常,但没有走 WARP。 核心排查顺序是:WARP 状态、端口监听、Mihomo 日志、客户端是否连到 7890
  4. 想停掉整套链路。 先停 Mihomo,再执行 warp-cli disconnect。不要反过来做。

最短可执行版本

如果你只想要一套能直接敲的命令,下面这一块就够了。

cd /Users/kangyuantong/Desktop/workspace/clash
warp-cli mode proxy
warp-cli proxy port 40000
warp-cli connect
mihomo -t -f mihomo.yaml
mihomo -f mihomo.yaml
保持 `40000` 和当前 `mihomo.yaml` 一致。