如果你希望在外面访问家里的nas存储等网络服务,本文可以给你思路,我已经稳定使用一段时间了。实际效果大概是这样,例如,在户外,我通过手机网络访问 https://bt.johntitorblog.com 可以直接访问到我家中的 http://192.168.50.16:8080 ,这是一个bt下载服务,因为此时此刻我不想错过群晖群里的磁力链接;再如,过年回老家了,我可以通过手机的视频播放器软件挂载 https://webdav.johntitorblog.com ,这个其实是我家中的alist服务 http://192.168.50.16:5244 映射到公网的样子,让我可以在任何地方播放家中nas存储里的影视资源。
你会看到,我在外面任何地方,任何网络环境(ipv4和ipv6都可),只需要访问不同的子域名,不需要加端口,而且还是https形式的安全访问。也不需要借助第三方内网穿透,理论上可以跑满你的带宽。接下来,看看我是怎么搞的吧。
步骤1:
使用cloudflare设置动态域名解析。在nas或软路由上运行ddns-go等软件,可以把你的域名,动态解析到设备的ipv6公网ip。域名解析服务商需要用cloudflare,因为cloudflare会把你家里的ipv6通过其免费的cdn转成ipv4/ipv6双栈,所以可以确保你在任何网络环境都可以访问到家里。
我的例子是解析了两个子域名,bt.johntitorblog.com 和 webdav.johntitorblog.com 。至于ddns-go如何安装,动态域名如何解析,问GPT即可。调试的时候建议关闭ipv6防火墙,路由器和光猫里可能默认开启了ipv6防火墙。解析好了,可以用 https://www.itdog.cn/ping_ipv6/ 测试是否生效。
步骤2:
使用caddy设置反向代理。反代的作用是,可以把我家里的ipv4的网络服务,通过宽带公网ipv6通道喂给cloudflare。我的例子就是把 http://192.168.50.16:8080 喂给 http://bt.johntitorblog.com:8880 ,并且把 http://192.168.50.16:5244 喂给 http://webdav.johntitorblog.com:8880 。这里比较绕,你也许会问为啥要这样做。请注意,这里只是先把你的网络服务通过ipv6通道的8880端口,而且是http协议,传给cloudflare去处理。由于传入cloudflare的http网络数据,只支持8880、8080、80等少部分端口,而且为了防止运营商屏蔽,我认为8880端口是比较好的选择。
说了这么多,具体怎么做呢?通常人们会推荐nginx,但是我认为caddy更容易,而且十分稳定。你可以在nas或软路由中安装caddy,写好caddy的配置文件,设置好开机启动,启动caddy服务即可。下面放出我的caddy配置文件:
{
auto_https off
}
http://bt.johntitorblog.com:8880 {
reverse_proxy http://192.168.50.16:8080
}
http://webdav.johntitorblog.com:8880 {
reverse_proxy http://192.168.50.16:5244
}
你可以看到,这个配置文件比nginx的要简单几条街了。至于caddy的安装和设置开机启动,你可以问GPT。到目前为止,如果域名解析生效了,且caddy服务正常运行了,那么你在外面会访问到 http://bt.johntitorblog.com:8880 和 http://webdav.johntitorblog.com:8880 了,但是这并不是我们想要的最终效果。接下来,我们要把前面的http变成https,还要把后面的8880端口号去掉。
步骤3:
我们进入cloudflare你的域名管理面板,在左边栏展开“规则”,进入“Origin Rules”页面,点击“创建规则”,然后参考我的例子,如下图,
这样部署好之后,我们就可以成功使用 https://bt.johntitorblog.com 和 https://webdav.johntitorblog.com 了。
发散:
1.其实使用cloudflare解析域名,最大的意义就是把纯ipv6转成ipv4/ipv6双栈访问。由于是免费的公共cdn,在高峰期可能会出现网络拥堵的状况。如果你有自己的vps,完全可以再套一层反代以加速访问,具体怎么做,问GPT就是。
2.你还可以在你的nas或软路由里安装tcp加速服务,比如bbr,可以加速上传。我没有安装,因为我家到cloudflare之间的网络并不拥堵。