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 暴露到公网,方便远程开发。
- 创建 Tunnel
在 Cloudflare 操作面板中,选择 Zero Trust (Dashboard) > Access > Tunnels 就可以开始创建 tunnel。根据流程一步步执行即可。
创建期间会让你在本地开启一个 cloudflared 服务
sudo cloudflared service install tunnel-run-token
- 远程登录
创建完 tunnel 后,这时候我们只有一个公网的地址, 如 ssh.example.com`` 这时候直接使用
ssh [email protected]` 是无法登录的。需要使用 cloudflared 作为 ssh 的代理。
ssh -o "ProxyCommand cloudflared access ssh --hostname %h" [email protected]
这样就可以登录到远程的机器了。
- 文件传输
光是能够登录上机器还不满足日常的远程开发工作,往往我们还需要在本地和远程机器之间传输文件,这时候我们可以使用 scp
命令,但也不能直接使用,需要使用 cloudflared 作为代理。同样的,
# 下载文件
scp -o "ProxyCommand cloudflared access ssh --hostname %h" [email protected]:/path/to/file .
小结 #
cloudflared 的功能远不止此,这里仅仅涉及到 ssh 的部分,后面再有更多场景再补充。