致敬我们的赛博大善人Cloudflare
Cloudflare Tunnels可以提供什么
1、内网穿透
2、https证书
3、服务转发(简易版Nginx)
4、以上免费
背景
家里网络只有ipv6 ,并且80 443等端口被运营商禁用。所以想要暴露内网的服务到公网,只能使用ipv6+非标端口访问。
即使配合域名解析,不支持ipv6的网络下也无法访问。
研究了下有几个方案:
1、使用Cloudflare做DNS解析,并且开启DNS代理功能。
此时流量经过Cloudflare,然后才到自己的服务器,所以解决了v4无法访问的问题。
优点:无需额外的服务器。并且可以隐藏真实ip。
缺点:需要公网IP(v4或v6),而且还是得非标端口访问,而且速度取决于访问端到cf的速度和cf到内网服务器的速度。我这边测试下来,速度非常慢。
适合只是想尝试下公网访问,使用频率不高而且不太想折腾的人。操作简单。
2、使用公网服务器做转发。
此时流量经过公网服务器,可以解决v4无法访问的问题,非标端口的问题也可以解决。
优点:解决了两个问题。
缺点:需要额外准备一台服务器,而且速度取决于你的公网服务器,我这边就是弄了台国外的vps,国内访问速度很慢。
适合手上有一台性能弱的vps,无法挂服务,但是带宽和速度都还不错。
3、使用Cloudflare的Tunnels的功能。
流量经过Cloudflare,然后到服务器的Tunnels客户端,然后客户端再转发到本地服务,所以v4和非标端口的问题都可以解决了。
优点:解决了两个问题,而且速度基本只取决于访问设备到cf的速度,因为cf和内网服务是长连接。并且不需要额外的服务器。
缺点:还是速度问题,按说应该是和DNS代理速度相当,都是走的Cloudflare的服务器,但是由于Tunnels方案是本地服务器和Cloudflare会建立长连接,所以速度上还是会快一点,我体验下来,和我的vps差不多,所以就换这个方案了。
前置条件
1、拥有一个域名并且托管在Cloudflare
cf的注册以及域名托管这里不赘述了,教程很多。
2、有一台内网服务器(这不是当然的,不然穿透个P)
3、内网服务器安装了docker(非强制要求,安装方式有很多,本教程使用docker)
申请账号
1、打开 Cloudflare Zero Trust 工作台面板,创建一个账号。
团队名随便
选择免费计划,这里点击免费计划,会让添加付款方式,实际上在付款方式这里关闭页面,重新进入 控制台 就会跳过这个步骤了。。。
配置Tunnels
添加一个Tunnels
然后选择Cloudflared就行了
起个名,随意
进入配置页面,这里选择Docker安装,下面的命令行就是附带了token的启动命令,但是是前台启动,所以我们加几个参数:包括 后台运行、自动启动以及给服务起个名。
把下面命令的替换部分换成你的后台生成的token即可。粘贴进内网服务器,运行。
docker run --name cloudflare_tunnels -d --restart always cloudflare/cloudflared:latest tunnel --no-autoupdate run --token 替换为你的token
运行成功后,这个页面下面会有个connect的部分,会有个绿色标签提示已连接。我这里忘记截图了。或者再进入tunnels页面也可以看到状态。
点击name,然后点击编辑,进入配置页面。
然后添加一个子域名
输入配置信息
比如你想要通过 blog.youdomain.com访问到你内网的8080服务
这里二级域名就填:blog
domain就选择你托管的域名,后面的path可以不填
service里面的Type选择http
url输入:内网ip:8080
这里内网ip就是你内网服务器的ip,不要输入localhost或者127.0.0.1,因为这里是docker部署的tunnels,localhost会指向docker容器。
点击保存就完成了,可以输入你的blog.youdomain.com,测试下,就可以公网访问了,并且自带https证书。
评论区