无需云服务器的内网穿透方案 -- 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
相关推荐
虎头金猫4 天前
4K 视频总卡在公网带宽?用 N1 + OpenList 把网盘播放链路重新理顺
运维·服务器·网络·python·容器·beautifulsoup·pandas
AI职业加油站4 天前
AI智能体应用工程师证书:政策红利下的职业新风口
大数据·运维·人工智能·学习·职场发展
此冬歌咏4 天前
K8s 节点故障实战:优雅驱逐 31 秒,硬故障 331 秒,以及那个永远 Pending 的 Pod
运维·k8s
-梅4 天前
linux(8) 软硬链接
linux·运维·服务器
Wang's Blog4 天前
Java 项目实战: 外卖平台-文件下载与ServletOutputStream回写浏览器
服务器·项目开发
张洛闻Eren4 天前
k8s云原生【第十课】:水平 Pod 自动扩缩容
运维·数据库·云原生·kubernetes·github
琥珀色糖4 天前
SimlpeHttp
linux·服务器
其实防守也摸鱼4 天前
内网穿透与反向代理:原理、工具与实战指南
android·大数据·运维·安全·网络安全·自动化·渗透
SoStraw4 天前
无公网IP远程访问设备,不用frp也能实现99.9%连通率
frp·内网穿透·p2p·远程访问·webrpc·无公网ip·file2file
第十人i4 天前
Linux 日志管理系统:journald 配置与优化
linux·服务器