前几天,看到自己运行tailscale的设备运行的tailscale版本千奇百怪,由于强迫症的原因,给所有的运行tailscale的设备(除了qnap的nas和openwrt以外,因为目前这2个官方提供的安装包最新只有1.58)来了个群体升级,升到1.78.1版本:
没有想到的是,这么多升级设备(包括macos、iphone、ipad和所有linux主机)中,偏偏macos出了问题:正常的升级只是tailscale版本进行升级,并不会影响对应的100开头的固定私有IP地址,而这次升级,3个macos的设备(包括运行博客主站点的m1乞丐版macmini)无一幸免,固定私有IP地址均发生了改变,导致的结果就是在tailscale官网的”Machines”界面里,每一个macos的设备均能看到2条记录(一条是以前的,处于离线状态;一条是新的,处于在线状态)。
我当时只是简单的把原有的记录删除了事,并没有想太多,但是我却忘记了一个最关键的问题:我在腾讯云主机上运行的灾备站点就是以探测博客主站点macmini的之前的固定私有IP地址是否可达作为家庭数据中心是否down掉的关键指标(具体可以参看文章:家庭数据中心系列 活用cloudflare tunnel实现wordpress主站点故障时灾备站点自动接管)。
这样就导致了一个非常严重的后果,自从我升级了博客主站点macmini的tailscale版本之后,因为原有的固定私有IP地址失效,导致腾讯云主机的灾备站点的探测脚本一直认为家庭数据中心down掉了,所以灾备站点一直处于启用状态,也就是说在这段时间里博客域名所在的cloudflare tunnel里同时存在2个connector,而正常状态应该只有一个:
当然,同一个cloudflare的tunnel也可以支持多个connector,这其实是cloudflare tunnel附送的多源站负载均衡功能(详情参见文章:家庭数据中心系列 cloudflare教程(九) Zero Trust常用功能介绍及多场景使用教程),不过,却有一个大前提:多个源站的网络结构完全一致,一般来说,使用localhost就没有问题,这也是最正常的cloudflare tunnel支持多个源站负载均衡的方式。
但是嘛,由于我的家庭数据中心结构复杂(运行cloudflare tunnel的主机、运行内网waf的主机、运行博客主站点的主机都是独立的),且网络规划肯定和腾讯云轻量服务器的IP地址不一样,所以导致在腾讯云主机上的灾备站点要想在家庭数据中心down掉时接管博客服务(只能接管博客服务,其他的就没办法了,轻量云主机性能只有那么点),需要做一些技术上的”特殊处理”。
具体技术细节我也懒得深究了,总之最后的结果就是对博客的访问要看脸了,有些被分配到家庭数据中心里的博客主站点,有些被分配到腾讯云上的灾备站点,同时因为”特殊处理”的关系,导致cloudflare对源站的探测会间歇性的出问题,经常会出现源站不可访问的502提示:
而且这个提示还比较随机,访问同一篇文章的时候,有些朋友能遇到,有些又能正常访问,比较像”灵异问题”。
其实这几天我也感觉到了博客访问有点异常,但是因为我这段时间调整了内网的很多策略(包括爱快的多线DNS功能)去折腾一些东西(用2台apple tv分别作为备用科学上网出口和统一的tailsacle的exit node),我一直以为是我折腾的原因,加之我用蜂窝流量就能正常访问(现在看就是蜂窝访问时脸比较好),所以我就没太在意。
说到这里我要感谢2位群里朋友(jdejdndns和RadiantHope)的提醒:
如果不是这2位的提醒,我还不能确认是博客访问真正出现了问题,在这里感谢两位!
另外,此次经历充分验证了一个割接中的经验之谈:一次割接中不要进行多个更改,不然出了问题也不知道从哪里开始查起~。