无需云服务器的内网穿透方案 -- 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
相关推荐
今麦郎xdu_11 小时前
【Linux系统】命令行参数和环境变量
linux·服务器·c语言·c++
还不秃顶的计科生11 小时前
linux下conda未安装的解决方法(离线安装linux下的conda)
linux·运维·服务器
爱学习饼12 小时前
CentOS下安装配置JDK24和tomcat11
linux·运维·centos
Super Rookie12 小时前
Tomcat 自动化脚本安装方案
运维·tomcat·自动化
qinxue72212 小时前
Jenkins自动化配置--CICD流水线
运维·自动化·jenkins
迎風吹頭髮13 小时前
Linux服务器编程实践26-TCP连接超时重连机制:超时时间计算与重连策略
服务器·网络·php
wanhengidc13 小时前
什么是站群服务器
运维·服务器·网络·游戏·智能手机
琦琦琦baby14 小时前
VRRP技术重点总结
运维·网络·智能路由器·vrrp
筑梦之路14 小时前
深入linux的审计服务auditd —— 筑梦之路
linux·运维·服务器
陈说技术14 小时前
服务器CPU达到100%解决思路
运维·服务器