无需云服务器的内网穿透方案 -- cloudflare tunnel

内网穿透

原文地址 https://docs.caolib.dpdns.org/network/cloudflare tunnel.html

Cloudflare Tunnel 内网穿透工具

1.简介

1.1 介绍

官方介绍:Cloudflare Tunnel 为您提供了一种安全的方式,无需公开路由的 IP 地址即可将资源连接到 Cloudflare。使用 Tunnel,您不会将流量发送到外部 IP,而是基础设施中的轻量级守护程序 (cloudflared) 创建与 Cloudflare 全球网络的仅出站连接。Cloudflare Tunnel 可以将 HTTP Web 服务器、SSH 服务器远程桌面和其他协议安全地连接到 Cloudflare。这样,您的源站就可以通过 Cloudflare 提供流量,而不会受到绕过 Cloudflare 的攻击。

有关如何在现有基础设施中实施 Cloudflare Tunnel 的详细信息,请参阅我们的参考架构

1.2 它能做什么?

这应该是很多人关心的问题,我举个例子:

参照上面的工作图,假设我本地电脑上运行了一个服务器,端口是8080,这时候我希望可以通过公网访问这个服务,一般来说我们需要一个云服务器部署这个服务,然后通过公网IP和端口进行访问,非常麻烦。

如果使用cloudflare tunnel实现,你只需要在cloudflare上托管一个域名即可,无需云服务器!

2.快速开始

2.1 运行本地服务

首先你需要在本地运行你的服务,这里简单举个例子,新建一个js文件server.js,添加下面代码

js 复制代码
const http = require('http');

// 创建服务器
const server = http.createServer((req, res) => {
    // 设置响应头
    res.writeHead(200, {
        'Content-Type': 'text/plain; charset=utf-8',
        'Access-Control-Allow-Origin': '*'
    });

    // 返回文本
    res.end('hello cloudflared');
});

// 监听端口10086
const PORT = 10086;
server.listen(PORT, () => {
    console.log(`服务器运行在 http://localhost:${PORT}`);
});

// 错误处理
server.on('error', (err) => {
    if (err.code === 'EADDRINUSE') {
        console.error(`端口 ${PORT} 已被占用,请使用其他端口`);
    } else {
        console.error('服务器错误:', err);
    }
});

然后使用下面命令启动服务器

sh 复制代码
node .\server.js

启动之后浏览器访问 http://localhost:10086/就能看到返回结果 hello cloudflared

2.2 安装 Cloudflare Tunnel

2.2.1 前置条件

安装之前先确保你已经注册了cloudflare账号并且在上面托管了一个域名,确保活动状态,下面是我托管的一个域名 kirakira.dpdns.org,以这个域名为例,这个域名是在DigitalPlat Domain Dashboard上免费申请的,不用手机号,非常方便简单,国内访问可能不太稳定但至少能用

2.2.2 安装cloudflared

1.前往Cloudflare One然后登录,然后依次点击网络->Tunnels->创建隧道

2.选择 cloudflared

3.随便起个名字然后保存

4.我这里选择Windows,其他平台选择对应的安装方式安装就行

  1. 下载 https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-windows-amd64.msi.
  2. 运行安装程序。
  3. 管理员身份打开命令提示符。
  4. 运行以下命令:
sh 复制代码
cloudflared.exe service install eyJhIjoi..................

5.安装完成之后点击侧栏的Tunnels可以看到创建的隧道已经激活了

2.2.3 配置tunnel

1.点击隧道名称然后点击编辑

2.然后点击添加公共主机名

!important

子域路径可以自定义设置,可以留空,服务就按照之前部署的本地服务填写即可

下图中的效果相当于将访问https://子域.域/路径的请求转发到你本地电脑<类型://URL>,也就是:

https://api.kirakira.dpdns.org -> http://localhost:10086/

4.此时打开https://api.kirakira.dpdns.org就能看到效果了(第一次可能没那么快,大概过几秒会显示)


!tip

补充几点:

  • 本地电脑上安装的cloudflared的服务可以转发多个端口,在公共主机名可以像上面一样添加,服务也可以设置为其他服务
  • 绑定的公共主机名会在该域名下添加DNS记录,注意不要误删除了
  • 如果你使用Windows,可以使用下面命令启动和停止cloudflared服务
    • 启动 sc start cloudflared
    • 停止 sc stop cloudflared(也可以用任务管理器停止)
  • 上述添加tunnel和公共主机名的过程也可以通过命令行完成 Create a tunnel (API) · Cloudflare Zero Trust docs
相关推荐
轻造科技3 分钟前
周期压缩极限挑战:APS排产优化这样实现
运维·devops
鲨莎分不晴7 分钟前
Nginx 部署前端项目实战指南
运维·前端·nginx
java_logo2 小时前
QWEN3 企业级 Docker 容器化部署指南
运维·docker·容器·qwen3部署·qwen3部署文档·qwen3部署教程·qwen3部署方案
糖~醋排骨2 小时前
DHCP服务的搭建
linux·服务器·网络
huohaiyu2 小时前
网络中的一些基本概念
运维·服务器·网络
Kiyra2 小时前
虚拟机假死?SSH 能连却卡 Logo 界面
运维·ssh
dust_and_stars2 小时前
ubuntu24使用apt安装VS-code-server code-server
linux·服务器·windows
tap.AI3 小时前
Deepseek(九)多语言客服自动化:跨境电商中的多币种、多语种投诉实时处理
运维·人工智能·自动化
ling-453 小时前
Linux-day09 11
linux·运维·服务器
202321336054 刘3 小时前
Linux常用命令分类整理
linux·运维·数据库