Daimon's Blog
主页 归档 关于 RSS 探针 常用工具
主页
归档
关于
RSS
探针
常用工具

mihomo 裸核部署完全指南:Linux / Windows 双平台 + Web 面板

daimon daimon 2026-04-20 #mihomo#Clash#代理#VPS#Linux

很多人接触 Clash 都是从 Clash for Windows / ClashX / Stash 这种带 GUI 的客户端开始的。但当你想:

  • 在 VPS 上跑代理网关,给家里几台机器共用;
  • 在 Linux 服务器上做链式代理 / 落地机;
  • 自定义订阅、规则、面板,完全不依赖任何商业 GUI;

就需要直接玩 mihomo(Clash Meta)的”裸核”——一个二进制 + 一个 YAML 配置 + 一个 systemd 单元,齐活。这篇把全流程梳理一遍。

一、mihomo 的运行模型#

先看一张图:

graph LR subgraph 客户端 B[浏览器 / app] -->|HTTP / SOCKS5| L[本机 7890/7891] end L --> M[mihomo 进程
裸核] M --> D{DNS / 规则匹配} D -->|国内站| DR[DIRECT 直连] D -->|国外站| P[代理节点
VLESS / VMess / SS] M --> U[external-controller
9090 面板 API] U --> UI[zashboard / metacubexd
Web UI]

核心三件套:

文件 / 路径作用
/usr/bin/mihomo主程序二进制
/etc/mihomo/config.yaml配置(节点 + 规则 + DNS)
~/.config/mihomo/运行时数据(缓存 / Geo 数据 / UI)
/etc/systemd/system/mihomo.servicesystemd 单元

工作目录 ~/.config/mihomo/ 里通常有这些东西:

文件 / 目录说明
ui/外部面板的静态文件
proxies/订阅 provider 缓存
ruleset/rule-provider 缓存
cache.db运行缓存(fake-ip、选择记录)
GeoIP.dat / GeoSite.datGeo 数据
系统路径
Linux root/root/.config/mihomo
Linux 普通用户/home/<用户名>/.config/mihomo
WindowsC:\Users\<用户名>\.config\mihomo

二、Linux 安装:完整流程#

下面以 Debian/Ubuntu 为例(其它发行版同理,包格式换成对应的即可)。

2.1 装包#

去官方 release 拉对应架构的 .deb:

1
https://github.com/MetaCubeX/mihomo/releases

服务器拉不动 GitHub 是常态。可以先在本地下载好再 scp 上去,或者用 jsdelivr / ghproxy 这类镜像。

Terminal window
1
# 假设 .deb 已经在当前目录
2
sudo dpkg -i mihomo-*.deb
3
sudo apt -f install -y
4
5
# 确认
6
which mihomo
7
mihomo -v

2.2 放配置文件#

/etc/mihomo/config.yaml 就是核心。下面给一个最小可用模板(完整版后面给):

1
# 监听端口
2
port: 7890 # HTTP 代理
3
socks-port: 7891 # SOCKS5
4
mixed-port: 7893 # 混合(HTTP/SOCKS5)
5
6
allow-lan: false
7
bind-address: "127.0.0.1"
8
9
# Web 面板
10
external-controller: 0.0.0.0:9090
11
secret: "your_strong_secret_here"
12
external-ui: /root/.config/mihomo/ui
13
14
mode: rule
15
log-level: info
16
17
proxies: []
18
proxy-groups:
19
- name: PROXY
20
type: select
21
proxies: [DIRECT]
22
rules:
23
- MATCH,PROXY

⚠️ secret 是 Web 面板的 API 密码,务必改成 16 位以上随机字符串,否则等于把代理控制权裸奔到公网。

把它放到位:

Terminal window
1
sudo cp config.yaml /etc/mihomo/config.yaml

2.3 装 Web UI(zashboard / metacubexd 任选其一)#

mihomo 不带 UI,需要额外放静态文件。以 metacubexd 为例:

