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

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

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

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


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

相关推荐
索荣荣3 小时前
Java Session 全面指南:原理、应用与实践(含 Spring Boot 实战)
java·spring boot·后端
千寻技术帮4 小时前
10333_基于SpringBoot的家电进存销系统
java·spring boot·后端·源码·项目·家电进存销
dear_bi_MyOnly4 小时前
【多线程——线程状态与安全】
java·开发语言·数据结构·后端·中间件·java-ee·intellij-idea
小信丶6 小时前
@EnableTransactionManagement注解介绍、应用场景和示例代码
java·spring boot·后端
To Be Clean Coder6 小时前
【Spring源码】createBean如何寻找构造器(四)——类型转换与匹配权重
java·后端·spring
-孤存-6 小时前
SpringBoot核心注解与配置详解
java·spring boot·后端
2301_818732067 小时前
项目启动报错,错误指向xml 已解决
xml·java·数据库·后端·springboot
小王不爱笑1328 小时前
SpringBoot 整合 Ollama + 本地 DeepSeek 模型
java·spring boot·后端
短剑重铸之日9 小时前
《设计模式》第七篇:适配器模式
java·后端·设计模式·适配器模式
树码小子10 小时前
SpringIoC & DI (1):IOC介绍 & Spring IoC使用 & DI
java·后端·spring