使用cloudflare tunnel免费内网穿透,实现网站的外网访问和远程桌面

2023-11-15

前言

Cloudflare Tunnel是Cloudflare Zero Trust中的一个产品,它能够帮助用户将位于内网中的服务暴露到公网上,从而使得外部用户可以通过互联网访问这些服务。相比较于frp、ngrok等内网穿透工具,使用Cloudflare Tunnel可以获得更好的安全性和性能。

在使用前,需要先注册一个Cloudflare账号,然后开通Cloudflare Zero Trust服务,选择免费套餐就可以了。此外,还需要注册一个自定义域名,然后将其添加到Cloudflare的DNS服务中。腾讯云、阿里云、华为云等云服务商都提供了域名注册服务,选一个便宜的就可以了。

安装

安装Cloudflared, 这是Cloudflare Tunnel的命令行工具,可以在Linux、MacOS、Windows上运行,选择对应的版本下载即可。

MacOS

在macOS上,可以使用Homebrew安装:


brew install cloudflared

Linux

在Linux上,可以直接下载二进制文件,并给以可执行权限,比如安装amd64版本:


curl -L 'https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64' -o ./cloudflared

chmod +x ./cloudflared

Windows

下载Windows版本的二进制文件,比如’cloudflared-windows-amd64.exe’,然后复制到自己定义的目录里,名字改为’cloudflared.exe’。

登录

后面的操作以Linux为例,如果是Windows,需要打开PowerShell进行操作,并将’cloudflared’替换为’cloudflared.exe’。

输入命令进行登录:


cloudflared tunnel login

输入命令后,会给出一个URL,打开浏览器访问这个URL,选择需要授权的网站。

创建Tunnel

创建一个Tunnel,名称可以自定义,比如’web’:

cloudflared tunnel create <tunnel-name>
# 例如
cloudflared tunnel create web

创建成功后,会返回一个Tunnel ID,类似于’f7b0c0e0-0c0e-0c0e-0c0e-0c0e0c0e0c0e’。

配置DNS记录

使用如下命令配置DNS,其中的<tunnel-name>是创建Tunnel时指定的名称,<domain>是自定义的域名,比如web.example.com:

cloudflared tunnel route dns <tunnel-name> <domain>
# 例如
cloudflared tunnel route dns web web.example.com

如果还有其他域名需要配置,可以继续执行上面的命令。配置完成后可以前往Cloudflare控制台查看到CNAME记录。

编写配置文件

Linux的配置文件路径为~/.cloudflared/config.yml,Windows的配置文件路径为%USERPROFILE%\.cloudflared\config.yml,如果文件不存在,可以手动创建。

配置文件内容如下,注意根据注释修改配置:


# Tunnel UUID,就是同目录下的json文件的文件名

tunnel: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

# 鉴权文件路径,注意根据自己的路径修改,下面的例子是Linux的路径

credentials-file: /home/xxx/.cloudflared/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.json

protocol: h2mux

  

# 服务配置

ingress:

  # hostname是刚才添加DNS记录时指定的域名

  - hostname: web.example.com

    # service是需要暴露的服务,比如这里反代了5244端口

    service: http://127.0.0.1:5244

  - hostname: web2.example.com

    # 这里的示例是windows 远程桌面服务

    service: rdp://localhost:3389

  # 最后记得添加一个默认404

  - sevice: http_status:404

更多配置方式可以参考帮助文档

配置完成后,验证一下配置文件是否正确:

cloudflared tunnel ingress validate

测试运行

输入如下命令启动Tunnel:

cloudflared tunnel --config ~/.cloudflared/config.yml run <tunnel-uuid>
# 例如
cloudflared tunnel --config ~/.cloudflared/config.yml run xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

访问刚才配置的域名,如果能正常访问,说明配置成功。或者前往Cloudflare Zero Trust的控制台查看Tunnel的状态。

远程桌面配置

如果是需要在windows上使用远程桌面,在控制端上同样下载windows可执行文件,然后在文件目录打开cmd,输入如下命令即可,注意hostname填刚才设置了rdp service对应的域名。

cloudflared.exe access rdp --hostname web2.example.com --url localhost:3000

再打开windows远程桌面连接,计算机处填入localhost:3000,设置好用户名和密码后点击连接即可。
image.png|300

配置开机自启动

目前我们所有的命令执行都需要手动操作,这显然是不放便的,因此需要配置开机自启动。

Linux

执行如下命令:

