无需云服务器的内网穿透方案 -- 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
相关推荐
pound12715 分钟前
Linux
linux·运维·服务器
@CLoudbays_Martin1120 分钟前
为什么动态视频业务内容不可以被CDN静态缓存?
java·运维·服务器·javascript·网络·python·php
盟接之桥2 小时前
盟接之桥说制造:在安全、确定与及时之间,构建品质、交期与反应速度的动态平衡
大数据·运维·安全·汽车·制造·devops
learning_tom2 小时前
HTML图片标签及路径详解
linux·服务器·php
dbdr09013 小时前
Linux 入门到精通,真的不用背命令!零基础小白靠「场景化学习法」,3 个月拿下运维 offer,第二十六天
linux·运维·服务器·网络·python·学习
鹧鸪云光伏与储能软件开发3 小时前
投资储能项目能赚多少钱?小程序帮你测算
运维·数据库·小程序·光伏·光伏设计软件·光伏设计
群联云防护小杜3 小时前
服务器异常磁盘写排查手册 · 已删除文件句柄篇
运维·服务器·nginx·开源·lua
liliangcsdn3 小时前
结合prompt分析NodeRAG的build过程
java·服务器·人工智能·数据分析·知识图谱
云的牧人3 小时前
Ubuntu 22 redis集群搭建
linux·运维·ubuntu
siriuuus3 小时前
Linux 磁盘扩容及分区相关操作实践
linux·运维·服务器