找回家庭宽带的80和443端口,三种cloudflare访问家庭nas方案,一篇讲全讲透。

找回家庭宽带的80和443端口,三种cloudflare访问家庭nas方案,一篇讲全讲透。

找回家庭宽带的80和443端口,三种cloudflare访问家庭nas方案,一篇讲全讲透。

效果演示视频

配置过程讲解视频

视频文稿

我们要做的,是通过接下来的步骤,找回被运营商封禁的家庭宽带 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 的灵活性,还可以实现诸如双机备份等高级功能。

不过,如果你对这些功能没有特别需求,还是推荐使用第一种方式。两种方式在实际应用中的差别并不大,使用第一种方法会更加简单、直接。

  1. 与前一步相同,在nas或者路由器上配置动态域名

    这一次我们假定配置是的仍然是dy.mcetf.com

  2. 进行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的代理小云朵已经开启。

  • 配置隧道配置文件:

    1. 创建 cloudflared 配置文件目录:
      sudo mkdir -p /etc/cloudflared

    2. 创建并编辑 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 建立的隧道已经成功工作了!

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

Back To Top