来自老版本软件的背刺
年前搬家的时候就想重新配置一下屋里的网络,但是鉴于工作上确实事情多,而且干活儿离不开家里现有的工具,立马着手做的话只会让自己面临活儿干到一半突然掉线的窘境。想着说先放一放,等新系统做差不多上线了再好好调整。结果就有了今天只能在公司干瞪眼的处境。
早上到公司的时候还好好的,只不过因为IP乱跳,需要重新设置一下白名单。中午去找食之前遇到了奇妙的卡顿。以为只是如常的公司网络太烂造成的抖动,结果还是想简单了。进食完回到工位上就发现机子连不上了。又跳IP?虽然不常见但是一天几跳也不是没经历过。因为机场为了防止滥用,通常会限制同时在线的公网IP数量。而刚好我用的这家还贴心的提供了24小时在线IP的记录。于是熟练的在手机上打开机场的后台。咦?没有出现新的IP。刚跳,还没产生新的连接所以没有记录么?那就先等等,理所当然的开始刷手机。
十分钟过去了,再看一遍在线IP,还是没有新的记录。开始出汗了。什么鬼,按说我机子上挂着Telegram,不可能十分钟都没有连接的。机场的统计有延迟?再等等。
半个小时过去了,还是没有。以前没发生过,我这套方案都用了一年多了,妥妥的。毕竟干了这么多年码农,遇到问题解决就是了。开始思考可能的原因。
家里什么东西短路跳闸了?因为这次搬家没住公寓,租了个一室一厅的老公房,基础设施相对比较旧,碰到些电气老化也算正常。试试看访问家里其他的服务。居然能访问。那就可以排除电力和网络本身的问题了。
屋里现在这套网络方案是三四年前那台AC86U被我刷成砖之后的事情。当时有考虑过买个专门的软路由来做家里的网关。但是看了又看,觉得还是有点儿浪费,就着手边现有的资源先做个方案出来。于是就有了现在的架构。我的NAS有两张网卡,那就由NAS来充当这个网关的角色了。一个网卡连光猫,一个网卡连一个红米的无线路由当作AP。中间呢,在NAS里跑一个OpenWRT的虚拟机。再配两个虚拟交换机,一个WAN挂在连了光猫的网卡上,一个LAN挂在连了路由的网卡上。再把这俩虚拟交换机分配到OpenWRT的网络接口上,齐活儿了。梯子一开,所有连接这个AP的设备都有了互联网,美哉。逻辑上来说,这套setup除了提高了延迟,而且比较吃NAS的CPU性能以外,还是能胜任大部分我需要的场景的,也不应该有问题。毕竟都安稳的跑了几年了。
继续捋,还有什么可能。电脑的网卡坏了?好巧不巧在我整点正要提交代码的时候坏么?几率不大。整点?这听起来就很像是某些在整点触发的定时任务干的好事儿。目标锁定软件。那么是什么呢?NAS里跑了一堆容器,包括把开发机反向连接到公司服务器的代理,代理掉了?既然NAS还能连的上,打得开管理后台,那就先看这些容器的状态。检查一下日志。嗯?no route to host?赶紧进OpenWRT后台,查DHCP列表。这不是还在么,这又是为什么?开发机的IP租约没有到期,但是连接路由不过去。翻日志。
果然,看日志是个好习惯。
error at line 57716 of /tmp/dnsmasq.d/dnsmasq_accelerated-domains.china.conf
dnsmasq一直在崩溃。而且这文件名一看就是梯子用到的。梯子在整点更新某些配置文件的时候,写了错误的内容进去么。因为dnsmasq也同样负责DHCP,所以不断的崩溃造成开发机拿不到IP,也就自然no route to host了。知道了原因就好解决了。把梯子关了就行了。果然,因为关闭梯子的时候会清理临时文件,也就把错误的dnsmasq配置给删掉了。dnsmasq顺利启动,开发机也顺利恢复了连接。
虽然下午能干活儿了,但是这个问题还是得解决。不能在网关放梯子的话,影响还是会比较大的。毕竟我没有在每台设备上都装梯子。类似Xbox和Switch这样的,更是装不了梯子。下班回家开始折腾。
经过一个多小时的反复关闭,重启。发现无论如何dnsmasq这个配置文件他是写不对了。难道是版本问题?毕竟现在这个方案已经好几年没更新了,梯子用的也是好几年前的版本,要不我更新一下试试?因为这类工具大多host在GitHub上,而GitHub又是处在semi-ban的状态,只好打开另一台开发机,挂上梯子,手动下载新版本的插件。
果不其然,装上了新版插件,再也没有出现dnsmasq的崩溃。开发机也顺利的拿到了IP地址。通常来说,这类维护在GitHub上的配置都是经过测试的。但是对于老版本的软件来说,当引入了一些新版本才能够支持的语法的时候,就力不从心了。
然后又想起来,前两年跟着大哥去做一个项目。我们的整个项目都是基于JDK21的,但甲方坚持要求使用JDK1.8。理由是比较安全。当场我就斯巴达了,停止维护几年了的东西,安全你奶奶个腿儿。虽然码农界流传着 “如果一个东西能跑,就不要去动它” 的警世格言。但是世界是发展的,软件也是不断完善的。守着能跑的老旧软件不愿意更新,最终只会像我一样浪费半个下午试图搞清楚发生了什么。我的情况尚且简单,如果遇到更复杂的状况,甚至是信息安全相关的状况,恐怕就会有人后悔当初没手欠去点个升级了。
这么遭遇了一回之后,我也在思考调整我的网络配置了。前阵子因为公司的破网,本来就在调研要不要把远程用Idea开发改成用云上的VSCode。尤其是Coder提供的那个方案,通过浏览器来使用。跟我们以前搭配Idea和Projector在浏览器开发很类似。实际用了一周之后发现,VSCode这类用Eclipse JDT的工具都有的一些通病,索引以及补全都无比糟糕。虽然如此,但是只要对库和自己的代码足够熟悉,不依赖补全也将就能用。后面单开一篇写写吧。网络方面,因为之前一直用FRP做内网穿透,但是这东西一直被腾讯云报毒。险些造成等保过不了。也在考虑要不要直接拿HeadScale来组网。这个后面也单独写一篇吧,前阵子大概折腾了一下,感觉还是有点儿意思的。
先这样吧,折腾一晚上都没锻炼。