怎么使用Cloudflare实现内网穿透

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

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

  1. 首先需要注册 Cloudflare 的账号。
  2. 购买一个域名。
  3. 在域名服务商网站上将 NameServer 修改为 Cloudflare 服务器。以 namesilo 为例如下:
图片[1]-怎么使用Cloudflare实现内网穿透-不念博客
  1. 在 Cloudflare 上添加域名的 DNS。
  2. 本地服务器上需要安装 Cloudflare 的服务。在 Linux 中,可以选择用 Docker 或者直接安装。

Docker安装

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

  1. 进入 Cloudflare 的 Zero Trust,并创建一个 tunnel。
图片[2]-怎么使用Cloudflare实现内网穿透-不念博客
  1. 给 tunnel 起名,选择 Docker,复制以下命令并创建 Cloudflare 容器。
图片[3]-怎么使用Cloudflare实现内网穿透-不念博客

无root权限安装

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

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

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

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

  1. 创建一个隧道。给需要创建穿透服务创建 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 子域名。

  1. 创建 DNS 解析。
cloudflared tunnel route dns <HOME> service1.example.com
cloudflared tunnel route dns <HOME> service2.example.com
...
  1. 在 ~/.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
  1. 运行 tunnel。
cloudflared tunnel run <NAME>
© 版权声明
THE END