梯子
NAS 和群晖怎么走梯子:Docker 拉镜像、下载工具、套件更新分别设置
群晖、威联通或自组 NAS 上 docker pull 超时、GitHub Release 下不动、第三方套件源更新失败?本文对比旁路由整机代理、指向局域网代理、容器内运行 Mihomo 三种做法,讲清 Docker 守护进程、下载工具和套件更新各自怎么配,以及为什么 BT / PT 要保持直连。
简短回答
最省事的是让 NAS 只把需要出海的服务指向局域网里已开启“允许局域网连接”的代理(或旁路由),Docker 守护进程单独配置代理,BT / PT 下载保持直连,订阅链接不要写进公开的配置文件。
30 秒梯子选择器
回答 4 个问题:设备、用途、预算、流量,直接得到 3 个候选和理由。
快速步骤 · 6 步
- 01准备一个局域网代理
在常开的电脑、软路由或旁路由上运行代理客户端,开启允许局域网连接,记下该设备的局域网 IP 和 HTTP / 混合端口。
- 02配置 NAS 系统代理
在 NAS 系统的网络设置中填写代理服务器地址,供系统更新和套件检查使用,具体选项位置以所用系统版本为准。
- 03单独配置 Docker 守护进程
拉镜像由 Docker 守护进程执行,需要为守护进程设置 HTTPS_PROXY 与 NO_PROXY,并重启 Docker 服务。
- 04给需要出海的容器加环境变量
在 compose 文件的 environment 中写入代理地址和 NO_PROXY,不需要代理的容器不加。
- 05让 BT / PT 保持直连
下载器不设置代理;若用旁路由整机代理,把 NAS 的下载流量按来源 IP 或端口设为直连。
- 06验证并收紧权限
拉取一个镜像、下载一个 Release 文件确认生效,再检查代理端口没有暴露到公网、订阅链接没有写进共享目录。
NAS 哪些流量需要走梯子
NAS 上真正需要出海的流量很集中:Docker Hub 等镜像仓库的 docker pull、GitHub Release 里的程序包、托管在海外的第三方套件源,以及部分应用的元数据刮削。它们在国内直连时常见超时或只有几十 KB/s。最稳妥的思路是只让这几类流量走代理,其余全部直连:NAS 通常 7×24 小时在线,整机全局代理既浪费机场流量,也会拖慢局域网和远程访问。下面先选接入方式,再按 Docker、下载工具、套件更新分别配置。
三种接入方式怎么选
| 方式 | 做法 | 优点 | 缺点 |
|---|---|---|---|
| 旁路由整机代理 | 把 NAS 的网关指向旁路由 | NAS 上零配置,容器也自动生效 | 要额外设置 BT / PT 直连,否则流量全进机场 |
| 指向局域网代理 | NAS 各服务填写 192.168.x.x:7890 这类地址 | 按服务开关,最可控 | 每个服务要单独配 |
| 容器里运行内核 | 在 NAS 上跑 Mihomo 或 sing-box 容器 | 不依赖其他设备常开 | 要自己维护配置和订阅更新 |
家里已经有软路由的,直接参考 路由器梯子方案 和 OpenWrt 插件对比。没有的话,第二种最适合新手:在一台常开的电脑或路由上运行客户端,打开“允许局域网连接”类选项,记下它的局域网 IP 和端口(下文写作 192.168.1.10:7890,以实际为准)。
重要
NAS 上要填代理设备的局域网 IP,而不是 127.0.0.1。127.0.0.1 永远指向本机,在容器里则指向容器自己。
Docker:守护进程和容器分开配
拉镜像的是 Docker 守护进程,不读你在 SSH 终端里 export 的变量。标准 Linux 上用 systemd drop-in 为 dockerd 设置代理,完整命令见 程序员梯子 一文,这里不重复。群晖 Container Manager、威联通 Container Station 的守护进程启动方式与标准 Linux 不完全相同,修改方法以官方文档或所用版本的社区说明为准;嫌麻烦就用旁路由让 NAS 整机走代理,最省心。
容器内的应用(例如需要访问 GitHub API 的工具)要在 compose 文件里单独加环境变量:
services:
app:
image: example/app:latest
environment:
- HTTPS_PROXY=http://192.168.1.10:7890
- HTTP_PROXY=http://192.168.1.10:7890
- NO_PROXY=localhost,127.0.0.1,192.168.0.0/16
NO_PROXY 一定要包含局域网网段,否则容器之间、容器访问 NAS 自身服务也会被送去代理。改完守护进程配置后,执行一次 docker pull hello-world 验证:几秒内完成说明代理已生效;仍然超时,先在 NAS 上用 curl -x 指定同一个代理地址访问一次外网,区分是代理不通还是守护进程没读到配置。
在 NAS 上运行 Mihomo 容器
不想依赖其他设备时,可以在 NAS 上运行 Mihomo 内核:用 host 网络模式启动,把配置目录挂载进容器,配置里开启 allow-lan 并设置 authentication,其他容器和设备再指向 NAS 的 IP 与端口。注意一个“先有鸡还是先有蛋”的问题:拉取 Mihomo 镜像本身也要访问镜像仓库,第一次可以先借用局域网代理拉取,或在电脑上 docker save 导出后到 NAS 上 docker load 导入。
下载工具与套件更新
- HTTP 下载:aria2 这类工具可以用
all-proxy选项指定代理,适合下载 GitHub Release 等海外文件。 - BT / PT:保持直连。BT 流量大且连接数多,走机场会迅速耗尽套餐;不少 PT 站点要求固定 IP 或明确禁止代理,很多机场的服务条款也不允许 BT 下载。旁路由方案下,用 Mihomo 的
SRC-IP-CIDR规则把下载器所在 IP 设为直连,镜像拉取改用局域网代理。 - 系统与套件更新:在 NAS 系统网络设置的代理服务器选项中填入局域网代理,官方更新和多数套件通常直连即可,海外托管的第三方套件源才需要它。
订阅链接与端口安全
| 检查项 | 做法 |
|---|---|
| 订阅链接 | 只放在仅管理员可读的目录,不写进会同步到网盘或 GitHub 的 compose 文件 |
| 代理端口 | 不做公网端口转发,开启 authentication |
| 控制面板 | external-controller 设置 secret,只监听局域网 |
| 设备数 | NAS 也算一台在线设备 |
订阅泄露后的处理见 订阅链接安全。设备数方面,按本站数据二猫云、宇宙云、微风网络都标注不限同时在线设备,NAS 加进来不必担心超出限制。
常见问题
QNAS 上能直接装 Clash Verge 这类桌面客户端吗?
多数 NAS 系统没有图形桌面,桌面客户端不适用。常见做法是在容器里运行 Mihomo、sing-box 这类命令行内核,或者干脆让 NAS 使用局域网里另一台设备提供的代理。
Q局域网代理地址填了,NAS 还是连不上?
依次检查三点:代理设备上是否开启了允许局域网连接;该设备的系统防火墙是否放行了代理端口;填写的是代理设备的局域网 IP,而不是 127.0.0.1。
Q容器里的程序为什么不走 NAS 上设置的代理?
容器有自己的网络环境,通常不会继承 NAS 系统层面的代理设置,需要在容器的环境变量里单独写 HTTPS_PROXY,而且地址要写容器能访问到的局域网 IP。
QNAS 走梯子会用掉很多机场流量吗?
只让镜像拉取、Release 下载和更新检查走代理时,流量通常不大;真正吃流量的是 BT / PT 和大文件同步,这些应保持直连。
Q用旁路由整机代理后,NAS 的远程访问还能用吗?
一般可以,但要确认 DDNS、内网穿透等服务的域名与回程流量走直连,否则外部访问可能变慢或失败。改完后用手机流量实际访问一次验证。