UNRAID All-In-One? 补遗篇(反向代理手把手)
一、前言
首先向大家表示抱歉。
第一件事是我竟然鸽了长达五个月,第一篇文章写于2月中旬,本以为三月份就可以紧接着完善一下使用体验,没成想直接过了半年。
第二件事就是……如很多人预料,我把路由拆分了出去,所以本篇就突然……偏离了 AIO 的主题(所以标题多了个问号
),原因是家中是老楼房,电线铺设不到位可能是,冬天还好,几乎不会遇到什么断电意外,但是自打5、6月份天气炎热以来,常常整栋楼断电,隔三差五断一次,即使有 UPS 的保护,但是架不住他关机啊。因为这边房子是我与家中老人同住的,导致我出门的时候(尤其是过几天回学校,现在因为众所周知的原因延迟开学)我甚至找不到人帮我重新开机一下,而因为路由在 AIO 里,是完全断网状态,所以只好先用回独立路由了,这样可以远程访问到智能插座,主板设置成上电即开机,我只需要远程开关下智能插座就能重新开机了。
但是我仍然要嘴硬一下
,AIO 在条件允许的情况下(比如不会经常有 30 分钟以上超过 UPS 保护范围的断电)仍然是一个很不错的选择。前提是你是希望用一些简单的知识与操作方便自己的生活满足自己的需求,功能得到完善后就放一边不管他了。如果你是热衷于折腾天天重启、改阵列等等等那还是算了,反正对于我个人来说我其实是没有多热衷于折腾这玩意的,浅浅弄一下还行,稍微深层一点我就直接化身懒狗了。
总之各位根据自身需求取舍吧,我为啥非要 AIO 在上一篇文章已经说过了,我个人就是想一次性折腾完然后就放那不管了,就跟写这个文章似的,趁着热乎劲写了第一篇,然后直接拖延半年多。
虽然思路有所改动,但是仍然建议先看一下前文:
二、目前设备状态
1. 随身设备
此前日常使用的设备是 11 Ultra,备用机 iPhone SE 2,此外还有 iPad Pro 12.9 蜂窝版以及一台台式电脑。
现在主力设备换回了 iOS 设备,13 mini,实在是用不来 Android,火龙888夏天就没法用,连蓝牙放会儿歌都热的不行,iPad Pro 没有变,台式电脑因为不打游戏了也基本不咋用了,新购入了一台 MacBook Pro M1 版,购入原因是买了一台 Switch,爱上了这种不用关机随开随关秒加载的感觉,出门抄起来就走,回家一插底座用大屏幕,M1 的 Mac 也能提供这种体验,因为我目前也没有什么需要高性能的应用,续航猛,响应快就完事了。(但是 13 系列的拍照是真的烂
……11 Ultra 仍然承担随手拍的需求)
2. NAS 设备
前几天趁着多多的补贴 13XX 又购入了一块 HC550 16T,添置了一个 9cm 的风扇(利民 9015B )给上层散热,没了。
三、软件配置篇
1. VM 篇
爱快路由
好用是真好用…但是不得已暂时弃用,原因见上文。
主路由换用了 Xiaomi AX6000 硬路由。(我日后一定会换回真 AIO!
)
OpenWRT 旁路网关
网络配置里关闭 DHCP 服务,选择静态地址,指定一个与主路由 IP 段相同的地址,DNS 服务器与网关地址都设置成主路由的地址。
需要辅助插件的设备手动指定网关与 DNS 为旁路网关的地址,不需要的设备保持默认连接即可,相比于使用主路由插件的办法优势在于可以避免意料之外的访问与流量浪费。
仍然使用的是恩山 bleach1991 大佬编译的 BleachWrt Mini。
不喜欢爱快的可以尝试这位大佬编译的 Plus 高大全版 用作主路由,插件内容及其丰富,更新频率很高(当然还是稳定为主,没有折腾的必要)。
然后我就踩了第一个坑:
OpenWRT 的配置什么都没有动,仅仅更换了主路由,然后插件开启绕 IP 的情况下,通过 WI-FI 连接的所有设备都只能访问谷歌等网站,国内网站百度什么的都打不开,而通过网线连接的设备则没有这个问题,研究了好久才想到是主路由的问题,常见于小米华为路由,解决办法见下面链接吧,我水平不够,解释不清。
关于旁路由设置后,主路由WIFI无法上网的问题_锦夏挽秋的博客-CSDN博客_旁路由作为网关不能上网
群晖 DSM 7.0.1
主要用于照片备份与网盘,直通西数紫盘与 1 x 2.5Gbps ,未来有再添置一块紫盘作 RAID 1 的打算,实测外网备份同步速度远胜 Google Photos 与 iCloud,局域网更是飞快。虽然群晖的 App 不能像 Google Photos 那样做到更完美的分类与本地照片管理,但因为空间与速度对于公有云的碾压是一巨大优势,目前单硬盘使用,在 UNRAID 上搭建 WebDav 服务后使用群晖的 Hyper Backup 定时备份到 UNRAID 硬盘(如果群晖与路由共享 CPU 核心的话有可能在群晖算相册人脸和备份的时候因为 CPU 被吃满影响路由的性能)。
已经给家人全部弄了照片备份。
重点: Synology Drive 的 Windows 端端口非手机 App 与网页的 5000 或 5001,而是 6690,在路由器上配置外网端口 6690 转发至内网 DSM IP : 6690 即可在 Windows 端使用域名直连。
我使用 Intel GVT-G 的核显虚拟插件未能成功 GPU 计算人脸,使用了 Jinlife 的教程修改为 CPU 计算。
以下为新内容:
群晖的改动可以说是最少的了,我甚至连系统都没有更新,中间出过一次意外就是更新后手欠把 Drive 的目录索引改成了“家”目录,本来 Drive 只是 home 下的一个文件夹,但是直接变成了整个 home 目录,可能听起来没啥问题,但是……Photo 也是在 home 目录下的,这样就导致 Drive 把 Photo 索引进去了,至少这对我而言是一个非常差劲的改动。可能这样是做成了类似于百度网盘那样的功能,但是目前 Drive APP 对于照片浏览的完善程度还远远不够,Drive 与 Photo 目前还是两个独立的功能,我对他们的数据备份也是分开处理的。
解决方法:
目前新装的 Drive 套件都是默认索引 home 的,可以先下载旧版 Drive 套件手动安装再更新到最新版,只要不手动点重新索引就没问题,见我另一篇文章。
Windows 11
换用 macOS 后难免有一些 Win 端的需求不能在本地搞定,直接 UNRAID 装一个虚拟机,我用的是 不忘初心 精简的 Windows 11 镜像,十分稳定,占用也很少,安装好向日葵,设置好无人值守与开机启动,需要 Win 的时候,直接去 UNRAID 控制面板点一下开机,等 10 秒向日葵就可以看到设备上线进行使用了~向日葵爆杀TeamViewer!
2. Docker 篇
1. 影视套件
浅浅折腾了一下,由手动管理改成了使用 Nas Tools,包含以下:
Nas Tools 总控
Jellyfin 媒体库
qBittorrent 下载器
Jackett 种子检索器
可以实现一站式点片下片与管理,采用硬链接的方式同时做到极其方便的保种与分类。
关于硬链接:我起初没搞懂这个要怎么创建,翻了很多教程发现是自己没仔细读,只需要先按正确的方式创建好文件夹,然后去 Nas Tools - 目录同步 - 创建硬链接再指定创建好的文件夹就可以了。
重要:这种需要套件之间互相访问的 Docker 容器一定要选择相同的网络类型,不能有的用 Bridge 有的用Br0,会访问不到。
站内有很多完善教程,不再赘述。
2. Home Assistant
无大变动,但是踩了坑:Docker 的网络类型必须选择 Host,其他的无法使用。
3. Heimdall 导航页
已弃用,感觉意义并不大,浏览器书签足矣。
4. N 个 WebDav 服务 ( Apache )
我使用的是 apachewebdav/apachewebdav 镜像,没什么好说的这个。直接复制以前的:
用于外网环境挂载 UNRAID 硬盘与备份群晖里的数据等,用处很多,起初是想把 UNRAID 挂载到群晖 Drive 套件内,实测发现不可行,Drive 会无法写入本来的文件夹并且访问不到 UNRAID 内的数据。
四、关于反向代理 Nginx Proxy Manager
这个本来只是一个 Docker,但是内容比较多,我刚开始摸索也是因为看不懂走了好多弯路,决定稍微详细的说一下。
1. 反向代理是什么意思?
代理应该众所周知了,因为众所周知的原因不能说太多,简单打个比方吧:
我想去某个地方,但是因为种种原因,比如我怕被人见到(隐私保护),或者说我走的太慢了我想打个车(加速器),我托另外一个人按照我的意志去帮我办事或者说我租一辆车这样可以速度快一点,前者托的这个人与后者这辆车都可以算作代理,有些代理说是能保护你的隐私,确实他可以让你的目的地不知道你是谁,但是你的代理对你的身份和目的可是一清二楚,自行判断吧就。
反向代理就是说把这个过程反过来,在正向代理里面,“我”是主动方,而在反向代理里面,“我”是被动的,同样打个比方:
我住在某个高端小区里,我点外卖不需要写我的门牌号,只需要说我是某某小区的,外卖员把外卖送到小区之后,有专人接过这外卖再送到我的家门口,这个专人就是反向代理程序,主要保护的是被访问的“我”。因为外卖员只知道我是这个小区的,不知道我家门牌号,我就算给了他差评他也没办法来我家刀我
。
“我”就是运行在我的主机里的一个服务,我的这个小区就是我的主机整体,“专人”是我对外开放的唯一接口。“我”还有别的兄弟姐妹,也就是说主机里还有别的服务,但是究竟有多少服务,只有身为小区建造者(主机搭建者)才知道了。别人只能知道你的小区位置,只能与这个专人交流,必须报上了正确的名字(二级域名),专人才会把外卖员的货品(访问请求)转发到目的地。
2. 通俗易懂的反向代理流程
首先必须要了解的是端口转发。
假如我的 IP 是 103.103.104.104,我买了一个域名叫 allinboom.com ,我设置好了相应的 DDNS 域名解析,此时我 Ping 这个域名会得到我的公网 IP 地址,但是我访问域名是无法响应的,因为家用宽带的 80 与 443 端口被运营商封掉了,80 是 http 的默认端口,443 是 https 的默认端口,假如没有被封的话,访问这个域名就是在访问我的拨号设备(一般为路由器),一般路由器的地址就是 192.168.1.1 加上端口就是192.168.1.1:80,那么我在路由器中配置一下,内网 IP 192.168.1.1 内部端口 80 外部端口 999,保存并应用,关掉手机 WiFI,使用蜂窝数据访问自家 IP,会出现路由器的管理页面,同理可以把群晖的页面与服务、Minecraft 局域网联机转发到外网。
端口转发带来了连通性,也带来了危险性,尽管端口号有很多,但是是有专门的工具可以扫描到某个公网 IP 对外开放了多少端口,开放了那些端口,也就是说内网很多服务可以直接被外网一些别有用心的人访问到,我的群晖 SSH 仅仅一晚上忘了关就接到了数十条登陆请求,务必务必务必做好安全防护。另一个缺点就是,一个服务一个端口记起来很麻烦很麻烦,很多 Docker 什么乱七八糟的默认端口都有。
3. Nginx Proxy Manager 的入门配置(更建议使用 nginx-webui,见下文注意事项第七条)
建议本步骤首先仅仅阅读了解流程,等完成下一步 SSL 配置在回来配置本步骤。
通过 Docker 安装好 Nginx Proxy Manager 后,把反代程序的端口( Http 端口默认 1880 ,Https 端口默认 18443 )转发到端口 888,此时通过 allinboom.com:888 就可以访问到我的反代程序,但是此时,反代程序也不知道我的服务有哪些以及服务的地址是什么,反代程序通过域名来判断访问目的地,没有配置域名或者直接使用 IP 访问的话,就是一个空请求,访问不到任何东西,举例子:
NPM 内配置一条规则,域名设置为: router.allinboom.com 内部 IP 类型选择 Http ,地址填 192.168.1.1 端口80(绝大部分都建议勾选上 Websockets Support )
然后从外网访问 router.allinboom.com:888
(首先 *.allinboom.com:888 解析到 IP 103.103.104.104:888 ,反代程序检测到访问的域名 router.allinboom.com:888 与程序记录的 http://192.168.1.1:80 相匹配)
(括号中的内容是感知不到的)
就会成功访问到路由器管理页面,而直接访问 103.103.104.104:888,因为程序里只记录了域名,没有记录这个 IP,访问请求会被反代程序丢弃,配置好的最终效果就是可以只记一个端口就可以访问到内网所有的服务。
例如:
router.allinboom.com:888 访问路由器
dsm.allinboom.com:888 访问群晖
unraid.allinboom.com:888 访问 UNRAID
jellyfin.allinboom.com:888 访问 Jellyfin
……
相比于单纯的端口转发有几个服务就需要转发几个端口,反代可以一个端口通杀所有,不仅方便记忆、美观、而且更安全,还可以防止被运营商判断为家用宽带建站,群晖作为老牌厂商,运营商肯定是有了解的,但是直接公网 IP 开放一堆端口,又是视频网站,又是博客,怕是直接被停宽带了。
强调:反代是防止我们正常使用被误伤,而不是偷偷摸摸开视频站网站盈利用的,不要觉得有了反代就可以随便浪了,运营商还是掌握生杀大权的。
反代带来的最方便的是几乎一劳永逸的 SSL 配置,即给域名加上 https 访问,因为反代程序与内网链接走的是内网,保持 http 即可,只需要单独给反代程序配置好 SSL,即可完成所有服务的 https 化。
默认用户名密码:admin@example.com changeme
4. SSL 配置( https )
首先安装好 Docker cym1102/nginxwebui,进入 WebUI,点击左侧证书管理-添加证书
域名格式使用 *.域名,如上文所示,如果你买的域名是 allinboom.com ,那么这里就填 *.allinboom.com:888。(端口取决你上一步转发的多少)
其他信息按自己的填,不知道填啥去参考下别人的 DDNS 配置教程。
提交后会生成两个证书文件( key 与 pem ),通过 UNRAID 主页面或者 File Browser 下载下来(路径 /mnt/user/appdata/nginxwebui配置文件夹/你的域名名称文件夹),在 NPM 中点击
SSL Certificates - Add SSL Certificates - Custom
Name 随便填,最好是域名,Certificates Key 选择扩展名为 Key 的文件,Certificates 选择扩展名为 pem 的文件,最后一个不带星号的不需要选。
然后在创建反代规则时候 SSL 里选上这个证书,四个框框,开启上面两个,就完成了 Https 化。
none 的位置选择刚导入的证书,开启下面 Force SSL 与 HTTP/2 Support
5. 注意事项
1. 上一条中生成的证书有效期为 90 天,到期前记得重新生成证书导入一下。
2. 尽管上文说了可以对群晖进行反代,但是实际使用中发现了 Bug ,NPM 似乎不支持传输单个大文件,我群晖相册备份 6G 多的视频失败了,APP 中报错,似乎是 Nginx 端的问题,暂未寻找到解决方案,所以我的群晖采用的端口转发直连,务必使用强密码而且非必要不要保持 SSH 长开。
3. NPM 的网络类型与需要代理的 Docker 网络类型必须保持一致,以 Br0 模式安装的 NPM 只能代理以Br0 安装的 Docker,以 Bridge 模式安装的 NPM 只能代理以 Bridge 安装的 Docker,这也是我踩的很严重的坑,因为我不是很懂 Docker 的运行机制,真实的局域网设备不受此影响,比如 Bridge 模式的 NPM 可以正常代理具有独立 IP 的群晖、路由器、其他局域网设备等( Br0 模式的 NPM 不能代理 UNRAID 主页面)。
4. 通过反代访问 UNRAID 时,在端口后面加上 /login。
示例:https://unraid.allinboom.com:888/login
5. 在没配置 SSL 前,在路由器中转发 http 端口,http 端口默认 1880 ,https 端口默认 18443,配置完后即可修改为转发 https 端口使用 https 访问。
6.为什么上一篇我选择群晖自带的反代这篇弃用了?因为很慢。
7.nginx-webui 同样可以承担反代功能,而且更简单便利,少了一步导入证书,nginx-webui 直接自己生成证书自己用,但是我已经用上 NPM 了,后来才了解到的 nginx-webui,我的代理规则比较多,犯懒了就没有切过去,下次证书到期我可能会全部搬过去,各位如果能看懂这篇原理的话应该是可以自己摸索使用更简单的 nginx-webui 的。
五、结尾
大概就是这样了,有错误恳请各位大佬指证,由于主要面向新手,所以绝大部分功能都选择带 UI 的方便操作。
不出意外的话,下次长文是新房装修了,还没买,在哪买也不知道,可能得几年吧还,笑死
。
作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~






xdos
2、unraid访问需要手动代后缀,自己配置一个location跳转即可
3、npm自带ssl证书申请,调用dns接口可以自动更新证书
校验提示文案
赵日天到此一游
校验提示文案
Faith-
断网状态是如何远程操作智能插座的?我当时也有这个想法,不过在这一步卡住了
校验提示文案
wjjahah
校验提示文案
Alex1989zh
校验提示文案
猫叔卖咸鱼
校验提示文案
joker95275
校验提示文案
风中林立
校验提示文案
李败五
校验提示文案
发条尘
npm除了在docker配置页面中摄之外,还需要在域名提供商解析页面添加记录,文章是不是少了这一步?
npm传输超过1G的大文件我记得要添加什么命令,以解除限制。
另外,探讨下,反代到底安不安全?如果被别人猜到域名,岂不是也容易被暴力破解?我还没找到比较安全的反代方式,所以还在用wireguard。
校验提示文案
某某小朋友
校验提示文案
李柯本
我可以在路由器里将80端口指向别的端口号吗,这样好像可以实现,但不知道会不会有安全隐患,希望得到答复,谢谢🙏
校验提示文案
DUOi
校验提示文案
值友9191293554
校验提示文案
LmanTs
校验提示文案
wjjahah
校验提示文案
EXSI
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Range $http_range;
proxy_set_header If-Range $http_if_range;
proxy_redirect off;
proxy_pass 去看看:5244;
# the max size of file to upload
client_max_body_size 20000m;
}
代理地址 改一次复制到高级里,就可以上传大文件了。body_size 大小自己改
校验提示文案
欧洛伦的爷爷
校验提示文案
小小小tiny
校验提示文案
conbbyn
校验提示文案
wjjahah
校验提示文案
LmanTs
校验提示文案
值友9191293554
校验提示文案
钱大宝宝宝宝宝
校验提示文案
DUOi
校验提示文案
czh_max
校验提示文案
EXSI
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Range $http_range;
proxy_set_header If-Range $http_if_range;
proxy_redirect off;
proxy_pass 去看看:5244;
# the max size of file to upload
client_max_body_size 20000m;
}
代理地址 改一次复制到高级里,就可以上传大文件了。body_size 大小自己改
校验提示文案
欧洛伦的爷爷
校验提示文案
一冇有一
校验提示文案
李柯本
我可以在路由器里将80端口指向别的端口号吗,这样好像可以实现,但不知道会不会有安全隐患,希望得到答复,谢谢🙏
校验提示文案
大熊本熊
校验提示文案
某某小朋友
校验提示文案
conbbyn
校验提示文案
发条尘
npm除了在docker配置页面中摄之外,还需要在域名提供商解析页面添加记录,文章是不是少了这一步?
npm传输超过1G的大文件我记得要添加什么命令,以解除限制。
另外,探讨下,反代到底安不安全?如果被别人猜到域名,岂不是也容易被暴力破解?我还没找到比较安全的反代方式,所以还在用wireguard。
校验提示文案
李败五
校验提示文案
风中林立
校验提示文案
joker95275
校验提示文案
猫叔卖咸鱼
校验提示文案
Alex1989zh
校验提示文案
wjjahah
校验提示文案