返回列表 发布新帖

[交流讨论] 网络配置指南 (Mihomo/Clash Docker 容器化部署) - 本内容部分/全部由AI生成

283 0
发表于 6 天前 | 查看全部 阅读模式 IP:–江西–南昌

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
本帖最后由 Evoke 于 2026-5-29 23:23 编辑

1. 简介与架构设计

在绿联 NAS (UGOS / UGOS Pro) 中,我们常常会部署许多需要连接外网的容器服务(例如:qBittorrent、Jackett、Radarr、Sonarr 或各类自动化同步/下载工具)。由于网络环境限制,这些容器可能需要通过代理才能正常拉取元数据或进行网络通信。
本指南将介绍如何使用 Docker 部署 Mihomo (原 Clash.Meta) 容器,并配置其他容器优雅、安全地通过它进行代理上网。



2. 前置准备(获取并上传✈️配置文件)

在运行 Docker 容器之前,必须准备好配置文件。如果直接运行,Docker 会因为找不到挂载路径而自动在宿主机创建同名文件夹,导致容器报错无法启动。
我们直接使用✈️提供的 Clash 配置文件,无须自己从头手写:

  • 确定挂载路径:在绿联云客户端的 文件管理器 中,进入默认的 docker 共享文件夹,在里面新建一个名为 clash 的文件夹。
    💡 提示(如何获取绝对路径):右键点击新建的 clash 文件夹选择 属性,即可看到其绝对路径(通常为 /volume1/docker/clash 或 /volume2/docker/clash,本指南以 /volume1/docker/clash 为例)。
  • 下载✈️配置文件

    • 登录您的✈️后台,找到 Clash 订阅链接 并复制。
    • 在电脑浏览器中新建标签页,将订阅链接粘贴进地址栏并按下回车,浏览器会自动下载一个 .yaml 或 .clash 后缀的配置文件。
    • 将该文件重命名为 config.yaml

  • 上传并添加 NAS 专用参数

    • 将改名后的 config.yaml 通过绿联文件管理器上传到 /volume1/docker/clash 目录下。
    • 双击打开该文件进行编辑(或用电脑的文本编辑器修改后重新上传),在文件的最顶部(第一行开始),插入以下绿联 NAS 专用网络配置参数:
      1. # ================= 绿联 NAS 专用配置项 (可确保是否重复后放在文件最顶部或自行修改) =================
      2. port: 7890
      3. socks-port: 7891
      4. mixed-port: 7892             # 混合代理端口,用于其他容器连接
      5. allow-lan: true              # 必须设为 true 以允许局域网内其他设备连接
      6. bind-address: '*'            # 监听所有网卡接口
      7. external-controller: ':9090' # 外部控制面板 API 端口(开放 9090)
      8. # secret: 'YourSecureSecret'   # 你的控制面板连接密钥(建议修改配置或直接留空)

      9. # 本地局域网 .local 解析与 DNS 配置
      10. hosts:
      11.   '<your_nas_name>.local': host.docker.internal
      12.   'time.facebook.com': 17.253.84.125
      13.   'time.android.com': 17.253.84.125

      14. dns:
      15.   enable: true
      16.   listen: :1053
      17.   enhanced-mode: fake-ip
      18.   fake-ip-filter:
      19.     - "*.local"
      20.     - "localhost"
      21.     - "+.lan"
      22.   nameserver:
      23.     - 223.5.5.5
      24.     - 119.29.29.29
      25. # ===========================================================================
      复制代码
      ⚠️ 注意:请检查插入代码下方是否存有重复的 port:、mixed-port:、allow-lan: 或 dns: 配置项。如果有,请将下方✈️自带的重复项删掉,避免格式冲突。




3. Mihomo & 控制面板一键部署 (Docker Compose)

在绿联云桌面端打开 容器 (Docker) 应用:
  • 项目 (Compose) 菜单中新建项目,粘贴并运行以下配置(直接将代理核心和 Metacubexd 控制面板一键拉起):

  1. services:
  2.   mihomo:
  3.     image: metacubex/mihomo:latest
  4.     container_name: mihomo
  5.     restart: always
  6.     network_mode: bridge
  7.     ports:
  8.       - "7890:7890"  # HTTP 代理端口
  9.       - "7891:7891"  # SOCKS5 代理端口
  10.       - "7892:7892"  # 混合代理端口(推荐其他应用填这个最稳)
  11.       - "9090:9090"  # 外部控制面板 API 端口
  12.     volumes:
  13.       - /volume1/docker/clash:/root/.config/mihomo
  14.     # extra_hosts 是选填的。仅在使用虚拟域名 host.docker.internal 时才需要开启
  15.     # extra_hosts:
  16.     #   - "host.docker.internal:host-gateway"

  17.   metacubexd:
  18.     image: ghcr.io/metacubex/metacubexd:latest  # 从 GitHub Registry 拉取面板
  19.     container_name: metacubexd
  20.     restart: always
  21.     ports:
  22.       - "18091:80"  # 浏览器访问 http://NAS_IP:18091 来管理代理
复制代码

📝 注意(网络模式选择)网络模式为什么用 bridge 而不用 host?使用 host 模式会让容器直接占用宿主机的所有网络端口,虽然配置简单,但容易与宿主机自身的服务冲突,并且可能干扰 .local (mDNS) 服务。采用 bridge 模式可以实现网络隔离,只暴露出需要的代理和面板端口。



4. 如何访问并使用控制面板 (Web UI)

当容器拉起后,您可以通过网页非常直观地切换节点、管理代理。
访问步骤:

  • 用电脑浏览器直接打开控制面板页面:

    • 通过内网域名访问:http://<your_nas_name>.local:18091
    • 通过内网 IP 访问:http://<NAS_IP>:18091

  • 首次打开时,在登录设置界面中填入以下连接参数以对接 Mihomo 核心:

    • API Base URL(或 Host):http://<您的NAS_IP>:9090 或 http://<your_nas_name>.local:9090
    • Secret (密钥):填写您在 config.yaml 中设置的 secret(如果配置文件里没设密钥,留空即可)。

  • 点击 保存 / 连接 (Save / Connect) 即可登录并管理节点。

💡 提示:首次连接成功后,浏览器会自动保存这些配置。以后您只需直接访问 http://<NAS_IP>:18091 即可直接进入管理界面,无须重复填写。



5. 多容器互联代理配置(其他容器如何使用代理)

让其他 Docker 容器使用 Mihomo 代理,有以下三种方案。推荐采用 方案 A,安全性最高。
方案 A:使用共享 Docker Bridge 网络(推荐 ✨)

让需要代理的容器与 Mihomo 处于同一个自定义的 Docker 网络中。这样不需要通过宿主机中转,容器之间可以直接利用容器名解析。
💡 说明:此方案完全不需要配置任何 extra_hosts 选项,其他容器也无需做额外解析配置,非常清爽!
  • 在 docker-compose.yml 中配置共享网络:
    1. networks:
    2.   proxy-net:
    3.     driver: bridge

    4. services:
    5.   mihomo:
    6.     image: metacubex/mihomo:latest
    7.     container_name: mihomo
    8.     networks:
    9.       - proxy-net
    10.     # (其他配置保持不变...)

    11.   qbittorrent:
    12.     image: linuxserver/qbittorrent:latest
    13.     container_name: qbittorrent
    14.     networks:
    15.       - proxy-net
    16.     environment:
    17.       - HTTP_PROXY=http://mihomo:7892
    18.       - HTTPS_PROXY=http://mihomo:7892
    19.     # (其他配置保持不变...)
    复制代码

  • 为什么推荐此方案?

    • 安全性: 代理流量纯在 Docker 内部网络流动,不需要经过宿主机物理网卡,也无需对外暴露端口。
    • 简易度: 代理地址直接填写 http://mihomo:7892,即使 NAS 宿主机 IP 发生改变,代理依然有效。




方案 B:使用 host.docker.internal(网关域名模式)

