没有公网IP,确能全球访问。又给了你薅羊毛的机会

最近做内雕项目重构,在个人电脑上搭建了一个测试网站,于是有了这次分享。主题是”如何把本地网站发布到公网“。网站发布到公网有多种方式实现,通常可以购买公网IP/域名、路由器商品映射、花生壳等。今天分享一种更简单、更安全的方案。
我即将通过实际案例,介绍如何利用 Cloudflare Tunnel 将本地网站发布到公网。
先自问自答两个问题:
一、先了解什么是Cloudflare tunnel?
你将它理解为 Cloudflare 推出的免费内网穿透工具就成
二、Cloudflare tunnel能做什么?

  1. 本地开发项目临时预览
  2. 家庭 NAS / 私有服务远程访问
  3. 内网工具 / 测试环境对外发布
  4. 替代 VPN,远程办公接入内网系统
  5. 小型个人站点 / 轻量服务部署(下面示例讲的就是这个)

以下为Cloudflare Tunnel 的几点优势
1、不需要公网 IP
2、不需要端口映射
3、自动 HTTPS
4、隐藏真实 IP
5、免费使用部分Cloudflare WAF 防护

场景:个人网站
例如:
localhost:5173
运行着 Vue 项目。

通过Tunnel后:
浏览器中输入:https://light.example.com/ 即可公网访问。(假如你已有域名:example.com)
注:如果没有域名,cf会自动生成一个临时域名,这个域名较长,不好记,而且不固定

以下手把手教你如何搭建
搭建前准备
1、Cloudflare 账号:免费注册即可,Cloudflare 官网;https://www.cloudflare.com/
2、托管在 Cloudflare 的域名:买个10几块钱的就行,购买后登录域名服务端将,将 DNS 服务器改为 Cloudflare 的。修改成功后可以在Cloudflare 网站-》域名中看到状态。如下图:


3、本地设备:Windows/macOS/Linux 均可,能联网就行

第一步:安装 cloudflared 客户端
1、Windows 安装
方式 1(winget,一键安装):PowerShell 输入
winget install cloudflare.cloudflared
运行

方式 2(手动下载):去cloudflared Releases(Releases · cloudflare/cloudflared · GitHub),下载cloudflared-windows-amd64.exe,修改名称为cloudflared.exe后放到自定义目录(如D:\cloudflared),在系统默认路径PATH中增加D:\cloudflared
验证安装:cmd终端输入cloudflared --version,输出版本号即成功。

2、验证安装:cmd终端 输入cloudflared --version,输出版本号即成功

第二步:登录认证,绑定 Cloudflare 账号
1、在浏览器中打开https://www.cloudflare.com/ 并登录。直接跳过这一步,第2点会失败。已踩过坑
2、首次使用需认证客户端,关联你的 Cloudflare 账号。
在cmd终端输入:cloudflared tunnel login。会自动弹出浏览器,确认即可,授权后返回 “Success”,凭证文件默认生成在C:\Users\你的用户名.cloudflared\目录。

第三步:创建隧道(命名 + 生成唯一 ID)
隧道是核心标识,每个隧道对应一组内网服务。
在cmd终端输入(自定义隧道名,如my-dev-tunnel):cloudflared tunnel create my-dev-tunnel
输出类似:
Created tunnel my-dev-tunnel with id: f1a3d2c4-xxxx-yyyy-zzzz-abcdefghijkl
Tunnel credentials written to C:\Users\用户名.cloudflared\f1a3d2c4-xxxx-yyyy-zzzz-abcdefghijkl.json
重要提示:记录隧道 ID和凭证文件路径,后续配置必须用

第四步:配置 DNS 路由(绑定子域名)
将自定义子域名(如light.example.com)绑定到隧道,Cloudflare 会自动生成 CNAME 解析记录。
cmd终端输入(替换为你的隧道名和子域名):cloudflared tunnel route dns my-dev-tunnel light.example.com
提示 “Route added” 即成功,可去 Cloudflare 控制台→DNS,查看新增的 CNAME 记录

第五步:编写配置文件(config.yml,核心映射规则)
配置文件作用是定义 “子域名→内网服务” 的映射关系,一个隧道可映射多个服务。
1、在D:\cloudflared目录新建config.yml;
2、写入以下内容,下图为我本地配置,供参考:

第六步:启动隧道,后台稳定运行
1、临时启动(测试用,关闭窗口即停止)
cmd终端 输入:cloudflared --config D:\cloudflared\config.yml tunnel run
输出 “Connected to Cloudflare” 即隧道建立成功,状态为Healthy
我自己整了一个bat脚本,想启动时双击bat脚本即可,如下图:

2、后台常驻(Windows 服务,开机自启)
留给佬们自己偿试

大功告成。配置完成后,重启本地服务,访问https://light.example.com 即可正常打开。本次仅亲测个人电脑部署网站这个功能,至于CF其他功能佬友们自行测试

54 个赞

太赞了,学海无涯~感谢大佬的慷慨分享~

[!success]l站的未来是你们的,也是我们的,但归根结底还是你们的

3 个赞

实用的教程, 感谢分享, 回头自己按着教程试试

1 个赞

引用一下哈雷佬的回复,what’s your question
这个tunnel,站里应该有很多教程,薅cloudflare羊毛的整合贴也有很多,可以看一手

有没有linux环境的方案?我想把家里的飞牛nas用起来

不是很稳定,之前试过,cf这边经常会挂,遇到那些端口扫描的看着日志也很烦。
适合临时用,不适合长期使用

网速怎么样,zerotier的p2p打洞成功率太低,平常只有80k/s左右

其实加入了PSL的免费域名也可以

我是直接写个Docker Compose文件,然后一键启动,然后配置的时候填http://host.docker.internal:3000,不管是否在Docker内,都可以反代出来

还以为实现了抖音上面分享的让大家访问localhost:5173的功能呢 :grinning_face_with_smiling_eyes:

佬友, localhost是指向本地127.0.0.1 IP的 :sweat_smile:

佬友,请问你排查过具体是什么原因导致不稳定吗?CF应该没有这么脆吧。很有可能是网络不太稳定引起的。

与你的网络环境有较大关系。查资料说前端可以部署CF,后端API走tunnel访问本地私网会快一些

其它都还好,就是国内访问速度堪忧,不过以前数据中心只有LAX和SJC,现在竟然有HKG了

佬,也支持部署在linux上的。流程差不多,具体的可以问问豆包/DEEPSEEK等。

之前给家里面的NAS有配置过,不过貌似网速一般,不知道是不是哪里没搞好

就不知道速度咋样,这种有时候就怕很慢

速度和延迟是硬伤,俺已经快进到买香港CN2搭tailsacle和frp了 :distorted_face:

延迟非常高,基本上不要觉得在国内可以用了,点对点测试还行 :distorted_face:

有可能分配的节点在欧美,也有可能是免费的在高峰时限流 :thinking:

我知道啊,我意思是抖音上面好多刚开始用AI写的网址都是localhost加端口号,然后让大家访问的:full_moon_face::full_moon_face: