当域名遇上家里的电脑:一条隧道通向世界

🌩️ 当域名遇上家里的电脑:一条隧道通向世界

"如果代码能飞翔,那我的内网也该走出卧室。"

------ 一个厌倦了光猫折腾的开发者的心声


1️⃣ 为什么我的电脑像隐士?

我们都有一台电脑,可能跑着博客、NAS、Docker 一堆服务,心里想着:

"这玩意儿要是能随时随地访问,不就完美了吗?"

现实却啪啪打脸:

  • 没有公网 IP,运营商说"要加钱"。
  • 光猫 NAT,配置像解数学奥赛题。
  • 证书更新比恋爱还麻烦,还老掉链子。

你的电脑就像一个被困在深山的隐士,高冷、强大,但没人能找到。


2️⃣ 让隐士出山的几条路

出山之路 类比 优点 缺点
DDNS + 端口映射 砸门牌号、通宵排队 免费直连 要公网,还得拜访光猫大爷
frp/ngrok 自建驿站 灵活、强大 VPS、配置、维护都要全包
ZeroTier/Tailscale 小圈子微信群 内部沟通低延迟 分享给外人时一脸懵
Cloudflare Tunnel 全球顺丰快递柜 免公网、免折腾、自动 HTTPS 流量经人家,隐私要信任 Cloudflare

一句话:别人还在路由器菜单里跳大神,你已经轻描淡写:

arduino 复制代码
cloudflared tunnel run my-mac

3️⃣ 为什么选择 Cloudflare Tunnel?

因为它让电脑"出山"这件事,不再像修仙,而是像点个外卖:

  • 免公网 IP → 不求人
  • 免端口映射 → 不折腾
  • 自动 HTTPS → 不掉链子
  • 全球节点加速 → 访问比送外卖还快
  • Zero Trust → 还能假装是大厂 SSO

形象点说:你家门口多了一个 Cloudflare 专属快递柜,世界的请求先放进去,你的 Mac 自己取。你只要偶尔清理一下柜子,不用天天搬门口的大石头。


4️⃣ 安装步骤(macOS + Nginx@80)

4.1 安装 cloudflared

复制代码
brew install cloudflared

4.2 登录 Cloudflare

复制代码
cloudflared tunnel login

选择你的主域名 yiqiquhuxi.cn

4.3 创建隧道

lua 复制代码
cloudflared tunnel create my-mac
  • 会生成一个 UUID (类似 3a0f23c2-xxxx-xxxx-xxxx-8af5d3d6d123)。
  • ~/.cloudflared/ 下会生成 UUID.json
  • 👉 记住这个 UUID,后面配置文件要用!

4.4 写配置文件(重点:替换 UUID)

先确认 UUID 和文件名:

bash 复制代码
cloudflared tunnel list    # 查看隧道 ID(UUID)
ls ~/.cloudflared          # 确认有 UUID.json

然后编辑 ~/.cloudflared/config.yml

yaml 复制代码
tunnel: YOUR-UUID   # 替换为实际 UUID
credentials-file: /Users/neo/.cloudflared/YOUR-UUID.json # 替换为实际 文件路径和 UUID

ingress:
  - hostname: mac.yiqiquhuxi.cn
    service: http://localhost:80
  - service: http_status:404

⚠️ 注意:

  • 两处的 YOUR-UUID 必须和 UUID.json 一致
  • 常见报错 credentials file doesn't exist,十有八九是因为这里没替换对。

4.5 绑定域名(首次绑定)

perl 复制代码
cloudflared tunnel route dns my-mac mac.yiqiquhuxi.cn

👉 Cloudflare 会自动创建一条 CNAME 解析。

4.6 启动测试

arduino 复制代码
cloudflared tunnel run my-mac

访问 👉 https://mac.yiqiquhuxi.cn,看到你的本地 Nginx 主页。

4.7 后台常驻

sql 复制代码
brew services start cloudflared

5️⃣ 一隧道,多服务(多域名 / 多端口)

5.1 标准三步(每新增一个服务/端口/域名都按这个顺序)

  1. 绑定新域名到隧道(每个新子域名只需一次)
perl 复制代码
cloudflared tunnel route dns my-mac api.yiqiquhuxi.cn
cloudflared tunnel route dns my-mac blog.yiqiquhuxi.cn
  1. config.yml 里添加 ingress 规则(把域名映射到本地端口)
