开发测试时有时需要将内网服务映射到外网,一般都是在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 |