Mihomo 服务器版入门:8 分钟搭建代理服务
Mihomo
Mihomo 是一款开源的网络代理工具,支持多种协议(如 Clash、Shadowsocks、VMess 等),以其高性能、跨平台和丰富的规则分流功能著称,是科学上网和流量管理的利器。
共 11 步 · 约 22 分钟
准备工作
开始前准备三样东西:一台 Linux 服务器、一个可用订阅地址、root 或 sudo 权限。本文默认服务器使用 systemd,例如 Ubuntu、Debian、Rocky Linux、CentOS Stream 等常见发行版。
服务器版的安全原则很简单:代理端口 7890 和控制 API 端口 9090 都只绑定 127.0.0.1。如果你需要在自己电脑上远程使用,优先用 SSH 隧道或 Tailscale,不要在云服务器安全组里直接放开 7890、9090。
![]()
下载 Mihomo 内核
进入临时目录,从官方 Releases 下载与你服务器架构匹配的 Mihomo 内核。下面以 linux-amd64 为例,实际版本和文件名请以 Releases 页面为准:
cd /tmp
wget -O mihomo.gz "https://github.com/MetaCubeX/mihomo/releases/download/v1.19.27/mihomo-linux-amd64-v1.19.27.gz"
gzip -d mihomo.gz
sudo install -m 0755 mihomo /usr/local/bin/mihomo
mihomo -v如果你的服务器是 ARM 架构,不要照抄 amd64 链接,去 Releases 页面选择 linux-arm64 或对应架构的文件。
![]()
创建配置目录和最小配置
创建配置目录,并准备一个只监听本机的最小配置。这里不直接把订阅文件下载成完整 config.yaml,而是用 proxy-providers 引用订阅地址,后续可以自动更新。
sudo mkdir -p /etc/mihomo/providers
sudo nano /etc/mihomo/config.yaml写入下面内容,把 SUBSCRIPTION_URL_HERE 替换成你的订阅地址,把 CHANGE_ME_LONG_TOKEN 改成一串较长随机字符串:
mixed-port: 7890
bind-address: 127.0.0.1
allow-lan: false
mode: rule
log-level: info
external-controller: 127.0.0.1:9090
secret: "CHANGE_ME_LONG_TOKEN"
proxy-providers:
main:
type: http
url: "SUBSCRIPTION_URL_HERE"
interval: 21600
path: ./providers/main.yaml
health-check:
enable: true
interval: 600
url: http://www.gstatic.com/generate_204
proxy-groups:
- name: PROXY
type: select
use:
- main
- name: AUTO
type: url-test
use:
- main
url: http://www.gstatic.com/generate_204
interval: 600
rules:
- MATCH,PROXY这个配置的重点是三行:bind-address: 127.0.0.1、allow-lan: false、external-controller: 127.0.0.1:9090。它们能避免服务默认暴露到公网。
测试配置能否启动
先不要急着写 systemd,直接运行一次,看配置是否能被 Mihomo 正常加载:
sudo /usr/local/bin/mihomo -d /etc/mihomo如果看到启动日志里没有 YAML 解析错误,并且订阅 provider 开始下载,说明配置基本可用。按 Ctrl+C 停止前台进程,准备交给 systemd 管理。
如果提示订阅下载失败,优先检查订阅 URL 是否完整、服务器是否能访问该 URL,以及订阅服务是否支持 Clash / Mihomo 格式。
配置 systemd 开机自启
创建 systemd 服务文件:
sudo tee /etc/systemd/system/mihomo.service >/dev/null <<'EOF'
[Unit]
Description=Mihomo Proxy Service
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
ExecStart=/usr/local/bin/mihomo -d /etc/mihomo
Restart=on-failure
RestartSec=5s
LimitNOFILE=1048576
[Install]
WantedBy=multi-user.target
EOF启用并启动服务:
sudo systemctl daemon-reload
sudo systemctl enable --now mihomo.service
sudo systemctl status mihomo.service状态显示 active (running) 就说明开机自启和当前运行都已生效。
![]()
确认端口没有暴露公网
服务器版最重要的验收不是“能不能跑”,而是“有没有误开公网端口”。执行:
ss -ltnp | grep -E '7890|9090'你应该看到类似结果:
LISTEN 0 4096 127.0.0.1:7890 0.0.0.0:*
LISTEN 0 4096 127.0.0.1:9090 0.0.0.0:*如果显示 0.0.0.0:7890 或 0.0.0.0:9090,先停止服务,回到配置文件检查 bind-address 和 external-controller,不要继续使用。
![]()
用 curl 测试联网
使用本机代理端口做一次连通测试:
curl --proxy http://127.0.0.1:7890 -I https://www.google.com如果返回 HTTP 响应头,说明本机代理端口可用。你也可以访问一个你日常需要确认连通性的地址,但不要把测试结果里的敏感域名或 IP 直接贴到公开页面。
排错时先看日志:
sudo journalctl -u mihomo.service -n 80 --no-pager如果日志里出现订阅下载失败、provider 为空、代理组为空,就优先处理订阅 URL 或配置格式。
![]()
查看流量和代理源状态
Mihomo 的控制 API 只监听本机,并设置了 secret,所以查询时要带 Authorization 头。先把 token 放进变量:
export MIHOMO_SECRET="CHANGE_ME_LONG_TOKEN"查看代理和代理组:
curl -s -H "Authorization: Bearer $MIHOMO_SECRET" \
http://127.0.0.1:9090/proxies | python3 -m json.tool | head -40查看代理源状态:
curl -s -H "Authorization: Bearer $MIHOMO_SECRET" \
http://127.0.0.1:9090/providers/proxies | python3 -m json.tool | head -60查看实时流量需要持续连接,可以用 timeout 限制 5 秒:
timeout 5 curl -N -H "Authorization: Bearer $MIHOMO_SECRET" \
http://127.0.0.1:9090/traffic这些 API 足够在服务器上确认三件事:代理组是否存在、订阅源是否更新成功、是否有实时流量经过。
![]()
结果展示
完成后,你应该得到一个安全的 Mihomo 服务器版部署:systemd 已开机自启,订阅通过 proxy-provider 管理,代理端口和控制端口都只监听 127.0.0.1,curl --proxy 能完成联网测试,journalctl 和本机 REST API 能查看日志、流量和代理源状态。
进阶技巧
-
远程使用请走 SSH 隧道
如果你想从自己的电脑临时使用服务器上的代理,可以这样转发:bashssh -N -L 7890:127.0.0.1:7890 user@server-ip本机浏览器再设置代理为
127.0.0.1:7890。这样不需要在云服务器安全组里开放代理端口。 -
更新订阅用 provider 机制,不要覆盖主配置
这篇教程把订阅放在proxy-providers.main.url里,Mihomo 会按interval定期更新。比起定时覆盖整个config.yaml,这种方式更不容易把端口、安全配置一起覆盖掉。 -
远程查看/配置配置 用 SSH 隧道,本地安全访问:
ssh -L 9090:127.0.0.1:9090 root@你的服务器IP然后浏览器打开:https://d.metacubex.one
填:
API Base URL: http://127.0.0.1:9090
Secret: $MIHOMO_SECRET这样 Web 面板通过 SSH 隧道访问服务器 mihomo,更安全。
常见问题
| 现象 | 可能原因 | 处理方式 |
|---|---|---|
| 服务启动失败 | YAML 缩进错误、订阅 URL 写错、二进制路径错误 | journalctl -u mihomo.service -n 80 --no-pager 看具体报错 |
ss 显示 0.0.0.0:7890 | 配置没有限制监听地址 | 设置 bind-address: 127.0.0.1,重启服务 |
| API 返回 401 | secret 已设置但请求没带 token | 请求头加 Authorization: Bearer <secret> |
/providers/proxies 为空 | 订阅源下载失败或订阅格式不兼容 | 检查订阅 URL,查看日志里的 provider 错误 |
curl --proxy 超时 | 代理组没有可用节点或订阅未加载 | 查 /proxies 和日志,确认 proxy-provider 更新成功 |
| 远程电脑连不上服务器代理 | 这是预期的安全默认值 | 使用 SSH 隧道,不要直接开放 7890 到公网 |
服务器版的关键是“能用”和“别裸露”。只要 ss 里 7890、9090 都是 127.0.0.1,再通过 SSH 隧道按需使用,这套部署就比直接公网开放安全得多。