Ubuntu Server 安装 Mihomo 并为 Docker 配置代理
1. 前言
如果机场提供的是 Clash/Mihomo 订阅,并且节点类型包含:
anytlsvlessreality
那么通常不能使用老版 clash,应使用 mihomo 或 clash-meta。
典型报错如下:
Parse config error: proxy 0: unsupport proxy type: anytls
这说明内核压根不支持。所以本文使用 Mihomo。
2. 安装 Mihomo
先确认服务器架构:
uname -m
常见为 x86_64。
下载 mihomo:
cd /usr/local/bin
wget -O mihomo.gz https://github.com/MetaCubeX/mihomo/releases/download/v1.19.28/mihomo-linux-amd64-compatible-v1.19.28.gz
gunzip mihomo.gz
chmod +x mihomo
/usr/local/bin/mihomo -v
3. 准备配置目录
这里以 /opt/clash 为例:
mkdir -p /opt/clash
将机场提供的 Clash/Mihomo 配置保存为:
/opt/clash/config.yaml
或:
/opt/clash/config.yml
Mihomo 启动时会在指定目录中读取配置文件。
注意:有些机场给的订阅地址拉下来是一堆 Base64 编码的节点列表,这种情况就需要将它先导入 Clash 软件,然后在把生成的配置文件拿去给服务器用。
4. 测试配置文件
正式启动前,先测试配置是否合法:
/usr/local/bin/mihomo -t -d /opt/clash
如果通过,说明配置文件可以被当前 Mihomo 正常解析。
5. 配置 systemd 服务
创建服务文件:
nano /etc/systemd/system/clash.service
写入以下内容:
[Unit]
Description=Clash daemon
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/bin/mihomo -d /opt/clash
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
加载并启动服务:
systemctl daemon-reload # 重载设置
systemctl enable --now clash # 启动 Mihomo 并设置开机自启动
systemctl status clash # 查看运行状态
查看是否设置为开机自启:
systemctl is-enabled clash
如果输出 enabled,说明重启服务器后 Mihomo 会自动启动。
6. 常见配置示例
一个可用的基础配置通常包含:
mixed-port: 7890
allow-lan: true
bind-address: '*'
mode: rule
log-level: info
external-controller: 127.0.0.1:9090
说明如下:
mixed-port: 7890:HTTP/SOCKS 混合代理端口allow-lan: true:允许局域网访问bind-address: '*':监听所有地址external-controller: 127.0.0.1:9090:本机控制接口
如果只需要本机控制接口,保留 127.0.0.1:9090 更安全。
7. 验证 Mihomo 是否正常工作
查看监听端口:
ss -lntp | grep 7890
ss -lntp | grep 9090
本机强制通过代理测试:
curl -I -x http://127.0.0.1:7890 https://www.google.com
curl -I -x http://127.0.0.1:7890 https://api.openai.com
如果成功,说明:
- Mihomo 正在监听
- 至少有一个节点可用
- 代理功能正常
查看日志:
journalctl -u clash -n 100 --no-pager
实时查看日志:
journalctl -u clash -f
8. 查看当前使用的节点
Mihomo 提供了控制接口:
external-controller: 127.0.0.1:9090
可以通过 API 查看代理组和当前节点:
curl http://127.0.0.1:9090/proxies
返回结果中重点关注主代理组,例如:
"TaiShan Net": {
"type": "Selector",
"now": "自动选择"
}
如果主组选中的是另一个组,例如 自动选择,还需要继续查询该组:
curl http://127.0.0.1:9090/proxies/自动选择
如果安装了 jq,查看更方便:
curl -s http://127.0.0.1:9090/proxies | jq '.proxies["TaiShan Net"]'
curl -s http://127.0.0.1:9090/proxies | jq '.proxies["自动选择"]'
9. Shell 临时代理与永久代理
临时代理写法:
export http_proxy=http://127.0.0.1:7890
export https_proxy=http://127.0.0.1:7890
export all_proxy=socks5://127.0.0.1:7890
这只对当前 shell 会话有效。退出终端、重新登录或重启服务器后会失效。
如果希望当前用户登录后自动生效,可以写入:
~/.bashrc
例如:
echo 'export http_proxy=http://127.0.0.1:7890' >> ~/.bashrc
echo 'export https_proxy=http://127.0.0.1:7890' >> ~/.bashrc
echo 'export all_proxy=socks5://127.0.0.1:7890' >> ~/.bashrc
source ~/.bashrc
10. 让 Docker 使用代理
Docker 代理分两层:
- Docker daemon 拉镜像使用代理
- 容器内应用运行时使用代理
这两者需要分别配置。本文只介绍第一种
11. Docker daemon 使用代理
创建 Docker 的 systemd 覆盖配置:
mkdir -p /etc/systemd/system/docker.service.d
nano /etc/systemd/system/docker.service.d/http-proxy.conf
写入:
[Service]
Environment="HTTP_PROXY=http://127.0.0.1:7890"
Environment="HTTPS_PROXY=http://127.0.0.1:7890"
Environment="ALL_PROXY=socks5://127.0.0.1:7890"
Environment="NO_PROXY=localhost,127.0.0.1,::1"
重载并重启 Docker:
systemctl daemon-reload
systemctl restart docker
确认生效:
systemctl show --property=Environment docker
测试拉镜像:
docker pull hello-world
说明:
- 这里使用
127.0.0.1:7890,因为 Docker daemon 运行在宿主机上 - 该配置主要影响
docker pull
发表评论