跳转到主要内容HOME
KOLIKO / 20262026年06月08日 / 10 min read

mihomo 云服务器代理使用指南

本文记录在腾讯云Ubuntu服务器上部署mihomo代理的流程,通过本地端口按需接入,为Docker、Git、curl等命令提供临时加速,并解决GeoIP缺失和Docker代理配置等问题,实现安全灵活的网络代理。

2026年06月08日10 min read
Linux代理Dockermihomo

mihomo 云服务器代理使用指南

mihomo 云服务器代理使用指南封面

本文记录在腾讯云 Ubuntu 服务器上安装、配置和按需使用 mihomo 的流程。这里采用的是“本机代理端口 + 按需接入”的方式,不开启 TUN 全局代理,适合生产服务器临时给 Docker、Git、curl 等命令加速。

基本概念

mihomo 常驻运行后,会在服务器本机监听一个代理入口:

1127.0.0.1:7890

你的配置中使用的是:

1mixed-port: 7890 2mode: rule 3external-controller: 127.0.0.1:9090

这表示:

  • 7890 是 HTTP/SOCKS 混合代理端口。
  • 9090 是本机控制接口,用来查看和切换节点。
  • mode: rule 表示进入 mihomo 的流量会按规则分流。

注意:服务器上的软件不会自动走 mihomo。只有显式配置了 127.0.0.1:7890 的程序才会进入 mihomo。

安装 mihomo

普通腾讯云 CVM 一般是 linux/amd64 架构,Ubuntu 推荐安装 .deb 包,例如:

1mihomo-linux-amd64-v1-v1.19.27.deb

如果服务器能访问 GitHub:

1cd /tmp 2wget https://github.com/MetaCubeX/mihomo/releases/download/v1.19.27/mihomo-linux-amd64-v1-v1.19.27.deb 3sudo dpkg -i mihomo-linux-amd64-v1-v1.19.27.deb 4mihomo -v

如果服务器下载 GitHub 很慢,可以在 Windows 下载后上传:

1scp .\mihomo-linux-amd64-v1-v1.19.27.deb root@你的服务器IP:/tmp/

服务器上安装:

1cd /tmp 2sudo dpkg -i mihomo-linux-amd64-v1-v1.19.27.deb 3which mihomo 4mihomo -v

如果 which mihomo 输出是 /usr/bin/mihomo,后面的 systemd 服务也要使用这个路径。

配置文件

创建配置目录:

1sudo mkdir -p /etc/mihomo

上传配置:

1scp .\config.yaml root@你的服务器IP:/tmp/config.yaml

服务器上移动配置:

1sudo mv /tmp/config.yaml /etc/mihomo/config.yaml 2sudo chmod 600 /etc/mihomo/config.yaml

云服务器上建议把配置中的代理监听限制为本机:

1allow-lan: false 2bind-address: 127.0.0.1

不要使用:

1allow-lan: true 2bind-address: '*'

否则代理端口可能被公网访问,存在被蹭流量和安全风险。

systemd 服务

创建服务文件:

1sudo vim /etc/systemd/system/mihomo.service

写入:

1[Unit] 2Description=mihomo proxy service 3After=network-online.target 4Wants=network-online.target 5 6[Service] 7Type=simple 8ExecStart=/usr/bin/mihomo -d /etc/mihomo 9Restart=on-failure 10RestartSec=5 11 12[Install] 13WantedBy=multi-user.target

如果 which mihomo 不是 /usr/bin/mihomo,把 ExecStart 改成实际路径。

启动并设置开机自启:

1sudo systemctl daemon-reload 2sudo systemctl enable --now mihomo 3sudo systemctl status mihomo

查看实时日志:

1journalctl -u mihomo -f

检查监听端口:

1ss -tlnp | grep -E '7890|9090'

正常应看到本机监听:

1127.0.0.1:7890 2127.0.0.1:9090

解决 GeoIP MMDB 启动失败

如果日志出现:

1rules[...] [GEOIP,CN,DIRECT] error: can't download MMDB: context deadline exceeded

说明配置里有:

1- 'GEOIP,CN,DIRECT'

mihomo 需要下载 GeoIP 数据库,但服务器当前网络下载失败。

