前言
随着家庭nas对外服务日渐增多,便捷安全的访问家庭服务成为必不可少的一环。
场景一:群辉提供photos服务,家人手机客户端通过https连接访问,而群辉证书需要手动导入定期维护易用性差,如果让家人先接VPN再连photos = 软件不可用。
场景二:自建vaultwarden服务,对外连接时必须要https安全访问,要么利用群辉自有反代,要么自建反向代理服务。
场景三:自建emby服务,采用macvlan的方式单独分配了局域网ip(方便流控),而群辉(单网卡)作为宿主机无法与emby(容器)通信,无法使用群辉自有反代或者群辉docker容器自建反代。
综合上述等多个场景的问题最后选择在爱快中安装docker,同时部署容器nginx manager proxy(简称npm)反向代理,解决外网安全访问家庭NAS服务的问题。反向代理没有采用Lucky还是本着开源的项目进行挑选,同时nginx作为反向代理较为成熟,自定义配置自由度较高。
官网地址:https://nginxproxymanager.com/
github地址:https://github.com/NginxProxyManager/nginx-proxy-manager?tab=readme-ov-file
前提条件
- 域名一枚(任意运营商即可)
- NAS一台
- 爱快(理论来说能跑docker就行,OP也可以)
NPM安装
1、绑定爱快云,同时在爱快云下发docker插件,在爱快 高级应用>插件管理 看到docker图标表示下发成功。
![[Docker]反向代理Nginx Proxy Manager安装设置安全访问NAS服务](/wp-content/uploads/replace/4e35c854c80ff3a879770b61bff7dab8.png)
2、在 系统设置>磁盘分区,重新分配磁盘分区(普通存储),然后挂载 opt 路径(路径可以自定义)
![[Docker]反向代理Nginx Proxy Manager安装设置安全访问NAS服务](/wp-content/uploads/replace/cbe0712e52a5aec8a51380d5ea87a8c8.png)
3、文件管理中建立2个目录:/opt/docker/npm/letsencrypt和/opt/docker/npm/data,用于后续npm容器的数据持久化。
![[Docker]反向代理Nginx Proxy Manager安装设置安全访问NAS服务](/wp-content/uploads/replace/33ba759079f031649e4a3be4adb3f7c6.png)
4、自定义docker镜像源:https://registry.hub.docker.com,存储位置主要用来存放下载的镜像,如果dockerhub官方镜像源无法访问,可以使用国内镜像。
![[Docker]反向代理Nginx Proxy Manager安装设置安全访问NAS服务](/wp-content/uploads/replace/126330105e5a7d0b35af6c7d49691cce.png)
5、镜像管理>添加,搜索镜像 jc21/nginx-proxy-manager,然后 下载 latest,等待下载完毕;如果无法下载或者进度条没有动静请按照步骤3将镜像源切换到国内源。
![[Docker]反向代理Nginx Proxy Manager安装设置安全访问NAS服务](/wp-content/uploads/replace/883958ea226f7b1dace3341187aa8c70.png)
6、接口管理>添加,名字随意,IPV4地址:172.17.0.0/24,IPV4网关:172.17.0.1,主要是用于docker内部IP分配,可自行定义
![[Docker]反向代理Nginx Proxy Manager安装设置安全访问NAS服务](/wp-content/uploads/replace/4d3a31e5c45490fe4f8bf4f1433414d7.png)
7、容器列表>添加,名称随意,内存500M都够,IPV4和IPV6地址空着即可,容器路径按照截图映射下
![[Docker]反向代理Nginx Proxy Manager安装设置安全访问NAS服务](/wp-content/uploads/replace/cb9d1c8fe795f7e0d3becd63c2cd2151.png)
8、此时容器已经启动,同时应该分配了内网IP:172.17.0.2;端口映射处新增映射,外网端口自定义记住即可,内网端口转发2条,58443到443(https端口),58081到81(npm管理面端口)
![[Docker]反向代理Nginx Proxy Manager安装设置安全访问NAS服务](/wp-content/uploads/replace/984b68cb2270837b7a092ad05663ff5b.png)
![[Docker]反向代理Nginx Proxy Manager安装设置安全访问NAS服务](/wp-content/uploads/replace/d6ccf3eca07e4293917d6c26b7e38769.png)
9、设置完成后,通过域名+端口应该可以访问npm的管理面(域名ddns此处不做详述),默认账号:admin@example.com,密码:changeme;登录后记得修改账号密码
![[Docker]反向代理Nginx Proxy Manager安装设置安全访问NAS服务](/wp-content/uploads/replace/bc33c49c39e1d1c70e8e53e0e28d2186.png)
![[Docker]反向代理Nginx Proxy Manager安装设置安全访问NAS服务](/wp-content/uploads/replace/f051db5b4b1ececcd462c1d4180c97f9.png)
10、SSL证书申请,填写自己的域名,建议直接申请泛域名,例如自己的域名为a.com,那么此处填写 *.a.com和a.com,所有子域名都可以用此证书;邮箱随便填写,DNS提供商主要是域名当前哪解析,需要授权进行DNS验证(此处也不做详述,如有需求后续细说),等待1分钟证书已经申请完毕;npm同时提供Let’s Encrypt证书的自动续期,后续无需再手动续期。
![[Docker]反向代理Nginx Proxy Manager安装设置安全访问NAS服务](/wp-content/uploads/replace/33ee2e41afbfbe3e1f2339239a4bf510.png)
11、配置代理,填写自定义的二级域名xxx.a.com,然后需要映射的服务IP地址和端口,选择刚才建立的SSL证书,开启强制SSL,保存完毕
![[Docker]反向代理Nginx Proxy Manager安装设置安全访问NAS服务](/wp-content/uploads/replace/d182e84207bc7053b199a59923527fd4.png)
![[Docker]反向代理Nginx Proxy Manager安装设置安全访问NAS服务](/wp-content/uploads/replace/9da87b1ea081c037d7699454c930f1b8.png)
12、域名解析商新增一条cname到ddns对应的域名即可,然后通过:https://xxx.a.com:58443 访问对应的服务。
NPM反代的优势
- 对外服务都通过https访问,通信安全有保障,同时NPM提供自动续签减少人工维护成本。
- 只对外暴露一个https的端口:58443,通过不同的二级域名进行内网服务区分;即使端口被扫,不知道域名也无法访问服务,端口+域名二者缺一不可。
FAQ
问:npm安装后,登录时报错:Bad Gateway。
![[Docker]反向代理Nginx Proxy Manager安装设置安全访问NAS服务](/wp-content/uploads/replace/1c79c261c15c37b2cce63809c7a6959f.png)
答:这种是拉取的镜像与当前架构不一致导致的问题,拉取镜像时指定 2.10.4 版本即可,感兴趣的可以查看issue:https://github.com/NginxProxyManager/nginx-proxy-manager/issues/3631
问:群辉photos,ds file等都无法连接。
答:群辉photos,ds file软件http端口都是5000(一定不要用自定义端口),反向代理时指定到5000端口。群辉端口速查:https://kb.synology.cn/zh-cn/DSM/tutorial/What_network_ports_are_used_by_Synology_services
问:为啥一定要自定义端口?
答:家宽一般都屏蔽了80,443端口,所以需要用自定义端口替换
问:有没有不带端口的直接用二级域名访问的方案?
答:有,简单说下2个方案:隐性URL转发(域名须备案),CF配置端口转发(Page Rule)
问:没有公网IP如何访问家庭服务?
答:配置cloudflare tunnel,勉强能用;询问运营商开通IPV6,有IPV6会简单很多
后记
通过npm配置基本实现了家庭web服务的安全访问,分享相关的经验给小伙伴们,有问题可以评论区一起交流探讨,后续不定期更新软路由/网络/NAS等文章,记得点赞关注转发加一键收藏。
Proudly powered by lsolol