Terminal window
1
# 创建 UI 目录
2
sudo mkdir -p /root/.config/mihomo/ui
3
4
cd /tmp
5
curl -L -o metacubexd.zip \
6
https://github.com/MetaCubeX/metacubexd/archive/refs/heads/gh-pages.zip
7
unzip -q metacubexd.zip
8
9
sudo rm -rf /root/.config/mihomo/ui/*
10
sudo cp -a metacubexd-gh-pages/. /root/.config/mihomo/ui/
11
12
# 确认
13
test -f /root/.config/mihomo/ui/index.html && echo "UI OK"

配置里的 external-ui 路径必须和这里的目录完全一致。我见过最多的”面板打不开”就是路径不一致。

2.4 下载 Geo 数据#

第一次启动 mihomo 会自动拉 Geo 数据,但服务器从 GitHub 拉经常超时。手动下:

Terminal window
1
cd /root/.config/mihomo/
2
3
# 先清旧的
4
sudo rm -f GeoSite.dat GeoIP.dat Country.mmdb GeoLite2-ASN.mmdb
5
6
sudo curl -L --retry 5 --connect-timeout 20 \
7
-o GeoSite.dat \
8
https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/geosite.dat
9
10
sudo curl -L --retry 5 --connect-timeout 20 \
11
-o GeoIP.dat \
12
https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/geoip.dat
13
14
sudo curl -L --retry 5 --connect-timeout 20 \
15
-o Country.mmdb \
16
https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/country.mmdb

下载失败可以走 jsdelivr 镜像,在 config.yaml 里加:

1
geox-url:
2
geoip: https://testingcf.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@release/geoip.dat
3
geosite: https://testingcf.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@release/geosite.dat
4
mmdb: https://testingcf.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@release/country.mmdb
5
asn: https://testingcf.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@release/GeoLite2-ASN.mmdb

2.5 前台跑一次验证#

Terminal window
1
sudo mihomo -f /etc/mihomo/config.yaml

看到没有报错、监听端口出现,浏览器打开:

1
http://<你的服务器 IP>:9090/ui/

🪤 常见坑:第一次访问如果加载不出来,一定要 Ctrl+Shift+R(强刷绕过缓存)。Ctrl+R 不够,浏览器会用旧缓存。

2.6 配 systemd 服务#

确认 OK 之后 Ctrl+C 停掉,写 service 文件:

Terminal window
1
sudo tee /etc/systemd/system/mihomo.service >/dev/null <<'EOF'
2
[Unit]
3
Description=Mihomo Proxy Service
4
After=network-online.target
5
Wants=network-online.target
6
7
[Service]
8
Type=simple
9
ExecStart=/usr/bin/mihomo -f /etc/mihomo/config.yaml
10
Restart=on-failure
11
RestartSec=2
12
LimitNOFILE=1048576
13
14
[Install]
15
WantedBy=multi-user.target
16
EOF
17
18
sudo systemctl daemon-reload
19
sudo systemctl enable mihomo
20
sudo systemctl start mihomo
21
sudo systemctl status mihomo

查日志:

Terminal window
1
journalctl -u mihomo -f

2.7 开放防火墙端口#

端口用途公网是否开放
9090Web 面板 / API✅(建议加 IP 白名单)
7890–7893HTTP / SOCKS5 代理❌ 不要开,只给本机用
Terminal window
1
sudo ufw allow 9090
2
sudo ufw status

⚠️ 千万别把 7890 这种代理端口直接开到公网,否则你的 VPS 会变成所有人的免费代理,分分钟被滥用、被商家封号。

2.8 本机使用代理#

Terminal window
1
export http_proxy=http://127.0.0.1:7890
2
export https_proxy=http://127.0.0.1:7890
3
export all_proxy=socks5://127.0.0.1:7891
4
5
# 测试
6
curl https://www.google.com -I

取消:

Terminal window
1
unset http_proxy https_proxy all_proxy

三、Windows 裸核部署#

Windows 上一般直接用 Clash Verge / FlClash 这类 GUI 客户端,但如果你想跑裸核:

\mihomo
1
# 2. 配置文件放到 C:\Users\<你的用户>\.config\mihomo\config.yaml
2
# 3. 前台运行
3
cd C:\mihomo
4
.\mihomo.exe -d $env:USERPROFILE\.config\mihomo

要做成开机自启:

方案推荐度说明
任务计划程序⭐⭐⭐⭐⭐最简单,开机触发执行
NSSM 注册服务⭐⭐⭐⭐跑成 Windows 服务
WSL2 跑 Linux 版⭐⭐折腾,但有人喜欢

四、写好 config.yaml 的几个关键#

4.1 端口规划#

1
port: 7890 # HTTP
2
socks-port: 7891 # SOCKS5
3
mixed-port: 7893 # 混合(推荐应用都走这个)
4
tproxy-port: 7894 # 透明代理(TUN 用)

应用配置代理时统一用 mixed-port: 7893,不用区分协议。

4.2 LAN / 监听控制#

1
allow-lan: false # 是否允许局域网设备使用
2
bind-address: "127.0.0.1" # 只监听本机
3
authentication:
4
- "username:password" # HTTP/SOCKS 代理需要认证
5
6
lan-allowed-ips:
7
- "127.0.0.1/8"
8
- "::1/128"
9
- "172.16.0.0/12" # Docker 桥接子网

VPS 上强烈建议 allow-lan: false + bind-address: 127.0.0.1,让代理端口只对本机开放,外部走 nginx 反代或 SSH 隧道。

4.3 订阅 provider#

不写一堆 proxies:,直接挂订阅:

1
proxy-providers:
2
Airport1:
3
url: "https://your-subscription-link"
4
type: http
5
interval: 86400
6
health-check: { enable: true, url: https://www.gstatic.com/generate_204, interval: 300 }
7
override: { udp: true, additional-prefix: "[A1]" }

🔐 订阅链接里通常带 token,配置文件权限设成 600:sudo chmod 600 /etc/mihomo/config.yaml。

4.4 智能选节点 + 国家分流#

mihomo 内置了 smart 类型的代理组,可以自动选最快节点:

1
proxy-groups:
2
- name: 🇭🇰 香港智能
3
type: smart
4
url: https://www.gstatic.com/generate_204
5
interval: 300
6
tolerance: 50
7
include-all: true
8
filter: "(?=.*(港|HK|(?i)Hong))^((?!(台|日|韩|新|深|美|英)).)*$"

filter 是节点名的正则筛选,正向匹配 + 负向排除配合用,能精准抓你想要的国家节点。

4.5 端口分流(按端口选国家)#

把不同端口对应不同国家,应用可以直接通过端口选地区,不用切换:

1
listeners:
2
- name: port-hk
3
type: mixed
4
port: 42000
5
udp: true
6
- name: port-jp
7
type: mixed
8
port: 42002
9
udp: true
10
11
rules:
12
- "IN-PORT,42000,🇭🇰 香港智能"
13
- "IN-PORT,42002,🇯🇵 日本手动"

用法:浏览器扩展配端口 42000 走香港,配 42002 走日本,零延迟切换。

五、踩坑清单#

  • 面板加载不出来:80% 是浏览器缓存,先 Ctrl+Shift+R,再检查 external-ui 路径。
  • 拉订阅失败:mihomo 拉订阅时不走自己的代理,VPS 是国外的还好,国内 VPS 拉国外订阅可能要先配 http_proxy。
  • sudo mihomo 看不到环境变量:用 sudo -E mihomo ...,-E 表示继承环境变量。
  • Geo 数据下不动:换 jsdelivr 镜像,或者手动 scp 上去。
  • DNS 污染导致直连站打不开:检查 dns.fake-ip-filter,把国内服务(NTP、音乐、游戏等)放进去。
  • systemd 跑起来没问题,但本机 curl 不通:检查 bind-address,如果是 127.0.0.1 但你从外网访问就肯定不通。

六、之后能玩什么#

裸核部署只是起点,能往后接的东西很多:

  • fake-ip + DNS 分流 + no-resolve:彻底解决 DNS 泄漏,下一篇专门讲
  • Sub-Store 自部署:订阅聚合、节点过滤、自动更新
  • 链式代理 / 落地机:本机 mihomo → 中转 VPS → 落地 VPS
  • TUN 模式接管全局流量:不依赖应用层代理设置

mihomo 的玩法深度比想象中大,但一旦把裸核 + systemd 这套跑通,后面所有花活都是在这个基础上叠的。

Linux 包管理器横评:apt / dnf / pacman / nix / flatpak / snap / appimage
Linux 网络命令一条龙:ping / DNS / 路由 / 抓包 / 端口
本博客所有文章除特别声明外,均遵循 CC BY-NC-SA 4.0 协议,转载请注明出处。
博客框架 Astro & Fuwari
冀ICP备20260167号
1
一、mihomo 的运行模型
2
二、Linux 安装:完整流程
2.1 装包
2.2 放配置文件
2.3 装 Web UI(zashboard / metacubexd 任选其一)
2.4 下载 Geo 数据
2.5 前台跑一次验证
2.6 配 systemd 服务
2.7 开放防火墙端口
2.8 本机使用代理
3
三、Windows 裸核部署
4
四、写好 config.yaml 的几个关键
4.1 端口规划
4.2 LAN / 监听控制
4.3 订阅 provider
4.4 智能选节点 + 国家分流
4.5 端口分流(按端口选国家)
5
五、踩坑清单
6
六、之后能玩什么