怎么使用Cloudflare实现内网穿透

2023年 12月 19日 119.7k 0

除了使用FRP部署内网穿透和使用ssh执行端口转发和内网穿透外,在没有云服务器的情况下,也可以使用 Cloudflare免费的Zero Trust实现内网穿透服务。

在此之前,需要满足以下条件:

  • 首先需要注册 Cloudflare 的账号。
  • 购买一个域名。
  • 在域名服务商网站上将 NameServer 修改为 Cloudflare 服务器。以 namesilo 为例如下:
  • 图片[1]-怎么使用Cloudflare实现内网穿透-不念博客

  • 在 Cloudflare 上添加域名的 DNS。
  • 本地服务器上需要安装 Cloudflare 的服务。在 Linux 中,可以选择用 Docker 或者直接安装。
  • Docker安装

    Docker 安装可用于有 root 权限的服务器,配置比较方便。

  • 进入 Cloudflare 的 Zero Trust,并创建一个 tunnel。
  • 图片[2]-怎么使用Cloudflare实现内网穿透-不念博客

  • 给 tunnel 起名,选择 Docker,复制以下命令并创建 Cloudflare 容器。
  • 图片[3]-怎么使用Cloudflare实现内网穿透-不念博客

    无root权限安装

    没有 root 权限下,可按照以下步骤安装。以 red hat 系统为例。

  • 下载 Cloudflare 的 RPM 包。
  • curl -L --output cloudflared.rpm https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-x86_64.rpm
  • 使用 rpm2cpio 将 RPM 包解压到指定位置。
  • mkdir ~/.cloudflared
    rpm2cpio ~/cloudflared.rpm | cpio -idv
  • 将 Cloudflare 添加环境变量,查看是否安装完成。
  • .cloudflared.exe --version
  • 登录 Cloudflare。
  • cloudflared tunnel login

    这条命令会打开一个浏览器窗口, 并提示登录。它会在默认的 ~/.cloudflared 目录中生成一个账户证书,即 cert.pem 文件。

    在安装 Cloudflare 后,开始部署内网穿透服务。

  • 创建一个隧道。给需要创建穿透服务创建 DNS 解析。
  • cloudflared tunnel create <NAME>

    其中 <NAME> 是为隧道选择的名称。这个命令会创建一个隧道,并在您提供的名称和隧道的 UUID 之间建立持久的关系。

    创建之后出现以下提示:

    Tunnel credentials written to /home/wang/.cloudflared/2248485f-e727-4532-91d0-4f35904c88e5.json.
    cloudflared chose this file based on where your origin certificate was found. Keep this file secret. To revoke these credentials, delete the tunnel.

    这样会在 .cloudflared 目录中生成一个隧道凭证文件 *.json 子域名。

  • 创建 DNS 解析。
  • cloudflared tunnel route dns <HOME> service1.example.com
    cloudflared tunnel route dns <HOME> service2.example.com
    ...
  • 在 ~/.cloudflared 里新建一个 config.yml。编辑文件为:
  • tunnel: 2248485f-e727-4532-91d0-4f35904c88e5
    credentials-file: /home/wang/.cloudflared/2248485f-e727-4532-91d0-4f35904c88e5.json
    ingress:
      - hostname: service1.example.com
        service: http://localhost:8080
      - hostname: service2.example.com
        service: http://localhost:8096
      - service: http_status:404
  • 运行 tunnel。
  • cloudflared tunnel run <NAME>

    相关文章

    如何在 Linux 中使用 logname 命令?
    为什么有 HTTPS?HTTPS 如何实现安全通信?
    HTTPS的TSL握手流程是什么
    华为无线网络射频调优及WLAN跨VLAN的三层漫游示例
    502错误是什么、应该怎么排查?
    HTTP3为什么抛弃了经典的TCP,而选择QUIC

    发布评论