--- **(引言)**
大家好!相信很多人都有这样的烦恼:家里的NAS、媒体服务器(比如MoonTV、Emby、Jellyfin),明明资源丰富,但只有在家才能看?一到办公室想摸鱼追剧,或者出差在外想访问家里的文件,是不是就犯愁了?特别是那些没有公网IPv4的朋友,是不是觉得居家服务器就是个“局域网摆设”?
之前有朋友问我,他在家里部署了如MoonTV之类的影视服务,只有在家的时候才可以观看,他想知道有没有办法让他在办公摸鱼的时候也能接着追剧。我就告诉他我之前出过一期获取固定IPv6的视频,那期有教大家如何将本地端口映射到公网使用。但是他说公司的网络不具备IPv6访问的能力,让我再帮他想其他办法。他的要求是要安全,最好能使用HTTPS访问,避免中间人攻击。
这个问题确实是一部分国内用户的痛点。家庭用户现在获取公网IPv4的难度不亚于登月。部署frp之类的组网方案费用又少不了(至少得有一台服务器做中转,或者使用站点中转又不安全)。那么有没有既不需要太多开销又安全的解决方案呢?肯定有!我们可以使用Cloudflare(以下简称CF)的Tunnels(也就是隧道)完美解决这个问题。CF的隧道对OpenWrt系统和Docker的支持都非常好。这里我将给大家演示如何在OpenWrt系统和飞牛NAS系统中部署。我们需要的开销仅仅是每年不到一杯奶茶钱(只包含域名费用)。整个过程非常简单,相信大家一看就会。接下来就开始吧。
第一步:准备一个域名
在创建CF隧道之前,我们需要提前购买一个域名。推荐大家使用Namecheap或者Dynadot这样的网站去购买.xyz域名,或者可以直接在CF中注册购买也可以,反正价格都差不多,都不需要备案。在CF中直接注册购买,还少了一步将域名交给CF解析的过程。下面我将给大家演示在CF中注册购买。
看过往期内容的读者相信大家已经有了自己的CF账号。如果没有的话,大家先去申请一个自己的CF账号,非常简单,这里就不重复演示了。登录后在CF的主页选择注册新域。这里推荐大家注册一个6位或者7位纯数字域名(因为便宜)。我以 6610000.xyz
为例给大家演示。
我们可以看到这个域名每年也就是不到1美元,非常便宜。选择购买,这里的信息除了付款信息不用完全实名。需要注意这里的付款信息,建议使用Visa卡或者万事达卡进行购买。当然如果你有PayPal账号也可以。全部填好之后选择验证地址,之后选择完成购买。稍等片刻,就提示您购买成功了。
当然,如果你没有这种付款信息的话,也可以在国内平台中进行购买后选择使用CF进行托管。托管类的教程网上太多了,这里就不过多赘述了。如果你在这方面有疑问,可以在我的博客中找到这篇教程的主题文章,我会将托管方法以文字和图片的形式向你展示。
第二步:配置SSL/TLS 加密方式
搞定域名之后,我们需要进入此域名的控制面板,点击“SSL/TLS”,将加密方式改为“灵活”(Flexible),并保存。这一步是为了确保CF能够处理你从本地发送的HTTP请求,并在边缘将其加密为HTTPS,保障安全访问。
第三步:Cloudflare Zero Trust 设置
接着,回到CF主页,找到并点击“Zero Trust”。这里会要求你填写一个团队名称(不重要)。选择免费的计划就可以,选择“继续付款”(这里不会扣费),一路下一步直到进入 Zero Trust。
能看到这里的读者恭喜你,这个教程里最难的部分你已经解决了,剩下的内容对于你来说会非常简单。我们点击“网络”->“Tunnels”,选择“添加隧道”,选择第一个“Cloudflared”(不用考虑第二个,暂时和大家没关系)。为我们的隧道起个名字(不重要),点击“保存隧道”。然后将这个页面先停留在这里。
第四步:创建隧道并部署客户端 - OpenWrt篇
去到我们的OpenWrt系统中安装客户端。在“系统”->“软件包”中,先点击“更新列表”。更新完之后在过滤器中搜索 cloudflared
。选择安装 luci-i18n
开头的这个中文语言包就行,它会自动将我们所需要的插件都一并安装。安装完成后刷新页面,找到我们安装的Cloudflared插件,通常它会以“Cloudflare 零信任隧道”的名称出现。打开它,在启用后打勾。然后回到刚才的页面。点击“复制令牌”信息。
回到OpenWrt中将我们复制的令牌信息粘贴回令牌一栏中。需要注意的是,将 ey
开头的命令删除,仅保留 ey
开头的令牌信息(非常重要),保存并应用。回到CF隧道中,不出意外的话,我们的连接信息就会出现在这里了。需要看到这个连接器之后才可以进行下一步。
第五步:配置公共主机名(远程访问)
好的,我们选择下一步。这里不要被这些你不懂的名词唬住,它就是添加你想要远程访问的服务而已。很简单,跟着我一步一步来。在“子域”中填写一个子域名,比如填 op
可以代表OpenWrt系统,填 fn
可以代表使用 fn.你的域名.xyz
来访问你的飞牛NAS。在“域”这一项中选择你刚购买的域名,或者是你在别处买来托管在CF中的。路径可不选。类型选择HTTP(注意不是HTTPS),在URL中填写 127.0.0.1:80
(这里你可以填写你OpenWrt系统的真实内网IP,80是访问端口)。最后检查一下,没问题,选择“完成设置”。
回到公共主机名,复制我们刚刚填写的公共主机名至浏览器并打开。没问题,这下我们就可以在公网访问我们的OpenWrt系统了,并且CF已经帮我们自动配置好了域名证书,是不是非常方便?
接下来我们来将本地的NAS系统也一并演示。我们选择“添加公共主机名”,和OpenWrt前面设置一样,在URL中我们这次选择填写真实的内网IP和端口(5666是飞牛的访问端口,和访问群晖的5000端口是一回事)。选择保存后访问这个域名,我们发现已经可以正常访问了。
那么我们部署在飞牛NAS中的服务是不是一样可以呢?肯定没问题。我们来试试将部署在飞牛NAS中的 nastools
和 moontv
也添加进隧道。只需要注意的是URL填写你真实的访问地址加端口号。没问题,可以正常访问!是不是非常简单又方便?使用CF隧道还省去了我们在防火墙中开放端口的步骤。
第六步:部署客户端 - 飞牛NAS Docker篇 (通用NAS方法)
很多朋友习惯用NAS来管理Docker服务,所以这里我再用飞牛NAS系统给大家演示如何通过Docker Compose部署Cloudflared客户端。其他支持Docker的NAS系统,比如群晖、威联通,都可以参考这个方法。
为了演示,我需要删掉这个隧道,并保证DNS解析中的记录为空。回到“Tunnels”,选择“创建隧道”。填写一个隧道名称(不重要),点击“保存隧道”。然后将这个页面先停留在这里。
登录飞牛NAS后台,选择“Docker”,点击“Compose”。起一个项目名称(不重要),选择一个存放你Compose文件的路径,点击“创建”。将下面为大家整理的Compose代码复制进来:
version: '3.8'
services:
cloudflared:
image: cloudflare/cloudflared:latest
container_name: cloudflared
restart: unless-stopped
command: tunnel --no-autoupdate run --token 你的TOKEN
只需要修改一处:将你自己的Token令牌填入这个Compose文件中。回到“Tunnels”中点击“复制令牌”信息。我们将其复制在浏览器的地址栏中,复制 ey
开头的Token令牌,覆盖填入Compose文件中 <你的TOKEN>
的位置。勾选“创建项目后立即启动”,选择“确定并创建”。稍等片刻,我们的Docker客户端就部署完成了。
回到“Tunnels”中,选择“公共主机名称”,和之前的内容一样,添加我们的公共主机名就行了。需要注意的是,客户端部署在NAS中我们就不可以使用 127.0.0.1
了。如果是NAS中的服务,可以使用Docker网络中的网关地址,如我的是 172.17.0.1
。这些都不重要,怕麻烦你可以全部填写你内网真实IP加端口号。
我将给大家演示将OpenWrt、飞牛NAS、MoonTV都加进隧道中。是不是非常简单?以此类推,大家就可以愉快地将你本地的服务(如:飞牛影音、Emby、Jellyfin之类的服务)通过CF隧道进行公网访问了!
结语
好啦!今天我们要聊的话题到这里就结束了!感谢大家的阅读!
如果你觉得我输出的内容对你有那么一丢丢的帮助,请别忘了点一下关注支持我!你的支持是我持续分享的动力!
未来,我还会带来更多好玩、又实用的硬核技术姿势等着你解锁!那么,我们下期再见!
评论区