飞牛nas(五、反代篇)
前面章节讲了你可以从外网,通过https+自己的域名(DDNS公网IP)+路由器端口转发来访问家中的飞牛nas了。但如果要访问飞牛nas上的其他docker,甚至其他家中的设备,就需要路由器转发不同的端口,到不同的家中设备IP和端口,证书及端口转发配置复杂不说,端口开多了安全性也得不到保障。这时就可以用反向代理+二级域名来解决。
说的反向代理,先说一下代理。记得几十年前,用电话线路拨号上网,拨号的电脑上装个代理软件,家中其他电脑就能通过这个代理软件一起去冲浪了。现在我们的需求是,外网访问回来只有1个IP,如何方便地访问家中不同IP+端口的应用,这就是反向代理。
反向代理的软件也很多,目前比较推荐的还是nginx。nginx不只是能做反向代理,还能实现负载均衡、静态网页、web防火墙、访问控制、IP地址限制、SSL/TLS加密等多种能力,nginx具有稳定性高,资源占用小等优点,很多网站都用nginx,作为家用nas也很适合。
不过看了一下飞牛nas应用中心并没有nginx,当然飞牛nas是基于Linux内核(Debian发行版)深度开发,自己安装也没问题(不知飞牛nas系统中集成了没有,没去研究),但nginx的配置文件操作有些复杂。好在也有Nginx Proxy Manager、NginxWebUI等管理界面来操作,就方便多了。因为应用中心没有,就装docker版吧。docker的教程网上很多,可自行搜索学习一下。
一、下载docker镜像

二、新建容器运行起来,在这里也可以直接运行,自动创建容器,重点注意一下配置项

443:未来反向代理https访问端口,可以用飞牛nas本机的端口去映射,考虑飞牛nas可能某些端口已占用,可以设置为其他端口,如4443
80:未来反向代理http访问端口,同样,可以设置为用飞牛nas本机其他端口映射,如8080
81:管理界面端口,同样,可以设置为用飞牛nas本机其他端口映射,如8081
另外,Nginx需要保存证书和各种文件,因此,在飞牛nas文件夹管理中,新建两个目录,在这里进行映射,这样,你在docker中的Nginx Proxy Manager进行的操作配置内容,都会存到你的飞牛nas文件夹管理中的这两个目录中。后面就算你把docker镜像删除重装,只要仍按上面映射,则以前的操作配置内容就可以直接使用。
三、登录管理npm页面
浏览器访问:http://飞牛nasIP:8081(第二步你映射的管理界面端口)

第一次默认的是默认帐户:admin@example.com 默认密码:changeme。不同的Nginx Proxy Manager可能不一样,可在网上搜索一下。进去后,按提示重新设置账号/密码。
四、申请自己的域名证书
前一章节讲了通过路由器端口转发,使用https访问。使用反向代理,我们也要使用https访问保障基本的传输安全。要使用https访问,首先就要为nginx安装证书。前一章节说到,腾讯云免费证书不支持泛域名,飞牛nas不支持自动证书(目前功能界面上只能自己上传证书)。现在,可以看一下,在Nginx Proxy Manager,中如何使用免费的泛域名证书,且支持续期(免费证书期限都不长)。
先进入Nginx Proxy Manager,进入SSL Certificates菜单,添加证书

这里我们选择Let's Encrypt申请他的免费证书。关于Let's Encrypt,大家可以自行搜索一下,我的asus路由器也是用的这个免费证书。Custom则可以自己上传证书,你可以从你的域名注册机构去申请并下载回来,如前面的腾讯云。
为后续二级域名访问不同的飞牛nas应用或docker或其他家中设备,这里直接申请泛域名证书。

1、Domain Names:直接申请泛域名:*.xxxxx.cn,xxxxx.cn是你自己的域名(见前面章节)
2、Email Address for Let's Encrypt:填个自己的邮箱吧,这个点有点奇怪,我并没有在Let's Encrypt的网站上注册过:)
3、下面就是域名的验证了,证名域名是你的,有多种认证方式,具体要看你购买域名的服务商的支持方式了,比如用CNAME记录的方式认证。我购买的腾讯云的,可以用DNSPod Token的方式
4、再次登录腾讯云控制台,进入账号中心。前面我们是创建过腾讯用API密钥(用于飞牛nas的DDNS设置,还记得吧),这次,我们要创建DNSPod Token

同相要注意保存DNSPod Token,后续无法在腾讯云中查询。创建完成后,你会得到一串大概6位数的ID和Token
5、回到Nginx Proxy Manager,勾选Use a DNS Challenge,选择DNS provider为腾讯云的DNSPod(根据你的域名提供商选择)

