江湖夜雨十年灯

cloudflare 内网穿透与鉴权

李二花 / 2024-03-14


背景

文章的部分内容被密码保护:

引申

重点是想通过这件小事儿把我之前使用过的很多 cloudflare 的功能做个记录。特别是这两个,一个是 cloudflare tunnel 用于内网穿透,再一个是 cloudflare zero trust 用于用户鉴权。下面我们不谈原理,就简单说一说这个功能的具体用法。

内网穿透

假如现在你在家里有一台机器 A 在运行某个程序,但是家里没有固定的公网 IP,现在你去外地玩,你手头有一个电脑 B 想访问下家里这个程序,因为都没有公网 IP,所以理论上,如果你想访问,就要通过一个有公网 IP 的第三方 C 来实现,这个就是我们之前介绍的 frp 的功能,前提是需要你有一台公网机器。

但是拥有一台公网机器是需要成本的,维护成本,费用成本等,在没有这种条件下,我们有什么办法呢,这就要提到 cloudflare tunnel 了(tailscale 的 funnel) 同样的功能。

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

具体的开通流程很简单,可以参考相关文章,后续的配置也十分简单,看下面几张图片就可以完成。

这个是你现有的 tunnel 的列表,记录了内网穿透的服务,可以进行重新修改和配置 内网穿透界面列表

选择 cloudflared 这个方案 cloudflared

设置一个项目的名字 设置项目名字

选择 cloudflared 服务要部署的平台, 特别注意如果选择 docker 的话,需要在他提供的命令的基础上,加上一个 –network=host docker 部署 cloudflared

docker run --network="host"  cloudflare/cloudflared:latest tunnel --no-autoupdate run --token eyJhIjoiNWU4MnFmMzUwMGJlZmZjMWFlMGE5WWFkZThhNDY5NmYiLCJ0IjoiMjg3ZmU2MmYtMjE1Zi00YJkyLWIyZWEtZWY1ODExM2ZmZmQ2IiwicyI6IllXTTFZbUZoTmpjdFpHTXlNeTAwWVRZeExUaGpNVGt1TW1GbFpUaGxZV0kyWmpneCJ9

当 cloudflared 成功运行后,在connetors 会显示一个会话ID connector

配置对应的路由和公网域名

route tunnel

这个是个子网域名的例子

inner-web

到此为止,我们的服务已经可以在公网访问了。

权限限制

此时,如果你不想你的服务被其他人访问,而是要经过一个鉴权,只需要按照如下的步骤,就可以完成一个最简单的授权操作了。

首先进入 zere Trust 的界面 zero turst

看到的是我已经配置了鉴权的服务 zero trust list

点击 add an application 添加一个项目, 一般自建的项目就选 self-hosted self hosted

填写基础配置,比如被鉴权的域名 config application

设置权限策略 add policy

剩下的步骤按照默认的配置来,或者以后有其他需求再去看对应的处理方案

访问 justest.greatsnow.win 这个地址,跳转到对应的登录界面
justest.greatsnow.win

填写我的在策略那里设置好的唯一一个被允许访问的 email 地址 justest.greatsnow.win

然后就跳转到对应的验证码界面 justest.greatsnow.win

我的 [email protected] 邮箱地址也是通过 cloudflare 的 email 功能转发到 gmail 了,因此访问 gmail 获取对应的 code justest.greatsnow.win

输入 code 访问到我的界面 justest.greatsnow.win

到此我们就完成了一个本机电脑部署的 docker 容器的服务暴露到公网里的这么一个流程了。


相关文章: