Karl Wonders

Karl 在想什么呢

🏗️ NAS 折腾记:为了装个相册,差点重建网络环境

8
2026-01-08

技术讨论前置声明

本文仅作代理技术协议、加密逻辑的纯技术探讨,仅限企业合规专线、局域网管理等合法场景参考,不涉及任何非法跨境网络访问行为。

违规使用相关技术产生的一切责任,与本文作者无关。

12.jpg

手机相册管理老头疼了。截图、连拍的废片、不同名但画面相同的照片,几千张照片堆在一起,找张图比登天还难。

我有一台 NAS ,可以帮我解决文件太多没地方放的麻烦,我把各种相片都丢在了上面。

简单说,NAS 就是一台你自己的网盘,跟电脑差不多,硬盘大点。往角落一放,24 小时开着,专存各种电子文件。

NAS 支持安装一个厉害的相册管理软件 Immich,AI 整理功能很吸引我,能自动分类各种照片,又能识别出哪些是重复,便于管理,关键是可以在自己的机器上完成,不泄露隐私。

想搭很久了,可总是在第一步就卡住。

Immich 的安装包(Docker 镜像)在海外服务器上。首先必要的安装包就下不下来。

为了装个软件,我得先解决 NAS 的「上网」问题。

🥊 第一回合:想走个捷径

(为什么电脑能上网,NAS 却不行?)

上篇文章我才解锁一个新技能(Mac当局域网代理)。既然旁边的 Mac 电脑能畅快访问外网,那我让 NAS 连上 Mac,蹭一下网不就行了?

🛠️ 操作尝试: 我在 NAS 设置里填了 Mac 的 IP。我想着,只要 NAS 把请求发给 Mac,Mac 再转发出去,路就通了。

❌ 结果: NAS 系统 DSM 确实通了,但 Docker(Immich 要装在这里,稍后介绍 Docker) 还是断网

🧠 为什么 Mac 代理行不通?

这其实是 应用层代理网络层路由 的区别。

🏠 场景比喻:房东与租客

  • NAS 系统(房东 👨‍💼): 我在控制面板设代理,相当于给房东留了个条子:「你出门,走隔壁 Mac 家」。NAS 自带的软件听指挥,照做了。

  • Docker(租客 📦): Docker 里的软件完全不看这个条子,准确得说是看不到。

    1. 不看通知 🙈:宿主机(就是我的NAS)的代理设置,默认不会传给 Docker 容器。

    2. 自己有路 🐕:Docker 上网用的是 「网桥 (Bridge)」 技术。它就像在后墙偷偷开了个 门洞,直接连到路由器出去了。就算我让房东在前门喊破喉咙让大家走隔壁,Immich 还在那儿走自己的门洞,自然是不管用的。

结论:NAS走代理没用,Docker根本不知道走代理。

📦 第二回合:困在集装箱里

(Docker 的原理与隔离)

既然蹭网不行,那就内部解决。我想:在 Docker 里再装一个负责网络代理的程序,让它俩内部合作应该就可以了。

结果证明,事情不是那么简单的。这里得聊聊 Docker 到底是干嘛的

1. 什么是 Docker?

简单说,Docker 把软件和它运行需要的环境,一起打包进一个密封的 「集装箱」 (容器)里。不用在外面的系统里装啥东西,打开就能用。

2. 为什么会「隔离」?

我以为把「代理容器」和「Immich 容器」放一起就能互通。完全想错了。

🛡️ Docker 的逻辑:「共享内核,隔离应用」

  • 共用心脏(内核)❤️: 它们共用 NAS 的操作系统内核,就像租客共用厨房厕所。

  • 互相看不见(Namespace)🕶️: 但 Docker 给每个集装箱都戴上了眼罩。

    • Immich:住在房号(IP地址) 172.17.0.2

    • 魔法容器:住在房号(IP地址)  172.17.0.3

虽然物理上它俩在同一块硬盘上,但在逻辑上,它俩就像住在两个平行的宇宙。除非我再去学一堆复杂的 Linux 网络命令来给它俩搭桥,否则它们 老死不相往来

🏗️ 第三回合:换个思路

(软路由与 VMM)

Docker内部和NAS系统都没啥办法,要么就往外求,再往前走一步:软路由 OpenWrt 

1. 什么是软路由OpenWrt?

平时用的路由器是个硬件,就是那个接网线的盒子。软路由 就是拿普通电脑(比如我的 NAS)当路由器用,从软件层面上解决。

OpenWrt 是它的系统。说是能从 底层 接管所有流量,像交警 👮‍♂️ 一样指挥交通,让 Docker 和 NAS 乖乖走大路,别各走各的。

2. 什么是 VMM?它和 Docker 有啥区别?

要在 NAS 里跑 OpenWrt,得用群晖的虚拟机 VMM (Virtual Machine Manager)。我一开始也不懂Docker跟虚拟机啥区别,其实有很大不同:

🆚 技术对比

特性

Docker (容器) 📦

VMM (虚拟机) 🏘️

模式比喻

合租隔间

楼里盖楼

核心机制

共用一个心脏(内核)

模拟出一台完整的新电脑

隔离程度

视线隔离,容易受限

物理级隔离,完全自主

网络权限

权限低,怕搞崩宿主机

权限高,随便改路由表

我的计划:在NAS上用 VMM 虚拟一台 OpenWrt,让它接管NAS和Docker所有的网络,甚至全家的网络环境都能因此改变

☠️ 第四回合:彻底卡壳

理论无懈可击。我填好 CPU 、内存、网卡等等参数,选好合适的映像(就是系统盘),然后「开机」。

💥 炸了。无论多少次都是报错,虚拟机装好了但是打不开,一遍又一遍排查问题。

最好没招了,查了半天资料,真相只有一个,就因为我的 NAS 是 「黑群晖」(来自非官方硬件,但装了群晖系统)。

平时使用完全没毛病,但 VMM 不行,它很挑剔。

VMM 启动时会发出非常底层的 KVM 虚拟化指令

这个指令是专门说给真群晖 CPU-J3455 听的。但我的黑群晖是 CPU-J3160 收到指令直接懵了:「大哥你说啥?给我整不会了。」

📉 结局:VMM 方案大失败,虚拟机从根本上就启动不了。

🎓 最后

折腾了一圈,Immich 还是没装上。不过倒也不算白忙活。还是学到一些:

  1. 🌐 网络层级:宿主机的代理只是个环境变量,影响不了 Docker 的网桥,它还是直接走独立门洞。

  2. 📦 Docker 原理:容器是共用内核的隔离沙箱,不手动打通网络,互相之间就是孤岛。

  3. 🏗️ 虚拟化技术:VMM 是模拟完整硬件,拥有独立内核,适合跑 OpenWrt 这种需要底层权限的系统。

  4. 🧱 硬件底层:黑群晖伪装出来的型号信息在遇到底层虚拟化指令时无所遁形。