BetterLink Logo 比邻
切换语言
切换主题

Cloudflare Tunnel入门:无公网IP也能安全访问内网服务

Cloudflare Tunnel内网穿透配置示意图

你是不是也遇到过这种情况:周末在星巴克,突然想访问家里NAS上的某个文件,却发现根本连不上?或者想给朋友展示自己做的项目,但项目跑在本地电脑上,没法直接分享链接? 这些问题的根源其实都是同一个——没有公网IP。 说实话,我也被这个问题困扰了很久。运营商要么不分配公网IP,要么额外收费;就算有了动态IP,还得配置DDNS,稳定性也不行。后来试过frp、ngrok这些内网穿透工具,但要么需要自己租云服务器增加成本,要么免费版限制太多,流量不够用。 直到我发现了Cloudflare Tunnel。 这玩意儿完全免费,不需要公网IP,也不需要买云服务器,甚至连路由器端口转发都不用配置。更重要的是,它自带HTTPS加密和Cloudflare的DDoS防护。老实讲,当我第一次成功通过Tunnel访问到内网服务时,那种”原来还能这么玩”的感觉真的挺爽。 本文我会手把手教你用Cloudflare Tunnel实现内网穿透。不管你是想远程访问家里的NAS、给朋友展示本地项目,还是在外面SSH连回家里的服务器,只要30分钟,都能搞定。

一、Cloudflare Tunnel是什么?为什么选择它?

内网穿透到底解决什么问题?

先说说为什么我们需要内网穿透。 正常情况下,你家里的设备都在内网,有个私有IP地址(比如192.168.1.100)。这些设备可以互相访问,但外网是连不进来的。如果你想在公司或咖啡厅访问家里的NAS,就需要一个”桥梁”把内网和外网连起来。 传统方案是端口转发:在路由器上开个端口,把外网请求转发到内网设备。但这有个前提——你得有公网IP。问题是现在很多家庭宽带根本不给公网IP,或者给的是运营商级NAT,你压根没法从外面连进来。 这就是内网穿透要解决的问题:在没有公网IP的情况下,让外网能访问到你的内网服务。

Cloudflare Tunnel的工作原理

Cloudflare Tunnel的思路挺巧妙的,它不是像传统方案那样”从外面打洞进来”,而是从里面主动连出去。 具体来说,它的工作流程是这样的:

  1. 你在内网设备上运行一个叫cloudflared的小程序(守护进程)
  2. 这个程序会主动连接到Cloudflare的全球网络,建立一条加密隧道
  3. 当有人访问你配置的域名(比如nas.yourdomain.com)时,请求先到Cloudflare的CDN
  4. Cloudflare通过这条加密隧道把请求转发给你的内网服务
  5. 你的内网服务处理完,数据再通过隧道返回 这样一来,你的内网服务对外界完全”不可见”——没有开放任何端口,也不需要公网IP,只有一条从内往外的加密连接。从安全角度看,这就是**Zero Trust(零信任)**架构的思路:默认不信任任何连接,所有流量都要经过身份验证和加密。 用个不太严谨的比喻:就像你在家里和Cloudflare之间拉了一条专线,只有你能用,外人根本看不到你的服务器在哪。

为什么我选择Cloudflare Tunnel?

市面上内网穿透方案挺多的,我也试过几个,最后还是用了Cloudflare Tunnel。主要是这几点原因: 对比frp(最常见的方案): frp确实好用,配置也不复杂,但有个硬性要求——你得有台云服务器,而且要有公网IP。这意味着每个月得花几十块钱租服务器,加上配置、维护,其实挺麻烦的。Cloudflare Tunnel直接省掉了这个成本,连Cloudflare的CDN和DDoS防护都是白嫖的。 对比ngrok(国外很火): ngrok免费版给你分配的是随机域名,每次重启还会变,而且流量有限制。如果要用自己的域名,得买付费版。Cloudflare Tunnel完全免费,自定义域名随便用,流量不限。 对比Tailscale/ZeroTier(P2P组网): 这两个是虚拟局域网方案,思路不太一样。它们更适合点对点组网,比如你的手机、电脑、服务器之间互相访问。但如果你想对外发布一个网站,让所有人都能访问,Tailscale就不太合适了。Cloudflare Tunnel更适合”对外发布服务”这个场景。 说白了,Cloudflare Tunnel的优势就是三个字:免费、安全、简单。 不过话说回来,它也不是完美的。最大的问题是国内访问速度一般,因为Cloudflare的CDN节点主要在海外,延迟会比较高,偶尔还有断流。如果你主要是国内用户访问,或者对实时性要求特别高,可能得考虑其他方案。但对于个人使用、非实时性要求的场景,完全够用。

