效果演示视频
配置过程讲解视频
视频文稿
我们要做的,是通过接下来的步骤,找回被运营商封禁的家庭宽带 80 和 443 端口。毕竟,直接通过标准端口号访问,比每次都带着端口号要优雅得多,这样不仅看起来更简洁,使用起来也更方便。不管是用 Emby 看片,还是搭建自己的博客,都可以畅通无阻!
在完成所有配置之后,我发现优化效果并没有预期中那么好。根据实际测试结果来看,网页的响应速度不仅没有提升,反而有所下降。
这可能是由于 Cloudflare 在不涉及跨境访问的情况下,对国内网络的加速作用不明显,甚至在某些情况下增加了额外的中转延迟。也有可能是我在某些配置上存在问题,需要进一步排查和优化。
尽管目前效果不理想,但在配置过程中,我几乎把 Cloudflare 能辅助家庭网络访问的各种方案都尝试了一遍。
我先把这一部分做成一个视频,把如何实现公网对家庭 NAS 服务的访问这个“温饱问题”解决掉。毕竟,无论是否有公网 IP,我们都能够通过 Cloudflare 来稳定访问到家庭网络。
大家都知道,在国内,云服务的带宽成本一直居高不下。比如阿里云和腾讯云,主机带宽通常只有 20 到 30 兆,而要提升带宽到 100M 或更高,则费用非常昂贵。相比之下,如果利用家庭宽带的上行带宽,我们可以轻松获得 100M 的上传速率。而且,家庭网络不仅带宽充裕,如果搭配 NAS 和高效的网络配置,还能提供强大的计算能力。
目前我们有三种方法可以实现免端口访问家庭网络服务:分别是 Origin Rules、Cloudflare Workers、Cloudflare Tunnel。 我会逐项详细说明这三种方式的实现过程和优缺点,希望大家能够根据自己的实际情况,选择最合适的方案。
方式1. Origin Rules方式
接下来,我们先来介绍第一种实现家庭网络访问的方案——利用 Origin Rules 进行访问控制。
Origin Rules 是 Cloudflare 提供的轻量级规则引擎,用于在边缘节点对进入的流量进行简单修改和路由,如路径重定向、端口转换、请求头修改等。它主要作用于 HTTP/HTTPS 流量,适合简单的规则处理,但不支持复杂逻辑和非标准协议的流量管理。适合需要快速配置和无需编写代码的场景,免费用户可以在限定的规则数量条件下,10条对于绝大多数家庭服务基本上已经够用了。确定规则后,每月使用数量没有限制。但是采用这种方式必须有公网的IP地址。
这种方式的配置比较简单,推荐大家优先使用。
这部分主要是界面操作,代码比较少,放在视频中详细介绍
方式2. Cloudflare Workers方式
使用 Cloudflare Workers 的方式确实比前面介绍的配置方法复杂度要高不少,但它的好处在于可以直接解决证书问题。这样一来,无论是 HTTP 还是 HTTPS 都能正常访问。此外,得益于 Workers 的灵活性,还可以实现诸如双机备份等高级功能。
不过,如果你对这些功能没有特别需求,还是推荐使用第一种方式。两种方式在实际应用中的差别并不大,使用第一种方法会更加简单、直接。
-
与前一步相同,在nas或者路由器上配置动态域名
这一次我们假定配置是的仍然是dy.mcetf.com -
进行cloudflare worker配置
在左侧的菜单中选择workers和pages,并点击创建。
点击创建work
起个名字点击部署。
回到列表菜单,点击刚刚创建的emby-proxy。点击右上角的编辑代码。
addEventListener("fetch", event => { event.respondWith(handleRequest(event.request)); }); async function handleRequest(request) { // 使用 HTTP 而不是 HTTPS 来连接目标服务器 let url = new URL(request.url); url.hostname = "dy.mcetf.com"; url.port = "8096"; url.protocol = "http"; // 使用 HTTP 协议 let modifiedRequest = new Request(url, request); let response = await fetch(modifiedRequest); return response; }
在编辑窗口中将上面的代码粘贴进去后点击部署。在右侧的功能窗口中可以同步看到端口转换后的效果。
部署后可以获取一个cloudflare的二级域名,使用这个域名已经可以访问自己nas上的emby服务了。
如果想使用自己的域名访问,还需要进行两步配置:
在DNS中将mv子域名解析到worker生成的二级域名,同时打开小云朵。
在cloudflare网站的左侧菜单中选择“workers路由”,右侧弹出的界面上点击添加路由选项。
按照红框中样例,将绑定域名填写进去。worker中选择我们刚刚部署的emby proxy。这样域名和worker就构建好了关联。
到这里,所有的配置就算大功告成了,而且还带有自动证书功能。虽然花了不少功夫,但总算是有了点成效。另外,使用 Workers 的方式还可以充分利用 Cloudflare 的内容分发功能。相比于第一种方案的端口转发,会更高效一些。
方式3. Cloudflare 隧道方式
在开始配置之前,我们先来说一下这个方案的先决条件。
虽然 Cloudflare 提供免费版服务,但要使用 Cloudflare Tunnel,还是需要在 Cloudflare 平台上进行支付信息的验证。简单来说,就是需要绑定一张信用卡进行身份确认。这个验证只是为了激活某些高级功能,比如 Cloudflare Tunnel 和之前提到的回源服务(比如 Zero Trust 或者 Argo Tunnel),并不会产生实际的费用。
所以,如果还没有绑定支付信息的同学,可以申请一张信用卡做个简单的验证。这一步非常重要,因为 Cloudflare 隐藏了很多实用的免费工具和高级配置选项,只有完成支付验证后才能解锁。比如我们今天要用到的隧道加速、智能路由等等,都是 Cloudflare 的“大宝藏”功能。
好的,现在我们正式开始Cloudflare Tunnel 的配置
在 Cloudflare 的首页,我们首先需要点击左侧菜单栏中的 “Zero Trust” 选项。
如果你是第一次使用 Cloudflare Zero Trust,那么在进入这个页面时,系统会提示你进行初次配置。这里需要先为你的 Zero Trust 帐户选择一个唯一的名称。
如果你一时间想不到合适的名称,随便填一个也没关系。这个名称并不会影响实际的配置效果,而且后续我们还可以随时修改。
这里我们只需要选择 “免费套餐” 即可,因为免费版已经足够满足我们配置隧道和优化家庭网络的需求了。免费套餐不仅包含了基本的隧道功能,还允许我们设置多种网络安全策略,非常适合个人和小型家庭网络使用。
虽然 Cloudflare Zero Trust 是免费的,但在开通时仍然需要进行付款信息验证。也就是说,你需要输入有效的信用卡信息来完成身份验证。
支持的信用卡类型包括:Visa、MasterCard(万事达)以及 American Express(美国运通)。如果你有国内银行发行的信用卡,比如工行、招行的 Visa 或者 MasterCard,都可以正常使用。只需要在填写信息时注意输入正确的卡号、有效期和 CVV 码,就能顺利开通 Zero Trust 服务。
当你完成了支付信息验证并开通 Zero Trust 服务后,系统会自动跳转到 Zero Trust 的管理页面。这时,你就会看到一个类似于“控制中心”的界面,这意味着我们的 Cloudflare Zero Trust 服务已经成功激活,可以开始配置了!
不过,接下来我们并不打算在界面中进行配置操作,而是采用 后台命令行的方式 来完成。为什么选择这种方式呢?因为相比在图形界面中一步步点击设置,命令行操作更为直观、灵活,并且可以快速完成复杂的配置。
下面以我的群辉 NAS 上进行演示操作,开始 Cloudflare Tunnel 的安装和配置。
1. 下载并安装cloudflared:
- 下载
sudo curl -L -o /usr/local/bin/cloudflared https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64
- 赋予执行权限:
sudo chmod +x /usr/local/bin/cloudflared
- 验证是否安装成功:
cloudflared --version
2. 创建cloudflare隧道:
-
登录并获取授权
sudo cloudflared tunnel login
执行后会输出一个 URL 链接,类似于:
https://dash.cloudflare.com/argotunnel?callback=xxxxxxxxxxx
点击这个链接在弹出的浏览器中选择授权创建隧道的域名空间。如果你的ssh客户端不支持链接点击就复制链接并在浏览器中打开,并登录 Cloudflare 账户,允许cloudflared
访问你的 Cloudflare 账户,我这里选择是我的mcetf.com的域名。 -
创建隧道:
使用cloudflared
创建隧道,并指定一个名称(例如my-tunnel
):
sudo cloudflared tunnel create my-tunnel
执行该命令后,你会看到一个输出,类似:
Tunnel credentials written to /root/.cloudflared/<tunnel-id>.json Created tunnel my-tunnel with id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
其中,<tunnel-id>
是新创建的隧道 ID,记住它,后面的配置中我们需要用到。 -
创建隧道ID后需要将ID与我们的域名进行关联,可以执行这个命令:
cloudflared tunnel route dns my-tunnel home.mcetf.com
执行后可以回到cloudflare中确认是否配置成功,类型为cname,名称是我们想用的域名,内容就是前面刚刚生成的隧道ID开头的字符串,cloudflare的代理小云朵已经开启。 -
配置隧道配置文件:
-
创建
cloudflared
配置文件目录:
sudo mkdir -p /etc/cloudflared
-
创建并编辑
config.yml
文件:
sudo nano /etc/cloudflared/config.yml
tunnel: 隧道ID credentials-file: /root/.cloudflared/隧道ID.json ingress: - hostname: home.mcetf.com service: http://localhost:8096 - service: http_status:404
用你的隧道ID替换配置文件中的隧道ID,我们重点关注下面的部分:hostname是我们想要访问的域名,server部分是保存在nas或者家用电脑中的端口服务。
-
3. 启动nas上cloudflare隧道服务:
nohup cloudflared tunnel run --protocol http2 > cloudflared.log 2>&1 &
在执行 cloudflared
命令时,我们需要特别注意网络协议的选择。默认情况下,Cloudflare Tunnel 使用的是 QUIC
协议,但由于运营商对 UDP 协议的流量干扰,可能会导致 QUIC
连接不稳定,甚至直接被阻断。这就容易出现连接频繁掉线或无法建立的情况。
为了避免这个问题,我们可以将 cloudflared
的协议强制设置为 http2
。虽然 http2
使用的是传统的 TCP 连接,可能在低延迟方面稍逊色于 QUIC
,但它在国内的网络环境中更稳定、更可靠。因此,推荐大家在执行命令时显式指定 http2
协议。
到这里,我们的所有配置就已经完成了!接下来,让我们回到 Cloudflare 的 Zero Trust 管理界面,验证一下配置是否生效。打开 Cloudflare 的管理界面,进入 “Zero Trust” 部分。在左侧菜单栏中找到 “Access” -> “Tunnels” 选项。你应该可以看到刚才在 NAS 上创建的 my-tunnel
隧道。此时,状态应该显示为 “Healthy”(健康状态)。这表示隧道已经成功连接并处于正常运行状态。
在浏览器中输入你配置好的域名,比如 home.mcetf.com
,你应该能够顺利地看到已经部署在家庭网络中的服务页面,比如你的 NAS 管理界面或者你设置的其他服务。这就表明我们刚刚通过 Cloudflare Tunnel 建立的隧道已经成功工作了!