开发测试时有时需要将内网服务映射到外网,一般都是在VPS上利用Frp进行操作。需要分别进行客户端和服务端配置,有点麻烦。最近发现CF的隧道也能达到相同的效果,配置方便最重要的是省去了VPS,即开即用,记录备忘。

0x01 准备

进行内网映射前需要提前准备:

一个Cloudflare的账号
一个可用的域名

0x02 安装Cloudflare Tunnel

MAC用户

brew install cloudflared

其他用户

根据不同的系统,点击这里进行下载

0x03 Cloudflare授权

通过命令行进行授权登录,若不自动弹出浏览器也可将URL手动粘贴至浏览器进行打开。

cloudflared login


登录后会让你针对域名进行授权,授权完毕后本地会保存证书文件,下次可以直接操作无需再次登录。

0x04 创建隧道并绑定域名

首先需要创建一个隧道,之后将隧道绑定到一个子域名,绑定后可以看到CF上自动添加了一条DNS解析。

cloudflared tunnel create web1

cloudflared tunnel route dns 4e734e63-a12d-44ca-9bf2-78796cfe2c21 test.mari0er.club

0x05 内网映射

创建并绑定完隧道后,就可以自定义内网映射的服务了。除了将本机服务进行映射外,内网其他主机的服务同样可以进行映射,这里将内网路由器地址通过域名放到了公网

cloudflared tunnel --name web1 --url http://192.168.200.1

0x06 端口转发

有时需要在家远控公司的电脑,此时就需要进行端口转发。比如将公司电脑的3389转发到家里本地的3389端口

cloudflared tunnel --name web1 --url rpd:127.0.0.1     #公司电脑

cloudflared access rdp --hostname test.mari0er.club --listener 127.0.0.1:3389   #家里电脑

0x07 其他服务

除了常见的http协议,类似rdp、ssh、tcp、https同样也可以进行映射和转发

协议 描述 URL试例
HTTP/S Incoming HTTP requests are proxied directly to your local service. https://localhost:8000
HTTP over Unix socket Just like HTTP, but using a Unix socket instead. unix:/home/production/echo.sock
HTTPS over Unix socket Just like HTTPS, but using a Unix socket instead. unix+tls:/home/production/echo.sock
TCP TCP connections are proxied to your local service. tcp://localhost:2222
SSH SSH connections are proxied to your local service. Learn more. ssh://localhost:22
RDP RDP connections are proxied to your local service.Learn more. rdp://localhost:3389