二、准备工作:你需要什么?

在开始配置之前,先确认下你需要准备的东西。别担心,都不复杂,而且大部分都是免费的。

1. Cloudflare账号(免费)

这个没啥好说的,去cloudflare.com注册一个账号就行,完全免费。如果你已经在用Cloudflare的DNS或CDN服务,直接用现有账号就可以。

2. 一个自己的域名

这是唯一需要花点小钱的地方。你得有个域名,而且要把它托管到Cloudflare。 为什么必须要域名?Cloudflare Tunnel的工作方式是通过域名来路由流量的,你访问nas.yourdomain.com,Cloudflare才知道要把请求转发到哪个隧道。 域名其实不贵,国内阿里云、腾讯云买个.com.top域名,一年也就几十块钱。买完之后,把DNS服务器改成Cloudflare的就行(Cloudflare会有详细教程,很简单)。 有个额外的好处:把域名托管到Cloudflare,本身就能享受它的CDN和防火墙功能,相当于顺便白嫖了。

3. Cloudflare Zero Trust免费计划

这个需要稍微注意一下。Cloudflare Tunnel是Cloudflare Zero Trust服务的一部分,你得先开通Zero Trust。 别紧张,免费计划完全够用,支持最多50个用户(个人用根本用不完)。 开通步骤:

  1. 登录Cloudflare控制台
  2. 左侧菜单找到Zero Trust
  3. 选择免费计划(Free Plan)
  4. 需要绑定支付方式(信用卡或PayPal) 这里可能会让你犹豫一下——为啥免费计划还要绑卡? 说实话我当时也有点担心,但其实不会扣费。Cloudflare这么做是为了防止滥用(比如有人批量注册账号搞破坏)。国内的双币信用卡完全可以用,我用的就是招行的,绑完之后从来没扣过钱。

4. 一台内网设备

这个设备要满足两个条件:

  1. 能联网:废话,不能联网怎么建立隧道
  2. 能一直开机(或者至少在你需要访问的时候开机) 具体可以是:
  • 家里的电脑(Windows/Mac/Linux都行)
  • NAS(群晖、威联通等,支持Docker就更方便)
  • 树莓派或其他开发板
  • 软路由 我自己是在NAS上跑的,用Docker部署,特别省心。

5. 待暴露的内网服务

最后,你得有个想对外暴露的服务。比如:

  • NAS的Web管理界面(常见端口5000、5001)
  • Home Assistant智能家居控制台(端口8123)
  • 自己搭的博客或网站(端口80、8080等)
  • SSH服务(端口22) 你需要知道这个服务的内网IP地址和端口号。比如我的NAS是192.168.1.100:5000。 准备工作就这些。其实说起来还挺多,但真正需要额外花钱的只有域名,其他都是白嫖。

三、实战配置:一步步搭建你的Tunnel

好了,前面铺垫了这么多,现在进入实战环节。整个配置过程分三步:创建Tunnel、安装cloudflared、配置域名。听起来还挺多,但实际操作真的很快,跟着我走一遍就明白了。

步骤1:在Cloudflare控制台创建Tunnel

  1. 登录你的Cloudflare账号,进入Zero Trust控制台
  2. 左侧菜单点击NetworksConnectorsCloudflare Tunnels
  3. 点右上角的Create a tunnel按钮
  4. 选择连接器类型:Cloudflared(默认就是这个)
  5. 给你的Tunnel起个名字 关于命名,建议起个有意义的名字,比如home-nasdev-server这种,方便以后管理。如果你只有一个Tunnel,叫啥都行;但如果未来会有多个,最好能一眼看出这是哪个服务。 点击Save tunnel后,Cloudflare会生成一个Token(令牌)。 **划重点:这个Token超级重要!**它就像是你的Tunnel的密钥,后面安装cloudflared的时候要用。页面上会显示一串很长的字符,先复制下来保存好,或者先别关页面。

