内网穿透
原文地址 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
,添加下面代码
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);
}
});
然后使用下面命令启动服务器
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
,其他平台选择对应的安装方式安装就行
- 下载 https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-windows-amd64.msi.
- 运行安装程序。
- 以管理员身份打开命令提示符。
- 运行以下命令:
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