前言
- 背景:本地项目(端口 3456)需要公网访问
- 目标:通过域名
dajun.dpdns.org将本地服务展示给外网 - 核心问题:域名如何指向电脑、外网请求如何穿透到本地项目
知识讲解
- 内网穿透的基本原理:DNS 记录负责域名解析,内网穿透工具负责建立安全隧道
- 方案一:Cloudflare DNS + 路由器端口转发
- 依赖公网 IP,在 Cloudflare 添加 A 记录指向公网 IP
- 在路由器配置端口转发,将外网请求转到内网 IP 对应端口
- 需放行防火墙端口;局限是家庭宽带常封 80/443 端口
- 方案二:Cloudflare Tunnel(推荐)
- 无需公网 IP、无需配置路由器,运行
cloudflared建立安全隧道 - 自带 HTTPS,配置简单,是文章最终推荐并实际采用的方案
- 无需公网 IP、无需配置路由器,运行
- 方案三:Ngrok / 樱花 FRP(备选)
- 运行一条命令即可生成临时公网域名,适合快速测试
- 两种方案的本质区别对比
- 表格对比:是否需要公网 IP、是否需配置路由器、运营商封端口影响、IP 变化影响、安全性等
具体实操
-
方案一实操步骤
- 2.1 获取公网 IP:访问
ip.sb或ipinfo.io/ip - 2.2 在 Cloudflare 添加 A 记录:
@和www指向公网 IP,开启橙色云 - 2.3 查看电脑内网 IP:Windows 用
ipconfig,Mac/Linux 用ifconfig - 2.4 进入路由器后台:访问网关地址(如
192.168.1.1) - 2.5 设置端口转发:外部端口(80/443 常被封,建议用 8080)→ 内部 IP → 内部端口(3456)
- 2.6 防火墙放行:允许项目端口入站
- 2.7 常见问题:内网 IP 以 WLAN 为准;建议做静态 IP 绑定;网关无管理页面时此方案失效
- 2.1 获取公网 IP:访问
-
方案二实操步骤(推荐)
- 3.1 下载 Cloudflared:从 GitHub 下载
cloudflared-windows-amd64.exe - 3.2 创建 Tunnel:Cloudflare 仪表盘 → Zero Trust → Networks → Tunnels
- 3.3 安装并运行:管理员权限运行
cloudflared.exe service install <隧道ID> - 3.4 配置路由:在"路由"选项卡添加,域名
dajun.dpdns.org→ 服务localhost:3456 - 3.5 测试访问:手机用 4G/5G 访问
https://dajun.dpdns.org
- 3.1 下载 Cloudflared:从 GitHub 下载
-
方案三实操步骤
- 运行
ngrok http 3456生成临时域名
- 运行
-
重要结论与注意事项
- 电脑必须开机,项目必须运行,外网才能访问
-
方案四:云服务器部署(长期推荐)
- 无需本地电脑保持开机,项目 7×24 小时在线
- 以 Cloudflare Workers 为例,将本地 Node.js 项目(端口 3456)部署到云端
- 4.1 创建 Worker :Cloudflare 仪表盘 → Workers & Pages → Create Worker,命名如
dajun-app - 4.2 粘贴代码:将下方最小可运行代码粘贴到 Worker 编辑器中,点击 Deploy
- 4.3 绑定自定义域名 :Worker 详情 → Settings → Domains & Routes → Add Custom Domain,输入
dajun.dpdns.org,Cloudflare 会自动配置 DNS 与 HTTPS - 4.4 配置路由规则 :在 Domains & Routes 中确认路由为
dajun.dpdns.org/*,指向该 Worker - 4.5 测试访问 :手机用 4G/5G 访问
https://dajun.dpdns.org,无需本地电脑开机
最小可运行的 Worker 代码示例(Node.js 兼容):
jsexport default { async fetch(request, env, ctx) { const url = new URL(request.url); // 简单路由:根路径返回欢迎页 if (url.pathname === "/") { return new Response("Hello from Cloudflare Workers! 🚀", { headers: { "content-type": "text/plain; charset=utf-8" }, }); } // 模拟原 3456 端口项目的 API 接口 if (url.pathname === "/api/status") { return Response.json({ status: "ok", port: 3456, deployed: true }); } return new Response("Not Found", { status: 404 }); }, };
若需关机也能访问,应部署到云服务器(VPS、Vercel、Railway、Cloudflare Workers 等)
- 当前进度:域名已注册 → Cloudflare Tunnel 已配置 → 等待 DNS 生效 → 手机访问测试