使用cloudflare_tunnel做内网穿透
2024-02-26 15:13:18

前言

其实几个月前就了解到了 cloudflare tunnel 这个产品,当时没仔细看文档,就随便部署了一个 http 服务,当然也有尝试做 ssh 内网穿透,但是失败了。。

看文档

在正式使用之前,建议先把文档看一看,这很重要。Connect with SSH through Cloudflare Tunnel

创建一个 tunnel

登陆 cloudflare 账户,进入 Zero Trust-> Access -> Tunnel。点击 create a tunnle 创建一个新的 tunnel。注意:使用这个功能需要有一个域名托管在 cloudflare ,根据提示,在自己的机器上安装 cloudflard 并启动服务。

由于本人使用的是 ubuntu 20.04 操作系统,因此我选择的是以 deb 的方式安装软件包,你也可以使用 docker,但是我曾经在使用 docker 的时候,遇到了一些网络问题。为了减少折腾,这次就不使用 docker 了。

1
2
3
4
5
curl -L --output cloudflared.deb https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb && 

sudo dpkg -i cloudflared.deb &&

sudo cloudflared service install xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

安装完成以后,可以在 cloudflare 页面的下方,看到有一个 Connector,并且 Status 是绿色的,表示已经正常链接,可以访问。

下一步要选择协议,因为我是想从外面访问内网的终端,所以协议选择 ssh,在访问地址处填写: 127.0.0.1:22,我没有选择 localhost,虽然虚拟机在 /etc/hosts 文件中映射了 localhost,但是我在尝试使用 localhost 作为主机名连接时,并不能成功(我是在主机中尝试,也就是自己链接自己的 22 端口)。猜测可能是哪里的配置有点问题,试了一下 127.0.0.1 是 OK 的,就填 127.0.0.1。

配置

在前一步骤配置完成以后,仍不能直接访问 ssh,需要配置一个 application,用于做鉴权,毕竟把家里的网络直接公开到互联网是一件很危险的事情。

在和 Tunnel 的同一级菜单中,有 Application 选项,单击 Add Application ,然后有一系列配置要填写。这里假设我上面配置 ssh 时,填写的域名是 shell.example.com ,那么在这里设置需要鉴权的域名时,也要填写 shell.example.com

添加策略

在配置中,这一步是设置策略,目的是限制只有满足某个条件的人才可以访问,这里我使用的是 email,我填写了 [email protected][email protected] ,当我使用 web 页面访问 shell.example.com 时,需要输入一个 email 账号,cloudflare 会发送一封带有验证码的邮件到邮箱,输入正确的验证码才能成功访问。

开启浏览器终端访问

在 Applications 配置中,最后一条是 settings,拉到最下面,有 Browser rendering 选项,可以选择 ssh 或者 vnc,这里我选择 ssh 即可。不过看它既然支持 vnc,看起来远程连回家里 windows 也应该是可行的。

验证

访问 shell.example.com ,输入 [email protected],此时邮箱会接收到一封邮件,输入邮件中的验证码就可以访问远程终端。在我的测试中,如果输入的邮箱是不在前面设置的策略中,那么就不会收到验证邮件。

逼逼赖赖

cloudflare tunnel 确实好用,还能全球组内网,国内访问速度是有些慢,但是实测还是可以使用,而且速度并不低,我之前验证过,从家里内网的网盘上下载东西,下载速度是取决于家里宽带的上行速度,也可能是我 100M 的宽带上行太低了,但是这已经秒杀一众国内的内网穿透工具了好吧。