Tunnel 可以做什么

  • 将本地网络的服务暴露到公网,可以理解为内网穿透 例如我们在本地服务器 localhost:8091 搭建了一个 博客网站,我们只能在内网环境才能访问这个服务,但通过内网穿透技术,我们可以在任何广域网环境下访问该服务。相比 NPS 之类传统穿透服务,Tunnel 不需要公网云服务器,同时自带域名解析,无需 DDNS 和公网 IP。
  • 将非常规端口服务转发到 80/443 常规端口。 无论是使用公网 IP + DDNS 还是传统内网穿透服务,都免不了使用非常规端口进行访问,如果某些服务使用了复杂的重定向可能会导致 URL 中端口号丢失而引起不可控的问题,同时也不够优雅。
  • 自动为你的域名提供 HTTPS 认证。
  • 为你的服务提供额外保护认证。
  • 最重要的是——免费。

Tunnel 工作原理

Tunnel 通过在本地网络运行的一个 Cloudflare 守护程序,与 Cloudflare 云端通信,将云端请求数据转发到本地网络的 IP + 端口。

前置条件

  • 持有一个域名
  • 将域名 DNS 解析托管到 CloudFlare (我目前都直接转到了 CloudFlare )
  • 有一台服务器(本地非本地都可以,有没有公网 IP 都 OK),用于运行本地与 cloudflare 通信的 cloudflared 程序
  • 一张境内双币信用卡(仅用于添加付款方式,服务是免费的)

开始

1. 打开 Cloudflare Zero Trust 工作台面板

2. 创建 Cloudflare Zero Trust ,选择免费计划。需要提供付款方式,使用境内的双币卡即可

image.png

填写 team name,随意填写

image.png

选择免费计划

image.png

添加付款方式

image.png

填写信用卡信息(仅验证,不会扣款),完成配置

3. 完成后,在 Access Tunnels 中,创建一个 Tunnel。

image.png

创建 Tunnel
image.png

4. 选择 Cloudflared 部署方式。

Tunnel 需要通过 Cloudflared 来建立云端与本地网络的通道,这里推荐选择 Docker 部署 Cloudflared 守护进程以使用 Tunnel 功能。

image.png

获取 Cloudflared 启动命令及 Token

在本地网络主机上运行命令。我们还可以加上--name cloudflared -d --restart unless-stop为 Docker 容器增加名称和后台运行。你可以使用下方我修改好命令来创建 Docker,注意替换你为自己的 Token(就是网页中—-token 之后的长串字符)

  1. docker run --name cloudflared -d --restart unless-stop cloudflare/cloudflared:latest tunnel --no-autoupdate run --token <YourToken>

5. 配置域名和转发 URL

为你的域名配置一个子域名(Subdomain),Path 留空,URL 处填写内网服务的 IP 加端口号。注意 Type 处建议使用 HTTP,因为 Cloudflare 会自动为你提供 HTTPS,因此此处的转发目标可以是 HTTP 服务端口。

image.png

配置内网目标 IP+端口

这里要注意,配置的 ip 如果是 127.0.0.1 或者是 localhost,是不行的
对于 linux 可以创建一个桥接网络
下面的 localNet 是网络名字,可自行修改;关于 192.168.0.0 这个子网,也可以自行定义.
默认按照下面的命令,执行后将可以通过 192.168.1.100 访问宿主机.

  1. # 使用192.168.1.100替换127.0.0.1,如mongodb://192.168.1.100:27017
  2. docker network create -d bridge --subnet 192.168.0.0/24 --gateway 192.168.1.100 localNet

完成

接着访问刚刚配置的三级域名,例如 https://app.yourdomain.com(是的,你没看错,是 https,cloudflare 已经自动为域名提供了 https 证书)就可以访问到内网的非公端口号服务了。一个 Tunnel 中可以添加多条三级域名来跳转到不同的内网服务,在 Tunnel 页面的 Public Hostname 中新增即可。

为你的服务添加额外验证

如果你觉得这种直接暴露内网服务的方式有较高的安全风险,我们还可以使用 Application 功能为服务添加额外的安全验证。

1. 点击 Application – Get started。

image.png

创建 Application

2. 选择 Self-hosted。

image.png

选择类型

3. 填写配置,注意 Subdomain 和 Domain 需要使用刚刚创建的 Tunnel 服务相同的 Domain 配置

image.png

配置三级域名

4. 选择验证方式。填写 Policy name(任意)。在 Include 区域选择验证方式,示例图片中使用的是 Email 域名的方式,用户在访问该网络时需要使用指定的邮箱域名(如@gmail.com)验证,这种方式比较适合自定义域名的企业邮箱用户。另外你还可以指定特定完整邮箱地址、IP 地址范围等方式。

image.png

选择验证方式

5. 完成添加

image.png

此时,访问 https://app.yourdomain.com 可以看到网站多了一个验证页面,使用刚刚设置的域名邮箱,接收验证码来访问。

image.png

评价

除了上述直接转发 http 服务之外,Tunnel 还支持 RDP、SSH 等协议的转发,玩法丰富。

作为一款免费的服务,简单的配置,低门槛使用条件,适合简单部署尝试。

通过 ssh 隧道部署,还可以跳过国内服务器域名必须备案的条件。

不过要注意的是 Tunnel 在国内访问速度不快,并且有断流的情况,请酌情使用。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。