cloudflared service install
systemctl start cloudflared

注意:创建系统服务后,配置文件会被拷贝到/etc/cloudflared/config.yml,后续修改配置必须修改新文件

Windows

以管理员身份打开cmd,然后进入存放cloudflared.exe的目录,执行如下命令:

cloudflared.exe service install

按下windows徽标键+R,输入regedit,打开注册表,进入HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services,找到Cloudflared,将ImagePath的值修改为C:\Cloudflared\bin\cloudflared.exe --config=C:\Users\%USERNAME%\.cloudflared\config.yml tunnel run,注意修改路径为自己的可执行文件路径和配置文件路径。

再按下windows徽标键+R,输入services.msc,找到Cloudflared agent服务,右键重新启动即可。

MacOS

macOS上注册服务请参考Run as a service on macOS · Cloudflare Zero Trust docs

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用cloudflare tunnel免费内网穿透,实现网站的外网访问和远程桌面 的相关文章

  • LINUX:如何锁定内存中进程的页面

    我有一个 LINUX 服务器 运行一个具有大量内存占用的进程 某种数据库引擎 该进程分配的内存太大 需要将其中一部分换出 换出 我想做的是将所有其他进程 或正在运行的进程的子集 的内存页面锁定在内存中 以便只有数据库进程的页面被换出 例如
  • 如何从 C++ 程序中重新启动 Linux?

    我有一个 Qt 4 GUI 我需要在下拉菜单中提供一个选项 允许用户选择重新启动计算机 我意识到这对于以其他方式重新启动计算机的能力来说似乎是多余的 但选择需要保留在那里 我尝试使用 system 来调用以下内容 suid root she
  • Windows 上的 Openssl 错误 0x02001005 和 0x2006D002?

    我正在尝试使用 openssl 将 cer 证书转换为 p12 证书 这是我正在使用的命令 C OpenSSL Win32 bin gt openssl x509 inform der in developer identity cer o
  • python+win32:检测窗口拖动

    有没有办法检测何时使用 python pywin32 在窗口中拖动不属于我的应用程序的窗口 我想对其进行设置 以便当我拖动标题与桌面边缘附近的图案匹配的窗口时 当松开鼠标时它会捕捉到边缘 我可以编写代码 以便在释放鼠标时将所有具有该标题的窗
  • Python 3.4.3 subprocess.Popen 在没有管道的情况下获取命令的输出?

    我试图将命令的输出分配给变量 而不让命令认为它正在通过管道传输 原因是 如果正在通过管道传输 则相关命令会给出未格式化的文本作为输出 但如果从终端运行 则会给出颜色格式化的文本 我需要获取这种颜色格式的文本 到目前为止我已经尝试了一些事情
  • 在汇编中使用 printf 会导致管道传输时输出为空,但可以在终端上使用

    无输出 https stackoverflow com questions 54507957 printf call from assembly do not print to stdout即使在终端上 当输出不包含换行符时也有相同的原因
  • 移动/调整窗口大小时闪烁

    我开发了一个显示 jpeg 图像的应用程序 它可以显示 4 个图像 屏幕的每个象限各一个 为此 它使用了 4 个窗口 窗口没有边框 框架 也没有标题栏 当加载新图像时 窗口大小会根据新图像进行调整 然后显示该图像 尤其是当窗户做得较大时 经
  • 由于图形处理单元配置,不支持 Windows Phone 模拟器(Mac 上的 Windows 7)

    启动 Windows Phone 模拟器时出现错误 不支持 Windows Phone 模拟器 因为您的计算机没有所需的图形处理单元配置 如果没有图形处理单元 XNA 框架页面将无法运行 您想继续启动模拟器吗 当我尝试访问网页 任何网页 时
  • 如何在Windows上分离“Git bash”中启动的“git gui”?

    例如 我开始 git bash 我导航到某个目录 I start git gui 我关闭控制台窗口或按 Ctrl C Git gui 的窗口消失了 即使我用过git gui disown 即使当我按 Ctrl C 时它不在前台 如何正确分离
  • C# - 方法必须有返回类型

    我在调用 C 中的方法时遇到问题 不断收到消息 方法 计算 必须有返回类型 using System Diagnostics namespace WindowsFormsApplication1 public partial class F
  • 仅使用containerd(不使用Docker)修剪容器镜像

    如果我刚刚containerd安装在 Linux 系统上 即 Docker 是not安装 如何删除未使用的容器映像以节省磁盘空间 Docker 就是这么方便docker system prune https docs docker com
  • Linux 中 m 标志和 o 标志将存储在哪里

    我想知道最近收到的路由器通告的 m 标志和 o 标志的值 从内核源代码中我知道存储了 m 标志和 o 标志 Remember the managed otherconf flags from most recently received R
  • 有没有一种快速方法可以从 Jar/war 中删除文件,而无需提取 jar 并重新创建它?

    所以我需要从 jar war 文件中删除一个文件 我希望有类似 jar d myjar jar file I donot need txt 的内容 但现在我能看到从 Linux 命令行执行此操作的唯一方法 不使用 WinRAR Winzip
  • FileOutputStream.close() 中的设备 ioctl 不合适

    我有一些代码可以使用以下命令将一些首选项保存到文件中FileOutputStream 这是我已经写了一千遍的标准代码 FileOutputStream out new FileOutputStream file try BufferedOu
  • 为什么 Linux 没有 DirectX API?

    在考虑现代显卡的 Windows 系统上 DirectX API 的驱动程序端实现时 我想知道为什么此实现在非 Windows 系统 尤其是 Linux 上不可用 由于明显缺乏此功能 我只能假设有一个我无视的充分理由 但在我的原始理解中 我
  • 适用于 Linux 的轻量级 IDE [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 在 C 中使用单个消息队列是否可以实现双向通信

    我希望服务器向客户端发送一些消息 并让客户端确认它 我被分配了这个任务 我可以在 C linux 中使用单个消息队列来完成它还是我需要创建两个 谢谢 是的 可以使用 sysV 消息队列来做到这一点 从您之前的问题来看 您正在使用该队列 您可
  • 将 CrashDumps 转储到应用程序运行所在的同一文件夹中

    我编写了一个应用程序 我希望对其进行一定程度的自动调试 我想使用 Windows 错误报告将故障转储输出到应用程序运行所在的同一文件夹中 我的想法是 我可以让我的应用程序在它自己的文件夹中查找任何 dmp 文件 然后根据需要上传它们进行分析
  • 我们真的应该使用 Chef 来管理 sudoers 文件吗?

    这是我的问题 我担心如果 Chef 破坏了 sudoers 文件中的某些内容 可能是 Chef 用户错误地使用了说明书 那么服务器将完全无法访问 我讨厌我们完全失去客户的生产服务器 因为我们弄乱了 sudoers 文件并且无法再通过 ssh
  • python获取上传/下载速度

    我想在我的计算机上监控上传和下载速度 一个名为 conky 的程序已经在 conky conf 中执行了以下操作 Connection quality alignr wireless link qual perc wlan0 downspe

随机推荐

  • QDialog、QWidget、QMainWindow的区别

    QDialog QWidget QMainWindow的区别 dialog有exec函数 如果是dialog窗口 后边的窗口是不可选的 widget和dialog都有show函数 如果通过这个函数显示这两种类型的窗口 则两个窗口都是可选的
  • 国际带宽市场的发展趋势和前景

    随着全球互联网的不断普及和云计算 人工智能等新技术的迅猛发展 国际带宽市场在不断扩大 成为了全球信息通信领域的重要组成部分 本文将就国际带宽市场的发展趋势和前景进行探讨 一 市场概况 国际带宽是指一个国家或地区连接国际互联网所拥有的带宽资源
  • VMware Workstation Pro 16.2.4安装教程

    VMware Workstation Pro 16 2 4 安装教程 文章目录 VMware Workstation Pro 16 2 4 安装教程 下载最新版VMware 双击打开 自定义安装位置 把 去掉 点击下一步 等待安装 点击许可
  • 主从服务器 共用文件,Docker+keepalived+nginx实现主从热备的方法示例

    前言 为解决单点故障 我们需要配置主从热备方案 服务器数量有限 故使用Docker模拟安装配置 本次配置默认已经安装了Docker 配置环境 centos7 64位 docker版本 Docker version 17 12 1 ce bu
  • Apache Storm之集群安装

    1 环境 storm 1 2 1 Java 7 storm 1 x对java 7 和 java 8均进行了测试 Pytho 2 6 6 Python 3 x理论上也可以 但是并不作为storm的测试 以上是storm的环境 如果不匹配的ja
  • python-异常处理汇总

    1 需求 当程序遇到问题时 不让程序结束 而越过错误继续向下执行 格式 try 语句t except 错误码 语句1 except 错误码 语句2 except 错误码 语句3 except 错误码 语句n else 语句e 注意 else
  • 数字IC秋招面试专题(二)verilog的signed和unsigned

    数字IC秋招面试专题 二 verilog的signed和unsigned 前言 一 右值按signed还是unsigned 二 signed的自动扩位 三 系统函数 signed 和 unsigned 总结 声明 未经作者允许 禁止转载 推
  • ​【UI界面】Foobar2000 FlatLite 整合版

    Foobar2000 是一款本地音乐播放器 这里我就不再做介绍了 不懂的请自行了解 此 Foobar2000 FlatLite 主题包为整合版本 下载既可用 主题界面是模块化的 JS 面板 每个面板都是独立的 面板里的图标也是由 JS 脚本
  • JAVA字符串的两种定义方式的区别

    关于JAVA中两种字符串定义方式的区别 第一次写 就当复习总结一下 希望能帮到需要的人吧 我们知道在JAVA中 对于字符串的实例化方式有两种 直接赋值 String str Hello World 构造方法实例化 String str ne
  • 编写dylib_如何使用第三方的dylib

    展开全部 所谓dylib 就是bsd风格的动态库 基本可以认为等价于e5a48de588b63231313335323631343130323136353331333339663331windows的dll和linux的so mac基于bs
  • car

    本篇介绍如何检验回归结果是否符合模型假设 以及样本中是否存在异常点 本篇使用的主要工具包是car 包名是Companion to Applied Regression的缩写 该包提供了许多用于模型检验的函数 初始模型如下 library c
  • HTML快速参考指南

    目录 HTML 基础文档 文本元素 逻辑样式 物理样式 链接 锚 图像元素 无序列表 有序列表 定义列表 表格 框架 表单 实体 其他元素 HTML 基础文档 Visible text goes here 文本元素 p This is a
  • windows下编写shell脚本完美解决换行问题$'\r': command not found

    前面已经写过另外一边关于解决编写shell脚本换行的问题 即在Linux下执行命令 sed i s r g 文件名称 比如 sed i s r g host1 sh 今天是另外一种方式解决 使用ultraEdit软件编写shell脚本 新建
  • 【mysql】出现 slow sql 问题及建议

    文章目录 1 SQL 执行什么情况下会变慢 2 影响 SQL 语句执行效率的主要因素有哪些 3 慢 SQL 是如何拖垮数据库的 4 最佳实践建议 1 SQL 执行什么情况下会变慢 数据量增加 数据库中的数据量可能会逐渐增加 导致查询变慢 查
  • Python 常用写法

    时间 1 now import datetime now datetime now nowStr now strftime now Y m d H M S list 1 分割最后一个 arr str rsplit 1 2 数组 加索引 en
  • 学习C++项目——select模型,poll模型和epoll模型

    学习计算机网络编程 一 思路和学习方法 本文学习于 C语言技术网 www freecplus net 在 b 站学习于 C 语言技术网 并加以自己的一些理解和复现 如有侵权会删除 接下来应该是网络编程部分最难也是最常用的部分 同时在这一章我
  • 系统分析与设计——UML图总结

    一 前言 期末考试之前 我复习系统分析与设计的时候对UML图做了一些知识汇总 现在放到博客上 如果有不对或不恰当的地方 欢迎各位指正 本文仅仅起记录作用 可随意转载 荣幸之至 截图来自网络或是老师的PPT 二 概述 系统模型的三个主要部分
  • flutter 键盘挡住输入框问题

    bool isShowKeyboard false double keyboardSize 260 软键盘高度 类添加with WidgetsBindingObserver 生命周期监听器 class SendRedEveDialogSta
  • 浏览器上实现CNN可视化——清楚看到每一层卷积后的图

    目录 本文作用 CNN神经网络可视化工具1 解释器学习笔记 CNN神经网络可视化工具2 本文作用 学习卷积神经网络时 我们只知道输入一张图片后 通过一顿操作 便可以提取图片中的特征 我们对于其内部的操作 只有理论了解 并没有做到眼见为实 这
  • 使用cloudflare tunnel免费内网穿透,实现网站的外网访问和远程桌面

    前言 Cloudflare Tunnel是Cloudflare Zero Trust中的一个产品 它能够帮助用户将位于内网中的服务暴露到公网上 从而使得外部用户可以通过互联网访问这些服务 相比较于frp ngrok等内网穿透工具 使用Clo