⚠️ Alpha内测版本警告:此为早期内部构建版本,尚不完整且可能存在错误,欢迎大家提Issue反馈问题或建议
Skip to content

10.2 内网穿透:临时让朋友看看

本节目标:理解内网穿透的原理,用 Cloudflare Tunnel 生成一个临时公网链接,发给朋友。

为什么需要内网穿透

小明的朋友在另一个城市,局域网不通。正式部署又需要 Git、平台配置、域名——他只是想让朋友看一眼评分功能的效果。

老师傅说:"有个临时方案——内网穿透。不需要部署,不需要域名,一行命令就能生成一个公网链接。"

隧道是怎么工作的

内网穿透的本质是在你的电脑和一个公网服务器之间建一条隧道

朋友的浏览器
    ↓ 访问临时链接
公网服务器(Cloudflare / ngrok)
    ↓ 通过隧道转发
你的电脑(localhost:3000)
    ↓ 返回页面内容
公网服务器
    ↓ 转发回去
朋友的浏览器(看到页面)

朋友访问的是公网服务器上的临时地址,公网服务器把请求转发到你的电脑,再把你电脑的响应传回给朋友。整个过程中,朋友不需要知道你的 IP 地址,你也不需要有公网 IP。

一个生活化的类比:微信视频通话。你和朋友不在同一个网络,但微信的服务器帮你们中转音视频数据。内网穿透类似,只不过中转的是网页请求。

关键区别在于:隧道是你主动建立的。你的电脑向公网服务器发起连接(出站),而不是公网服务器来找你(入站)。因为出站连接不受 NAT 和防火墙限制,所以隧道能绕过"家庭宽带没有公网 IP"的问题。

一个生活化的类比:微信视频通话。你和朋友不在同一个网络,但微信的服务器帮你们中转音视频数据。内网穿透类似,只不过中转的是网页请求。

Cloudflare Tunnel(推荐)

Cloudflare Tunnel 是目前最简单的方案:免费、不需要注册、不限流量。

安装

告诉 Claude Code:

"帮我安装 cloudflared 命令行工具。"

或者手动安装:

bash
winget install cloudflare.cloudflared
bash
brew install cloudflared
bash
curl -L https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb -o cloudflared.deb
sudo dpkg -i cloudflared.deb

启动隧道

确保你的项目正在本地运行(比如 pnpm dev 在 3000 端口),然后另开一个终端

bash
cloudflared tunnel --url http://localhost:3000

终端会输出一个临时链接:

https://random-words-here.trycloudflare.com

把这个链接发给朋友,他就能看到你的项目了。

链接每次都不一样

免费模式下,每次启动 cloudflared 会生成一个新的随机链接。关闭终端(Ctrl+C)后链接立即失效。这是设计如此——临时方案就该有临时的样子。

让 AI 一步到位

如果你不想记命令,直接告诉 Claude Code:

"帮我用 Cloudflare Tunnel 把本地 3000 端口暴露到公网,生成一个临时链接发给朋友。"

Claude Code 会检查 cloudflared 是否已安装,没装就帮你装,然后启动隧道。

常见问题

链接生成了但朋友打不开? 确认你的开发服务器确实在运行。cloudflared 只是转发请求,如果本地服务没启动,朋友看到的就是错误页面。

终端显示连接错误? 检查端口号是否正确。如果你的项目跑在 5173(Vite 默认端口)而不是 3000,命令应该是 cloudflared tunnel --url http://localhost:5173

速度很慢? 这是正常的。请求要从朋友的设备到 Cloudflare 服务器,再到你的电脑,再原路返回。延迟取决于你和 Cloudflare 服务器之间的网络质量。如果在国内且速度不可接受,考虑用 cpolar。

备选方案

Cloudflare Tunnel 在大多数场景下够用。如果你有特殊需求,还有两个备选:

