Cloudflare Tunnel 内网穿透

使用Cloudflare Tunnel实现内网穿透,把服务器架在家里Cloudflare Tunnel是Cloudflare零信任网络的一个产品,用于打通企业、员工、设备之间的边界,从而摒弃掉VPN之类的过时技术(其实也不是过时,只不过是相对来说安全性、可控性较差)
通过Cloudflare Tunnel,可以实现云与设备之间打通一条加密通道,这样Cloudflare的CDN就可以很方便的通过这条加密通道访问到部署在内网的服务,包括Web、SSH等 。同时,还不用考虑电信、移动等ISP不提供固定IP地址、不能开放端口,甚至解决备案的问题 。
而且,还免费 。
所以,整套内网穿透的方案大致如下

Cloudflare Tunnel 内网穿透

文章插图
 
前置条件
  • 首先,你要有一个Cloudflare的账号,并且添加了所需要使用的域名,同时,开通Cloudflare Zero TRust 。
  • 本地内网有一台linux服务器 。centos、Ubuntu、Debian都无所谓,树莓派也没问题 。Web网站正常跑,内网能正常访问 。
安装CloudflaredCloudflared是Cloudflare Tunnel的一个本地cli客户端,可以实现管理功能和守护程序 。
macOS可以用homebrew安装
brew install cloudflaredLinux直接下载编译好的二进制包安装
curl -L 'https://Github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64' -o /usr/bin/cloudflaredchmod +x /usr/bin/cloudflared登陆Cloudflared使用前,我们需要先登录
cloudflared tunnel login输入命令后,终端会给出一个登陆地址,我们拷贝到浏览器里面打开,选择需要授权的网站 。
[root@Web-Server-1]# cloudflared tunnel loginA browser window should have opened at the following URL:https://dash.cloudflare.com/argotunnel?callback=https%3A%2F%2Flogin.cloudflareaccess.org%JLKY87tdfsakh-jlfsakjuo8sFFJ%3DIf the browser failed to open, please visit the URL above directly in your browser.You have successfully logged in.If you wish to copy your credentials to a server, they have been saved to:/root/.cloudflared/cert.pem注意:授权一次只能选择一个网站 。如果存在多个不同域名的网站,请授权完成后不要关闭网页,点击第二个、第三个要授权的域名,进行多次授权 。
创建隧道授权完以后,我们需要创建隧道 。一般建议一台服务器创建一个隧道 。
cloudflared tunnel create <隧道名字># 比如cloudflared tunnel create webserver-1创建完以后,会输出隧道的一个UUID,记录下来
[root@Web-Server-1]# cloudflared tunnel create webserver-1Tunnel credentials written to /root/.cloudflared/12345-123-123-123-12345.json. cloudflared chose this file based on where your origin certificate was found. Keep this file secret. To revoke these credentials, delete the tunnel.Created tunnel webserver-1 with id 12345-123-123-123-12345域名指向接着,我们需要把域名指向到对应的隧道
【Cloudflare Tunnel 内网穿透】注意:下面的命令只会对第一个授权的顶级域名生效,比如abc.com和*.abc.com 。如果有多个域名,比如123.com、456.com,需要手工添加CNAME记录 。
cloudflared tunnel route DNS <隧道名字> <域名># 比如一级域名(和Web界面不一样,不需要输入@)cloudflared tunnel route dns webserver-1 abc.com# 又比如二级域名cloudflared tunnel route dns webserver-1 www.abc.com这时候,Cloudflare会自动添加一条CNAME记录到对应的域名 。
对于多个其他域名,我们需要登录Cloudflare的Web控制台,对应添加CNAME记录,记录值是
<隧道UUID>.cfargotunnel.com比如12345-123-123-123-12345.cfargotunnel.com
Cloudflare Tunnel 内网穿透

文章插图
 
按照上面的说明和图片,我们一条条记录加好 。
配置Cloudflared接着,我们开始配置Cloudflared,先编辑一个配置文件
vim ~/.cloudflared/config.yml输入下面的内容(根据自己要求编辑)
tunnel: <隧道UUID>credentials-file: /root/.cloudflared/<隧道UUID>.jsonprotocol: h2muxingress:# 第一个网站,连接到本地的80端口- hostname: <域名1.com>service: http://localhost:80# 第二个网站,https协议,连接到本地的443端口,禁用证书校验(用于自签名SSL证书)- hostname: <域名2.com>service: https://127.0.0.1:443originRequest:noTLSVerify: trueoriginServerName: <域名2.com># 第三个网站,8012端口,泛域名- hostname: <*.域名3.com>service: http://localhost:8012# 第四个,反代MySQL sock服务- hostname: <mysql.域名4.com>service: unix:/tmp/mysql.sock# 第五个,反代SSH服务- hostname: <ssh.域名5.com>service: ssh://localhost:22- service: http_status:404


推荐阅读