步骤2:安装cloudflared守护程序

现在要在你的内网设备上安装cloudflared了。这一步根据你用的系统略有不同,我重点讲Docker方式(最简单),其他方式简单提一下。 方式一:Docker部署(推荐) 如果你的设备支持Docker(NAS、Linux服务器等),这是最省事的方法。只需要一条命令:

docker run -d --restart=always \
  --name cloudflared \
  cloudflare/cloudflared:latest \
  tunnel --no-autoupdate run --token <你的TOKEN>

<你的TOKEN>替换成刚才复制的那一长串字符,然后回车。 几秒钟后,容器就跑起来了。--restart=always参数确保容器自动重启,这样就算设备重启了,Tunnel也会自动恢复。 方式二:Linux系统直接安装 如果不用Docker,也可以直接装在系统上。以Ubuntu/Debian为例:

# 下载安装包
wget https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb
# 安装
sudo dpkg -i cloudflared-linux-amd64.deb
# 运行Tunnel
sudo cloudflared service install <你的TOKEN>

CentOS/RHEL用户把.deb改成.rpm就行。 方式三:Windows安装 Windows用户下载MSI安装包: https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-windows-amd64.msi 双击安装,然后以管理员身份打开命令提示符(CMD),运行:

cloudflared.exe service install <你的TOKEN>

方式四:macOS安装 Mac用户最简单,用Homebrew:

brew install cloudflared
cloudflared service install <你的TOKEN>

无论哪种方式,装完之后,回到Cloudflare控制台看一眼。如果看到Tunnel状态变成HEALTHY(健康),就说明连接成功了。这时候cloudflared已经和Cloudflare建立起加密隧道了。

步骤3:配置公共主机名(Public Hostname)

现在隧道建好了,但Cloudflare还不知道要把流量转发到哪。接下来要告诉它:“当有人访问nas.yourdomain.com时,请转发到我内网的192.168.1.100:5000”。 还是在刚才的Tunnel页面:

  1. 点击Public Hostname标签页
  2. Add a public hostname
  3. 填写配置:
    • Subdomain(子域名):比如填nas,完整域名就是nas.yourdomain.com
    • Domain(域名):从下拉列表选你的域名(前提是已经托管到Cloudflare)
    • Path(路径):一般留空就行,除非你想用/api这种路径区分
    • Type(类型):选HTTP
    • URL:填你的内网服务地址,格式是http://内网IP:端口,比如http://192.168.1.100:5000 这里可能会有个疑问:为啥Type选HTTP,不是应该用HTTPS更安全吗? 其实不用担心,Cloudflare会自动提供HTTPS。流程是这样的:
  • 访问者 → Cloudflare:HTTPS加密(Cloudflare自动签发证书)
  • Cloudflare → 你的内网服务:通过加密隧道传输 也就是说,即使你的内网服务本身没配置HTTPS,用户访问的时候也是全程加密的。省了一堆配置证书的麻烦。 点Save hostname,配置就生效了。

步骤4:验证访问