重点是Credentials File Content中的参数,可以看到有两个:
1)、dns_dnspod_email:第一次我没申请成功,后来登录腾讯云,绑定了邮箱,录的绑定邮箱才成功,不知是不是跟这个有关系
2)、dns_dnspod_api_token = "id,key":将在腾讯云创建的DNSPod Token,按格式填入。第一次我填的是腾讯云API的密钥没成功,后来才发现要用DNSPod Token的ID和Token。
6、勾选I Agree to the。。。,再save,过几十秒,证书就申请成功了。可以再次续期或下载证书

五、添加反向代理
现在可以添加反向代理了。不添加证书,你也可以添加反向代理,但只能使用http协议。

先添加第1个反向代理,比如就是家中的飞牛nas

1)、Domain Names:首先给家中的飞牛nas想个外网访问好记的二级域名吧,比如nas.xxxxx.cn
2)、Scheme:因这里就是家中访问家中了,就可以不用https,就选http吧。如果你非想要全链路https,就选https,需要注意访问的家中网站需要安装证书且启用https访问。
3)、Forward Hostname / IP:转发到家中飞牛nas的IP
4)、Forward Port:转发到家中飞牛nas的端口,http是8000,如果用tttps,就是8001
5)、Cache Assets(缓存)、Block Common Exploits(阻止一些常见漏洞)、Websockets Support(web的长连接,某些网站仍用了),按需勾选,不懂就先全勾上。
再切到SSL页签

选择刚申请的证书(为方便,申请的泛域名证书),再建议把下面4个去勾选上(试过不同的网站,有些少勾选了就无法访问)。再Save就设置好了
六、路由器开端口转发
前面章节说我们已经在路由器上设置了一个端口转发(外网的10080端口转发到192.168.0.250:8001),为啥还要设置一个呢?是因为上次设置的,是外网https直接访问飞牛nas服务器,现在我们通过nginx来反向代理,因此,我们需要重新设置一个端口转发,当然,你修改以前的端口转发也可以,就关闭了直接访问飞牛nas的方式了。
路由器的具体设置参考前面章节,我们现在设置一个端口转发:
外网的10088,转发到192.168.0.250:4443。为啥是4443,还记得docker运行Nginx Proxy Manager镜像的端口映射了吧,我们是把飞牛nas上的4443,映射到了Nginx Proxy Manager的443端口。
现在,你在外网,就可以使用:https://nas.xxxxx.cn:10088来访问飞牛nas了。飞牛移动端APP,也可以使用nas.xxxxx.cn:10088来访问(勾选HTTPS)。因目前网络营运商都关闭了80、443端口,所以我们只能用类似10088这样的其他端口来访问。nginx反向代理设置了force ssl,所以你外网访问时,直接nas.xxxxx.cn:10088,也会跳转到https去连接。
我把访问家中路由器也反向代理了,Nginx Proxy Manager的管理页面也反向代理了。这样,在外网,我就可以通过不同的二级域名,路由器也只开放1个端口,就能访问不同的服务器+端口的资源了。后续安装各种docker应用,都可以在这里添加不同二级域名的反向代理就可以了。比如现在在外网,用nginx.xxxxx.cn:10088,就可以访问到Nginx Proxy Manager的管理页面了(不过这个非常不建议放到外网访问,我只是外网测试用)

Nginx还有很多有关安全方面的设置,大家可以自行研究一下。
不过这个Nginx装在docker中始终不爽,Nginx应该安装在家中网络中更前端的位置。后续去研究一下华硕的路由器看看有没有办法,如果不行的话,再看飞牛nas的应用中心的lucky(初看了一眼是个国产软件,功能也挺丰富),或直接在飞牛nas中通过ssh去安装nginx。下一篇,来看看lucky。
作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~

asct
校验提示文案
简翟
校验提示文案
浮生轻鸿
校验提示文案
Jack1001
校验提示文案
Smile丶Sr
校验提示文案
iwaier
校验提示文案
LostAlone
校验提示文案
谢小萌
校验提示文案
OGenius
校验提示文案
Keror
校验提示文案
半天找不到一个昵称
校验提示文案
浮生轻鸿
校验提示文案
半天找不到一个昵称
校验提示文案
Keror
校验提示文案
OGenius
校验提示文案
谢小萌
校验提示文案
asct
校验提示文案
Jack1001
校验提示文案
简翟
校验提示文案
LostAlone
校验提示文案
Smile丶Sr
校验提示文案
iwaier
校验提示文案