目前,大部分家庭宽带的IP 地址都属于城域网 IP,并非独立的公网 IP,并且动态公网 IP 的申请难度在大部分地区都是比较大的。即使申请到了公网 IP,但是常用的 80、443、8080 端口都是封闭不可用的。
我的公网 IP 绑定的家用 NAS 服务器并不用于任何公开服务,仅用于个人访问,常用的一些服务没有 80、443 端口也是可以正常使用的,并且因为未使用常用端口,安全性也更高。但是偶尔需要进行测试或者搭建一些个人应用,使用非 443 端口还是非常不便。本篇文章介绍一下我常用的1种使用CDN 实现 443 端口访问被封443 端口的家用动态公网 IP 的方法。
今天介绍的方法适用于已备案的域名,且域名在 DNS 服务商已经解析。同时假设你有一个动态公网 IP 的服务器。
使用腾讯云EdgeOne 加速服务
EdgeOne(后简称 EO)是腾讯云发布的一个和 Cloudflare 服务有相似之处的边缘安全加速网络,目前也在逐步取代腾讯云的内容分发服务(CDN)的部分功能,例如动态 ECDN 部分。
腾讯云 EO 支持不同的版本,对应不同规模的调用次数和流量,对于个人使用而言,个人版完全够用,且日常互动价在 40-70 之间既可买到一年。
使用 EO 实现 443 端口访问被封443 的服务器时,你的域名需要是国内已完成工信部备案的域名。同时,这里只能加速 http 服务。
(1)配置域名的动态 DDNS 解析
我们需要用到两个域名,假设一个是a.example.com ,另一个是b.example.com。
这里我们假设a.example.com是你需要公网 443 端口访问的域名,那么我们使用b.example.com这个地址来配置 DDNS 动态解析。
配置动态解析是为了防止动态 IP 地址变化,配置方法可以看我的这篇文章:
同时,在我们的服务器端,需要配置b.example.com这个域名作为你的主机服务的外部访问地址。例如,如果你使用 nginx 反向代理了一个本地的 docker 服务,那么需要使用b.example.com这个域名作为你的该 nginx 服务的域名。那么正常情况下,此时使用 https://b.example.com:9443是可以通过 https 访问你的服务器的相关服务的。
(2)在 EO 添加源站组
打开 EO 的源站配置,我们添加一个源站组,将动态解析的b.example.com作为源站填写到源站信息中,同时设置回源 Host 为b.example.com。
(3)在 EO 添加域名设置
我们打开 EO 的域名管理,添加域名,这里我们添加 a.example.com作为加速域名,同时源站类型选择源站组,选择刚才我们创建的源站组。随后,我们将回源端口改为我们的服务器暴露的端口。例如,如果我们的服务器暴露了 9443 作为 https 服务,那么就将回源端口的 HTTPS 改为 9443 即可。
(4)在 DNS 解析 CNAME并设置 SSL 证书
完成前面的设置后,EO 会给到你一个 CNAME 解析地址,你需要去 DNS 服务商将你的域名的 a.example.com的解析设置为 CNAME 并解析到指定的腾讯云 EO 地址。
随后在 EO 设置面板设置你的 SSL 证书,等待部署完成,就可以通过 https://a.example.com直接访问源站相关服务了。
(5)额外的安全设置
此时我们通过https://b.example.com:9443和 https://a.example.com ,都是可以访问源站服务的。
如果你不希望https://b.example.com:9443能够直接被访问,你可以通过 EO 的自定义头部信息的方法,增加一个回源的头部信息,然后在服务器 nginx 中设置,仅允许带有特定头部信息的访问请求,即仅允许来自 EO 访问https://b.example.com:9443的请求。
这样,只有通过https://a.example.com访问才能访问源站服务。