前言
因为家宽没有公网 ipv4 ,所以我尝试过各种各样的办法来内网穿透我的黑群晖,以便在外网访问。
之前的博客文章里也提到过很多方法,比如打洞类的 Tailscale(要下 app),免费的 Frp 服务(速率有限制),ddns 解析 ipv6(单位的网络没有 v6),所以每一种方式都没能给我带来真正如内网般丝滑的体验。
今天要说的对象是 Cloudflare 面向公众开放的 Tunnel,是其零信任产品板块下的一个功能。
是什么?
Cloudflare Tunnel 的前身是 Argo Tunnel 。
在设备上(服务端)部署一个轻量级守护进程cloudflared
,Cloudflare Tunnel 便可以将HTTP Web
服务器、SSH 服务器、远程桌面和其他协议安全地连接到 Cloudflare 。这样,即使家庭宽带没有公网的 IP 地址,通过 Cloudflare 也可以更安全和更便捷地连接局域网的设备。
开始使用
使用 Cloudflare Tunnel 的先决条件是:
1.有一个 Cloudflare 账号;
2.有一个 DNS 由 Cloudflare 提供解析的域名;
3.有一张外币卡(我测试用银联借记卡添加付款信息失败)。
点击进入到 Cloudflare zero trust(即零信任),在开启服务时可以选择免费套餐,虽然免费,但是要绑卡验证,如果此前在 CF 的控制台添加过付款信息可以直接选择付款信息。
开通服务成功后,选择 Access,再选择 Tunnels,如图所示,点击 Creat a tunnel,即可新建一条通道。
步骤总共三步,①给隧道命名;②链接设备;③配置访问信息。
第一步,名字可以随便写,只要自己知道是用来做什么的即可;
第二步,可以看到 Cloudflare 提供了很多种客户端,但是没有群晖客户端。在群晖的套件中心添加一个套件来源(如https://spk7.imnks.com
),然后点击社群,即可在里面找到大神开发的 Cloudflared(非官方)。
在安装套件的过程中需要输入Token
,这时候我们在刚才的页面中复制Token
填入到套件输入框,参考下图
第三步就是配置访问信息了,可以参考下图
为了避免把大家当傻瓜,步骤之类的我都简化了,以上是以群晖为例来说的。本文的重点不是如何使用这玩意,而是这玩意可能有多坑。
使用体验
在创建完隧道之后,我直接访问了刚才添加的域名,成功,并且速度还挺快。
但在如 群晖相册 这类软件上,地址光填域名是不行的,还要加上对应协议的端口号 (服务里选HTTP而非HTTPS可解决) !
使用群晖相册下载了一个视频,我家宽 30Mbps 的上传速率,手机用的移动5G,实测下载速度能跑满家宽的上传带宽。
使用体验超吊的好不好,不用额外下载软件,不用忍受限速,内网环境中一定程度上可以不用切换地址(要是我的路由器可以刷别的固件或者支持本地 hosts 就不会折腾这些了)。
但是!但是!但是!
我可能是高兴得很了,后来发现这玩意实际也并没这么好用。
关掉了群晖的 ipv6,好的,Cloudflare Tunnel 连不上了,重启解决;
群晖设置了一些关于证书,https 跳转之类的,Cloudflare Tunnel 连不上了,重启解决。
但此外还有一些困扰我很久很久的问题。
1.提示证书无效/重定向次数过多/混合内容等;建议在 Cloudflare 控制台里把 SSL/TLS 加密模式改为灵活,边缘证书里关闭始终使用 HTTPS,在配置访问信息时不要选择 https 而是 http;
2.源站 502;这个问题从昨晚一直困扰我到今天上午,分明在控制台里是可以看到隧道在线。 Service Type 改成 http 以及 https 我都试过,URL 改成内网 IP 地址(192.168.2.X)以及改成 localhost
带端口和不带端口我也都试过;除了出现上述的问题之外,就是报错 502 了,后来惊讶地发现,家宽环境下访问 502 ,异网的手机访问却成功,和手机同网的单位宽带也 502,以为是 ipv6 的问题,最终也不是;
3.浏览器无法访问,但是群晖的 APP 却能够访问,浏览器上显示响应时间过长,手动加端口和不加端口都不能正常,但是群晖管家和相册之类的应用却能正常访问。
经历了本来能用,啥也没动,然后又不能用的痛苦折磨之后,我干脆决定不使用 https 了,无论是 Cloudflare 还是群晖上,都取消强制 https ,“回源”也走 http 而不是 https。
最后
目前看起来服务是稳定了,但是速度比起昨天差了一半多,因为数据中心不是在香港而是在阿玛丽卡了,Cloudflare 的网络在国内就是这个现状,但多少比免费的 frp 服务要快一些,并且不限制流量。
截至3月12号,一切正常,除了速度有点慢。