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_PROXY 和 HTTPS_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: false和bind-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