最快处理方式是先注释或删除这行:

1# - 'GEOIP,CN,DIRECT'

然后重启:

1sudo systemctl restart mihomo 2sudo systemctl status mihomo

临时删除这条规则通常不影响 Docker 拉镜像。你的配置里已经有很多域名直连规则,后续代理可用后再补 MMDB 也可以。

当前终端开关代理

打开当前终端代理:

1export http_proxy=http://127.0.0.1:7890 2export https_proxy=http://127.0.0.1:7890 3export all_proxy=socks5://127.0.0.1:7890

关闭当前终端代理:

1unset http_proxy 2unset https_proxy 3unset all_proxy 4unset HTTP_PROXY 5unset HTTPS_PROXY 6unset ALL_PROXY

单条命令临时走代理:

1curl -x http://127.0.0.1:7890 -I https://www.google.com --connect-timeout 10 -m 20

访问 mihomo 本机控制接口时建议绕过代理:

1curl --noproxy 127.0.0.1 http://127.0.0.1:9090/proxies

查看和切换节点

你的主策略组名称是:

1Now加速©️

查看当前主策略组状态:

1curl --noproxy 127.0.0.1 -s 'http://127.0.0.1:9090/proxies/Now加速©️'

只看当前选中节点:

1curl --noproxy 127.0.0.1 -s 'http://127.0.0.1:9090/proxies/Now加速©️' | grep -o '"now":"[^"]*"'

如果安装了 jq

1sudo apt install -y jq 2curl --noproxy 127.0.0.1 -s 'http://127.0.0.1:9090/proxies/Now加速©️' | jq '.now'

切换到自动选择:

1curl --noproxy 127.0.0.1 -X PUT -H "Content-Type: application/json" -d '{"name":"自动选择"}' 'http://127.0.0.1:9090/proxies/Now加速©️'

切换到香港节点:

1curl --noproxy 127.0.0.1 -X PUT -H "Content-Type: application/json" -d '{"name":"香港IEPL专线 01"}' 'http://127.0.0.1:9090/proxies/Now加速©️'

切换到日本节点:

1curl --noproxy 127.0.0.1 -X PUT -H "Content-Type: application/json" -d '{"name":"日本IEPL专线 01"}' 'http://127.0.0.1:9090/proxies/Now加速©️'

切换到美国节点:

1curl --noproxy 127.0.0.1 -X PUT -H "Content-Type: application/json" -d '{"name":"美国IEPL专线 01"}' 'http://127.0.0.1:9090/proxies/Now加速©️'

如果主策略组选的是 自动选择,可以查看自动选择实际使用的节点:

1curl --noproxy 127.0.0.1 -s 'http://127.0.0.1:9090/proxies/自动选择' | grep -o '"now":"[^"]*"'

让 Docker 使用 mihomo

Docker daemon 默认不会读取当前终端的 http_proxy,需要单独配置 systemd。

开启 Docker 代理:

1sudo mkdir -p /etc/systemd/system/docker.service.d 2sudo tee /etc/systemd/system/docker.service.d/http-proxy.conf > /dev/null <<'EOF' 3[Service] 4Environment="HTTP_PROXY=http://127.0.0.1:7890" 5Environment="HTTPS_PROXY=http://127.0.0.1:7890" 6Environment="NO_PROXY=localhost,127.0.0.1" 7EOF 8 9sudo systemctl daemon-reload 10sudo systemctl restart docker

确认 Docker 代理已生效:

1sudo systemctl show --property=Environment docker

测试拉镜像:

1docker pull hello-world 2docker pull kolikoko/personal-website:latest

关闭 Docker 代理:

1sudo rm -f /etc/systemd/system/docker.service.d/http-proxy.conf 2sudo systemctl daemon-reload 3sudo systemctl restart docker

确认已关闭:

1sudo systemctl show --property=Environment docker

如果输出中没有 HTTP_PROXYHTTPS_PROXY,说明 Docker 不再走 mihomo。

Docker Hub 镜像源和代理的关系

如果 Docker 直连 Docker Hub 报错:

1dial tcp ...:443: i/o timeout

说明服务器直连 Docker Hub 超时,可以让 Docker 走 mihomo。