ngrok:老牌工具,需要注册免费账号。优势是自带一个 Web 调试面板(http://localhost:4040),可以查看所有经过隧道的请求和响应,排查问题时很方便。免费版有连接数限制,访问时会显示 ngrok 的警告页面。官网:ngrok.com

cpolar:国内服务,如果你和朋友都在国内,速度会比 Cloudflare 和 ngrok 快不少。需要注册账号。官网:cpolar.com

工具是否需要注册国内速度特色
Cloudflare Tunnel不需要一般最简单,免费无限制
ngrok需要一般调试面板好用
cpolar需要国内优化

选哪个?如果没有特殊需求,用 Cloudflare Tunnel。如果需要调试面板,用 ngrok。如果在国内且速度是瓶颈,用 cpolar。

不需要每个都学

三个工具的核心操作几乎一样:安装 → 一行命令启动 → 拿到链接 → 发给朋友。选一个用熟就行。如果你不确定,就用 Cloudflare Tunnel——零注册、零配置、免费无限制。

安全注意事项

隧道打开的那一刻,你的电脑就暂时暴露在了公网上。虽然只是临时的,但有几件事必须注意:

用完立即关闭。Ctrl+C 关掉 cloudflared 进程,隧道就断了。不要开着隧道过夜,不要开着隧道出门。

不要暴露不该暴露的端口。隧道只应该指向你的 Web 应用端口(比如 3000)。数据库端口(5432、3306)、管理后台、调试工具——这些绝对不能通过隧道暴露。

确保认证已启用。如果你的项目有登录功能(第八章的成果),确保认证是开着的。不要因为"只是给朋友看看"就临时关掉登录——隧道链接是公开的,任何拿到链接的人都能访问。

不要通过隧道传输敏感数据。隧道适合演示 UI 和功能,不适合处理真实的用户数据或密码。

一句话原则

隧道是临时凿在墙上的洞。朋友看完了,立刻把洞补上。

安全检查清单

在打开隧道之前,快速过一遍:

  • 项目的登录功能是否已启用(第八章的成果)
  • .env 文件是否包含敏感信息(API 密钥、数据库密码)——这些不会通过隧道泄露,但确认一下总没错
  • 隧道只指向 Web 应用端口,没有暴露其他服务
  • 演示完成后会立即关闭隧道

从临时到正式

小明把链接发给了朋友,朋友终于看到了评分功能。"挺酷的!"朋友说。

但小明很快发现了问题:

  • 每次重启 cloudflared,链接就变了,得重新发给朋友
  • 他的电脑必须一直开着,合上笔记本盖子朋友就断了
  • 朋友说有时候加载很慢,体验不稳定
  • 他想让更多人看到,但不可能给每个人都发一次链接

这些不是 bug,是内网穿透的天然局限。它本来就是临时方案——你的电脑不是服务器,你的家庭网络不是数据中心。

想让产品稳定地被所有人访问,你需要正式部署:把代码放到专业的服务器上,让它 24 小时运行,有稳定的地址,有足够的带宽。

但在部署之前,你需要先解决一个前提问题:代码管理。你的代码现在只存在于你的电脑上,部署平台怎么拿到它?答案是 Git——下一章的主题。

小明的路线图逐渐清晰了:

  1. Git(第十一章):把代码推到 GitHub,让部署平台能拉取你的代码
  2. 部署(第十二章):把代码部署到 Vercel 等平台,获得稳定的公网地址
  3. 域名和 HTTPS(第十三章):配置自定义域名,启用加密连接

每一步都建立在前一步的基础上。内网穿透让小明验证了"朋友觉得这个功能有意思",接下来就是把它变成一个真正的产品。


本章回顾

  • localhost 是回环地址,每个设备的 localhost 指向自己
  • 同一个 WiFi 下的设备可以通过局域网 IP 互相访问
  • 防火墙可能阻止局域网内的访问,需要放行对应端口
  • 内网穿透通过公网服务器中转请求,生成临时链接
  • 内网穿透是临时方案,正式上线需要部署(第十二章)

上一节10.1 从 Localhost 到互联网

下一章第十一章:Git 版本控制与跨平台协作