[一次搞定] NAS反代设置教程,轻松实现内网服务访问

发表时间: 2024-09-30 10:25

引言

近年来NAS市场可谓百花齐放,相信有不少朋友已经使用上了NAS,NAS除了提供日常数据集中管理、相册备份、文件分享等基础功能外,还可以借助NAS部署各种虚拟机、docker容器等等三方应用、服务。

那么势必会使用到DDNS远程访问、反向代理、端口转发、远程加密访问等功能,所以本期就结合DDNS+Nginx Proxy Manager来演示一下如何一次使用NAS实现以上功能,一劳永逸解决远程访问和相关远程安全问题!话不多说,本篇有点长,以下是大纲,请按需跳转查阅~

  • 部署效果演示
  • 出场设备一览
  • NPM部署演示
  • DDNS部署演示
  • NPM基础优化
  • 反代、加密设置
  • 端口转发
  • 结尾

看完本篇可以实现什么效果

通过本期演示,你可以使用NAS实现以下功能和玩法~

1、借助家宽的公网IPV4、IPV6+域名实现远程访问家中NAS、各内网设备;

2、通过域名+NPM实现反代内网中的各种设备、NAS中的三方服务;

3、通过NPM给远程访问套上SSL证书实现https加密访问,让远程更加安全、可控;

4、借助NPM的端口转发隐藏内部服务、实现各种进阶玩法;

出场设备一览

本次出场的主要演示设备是来自绿联私有云DXP4800,如果你是其它支持docker的设备也可以使用通用docker命令进行部署,来简单介绍一下这台性价比极高的绿联DXP4800~

一台NAS要想使用体验好,最基础的就是硬件配置了,绿联DXP4800搭载英特尔四核N100处理器、标配8G DDR5内存,当然内存是可扩展的,最大可以扩展到16G满足各种虚拟机和docker需求,并且它的做工在所有NAS中可以说是没得挑的,一体式铝合金机身、彰显设计美感的造型、精致丝滑的硬盘仓、明亮但不刺眼的可调节亮度的指示灯,细节非常到位!

盘位方面提供了4个3.5寸+双M.2共6盘位设计,接口方面提供了高速USB-C、USB-A等接口若干、还有双2.5G网口加持,完美就是主流旗舰NAS的配置,对于摄影或视频玩家最友好的是还提供了SD卡槽,方便接入存储卡拷贝素材,在众多NAS中好像就绿联DXP系列NAS有提供,你可以不用,但它不能没有!

在最重要的系统方面,绿联DXP系列搭载的是全新的UGOS Pro系统,目前也已经开放了针对老机型升级新系统的通道,强烈建议喜欢折腾的玩家升级,因为全新UGOS Pro系统经过几个月的大版本更新,目前已经非常稳定和好用了!

比如说docker支持compose了,部署容器、项目更加方便;影视中心支持原盘播放;虚拟机新增对macvlan网络支持,支持桥接网络,宿主机和虚拟机可以通信了;还有相册AI模型升级,识别能力更上一层楼等等,毕竟UGOS Pro基于全新Debian底层,系统更加好用也只是时间问题。

感兴趣的小伙伴可以申请官方体验账号一试,试过就知道所说不虚,话不多说,咱们进入本篇正题~

Nginx Proxy Manager部署

Nginx Proxy Manager(下文简称NPM)除了原作者版本外,还有其它许多基于原版修改而来的,比如有汉化版、使用非80、443端口的非标版,因为家宽的80、443端口基本是不能用的,所以非标版比较适合部署在NAS上,所以本期我们使用jlesage/nginx-proxy-manager版本的NPM来演示!

常规通用docker部署

首先是常规的docker部署命令,请确认当前NAS主机的8080、8181、4343和3000端口未被占用,~/data和~/letsencrypt请填写真实映射主机目录即可,然后打开SSH粘贴修改好的命令运行即可部署成功。