如果使用国内镜像源拉刚推送的新镜像出现:

1error from registry: unknown error 2not found

可能是镜像源同步延迟。此时更适合让 Docker 走 mihomo 直连 Docker Hub。

直连 Docker Hub:

1sudo rm -f /etc/docker/daemon.json 2sudo systemctl daemon-reload 3sudo systemctl restart docker

使用腾讯云 Docker Hub 镜像加速:

1sudo tee /etc/docker/daemon.json > /dev/null <<'EOF' 2{ 3 "registry-mirrors": [ 4 "https://mirror.ccs.tencentyun.com" 5 ] 6} 7EOF 8 9sudo systemctl daemon-reload 10sudo systemctl restart docker

注意:daemon.json 的 registry mirror 和 Docker systemd 代理是两套机制。拉自己刚推送的新镜像时,代理通常比公共镜像源更可靠。

常见排错

status=203/EXEC

如果:

1status=203/EXEC

说明 systemd 找不到或不能执行 ExecStart 指定的 mihomo。

检查路径:

1which mihomo 2ls -l /usr/bin/mihomo /usr/local/bin/mihomo

/etc/systemd/system/mihomo.service 中的 ExecStart 改成实际路径,然后:

1sudo systemctl daemon-reload 2sudo systemctl restart mihomo

curl 提示连接 7890 失败

如果:

1Failed to connect to 127.0.0.1 port 7890

说明 mihomo 没有运行,或者 7890 没监听。

检查:

1sudo systemctl status mihomo 2ss -tlnp | grep -E '7890|9090' 3journalctl -u mihomo -n 50 --no-pager

切节点命令也走了代理

如果当前终端设置了 http_proxy,访问 127.0.0.1:9090 时可能也会尝试走代理。建议切节点命令都加:

1--noproxy 127.0.0.1

例如:

1curl --noproxy 127.0.0.1 -s 'http://127.0.0.1:9090/proxies/Now加速©️'

Docker 仍然直连超时

确认 Docker daemon 是否真的加载了代理:

1sudo systemctl show --property=Environment docker

确认 mihomo 是否运行:

1sudo systemctl status mihomo

确认代理能用:

1curl -x http://127.0.0.1:7890 -I https://www.google.com --connect-timeout 10 -m 20

安全注意事项

  • 不要把 config.yaml 提交到 Git,里面包含节点、UUID、服务器地址等敏感信息。
  • 云服务器建议使用 allow-lan: falsebind-address: 127.0.0.1
  • 不建议在生产服务器上开启 TUN 全局代理,容易影响 SSH、Nginx、Docker 网络排查。
  • mihomo 常驻运行本身不会大量消耗代理流量,只有程序主动走 127.0.0.1:7890 时才会消耗。
  • Docker 拉完镜像后,可以删除 Docker 代理配置,让 Docker 恢复直连或镜像源模式。

日常使用速查

启动 mihomo:

1sudo systemctl start mihomo

停止 mihomo:

1sudo systemctl stop mihomo

重启 mihomo:

1sudo systemctl restart mihomo

查看状态:

1sudo systemctl status mihomo

查看日志:

1journalctl -u mihomo -f

当前终端临时走代理:

1export http_proxy=http://127.0.0.1:7890 2export https_proxy=http://127.0.0.1:7890

当前终端取消代理:

1unset http_proxy https_proxy all_proxy HTTP_PROXY HTTPS_PROXY ALL_PROXY

Docker 开启代理:

1sudo mkdir -p /etc/systemd/system/docker.service.d 2sudo tee /etc/systemd/system/docker.service.d/http-proxy.conf > /dev/null <<'EOF' 3[Service] 4Environment="HTTP_PROXY=http://127.0.0.1:7890" 5Environment="HTTPS_PROXY=http://127.0.0.1:7890" 6Environment="NO_PROXY=localhost,127.0.0.1" 7EOF 8sudo systemctl daemon-reload 9sudo systemctl restart docker

Docker 关闭代理:

1sudo rm -f /etc/systemd/system/docker.service.d/http-proxy.conf 2sudo systemctl daemon-reload 3sudo systemctl restart docker