24 / 06 / 05
Cloudflare Tunnel的原理如图,在需要被访问的源服务器(Origin Server)上运行cloudflared服务,该服务与Cloudflare的边缘节点保持长连接,当外部用户访问对应域名时,请求到达Cloudflare边缘节点,通过cloudflared访问到源服务器对应的端口上。
不需要家庭宽带具有公网IP,且能曲线救国让移动宽带用上IPV4访问
不需要路由器开启端口,更安全不会被运营商扫描到web服务导致宽带封停
目前通过Tunnel访问家庭内网相对来说速度还能接受
将域名解析到Cloudflare
该步骤网络上教程较多,新注册Cloudflare也会有添加域名的引导页,按步骤将域名购买处服务商NS(nameserver)修改为Cloudflare提供的即可。
注意:预先添加一条A类型(IPV4)或者AAAA类型(IPV6)的根域名解析,例如: 1.2.3.4 <->
yourdomain.com
在个人中心,左侧选择进入Zerotrust页面
在Network菜单下找到Tunnel
点击Create Tunnel创建一个新的隧道
这里我们选择cloudflared方式创建,选next
给隧道起一个名字
保存后会出现安装部署命令,这里选择docker部署的方式
这里命令复制出来,把后面一长串token(xxxxxxxxxxxx)单独复制下来:docker run cloudflare/cloudflared:latest tunnel --no-autoupdate run --token xxxxxxxxxxx
登陆群晖NAS后台,进入Container Manager,搜索下载cloudflared的映像(下图中第一个)
使用该镜像运行容器,勾选“自动重新启动”
设置网络类型为Host
,命令填入:tunnel --no-autoupdate run --token <从CF创建Tunnel页面复制的token>
回到Cloudflare界面显示Status:Healthy即为连接成功
随后进行Public Hostname公共域名的创建,这个公共域名也就是你之后需要用来访问内网NAS等服务所使用的域名地址:
subdomain
写你所需要的前缀,domain
选择你的根域名,type
根据你的需要选择,这里群晖网页选择了http
类型,url
填写你内网所需要访问的地址,因为我们部署在群晖上,直接输入localhost:5000
即可访问到NAS的管理后台。
保存以上设置后即可用 test.yourdomain.com 访问你的NAS了!
如果出现证书/SSL问题:
检查域名的SSL设置是否选择了“完全”
群晖上的证书设置成Cloudflare Origin CA:
在SSL/TLS目录下“源服务器”一栏点击“创建证书”,将证书内容保存为pem文件,密钥保存为key文件,导入到群晖内设为默认证书即可。如果在国内网络环境觉得使用Tunnel访问速度不理想,可以考虑以下几种方式改善:
优化阶段一:使用CloudflareST,测试出最合适自己的CF节点,将其修改到本地电脑Hosts中加速访问:
优化阶段二:更进一步,将优选的CF节点IP使用另一个域名做DNS解析,这样可以方便你的朋友未做任何优化也能更快访问
优化阶段三:在优化二的基础上,使用支持国内外分流解析的DNS服务商(如:DNSPod),把国内访问CNAME解析到一个使用了CF优化的网站(如: csgo.com / visa.com
),国外CNAME解析到 1.0.0.5
,并在CF配置自定义回源域名,利用现成的网站优化国内外线路。
原理是通过另一个域名CNAME访问这些CF优化过的网站时,流量到达CF的边缘节点,回源找到你的源服务器进行访问,注意到这里Cloudflare Tunnel不支持把另一个非CF解析的域名添加进Public Hostname内,可以通过构造curl命令的方式强行添加进去,具体方法:CloudFlare Saas 回源到 tunnel 的办法