大家好,我是爱宅家的有菌。
起因:失去 443 的无奈
熟悉的友友都知道我比较爱折腾 NAS,家里的 NAS 中也跑了很多服务。做为宅一族的我大部分使用也是通过路由端的内网地址跳转来使用,而没有注意到公网的访问状况。然而最近突然有一天,我在外出时发现 NAS 上的这些服务不能通过公网访问了。
查了一下原因是 IPv6 的 443 端口被封了,以前我所在的城市 IPv6 是不封 443 的。本以为是阶段性的封端口,过段时间会解禁,然而一个多月过去了,还是没有解禁,想必在相当长的一段时间内恐怕不会解禁了。
Lucky 大吉
以往我在 NAS 上的服务都是通过DDNS-Go+Ngnix Prosy Manager实现的。前段时间在 Lab 机器上折腾 iStoreOS 时体验过了Lucky大吉,这次也打算正式在 NAS 上应用 Lucky。家中的网络并非只有我一个人使用,之前也发生过因为 All In One 出状况导致被全家老小批判的历史。所以我现在的服务都在 NAS 上,路由就只做路由吧。
Lucky 大吉是基于 DDNS 的一体化反向代理解决方案。我之前写过如何把 DDNS-Go 嵌入 Docker 的方法。现在应用 Lucky 大吉,就不需要这么麻烦,一个拉取全搞定。
同 DDNS-Go 一样,Lucky 支持很多域名服务商平台,同样也是通过 API 和密钥进行管理(相信能看到这里的友友,一定都知道如何申请 API 和密钥了),不过其管理后台设计的更加人性化,各种进程也更直观。SSL 证书也是单独管理,使用下来感觉比 DDNS-Go+Ngnix Prosy Manager 更加方便,更适合国人的使用习惯。我自己就使用了 CloudFlare 的 15 年证书,这么长的周期,还是很省心的。
当然最大的问题还是端口问题。因为我是比较懒的人,所以在通过大吉影射端口时,对外监听端口只设置了一个,各种服务是通过二级域名来做区分的。在 NAS 上的反向代理服务地址都加了 nasx 前缀。
源规则
虽说一个端口比较好记,通过域名加端口也可以使用。但作为有轻微强迫症的有菌,总会觉得很别扭,所以也一直在寻找可以实现公网端口跳转的方法。之前在大妈也有看到其他友友写的,通过重定向规则和源规则的方式去实现,但是让人比较无奈的是免费版只有 10 条重定向和 10 条源规则的使用权限。
我在尝试的过程中,发现源规则中有匹配 "SSL/HTTPS" 的选项,可以把默认的 443 端口指向服务主机的指定端口,这简直就是为我目前的情况所定制的。
CloudFlare 的源规则非常人性化,可以通过 "And" 和 "Ro" 建立多种复杂的判断组合,适应各种情况。如果在单一网段只有一个主机的话,可以通过 IPv6 的网段做判断,这样不需要前缀,也便于记忆。但是我在 "2408" 下还有其他的主机,所以选择了前缀的方式来做判断,在 NAS 上的服务都在二级域名中加了 "nasx" 做为前缀,这样的设置保证了这个主域名下的其他二级域名不会出现冲突的情况。
当然 DNS 中的小黄云一定要打开哦,不然是不能生效的。
使用效果
经过这些设定后,仅需要域名就可以直接访问自己的私有服务了,无论是浏览器还是客户端都不成问题。不过要说明,通过域名访问的实际端口是 443,而不是自定义的端口。在远程 Aria 下载或远程数据库访问时,端口也需要填写 443。如果是远程桌面的话直接填写域名不需要端口也可以直接连接。
实际体验下来,经过 CloudFlare 的 DNS 访问比阿里 DNS 带端口的解析访问速度要慢一些,但是胜在稳定。在我出差的过程中发现一些城市通过阿里 DNS 访问会失效,但是 CloudFlare 却没有问题。没有试过腾讯的 DNSPod 和火山,不知道国内的其他平台是否支持这样的源规则,欢迎有用过的友友说说。