今天我们来聊聊前段时间我折腾的这个小玩意儿,标题叫《幼子双囹圄》。这名字听着玄乎,说白了,就是把我那个特别小的、写了点自动报表功能的脚本(这个就是“幼子”)给塞进了两层网络限制(这个就是“双囹圄”)里面,让它能偷偷摸摸把数据给我发出来。
话说回来,我一开始只是想偷个懒。那个报表脚本跑在公司内部的一个测试服务器上,它每天晚上生成一个数据包,需要推送到我手机上的一个私人通知渠道。正常流程下,内网的机器是不允许直接访问外网的。我总不能每天晚上爬起来登录内网去手动复制粘贴?
我想到的第一个招数,就是搭个跳板机。我找了一台有公网IP,但同时也在公司加速器网络里的机器,在上面装了一个SOCKS5代理服务。我的想法很简单:幼子 -> SOCKS5代理 -> 外网。我赶紧改了脚本里的网络配置,指派它走这个代理。
结果,我跑了一次测试,代理服务是通了,但是请求一出去,死活拿不到外网的响应,超时,死循环。我查了半天日志,才发现,报表脚本的数据包穿过SOCKS5的时候,被内网的核心防火墙又给拦下来了。这玩意儿太智能,它能拆开代理的请求,判断你在往外传数据包,直接给你打回。

这时候我意识到,代理这条路走不通了,因为SOCKS5的特征太明显,内网安全设备就是针对这种跳墙方式设计的。这就是我要面对的第二个“囹圄”:协议的限制。
我决定换个思路。既然内网对外网的访问管得这么严,那什么协议是它不敢随便拦的?答案是:HTTPS,而且是走443端口的HTTPS。因为绝大部分正常的业务通信,比如微信、网页、各种API调用,都得靠它。
我立刻动手,把跳板机上的SOCKS5服务给卸了,换成了一个基于TLS隧道加密的工具。我的逻辑是:
我的“幼子”报表数据,不再伪装成SOCKS5代理请求,而是被完整地封装进了一个看起来就像是访问一个正常网站的HTTPS流量里。

我重新配置了脚本,让它带着目标地址,通过这个TLS隧道,连接到我的公网服务器。这回我再次跑了测试。我坐在那里,盯着手机,心都提到嗓子眼了。
奇迹发生了。
我收到了通知!数据包在TLS隧道里,穿透了第一层防火墙,躲过了第二层协议审查。在安全设备看来,这就是一个正常的、加密的、去往443端口的HTTPS请求。它愣是没敢拆包看,直接给放行了。
我为什么要花这么大工夫折腾这个?说出来可能有点丢人。以前每天晚上十一二点,我都要登录系统,导出数据,截图,再发到工作群里。这事儿耽误了我陪我那刚上幼儿园的儿子玩的时间。
我做了这个自动化,实现了数据偷偷摸摸的自动外发。现在我不用熬夜了,晚上可以安心陪儿子搭积木,週末也可以彻底放飞。这个“幼子双囹圄”的项目,虽然听起来复杂,但它直接给我买回了实打实的家庭时间和休息日。这就是我实践记录中,最值钱的一笔。