yaml 复制代码
ingress:
  - hostname: mac.yiqiquhuxi.cn
    service: http://localhost:80
  - hostname: api.yiqiquhuxi.cn
    service: http://localhost:8080
  - hostname: blog.yiqiquhuxi.cn
    service: http://localhost:3000
  - service: http_status:404
  1. 重启隧道服务,让新规则生效
perl 复制代码
brew services restart cloudflared   # 如果是后台常驻
# 或者:
pkill cloudflared && cloudflared tunnel run my-mac

5.2 单域名 → 路径分发(交给 Nginx)

只用一个域名也行,把分流交给 Nginx:

  • / → 首页服务(80)
  • /api → 本地 8080
  • /blog → 本地 3000

Tunnel 负责"把流量打进家门",Nginx 负责"安排进哪个房间"。

5.3 江湖恶搞版流程图

css 复制代码
       🌍 世界各地的请求
                  │
                  ▼
      [ Cloudflare 快递柜 ]
                  │
         ┌────────┴────────┐
         ▼                 ▼
   [Nginx 门口保安]     (404黑名单)
         │
 ┌───────┼─────────────┐
 ▼       ▼             ▼
[Hexo 小房间] [Spring Boot 书院] [Node.js 茶馆]

6️⃣ 常见坑点

报错 原因 解决
credentials file doesn't exist JSON 文件路径写错 / UUID 不一致 ls ~/.cloudflared 确认 UUID.json
404 Not Found ingress 规则没写对 确认 hostname 和 Cloudflare DNS 一致
502 Bad Gateway Nginx 没跑起来 brew services start nginx 检查服务

7️⃣ 工作原理小剧场

很多人会问:Cloudflare Tunnel 到底是怎么做到"外网直接访问内网"的?

简单说,它和我们平时说的 内网穿透(frp、ngrok 之类)一个道理:

  • 你的 Mac 上跑的 cloudflared 客户端,会主动向 Cloudflare 建立一条加密隧道(相当于你跑去快递柜,把柜门钥匙插好,随时待命)。
  • 当外部有人访问 mac.yiqiquhuxi.cn 时,请求先到 Cloudflare 边缘节点(全球的中继点),再顺着隧道转发进来。
  • 因为是你主动连出去的,不需要公网 IP,不用开路由器端口,NAT 和防火墙都拦不住。

类比一下:

  • frp → 你租了个快递柜,自己贴小广告让别人来存取快递。
  • Cloudflare Tunnel → Cloudflare 给你免费快递柜,顺带还提供全球连锁网点 + 免费保安(证书、DDoS 防御)。

所以,Cloudflare Tunnel 本质上就是 "官方托管的内网穿透 + CDN 加速"

缺点是------流量必须经过 Cloudflare,你得信任它不会偷看快递。


8️⃣ 🎤 结语

过去要让域名访问家里的电脑,必须和运营商/路由器斗智斗勇;现在?只要 Cloudflare Tunnel 一开,你的域名就能优雅直通家里的 Nginx,而且一条隧道就能服务全家。

下次别人问你:

"你怎么让外网访问到家里电脑的?"

你就笑一笑:
"我有 Cloudflare 给的专属快递柜,一次能收好多快递!" 😎

相关推荐
zjjuejin1 小时前
Maven依赖管理艺术
后端·maven
RoyLin1 小时前
TypeScript设计模式:复合模式
前端·后端·typescript
我的小月月1 小时前
SQLFE:网页版数据库(VUE3+Node.js)
前端·后端
Alan521591 小时前
Java 后端实现基于 JWT 的用户认证和权限校验(含代码讲解)
前端·后端
RoyLin2 小时前
TypeScript设计模式:策略模式
前端·后端·typescript
brzhang2 小时前
为什么说低代码谎言的破灭,是AI原生开发的起点?
前端·后端·架构
得物技术2 小时前
破解gh-ost变更导致MySQL表膨胀之谜|得物技术
数据库·后端·mysql
小码编匠3 小时前
WPF 中的高级交互通过右键拖动实现图像灵活缩放
后端·c#·.net
Java水解3 小时前
【MySQL】从零开始学习MySQL:基础与安装指南
后端·mysql