如果你的其他容器是独立部署的,无法方便地加入同一个 Docker 网络,你可以让它们通过 Docker 默认网关连接宿主机暴露出来的代理端口。
⚠️ 注意:此方案由于在 Linux 环境下使用了虚拟域名 host.docker.internal,因此必须在需要代理的其他容器的 Compose 中声明 extra_hosts。如果您没有在其他容器中配置此映射,该域名将无法被解析。
在需要代理的容器配置中:
  • 添加 extra_hosts 映射:在 Linux 下,必须明确告诉 Docker 如何解析 host.docker.internal:
    1. extra_hosts:
    2.   - "host.docker.internal:host-gateway"
    复制代码

  • 设置环境变量
    1. <ul><li>environment:
    2.   - HTTP_PROXY=http://host.docker.internal:7892
    3.   - HTTPS_PROXY=http://host.docker.internal:7892</li></ul>
    复制代码


方案 C:使用宿主机物理局域网 IP / 默认网关 IP

这是最直接的办法,不需要任何 extra_hosts 选项。直接将代理地址设置为 NAS 在局域网中的固定 IP 地址(例如 192.168.1.100),或者默认的 Docker 网关 IP(通常为 172.17.0.1)。
  • 使用物理 IP
    1. environment:
    2.   - HTTP_PROXY=http://192.168.1.100:7892
    3.   - HTTPS_PROXY=http://192.168.1.100:7892
    复制代码

  • 使用默认网关 IP
    1. environment:
    2.   - HTTP_PROXY=http://172.17.0.1:7892
    3.   - HTTPS_PROXY=http://172.17.0.1:7892
    复制代码

⚠️ 警告(IP 变动风险):如果你的绿联 NAS 采用 DHCP 动态获取 IP,一旦路由器重启或租约到期导致 NAS IP 发生变化,物理 IP 代理配置将失效。建议在路由器中为 NAS 绑定静态 IP。而网关 IP(172.17.0.1)在 Docker 网络不重建的情况下是相对固定的,但安全性较低。


6. 验证代理是否生效

当配置完成后,你可以进入需要使用代理的容器控制台(Terminal),使用命令进行验证:
# 进入目标容器内部,执行 curl 检查代理前后的 IP 变化
  1. curl -I https://www.google.com
复制代码
如果返回 HTTP/2 200 或相应的重定向状态码,说明代理网络已成功打通!
也可以打印当前的出口公网 IP 以做双重确认:
  1. curl myip.ipip.net
  2. # 或者
  3. curl ipinfo.io
复制代码



7. 常见问题排查 (Troubleshooting)


Q1: 启动容器时报错 Is a directory

  • 原因:在拉起 Docker 容器前,没有在宿主机创建空 config.yaml 文件,Docker 默认将挂载路径 /volume1/docker/clash/config.yaml 识别为文件夹并自动创建。
  • 解决方法

    • 停止并删除该容器。
    • 在宿主机中删掉误建的 config.yaml 文件夹。
    • 执行 touch config.yaml 创建空文件,并填入基本配置。
    • 重新拉起容器。


Q2: 外部 Web 控制面板连接不上

  • 原因 1:跨域限制 (CORS):如果你使用的是在线面板,浏览器会阻止向本地未启用跨域支持保持阻隔的位置发送请求。确保 config.yaml 中配置了允许 LAN 以及正确的绑定地址。
  • 原因 2:API 端口未暴露:检查 docker-compose.yml 中的 ports 是否正确映射了 9090:9090,并且在连接面板时,API 地址填的是 http://<NAS_IP>:9090,如有密码,需填入 config.yaml 中 secret 定义的值。

Q3: 开启代理后其他容器的 .local 局域网服务无法访问

  • 原因:容器所有的流量都被强行代理到了 Mihomo,而 Mihomo 试图将 .local 请求发送至代理服务器。
  • 解决方法:在其他容器的代理配置中,可以通过添加 NO_PROXY 环境变量,将局域网和本地请求排除在代理之外:
    1. environment:
    2.   - HTTP_PROXY=http://mihomo:7892
    3.   - HTTPS_PROXY=http://mihomo:7892
    4.   - NO_PROXY=localhost,127.0.0.1,.local,192.168.0.0/16,172.16.0.0/12,10.0.0.0/8
    复制代码



评论

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Copyright © 2026 绿联NAS私有云社区 版权所有 All Rights Reserved. 粤公网安备44030002002555号| 粤ICP备12028978号
关灯 在本版发帖
联系技术支持
返回顶部
快速回复 返回顶部 返回列表