现在可以测试了! 打开浏览器,访问你刚才配置的域名,比如https://nas.yourdomain.com。 如果一切顺利,你应该能看到你的内网服务了。注意浏览器地址栏会显示小锁图标,说明HTTPS证书是有效的。 首次访问可能需要等几分钟,因为DNS记录需要时间生效。如果访问不了,可以:

  1. 等5-10分钟再试
  2. 检查Tunnel状态是否HEALTHY
  3. 检查内网服务是否正常运行(在内网试试能不能访问http://192.168.1.100:5000) 一个Tunnel可以配置多个子域名 这里有个很实用的技巧:一个Tunnel可以添加多个公共主机名,对应不同的内网服务。 比如我的配置是这样的:
  • nas.mydomain.comhttp://192.168.1.100:5000(NAS管理界面)
  • blog.mydomain.comhttp://192.168.1.100:8080(个人博客)
  • ha.mydomain.comhttp://192.168.1.101:8123(Home Assistant) 这样就不用为每个服务都创建一个Tunnel了,管理起来特别方便。

四、进阶配置与最佳实践

基础配置到这里就搞定了,但如果你想更进一步,还有一些进阶玩法可以了解下。

使用配置文件管理多个服务

刚才我们是在Dashboard上点点点来配置的,这对于少量服务挺方便。但如果你有很多服务要暴露,或者想用代码管理配置(比如版本控制),可以用配置文件的方式。 在运行cloudflared的设备上,创建一个配置文件config.yml:

tunnel: <你的Tunnel UUID>
credentials-file: /path/to/<UUID>.json
ingress:
  - hostname: nas.yourdomain.com
    service: http://192.168.1.100:5000
  - hostname: blog.yourdomain.com
    service: http://192.168.1.100:8080
  - hostname: ha.yourdomain.com
    service: http://192.168.1.101:8123
  - service: http_status:404

最后那条service: http_status:404是兜底规则,所有没匹配到的请求都会返回404。这个规则必须有,而且必须放最后。 然后用这个配置文件启动cloudflared:

cloudflared tunnel --config /path/to/config.yml run

这种方式的好处是配置更清晰,而且可以放到Git仓库里做版本管理(注意别把Token提交上去!)。

支持SSH和RDP

Cloudflare Tunnel不只能转发HTTP,还支持SSH、RDP等协议。这对远程管理服务器特别有用。 SSH配置示例: 在config.yml里添加:

- hostname: ssh.yourdomain.com
  service: ssh://localhost:22

然后在本地电脑用cloudflared来SSH连接:

# 先配置SSH config
cat >> ~/.ssh/config << EOF
Host ssh.yourdomain.com
  ProxyCommand cloudflared access ssh --hostname %h
EOF
# 然后就能直接SSH了
ssh [email protected]

RDP配置(Windows远程桌面)也类似,只是协议改成rdp://。 这样做的好处是,你的SSH/RDP端口完全不用暴露在公网,安全性大大提升。

用Cloudflare Access加固安全

前面说的配置,任何人只要知道你的域名就能访问你的服务。对于公开的网站这没问题,但对于NAS管理界面这种敏感服务,最好加一层身份验证。 这就用到Cloudflare Access了,它可以在Tunnel前面加一道登录门槛。 配置也不复杂:

  1. 在Zero Trust控制台,进入AccessApplications
  2. Add an application → 选Self-hosted
  3. 填写应用信息:
    • Application name:比如”My NAS”
    • Application domain:选你的域名,比如nas.yourdomain.com
  4. 配置认证策略:
    • 可以选择邮箱白名单(只有指定邮箱能登录)
    • 或者Google/GitHub OAuth登录
    • 甚至可以开启MFA(多因素认证) 配置完之后,访问nas.yourdomain.com时,会先跳转到Cloudflare的登录页面,验证通过才能进入你的服务。 这个功能对于个人用户也完全免费,强烈建议给敏感服务配上。

性能优化与监控

最后说说日常使用的一些技巧。 查看Tunnel运行状态: 在Zero Trust控制台的Tunnels页面,可以看到:

  • Tunnel是否在线(HEALTHY或DOWN)
  • 流量统计
  • 连接的客户端数量 如果Tunnel突然DOWN了,八成是内网设备断网或关机了,去检查下cloudflared进程是不是还在跑。 查看日志排查问题: Docker方式可以用docker logs cloudflared查看日志。 常见的报错有:
  • Token无效:检查是不是复制错了
  • 连接失败:检查内网服务是不是正常运行
  • 证书错误:通常等几分钟自动修复 定期更新cloudflared: Cloudflare会不定期更新cloudflared,增加新功能或修复bug。如果用Docker,直接拉取最新镜像重启容器就行:
docker pull cloudflare/cloudflared:latest
docker restart cloudflared

不过Cloudflare官方只保证最近一年版本的兼容性,太老的版本可能会被强制下线,所以还是建议定期更新下。

五、常见问题与注意事项

用了一段时间Cloudflare Tunnel之后,我总结了一些常见问题和需要注意的地方,分享给你。

关于速度和稳定性

这是大家最关心的问题。老实说,国内访问速度确实不算快。 我自己的实测数据:

  • 延迟:300-800ms(国内访问)
  • 带宽:下载速度一般在1-5MB/s,看时段和地区
  • 稳定性:偶尔会有短暂断流,但大部分时间还好 为什么慢?因为Cloudflare的CDN节点主要在海外,国内流量要绕一圈。而且免费用户优先级相对低,高峰期可能会被限速。 适合的场景:
  • 偶尔远程访问NAS下载个文件
  • 给朋友展示个人项目
  • 远程SSH管理服务器(延迟影响不大) 不适合的场景:
  • 流媒体播放(会卡顿)
  • 游戏服务器(延迟太高)
  • 大文件频繁传输
  • 面向国内用户的生产环境 如果对速度要求高,可以考虑用frp+国内云服务器,或者Tailscale这种P2P方案。

关于安全性

Cloudflare Tunnel本身很安全,主要体现在:

  • 全程HTTPS加密
  • 不需要开放任何入站端口
  • Zero Trust架构,默认拒绝所有访问
  • Cloudflare自带DDoS防护 但这不意味着你可以随便暴露服务。强烈建议:
  1. 别暴露数据库:MySQL、Redis这些千万别直接通过Tunnel暴露,风险太大
  2. 给敏感服务加Access验证:NAS、SSH、管理后台这些,一定要配上Cloudflare Access
  3. 定期检查日志:看看有没有异常访问
  4. 更新系统和软件:内网服务该打补丁打补丁,不要觉得”反正在内网”就不管安全 话说回来,相比直接开公网端口,Tunnel已经安全太多了。

关于使用限制

Cloudflare免费计划的限制:

  • 最多50个用户(个人用绰绰有余)
  • 不限流量(这点挺良心)
  • 暂不支持UDP协议(TCP没问题)
  • 国内暂不支持HTTP/3 QUIC 还有个硬性要求:必须有域名,且必须托管到Cloudflare。如果不想把域名放Cloudflare,那就没法用Tunnel了。

替代方案对比

如果Cloudflare Tunnel不适合你,还有这些选择:

方案优势劣势适合场景
frp速度快,稳定需要云服务器,有成本生产环境、国内用户
TailscaleP2P直连,速度快只能自己用,不能公开发布个人设备间互联
ngrok配置简单免费版限制多,自定义域名要付费临时演示
DDNSTO国内团队,速度好免费版限制设备数国内用户
根据自己的需求选就行,没有绝对最好的方案。

一些实用技巧

最后分享几个小技巧: 1. 用短域名 比如nas.yourdomain.commynas.yourdomain.com好记,如果域名本身就短(比如abc.com),那nas.abc.com就更方便了。 2. 为不同服务规划子域名 建议用有意义的子域名,比如:

  • nas. - NAS管理
  • blog. - 博客
  • dev. - 开发环境
  • ssh. - SSH访问 这样看URL就知道是什么服务,管理起来也清晰。 3. 备份Token Tunnel的Token一定要保存好,最好用密码管理器(如1Password、Bitwarden)存起来。如果丢了,只能删Tunnel重建。 4. 监控Tunnel状态 可以用Cloudflare的Webhook或邮件提醒功能,当Tunnel离线时及时收到通知。具体在Zero Trust控制台的Settings里配置。

结论

说了这么多,总结一下: Cloudflare Tunnel是个免费、安全、易用的内网穿透方案,特别适合个人开发者和家庭服务器用户。你不需要公网IP,不需要买云服务器,也不用折腾路由器端口转发,30分钟就能搞定配置。 它的核心优势是:

  • 完全免费,不限流量
  • Zero Trust安全架构
  • 自带HTTPS和DDoS防护
  • 支持HTTP/SSH/RDP等多种协议
  • 一个Tunnel可以暴露多个服务 当然,也要承认它的缺点:
  • 国内访问速度一般,延迟相对高
  • 偶尔有断流情况
  • 必须有域名且托管到Cloudflare
  • 不支持UDP协议 如果你主要是自己偶尔远程访问,或者面向海外用户,Cloudflare Tunnel完全够用。如果是国内生产环境或对速度要求高,可能得考虑其他方案。 不过话说回来,对于大多数个人用户,能免费白嫖Cloudflare的基础设施,已经是相当不错的选择了。当初我花了一下午折腾frp和云服务器,最后发现Tunnel十分钟就搞定了,那种”早知道就这样”的感觉,你用了就懂。 现在就去试试吧!如果遇到问题,欢迎在评论区留言,我看到会回复的。

发布于: 2025年11月30日 · 修改于: 2025年12月4日

相关文章