docker run -d \    --name=nginx-proxy-manager \    -v /docker/appdata/nginx-proxy-manager:/config:rw \    -network=host \    jlesage/nginx-proxy-manager

Docker-Compose部署

但是是dcoker run命令对于新手来说还是有点难了,咱们就使用compose来部署吧,请确认当前NAS主机的8080、8181、4343和3000端口未被占用,以下是docker-compose部署命令,可以不用改,直接使用以下完整命令即可。

version: '1'services:    nginx-proxy-manager:        image: jlesage/nginx-proxy-manager        volumes:            - ./docker/appdata/nginx-proxy-manager:/config:rw'        network_mode: "host"

在诸多新势力NAS品牌中,绿联UGOS Pro系统是最先支持compose编排的,走在前列!

NAS支持Docker Compose编排的作用在于简化多个容器的管理和部署,使用Compose,你可以通过一个配置文件轻松定义和运行多个服务,自动化环境设置,减少手动操作的复杂性,相比于普通docker run命令和UI界面手动部署容器的方式真的方便太多了!

在绿联docker中新建项目,在Compose配置这里直接粘贴前面提供的命令,在项目名称这里随意命名,我写的是jle_npm,然后存放路径会自动生成一个路径,咱们不用管,它会在绿联默认的docker文件夹下进行存放,非常方便,这个自动生成免去新手的疑问,很人性化,而且你可以发现vloumes部署的路径写的是./docker这种开头,它会默认按命令在存放路径下生成这个映射路径,真的舒服,因为不用你自己去找绝对路径,这种相对路径的方法极大降低了部署难度。

好了,现在你直接点击立即部署,没错,就搞定了!

PS:请配置好docker加速或代理,不然拉取不成功~

然后它会出现一个部署日志,等它自动拉取镜像,最终出现Created提示就说明部署成功,点击完成。

在绿联docker的项目这里就可以看到npm正常运行了,双击可以进入容器详情进行管理。

而且绿联的compose还支持重新编辑,在Compose配置一栏可以看到之前咱们粘贴的命令,如果你想要更改端口或镜像版本,直接在此处手动修改,重新部署就可以,即改即生效,也不用担心原有配置会失效,有时发布了新容器版本,直接在这重新部署一次就行了,真的方便。

打开你的浏览器,输入NAS的IP地址加8181端口号即可进入npm后台管理界面,邮箱默认是admin@example.com,密码默认是changme,点击登录。

登录后会提示你输入一下邮箱,输入你真实邮箱地址,点击保存,再按提示修改一下密码即可,修改密码处填写默认密码changme,新密码和确认密码就填写你自定义的密码,请使用复杂密码,不然会提示无法更改。

更改完默认密码后就可以来到后台主页了,主要功能如下图所示,提供了反代、重定向、端口转发和错误页面功能,下面咱们结合实际案例来演示一下这些功能具体怎么用吧!

DDNS部署

要想完美使用NPM的以上功能,你还需要一个使用一个域名来解析当前NAS的公网IP,不管是公网IPV4或公网IPV6都可以使用,首先部署DDNS-GO进行动态域名解析吧,因为DDNS-GO完美支持IPV4和IPV6。

首先是常规docker部署ddns-go的命令,其中/opt/ddns-go部分请替换为真实NAS主机上的目录,然后通过SSH粘贴运行即可部署。

docker run -d --name ddns-go --restart=always --net=host -v /opt/ddns-go:/root jeessy/ddns-go

但compose部署是最简单的,compose命令如下,如果是绿联UGOS Pro的小伙伴,不用做任何更改,复制它就行。

version: '1'services:    ddns-go:        image: jeessy/ddns-go        volumes:            - ./opt/ddns-go:/root'        restart: always        container_name: ddns-go        network_mode: "host"

然后在绿联的项目中新建,粘贴前面命令到配置框中,项目名称随意命名,点击立即部署,等它自动部署完毕。

部署完成后,在ddns-go项目的日志中就可以看到有提示了,很明显是通过9876端口进行后台管理。

在浏览器中输入NAS的内网IP加9876端口号,访问,初次访问直接点击登录,它是没有账密的。

进入后台,往下拉,在『其他』部署取消勾选『禁止公网访问』这个按钮,并自定义用户名和密码,下次就通过个这账密进行ddns-go后台登录。

接着去阿里云或腾讯云申请一个十块左右那种一年的域名,随意都行,我这里就以阿里万网为例,随意申请一个,输入要的域名字符,找那种最便宜的就行,按提示购买,非常简单的流水式操作,按提示就行,非常简单,我就不演示了。

购买完域名后,返回ddns-go后台,点击阿里云(如果你是其它域名商,请按需选择,以下列表的都支持),点击创建AccessKey,跳转后按提示创建,将创建好的两串密钥粘贴到ddns中的两个框中。

我这里以公网IPV6为演示,如果你没公网V4,把公网IPV4的启用开关取消勾选就行了,如果有,和IPV6的操作是一样的,记得公网V4的话请去路由器后台设置一下端口转发。

在Domains这里输入你前面购买的域名,建议加一个二级域名,也就是图中的dxpnas部分+我的域名,就组成了二级域名,dxpnas这几个你可以自定义任意字眼,还有就是打开你NAS的IPV6开关,当『获取IP方式』这里出现240x开头的V6地址说明就成功了,为了保证可远程访问NAS,请把路由器防火墙关闭,不然可能无法让公网流量入站,然后拉到最底,保存就完成了域名配置。

点击ddns-go后台的右上角日志功能,会发现新增域名解析的提示,那么这串域名就是实现了DDNS解析了,后续不管NAS的IPV6地址如何变动,DDNS-GO都会自动把最新地址和这串域名绑定起来,你仅需记住这串域名就能远程访问这台NAS,这就是DDNS的方便之处,毕竟记住一个域名经记住一串IP地址简单多了。

在浏览器或手机中使用数据流量访问这串地址,成功了,当然要加上端口号,以绿联UGOS Pro的后台为例,默认端口是9999,那么域名加9999端口就可以成功访问了。

如果你使用解析好的域名加8181端口号,也可以成功远程访问前面搭建好的NPM后台,是不是很方便,就实现了公网远程访问,有了这个解析好的域名,咱们就可以借助这个域名和NPM进行搭配使用了,请继续往下看!

NPM基础优化

首先点击SSL Certificates来申请证书,点击右上的Add SSL Certificate,选择Let Encrypt。

在Domian Names这里输入你解析好的域名,将Use a DNS Challenge打开,选择你的域名服务商,并根据提示获取相关key填入,同意后点击申请。

大概几分钟后,看到证书前面有绿色小点就代表申请成功~

或者使用第二种方式申请证书,去域名服务商处下载对应的Nginx证书,以阿里为例,免费提供的,下载解压。

然后返回NPM后台,证书这里选择Custom。

分别把key和pem格式的证书上传到对应位置,选择Save也能完成证书设置,建议优先使用第一种方式,证书完毕后,下面来演示一下NPM如何使用。

反向代理、加密

首先来演示一下它最强的反代功能,如果你在docker上通过bridge或host网络部署了许多容器,那么可能有部分容器你直接使用解析的域名+端口访问是不成功的,这个时候我们可以借助NPM的反代来实现通过域名访问。

又或者一些NAS上的内部服务或三方容器只有常规http形式访问,暴露在公网上会有不安全因素,咱们可以在反代前给它加上SSL证书实现https加密访问,可以避免中间人攻击。

反向代理是一种服务器配置,它接收用户的请求并将其转发给后端的服务器,然后将后端服务器的响应返回给用户。

操作也很简单,点击Dashboard,点击右上角的Add Proxy Host,在Domain Name处填写你在DDNS-GO中设置的域名,但这个NPM好像在诸多NAS上成功反代的话需要加两种格式的域名,即填写一个不加任意端口的域名和一个加4443端口的域名即可,大家照抄就行了,因为只有这个版本的NPM才使用了非80、443端口且能以host形式部署,所以这个小bug倒影响不大,每次新增不同域名时就统一添加不带端口和带4443端口的域名就行了。

在Scheme处选择http,一般内网服务都是这个协议,Forward Hostname这里填写你想反代的内网服务,我的Jellyfin内网IP是192.160.10.188:8096,所以就对应填写它的IP和Forward Port端口就行,如下图所示。

开启Block Common Expilits和Websockets Support这两个开关。

然后开启一下https公网访问吧,更加安全,点击SSL,在SSL Certificate选择你前面申请好的SSL证书,下面的所有开关都打开,开启强制加密访问,点击Save即可生效。

添加成功后,点击其中带4443端口的链接即可。

打开手机流量让电脑连接,模拟远程访问,可以发现成功通过域名访问我的Jellyfin后台,而且注意它是https加密访问形式的,显示连接是安全的即代表加密成功,这种方式很安全,你看,通过NPM的反代功能就能把内网服务实现公网访问,并且还套了一层加密,这个功能也是它的优势了,强烈建议有内网服务需要暴露在公网的都这么操作一次。

如果想通过不同的二级域名来访问不同的内网服务,在DDNS-GO后台的域名列表继续添加不同的二级域名就行了。

然后按前面操作申请好SSL证书,或申请泛域名证书,再添加反代,如下图所示,我直接给绿联的后台套了反代和加密。

成功实现远程加密访问绿联后台,这个红色https是因为此时证书还在申请中,没生效,等它生效了就显示连接安全了。

怎么样,NPM的反代和加密访问是不是就值回票价了,而且现在基本都有公网IPV6了,使用公网访问内网速度真的快,再配合NPM加密、反代,相得益彰,推荐有此类需求的朋友使用起来!

端口转发

除了前面的反代、加密外,NPM的端口转发也是它的优势功能之一了!在Dashboard点击Streams即可进入端口转发设置,虽然这些界面都是全英文的,但基本操作一次后就知道它是干嘛的了。

端口转发是一种网络配置,它将来自特定端口的请求转发到内部网络中指定的设备或服务,通常用于允许外部访问内部网络中的服务,例如将外部请求的80端口(HTTP)转发到内部服务器的8080端口。这样,用户可以通过公共IP访问内部资源,而无需直接暴露内部网络的结构。

比如说我希望访问域名:6008端口时能直接访问到内网中的Jellyfin后台,那么操作也很简单,点击Add Stream,在Incoming Port这里填写6008端口,在Forward Host和Forward Port处填写要转发的内网服务的IP地址和端口,点击Save保存。

现在直接通过域名加6008端口即可直接远程访问Jellyfin后台了,怎么样,是不是很方便,不过和反代相比,端口转发不能设置缓存、加密、路径之类的,适合轻量且不要求加密的场景。

其它想要转发的话同理,就不再一一演示了,因为真的很简单,就是指定入站端口和转发目标及转发端口就可以了。

NAS玩法推荐

如果是使用绿联的小伙伴,可参考下往期使用绿联搭建家用All in One、部署影音自动化的教程~UGOS Pro系统的玩法也非常丰富了~

如果想以NAS为基础,挂载各大主流公有网盘到本地使用,可参考往期~

结尾

通过前面演示,相信各位新手朋友也能玩上NPM了,其实Lucky和它有异曲同工之妙,都可以实现以上提到的功能,如果感兴趣的朋友可以看看我往期关于Lucky的部署和上手教程,喜欢哪个就用哪个!

通过NPM和Lucky之类的容器可以让NAS实现完美远程访问,并且还能给这些服务套上一层SSL加密,如果你平常喜欢折腾各种三方容器和服务,建议使用起来,让你的NAS使用更加得心应手。

那么本篇教程就到此结束,希望对于各位刚接触NAS有小伙伴有所参考价值,请关注、点赞,有其它问题请评论区交流,各位下期见!