Mihomo
Mihomo(原名 Clash Meta)是由社区开发者基于 Clash 核心重写并大幅扩展的代理核心程序,项目地址为 github.com/MetaCubeX/mihomo。它是目前生态最成熟、使用最广泛的代理核心之一,几乎所有主流机场都提供与之兼容的 Clash 格式订阅,大量跨平台 GUI 客户端也以 Mihomo 为底层核心构建。
核心特性
- 协议支持全面:Shadowsocks、Shadowsocks 2022、VMess、VLESS(含 Reality)、Trojan、Hysteria 2、TUIC、AnyTLS、WireGuard、ShadowTLS 等主流协议均已覆盖
- 规则引擎强大:支持基于域名、IP CIDR、GEOIP、GEOSITE、进程名等多种条件的精细分流规则
- TUN 模式:通过虚拟网卡接管系统全部流量,实现真正的透明代理,无需对每个应用单独配置代理
- DNS 模块:内置完整的 DNS 处理逻辑,支持 DoH、DoT、DoQ 等加密 DNS,以及 Fake-IP 模式
- 策略组:支持 url-test(自动选速)、fallback(故障切换)、load-balance(负载均衡)、select(手动选择)等多种策略
- RESTful API:提供完整的 HTTP API,用于运行时控制和状态查询,这也是各类 GUI 面板的接入基础
- 兼容性强:配置格式与原版 Clash 保持高度兼容,同时扩展了大量新特性
与 Clash 的关系
Mihomo 的前身是 Clash.Meta,是 Clash 原版内核的社区增强分支。2023 年 Clash 原版内核作者删库停止维护后,Mihomo 成为了 Clash 生态事实上的标准实现。
原版 Clash(已停止维护)与 Mihomo 的配置格式高度兼容,绝大多数针对原版 Clash 的订阅和规则在 Mihomo 上可以直接使用,并且可以享受 Mihomo 额外支持的新协议和新特性。
安装
Linux
方法一:下载预编译二进制文件(推荐)
从 GitHub Releases 页面下载对应系统和架构的最新版本:
# 以 Linux amd64 为例,版本号请替换为实际最新版
wget https://github.com/MetaCubeX/mihomo/releases/latest/download/mihomo-linux-amd64-v1.x.x.gz
gunzip mihomo-linux-amd64-v1.x.x.gz
chmod +x mihomo-linux-amd64-v1.x.x
mv mihomo-linux-amd64-v1.x.x /usr/local/bin/mihomo
验证安装:
mihomo -v
方法二:使用包管理器(部分发行版)
# Arch Linux(通过 AUR)
yay -S mihomo
# 或者使用 paru
paru -S mihomo
macOS
方法一:Homebrew
brew install mihomo
方法二:手动下载
从 GitHub Releases 下载 mihomo-darwin-amd64 或 mihomo-darwin-arm64(Apple Silicon),解压后移动到 PATH 中:
gunzip mihomo-darwin-arm64-v1.x.x.gz
chmod +x mihomo-darwin-arm64-v1.x.x
mv mihomo-darwin-arm64-v1.x.x /usr/local/bin/mihomo
Windows
从 GitHub Releases 下载 mihomo-windows-amd64-v1.x.x.zip,解压后得到 mihomo-windows-amd64.exe。
可以将其重命名为 mihomo.exe 并添加到系统 PATH,或者直接配合 GUI 工具(如 mihomo Party、Clash Verge Rev)使用——这类 GUI 工具会自动管理 Mihomo 的安装和版本更新,无需手动处理。
推荐使用 GUI 工具
对于 Windows 和 macOS 用户,推荐直接使用基于 Mihomo 的 GUI 客户端,而非手动管理命令行程序。GUI 工具提供了更方便的订阅管理、节点切换和规则配置界面,并会自动处理 Mihomo 核心的版本更新。
主流 GUI 客户端
以下 GUI 工具均以 Mihomo 为底层核心,适合不想手写配置文件的用户:
| 客户端 | 平台 | 特点 | 项目地址 |
|---|---|---|---|
| Clash Verge Rev | Windows / macOS / Linux | Tauri 构建,界面现代,功能丰富 | GitHub |
| mihomo Party | Windows / macOS / Linux | Electron 构建,配置简洁,支持覆写脚本 | GitHub |
| FlClash | Windows / macOS / Linux / Android | Flutter 构建,跨平台体验一致,免费开源 | GitHub |
| Stash | iOS / macOS | 界面精美,原生应用体验,支持 Clash Meta 配置 | App Store |
| OpenClash | OpenWrt | 路由器平台的 Mihomo 实现,功能丰富 | GitHub |
配置文件结构
Mihomo 使用 YAML 格式的配置文件,默认路径为 ~/.config/mihomo/config.yaml(Linux / macOS)或 %APPDATA%\mihomo\config.yaml(Windows)。
以下是一个完整但简化的配置文件示例,展示了主要配置块的结构和作用:
# 全局设置
mixed-port: 7890 # 同时监听 HTTP 和 SOCKS5 的混合端口
allow-lan: false # 是否允许局域网其他设备使用代理
mode: rule # 代理模式:rule(规则)/ global(全局)/ direct(直连)
log-level: info # 日志级别:debug / info / warning / error / silent
ipv6: false # 是否启用 IPv6
# 外部控制(提供给 GUI 面板使用的 API)
external-controller: 127.0.0.1:9090
secret: "" # API 访问密钥,建议设置
# DNS 配置
dns:
enable: true
ipv6: false
listen: 0.0.0.0:1053
enhanced-mode: fake-ip # fake-ip 或 redir-host
fake-ip-range: 198.18.0.1/16
fake-ip-filter:
- "*.lan"
- localhost
nameserver:
- https://doh.pub/dns-query # 国内加密 DNS
- https://dns.alidns.com/dns-query
fallback:
- https://1.1.1.1/dns-query # 境外加密 DNS
- https://8.8.8.8/dns-query
fallback-filter:
geoip: true
geoip-code: CN
ipcidr:
- 240.0.0.0/4
# 代理节点(通常由订阅自动填充,手动配置示例)
proxies:
- name: "my-vless-node"
type: vless
server: your.server.ip
port: 443
uuid: your-uuid-here
network: tcp
tls: true
reality-opts:
public-key: your-public-key
short-id: a1b2c3d4
client-fingerprint: chrome
flow: xtls-rprx-vision
- name: "my-hy2-node"
type: hysteria2
server: your.domain.com
port: 443
password: your-password
sni: your.domain.com
up: "100 Mbps"
down: "300 Mbps"
# 策略组
proxy-groups:
- name: "Proxy"
type: select
proxies:
- "Auto"
- "my-vless-node"
- "my-hy2-node"
- DIRECT
- name: "Auto"
type: url-test
proxies:
- "my-vless-node"
- "my-hy2-node"
url: "https://www.gstatic.com/generate_204"
interval: 300
tolerance: 50
# 分流规则
rules:
- DOMAIN-SUFFIX,google.com,Proxy
- DOMAIN-SUFFIX,github.com,Proxy
- DOMAIN-KEYWORD,youtube,Proxy
- GEOIP,CN,DIRECT
- GEOSITE,cn,DIRECT
- MATCH,Proxy
使用机场订阅
机场通常会提供 Clash 或 Clash Meta 格式的订阅链接。在 GUI 工具中,只需将订阅链接填入"订阅管理"即可自动导入节点和配置。
在命令行中使用订阅
如果直接使用命令行版 Mihomo,可以先下载订阅配置文件,再启动:
# 下载订阅配置
curl -L "https://your-airport.com/api/v1/client/subscribe?token=xxx" \
-o ~/.config/mihomo/config.yaml
# 启动 Mihomo
mihomo -f ~/.config/mihomo/config.yaml
关于订阅链接安全
订阅链接本质上是你的服务凭证,不要将其分享给他人或提交到公开的代码仓库。定期在机场面板中重置订阅令牌是一个好习惯。
订阅格式说明
机场可能同时提供多种格式的订阅链接:
| 格式 | 用途 |
|---|---|
| Clash / Clash Meta | 供 Mihomo 系客户端使用,包含完整的规则和策略组配置 |
| sing-box | 供 sing-box 内核客户端使用 |
| V2Ray / Xray | 供 v2rayN 等工具使用 |
| Shadowrocket | 供 iOS Shadowrocket 使用 |
| 通用订阅(base64) | 包含节点 URI 列表,需要手动导入或通过转换工具处理 |
如果机场没有提供 Clash Meta 格式,可以使用 Sub-Converter 等工具将其他格式转换为 Clash Meta 格式。
TUN 模式(透明代理)
TUN 模式通过创建一个虚拟网卡,在系统层面接管所有网络流量,无需对每个应用程序单独配置代理。这对于那些不遵守系统代理设置的应用(如某些命令行工具、游戏客户端)尤为重要。
在配置文件中启用 TUN 模式:
tun:
enable: true
stack: system # system / gvisor / mixed
dns-hijack:
- any:53 # 劫持所有 DNS 请求
auto-route: true # 自动设置路由规则
auto-detect-interface: true # 自动检测出口网卡
关于 TUN 模式的权限要求
TUN 模式需要创建虚拟网卡,在 Linux 上需要 root 权限或 CAP_NET_ADMIN 能力;在 macOS 上需要管理员权限;在 Windows 上需要管理员权限,并且需要安装 WinTun 驱动(大多数 GUI 工具会自动处理)。
stack 参数说明
| 值 | 说明 |
|---|---|
system | 使用系统网络栈处理 TUN 流量,兼容性最好,推荐首选 |
gvisor | 使用 gVisor 用户态网络栈,隔离性更好,但性能略低 |
mixed | TCP 使用系统网络栈,UDP 使用 gVisor,兼顾性能和兼容性 |
DNS 配置详解
DNS 配置是 Mihomo 中较为复杂但非常重要的部分,直接影响分流的准确性和 DNS 泄露问题。
Fake-IP 模式
Fake-IP 是 Mihomo 推荐的 DNS 工作模式。其原理是:
应用请求解析 google.com
|
v
Mihomo DNS 模块
| 不立即发出真实 DNS 查询
| 返回一个伪造的 IP(来自 fake-ip-range,如 198.18.0.1)
v
应用使用假 IP 发起连接请求
|
v
Mihomo 拦截该连接请求
| 识别出目标是 google.com(从假 IP 映射回来)
| 按规则判断是代理还是直连
v
如果走代理:在代理节点端解析真实 DNS 并连接
如果直连:此时才在本地发出真实 DNS 查询
Fake-IP 的优势:
- 避免了 DNS 泄露(代理流量的 DNS 在远端解析)
- 减少 DNS 查询延迟(无需等待实际 DNS 响应再建立连接)
- 与分流规则配合效果更好(域名规则在 DNS 解析前就可以生效)
nameserver 和 fallback 的分工
dns:
nameserver:
- https://doh.pub/dns-query # 国内 DoH,解析国内域名
fallback:
- https://1.1.1.1/dns-query # 境外 DoH,解析境外域名
fallback-filter:
geoip: true
geoip-code: CN # 如果 nameserver 返回的 IP 不是中国 IP,则使用 fallback 结果
工作逻辑:
- 优先使用
nameserver进行查询 - 如果结果是中国大陆 IP,认为解析正确,使用该结果
- 如果结果不是中国大陆 IP(例如被污染返回了错误 IP),则用
fallback的结果替代
这样既能保证国内域名走国内 DNS 快速解析,又能确保国外域名得到正确的 DNS 结果。
策略组配置
url-test(自动测速选择)
定期测量每个节点的延迟,自动选择延迟最低的节点:
proxy-groups:
- name: "Auto-Best"
type: url-test
proxies:
- "node-hk-1"
- "node-jp-1"
- "node-us-1"
url: "https://www.gstatic.com/generate_204"
interval: 300 # 每 300 秒测速一次
tolerance: 50 # 延迟差异在 50ms 以内不切换,避免频繁抖动
fallback(故障切换)
使用延迟最低的可用节点,当当前节点不可用时自动切换:
proxy-groups:
- name: "Fallback"
type: fallback
proxies:
- "node-primary"
- "node-backup-1"
- "node-backup-2"
url: "https://www.gstatic.com/generate_204"
interval: 180
load-balance(负载均衡)
将连接分散到多个节点上,提高并发性能:
proxy-groups:
- name: "Load-Balance"
type: load-balance
proxies:
- "node-us-1"
- "node-us-2"
- "node-us-3"
url: "https://www.gstatic.com/generate_204"
interval: 300
strategy: round-robin # round-robin / consistent-hashing / sticky-sessions
嵌套策略组
策略组可以相互引用,构建多层分流逻辑:
proxy-groups:
- name: "Proxy"
type: select
proxies:
- "Auto-HK" # 引用其他策略组
- "Auto-JP"
- "Auto-US"
- DIRECT
- name: "Auto-HK"
type: url-test
proxies:
- "node-hk-1"
- "node-hk-2"
url: "https://www.gstatic.com/generate_204"
interval: 300
- name: "Streaming"
type: select
proxies:
- "node-us-netflix"
- "node-jp-netflix"
分流规则
规则类型
| 规则类型 | 示例 | 说明 |
|---|---|---|
DOMAIN | DOMAIN,google.com,Proxy | 精确匹配完整域名 |
DOMAIN-SUFFIX | DOMAIN-SUFFIX,google.com,Proxy | 匹配域名及其所有子域名 |
DOMAIN-KEYWORD | DOMAIN-KEYWORD,youtube,Proxy | 匹配包含关键词的域名 |
DOMAIN-REGEX | DOMAIN-REGEX,^.*\.google\..*$,Proxy | 正则表达式匹配域名 |
IP-CIDR | IP-CIDR,192.168.0.0/16,DIRECT | 匹配 IP 地址段 |
GEOIP | GEOIP,CN,DIRECT | 匹配目标 IP 所属国家/地区 |
GEOSITE | GEOSITE,cn,DIRECT | 匹配预定义的域名集合 |
PROCESS-NAME | PROCESS-NAME,curl,DIRECT | 匹配发起连接的进程名 |
MATCH | MATCH,Proxy | 默认规则,匹配所有未命中的流量 |
使用规则集(Rule-Set)
手动维护规则列表效率低下,推荐使用社区维护的规则集:
rule-providers:
reject:
type: http
behavior: domain
url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/reject.txt"
path: ./ruleset/reject.yaml
interval: 86400
proxy:
type: http
behavior: domain
url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/proxy.txt"
path: ./ruleset/proxy.yaml
interval: 86400
direct:
type: http
behavior: domain
url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/direct.txt"
path: ./ruleset/direct.yaml
interval: 86400
rules:
- RULE-SET,reject,REJECT
- RULE-SET,proxy,Proxy
- RULE-SET,direct,DIRECT
- GEOIP,CN,DIRECT
- MATCH,Proxy
Loyalsoldier/clash-rules 是社区使用最广泛的规则集之一,定期更新,覆盖了常见的代理和直连域名列表。
以 systemd 运行(Linux 服务器)
在 Linux 服务器上,通常将 Mihomo 配置为 systemd 服务,开机自启并自动重启:
创建系统用户
useradd -r -s /bin/false mihomo
准备配置目录
mkdir -p /etc/mihomo
chown mihomo:mihomo /etc/mihomo
# 将配置文件和规则集目录放入
cp config.yaml /etc/mihomo/
创建 systemd 服务单元文件
创建 /etc/systemd/system/mihomo.service:
[Unit]
Description=Mihomo Daemon
After=network.target NetworkManager.service systemd-networkd.service
[Service]
Type=simple
LimitNPROC=500
LimitNOFILE=1000000
CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_RAW CAP_NET_BIND_SERVICE CAP_SYS_TIME CAP_SYS_PTRACE CAP_DAC_READ_SEARCH CAP_DAC_OVERRIDE
AmbientCapabilities=CAP_NET_ADMIN CAP_NET_RAW CAP_NET_BIND_SERVICE CAP_SYS_TIME CAP_SYS_PTRACE CAP_DAC_READ_SEARCH CAP_DAC_OVERRIDE
Restart=always
ExecStartPre=/usr/bin/sleep 1s
ExecStart=/usr/local/bin/mihomo -d /etc/mihomo
ExecReload=/bin/kill -HUP $MAINPID
[Install]
WantedBy=multi-user.target
-d /etc/mihomo 指定配置目录,Mihomo 将在该目录中寻找 config.yaml。
启动服务
systemctl daemon-reload
systemctl enable mihomo
systemctl start mihomo
systemctl status mihomo
# 查看日志
journalctl -u mihomo -f
重载配置(不重启进程)
修改配置文件后,可以发送 SIGHUP 信号让 Mihomo 重新加载配置,无需完全重启:
systemctl reload mihomo
# 或者
kill -HUP $(pgrep mihomo)
Web 控制面板
Mihomo 提供 RESTful API,可以通过 Web 控制面板实时查看和控制运行状态。常用的面板有:
- Yacd-meta:github.com/MetaCubeX/yacd,Yacd 的 Clash Meta 适配版
- Metacubexd:github.com/MetaCubeX/metacubexd,基于 React 的现代面板
在配置文件中指定外部 UI 路径:
external-controller: 127.0.0.1:9090
secret: "your-api-secret"
external-ui: /usr/share/metacubexd # 存放面板文件的目录
external-ui-name: metacubexd
external-ui-url: "https://github.com/MetaCubeX/metacubexd/archive/refs/heads/gh-pages.zip"
配置完成后,通过浏览器访问 http://127.0.0.1:9090/ui 即可打开控制面板。
如果无法在本地访问(例如 Mihomo 运行在远程服务器),可以通过 SSH 端口转发将面板端口映射到本地:
ssh -L 9090:127.0.0.1:9090 user@your.server.ip
然后在本地浏览器访问 http://127.0.0.1:9090/ui。
覆写(Override)
Mihomo 支持通过覆写功能在不修改原始订阅配置的前提下,叠加自定义的配置项。这在使用机场订阅时非常实用——你可以在订阅更新后保留自己的自定义规则和策略组。
覆写文件通常命名为 override.yaml(具体实现取决于 GUI 工具),其结构与普通配置文件相同,内容会与订阅配置合并:
# override.yaml 示例:添加自定义规则和 DNS 设置
dns:
nameserver:
- https://doh.pub/dns-query
rules:
- DOMAIN-SUFFIX,custom-site.com,DIRECT
- PROCESS-NAME,git,DIRECT
不同 GUI 工具的覆写实现方式不同,请参考对应工具的文档。
常见问题
Q:Mihomo 启动后系统代理没有生效,流量没有走代理?
Mihomo 本身只在指定端口上监听代理请求,不会自动设置系统代理。你需要:
- 手动在系统的网络设置中将 HTTP 代理或 SOCKS5 代理设置为
127.0.0.1:7890 - 或者启用 TUN 模式,让 Mihomo 在系统层面接管流量
- 或者使用 GUI 工具,大多数 GUI 工具会自动管理系统代理开关
Q:规则命中了直连,但访问国外网站仍然很慢?
检查以下几点:
- 确认规则顺序正确,代理规则在直连规则之前
- 检查 DNS 配置,确认境外域名使用了境外 DNS 而非被污染的国内 DNS
- 查看控制面板中的连接日志,确认流量走向与预期一致
Q:订阅更新后节点消失了?
这是正常情况——订阅更新会用最新的节点列表替换旧的列表。如果需要保留自定义节点,应将其写在覆写配置中,而不是直接修改订阅配置文件。
Q:fake-ip 模式下,某些应用无法正常使用?
部分应用不兼容 Fake-IP 模式(如某些需要知道真实 IP 的游戏反作弊系统)。可以通过 fake-ip-filter 为这些应用的域名排除 Fake-IP 处理,强制使用真实 DNS 结果:
dns:
fake-ip-filter:
- "*.lan"
- localhost
- "*.local"
- "*.msftconnecttest.com" # Windows 网络检测
- "*.msftncsi.com"
- "time.windows.com"
- "+.ntp.org" # NTP 时间同步
Q:Mihomo 和 Clash Verge Rev / mihomo Party 有什么关系?
Mihomo 是代理核心(Core),负责实际的流量处理和协议实现。Clash Verge Rev 和 mihomo Party 是图形界面程序(GUI),它们在后台调用 Mihomo 核心,并提供友好的可视化操作界面。选择 GUI 工具的同时,也可以在工具设置中选择使用哪个版本的 Mihomo 核心(Alpha 版本或稳定版)。
相关资源
- Mihomo 官方文档:wiki.metacubex.one
- Mihomo GitHub:github.com/MetaCubeX/mihomo
- Clash 规则集(Loyalsoldier):github.com/Loyalsoldier/clash-rules
- GeoSite / GeoIP 数据库(MetaCubeX):github.com/MetaCubeX/meta-rules-dat