`
August 15, 2023 本文阅读量

Cloudflare Tunnel 使用笔记

记录下 Cloudflare Tunnel 的一些小东西,关于 cloudflared 的用法。

Cloudflare 自不用多说,Tunnel 是 Cloudflare 提供的一项功能,可以将本地的服务通过 Cloudflare 的网络暴露到公网,这样就可以实现内网穿透,同时还可以通过 Cloudflare 的网络加速服务,提高访问速度。

初识 Cloudflare Tunnel

最开始接触 Cloudflare Tunnel 是在 Twitter 上看到一个项目cloudflare-tunnel-ingress-controller ,这个项目是一个 Kubernetes 的 Ingress Controller,可以将 Kubernetes 中的服务通过 Cloudflare Tunnel 暴露到公网,这样就可以实现内网穿透,也就是说局域网搭建的服务可以通过 Cloudflare 的网络暴露到公网。

熟悉内网穿透的小伙伴,应该对这中东西很熟悉,也没什么好说的。

前提

  • 一个 Cloudflare 账号
  • 一个域名

cloudfalred

Mac 上可以通过 brew install cloudflared 安装,安装完成后,可以通过 cloudflared -v 查看版本。

$ cloudflared -v
cloudflared version 2023.7.3 (built 2023-07-25T20:51:49Z)

参考 cloudflared 官方文档 安装。

$ cloudflared login

使用

我的使用场景除了最开始提到的 Kubernetes Ingress Controller 之外,还有一个就是将局域网内的开发机通过 Cloudflare Tunnel 暴露到公网,方便远程开发。

  1. 创建 Tunnel

在 Cloudflare 操作面板中,选择 Zero Trust (Dashboard) > Access > Tunnels 就可以开始创建 tunnel。根据流程一步步执行即可。

创建期间会让你在本地开启一个 cloudflared 服务

sudo cloudflared service install tunnel-run-token
  1. 远程登录

创建完 tunnel 后,这时候我们只有一个公网的地址, 如 ssh.example.com`` 这时候直接使用 ssh [email protected]` 是无法登录的。需要使用 cloudflared 作为 ssh 的代理。

ssh -o "ProxyCommand cloudflared access ssh --hostname %h" [email protected]

这样就可以登录到远程的机器了。

  1. 文件传输

光是能够登录上机器还不满足日常的远程开发工作,往往我们还需要在本地和远程机器之间传输文件,这时候我们可以使用 scp 命令,但也不能直接使用,需要使用 cloudflared 作为代理。同样的,

# 下载文件
scp -o "ProxyCommand cloudflared access ssh --hostname %h" [email protected]:/path/to/file .

小结

cloudflared 的功能远不止此,这里仅仅涉及到 ssh 的部分,后面再有更多场景再补充。