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

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

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

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


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 给的专属快递柜,一次能收好多快递!" 😎

相关推荐
Victor3566 分钟前
MongoDB(2)MongoDB与传统关系型数据库的主要区别是什么?
后端
JaguarJack6 分钟前
PHP 应用遭遇 DDoS 攻击时会发生什么 从入门到进阶的防护指南
后端·php·服务端
BingoGo7 分钟前
PHP 应用遭遇 DDoS 攻击时会发生什么 从入门到进阶的防护指南
后端
Victor3568 分钟前
MongoDB(3)什么是文档(Document)?
后端
牛奔2 小时前
Go 如何避免频繁抢占?
开发语言·后端·golang
想用offer打牌7 小时前
MCP (Model Context Protocol) 技术理解 - 第二篇
后端·aigc·mcp
KYGALYX8 小时前
服务异步通信
开发语言·后端·微服务·ruby
掘了9 小时前
「2025 年终总结」在所有失去的人中,我最怀念我自己
前端·后端·年终总结
爬山算法9 小时前
Hibernate(90)如何在故障注入测试中使用Hibernate?
java·后端·hibernate
Moment9 小时前
富文本编辑器在 AI 时代为什么这么受欢迎
前端·javascript·后端