目录
起因
春节回家后比较闲,在陪外甥玩双人成行的空闲继续折腾NAS。目前我的威联通NAS比较烦人的两个问题是:
威联通自带的myqnapcloud.com内网穿透服务很慢;如果使用myqnapcloud.cn,除了服务器在中国大陆,其次集成的SSL证书服务收费,有安全隐患。需要记忆各个服务的端口号。比如NAS界面端口、bitwarden端口、emby端口等等,需要想一会儿才能对上。因此,要解决的事情首先是购买一个国内的内网穿透;其次就是隐藏端口号。
内网穿透
内网穿透解决起来比较简单,可以用免费的和收费的,免费的我使用的是花生壳[1]。注册完成后,打开花生壳管理平台[2],新建映射,填入一下信息,其中类型选择TCP(有同学可能会考虑到应用类型应该选择https,实际上选择tcp就可以了。),外网端口和外网账号为随机,内网主机为NAS在内网中的账号,内网端口为内网主机管理界面的https端口。
在花生壳配置完成后,还需要在NAS上进行配置。打开威联通管理界面->控制台->网络与虚拟交换机->DDNS->新增,DDNS服务器选择花生壳,用户名称和密码为花生壳的账户和密码,主机名称为花生壳随机分配的ddns网址(记住不带端口号)。配置完成后使用该ddns网址+端口号即可访问nas。
免费内网穿透操作简单,实用性强,链接速度快。它的问题是,域名比较丑,同时带端口号,不便于记忆,同时安全性较低。
SSl与域名
ssl是什么
SSL(Secure Sockets Layer 安全套接字协议)是一种在传输层和应用层中进行加密的安全协议。通常的http方式被证实有安全上的隐患,为提高安全性,计算机科学家们开发了ssl及其继任者tls协议,将http进化为https,极大提升了网络传输的安全性。直观来看,当chrome浏览器网址栏左侧有一个小锁时,就说明该网页使用了ssl/tls协议对网页进行了加密,进化成了https。
服务器使用ssl协议需要申请ssl证书,威联通自带了对myqnapcloud.com的ssl证书(lets encrypt),在阿里云/腾讯云购买证书后,通常也可以申请免费的ssl证书。但笔者经过尝试后,发现阿里云仅可以申请二级域名的证书(如plex.tsinghua.com),无法申请免费的泛域ssl证书。因此笔者通过使用Nginx Proxy Manager这个docker作为申请ssl的工具。
操作
首先,需要申请一个域名并设置aliyunddns,可以在阿里云/腾讯云等域名商申请,并且.top和.xyz域名比较便宜。此步骤较为简单,可参考简书这位老哥[3]。域名申请下来后,需要申请ssl证书,打开威联通管理界面->container station->创建->搜索Nginx Proxy Manager->安装->高级设置->在网络一栏中做好4443,8080,8181三个端口点转发->在共享文件夹中做好映射。设置完成后,即可通过nas网址:8181进入Nginx Proxy Manager管理界面。初始账号密码如下:
Email: [email protected]
Password: changeme
点击SSL Certificates->add SSL Certificate->lets encrypt
domain names填入刚刚购买的域名,并写成泛域名形式。比如购买的域名为jibairen.com,那么它的泛域名行为即为*.jibairen.com。email address为任意填写的邮箱打开use a dns challenge,因为域名在阿里云购买,笔者在这里选择aliyun。在credentials file content处将key和secret替换为自己阿里云账号的密钥反向代理
反向代理是什么
很长时间里笔者并不是很理解反向代理,因为通常的代理不就是通过一个中间商赚差价转发信息吗?那反向的代理有何不同?在笔者的理解中反向代理和正向代理所实现的信息中介功能是一样的,但其中最大的不同是,正向代理为客户端发出,服务端无法知道客户端的端口等信息,可以理解为中间商和客户端是一伙的。而反向代理则是中间商和服务端串通,客户端无法知道服务端真正的端口和信息。在NAS的应用中,反向代理可以帮助NAS隐藏真正的端口,只留一个端口输出所有的应用(emby,qsysnc,管理界面等),防止网络中的带恶人扫描端口。
反向代理在群晖中,可以直接使用。在威联通中的应用较为复杂,虽然QTS5.0在控制台中增加了对于反向代理的支持,但其仅支持以myqnapcloud作为DDNS的反向代理,不支持自定义域名。笔者使用Nginx Proxy Manager这个docker作为反向代理对工具。
为什么要使用反向代理
使用反向代理的好处有很多。首先,使用者不用记忆复杂的应用端口号,只需要记忆二级域名即可。其次,NAS有很强的安全隐患,因为端口号仅从0到65535,许多带恶人会扫描网址的端口并尝试登录。使用反向代理的话,二级域名的范围超级大,不怀好心的人无法完全扫描某个网址的二级域名。最后,二级域名相较于端口号更加美观。
操作
进入Nginx Proxy Manager,点击dashboard->proxy hosts->add proxy host。
domain names为二级域名形式,比如购买的域名为jibairen.com的话,想为emby应用进行反向代理,那么domain names就可以设置为emby.jibairen.comscheme选择https。forward hostname填入想要进行反向代理的内网IP(即不仅可以给nas反代,路由器等内网设备也可以)forward port填入想要反向代理的内网端口在ssl选项,选择ssl证书,开启force ssl和http/2 support。最后,在路由器管理界面做好4443端口的转发。该端口在设置完成后即成为与外网沟通的唯一端口。隐藏端口
当我们在网址栏键入一个网址时,通常不用端口号也能成功连接。但这并不意味着这些网址不用指定端口号,而是浏览器自动跳转到了http的默认端口80和https的默认端口443。而由于众所周知的原因,境内IP没有申请的话,这两个端口是不开放的。因此取消就过的方法就是在境外再申请一个域名,使用url跳转功能实现隐藏端口,具体如何操作可以bing搜索教程,本文不提供。
参考资料
[1]花生壳:
[2]花生壳管理平台:
[3]可参考简书这位老哥: