当前位置:首页 > 问答 > 正文

云Redis内网穿透跨平台搞定,随时连通不受限的那种感觉

【来源:开发者社区技术分享帖】

那天下午公司服务器突然抽风,运维小哥抱着笔记本冲进会议室:“本地连不上云Redis了!”甲方爸爸的视频会议还有半小时开始,整个技术团队急得像热锅上的蚂蚁,就在这时,后排实习生态浩默默举手:“我有个野路子,五分钟能搞定。”

只见他掏出手机打开某绿色聊天软件,在一个叫「NatApp」的公众号里点了两下,接着在自己电脑终端敲了行命令,屏幕上突然跳出“隧道已启动”的字样,运维小哥将信将疑地把本地连接地址改成127.0.0.1:6379,Redis Desktop Manager瞬间弹出了久违的密钥列表——整个会议室安静得能听见冷风机的声音。

这就是我第一次见识内网穿透的魔法,后来才知道,小涛用的工具原理简单得离谱:就像请快递小哥当中间人,你把本地服务打包成包裹,穿透工具在公网有个转运站(服务器),外网请求先发到转运站,再由快递员原封不动送货到你的本地端口,云Redis明明挂在VPC私有网络里,愣是被这套操作变成了“本地便利店”。

【来源:GitHub项目readme实战记录】

真正让我下定决心研究这玩意儿,是上个月连续加班到凌晨的惨痛经历,那会儿为了调试某个诡异的缓存问题,我不得不在家远程连接公司测试环境的Redis,IT部门早下班了,申请VPN要走三天流程,最后只能让保安帮忙把我工位电脑开远程桌面——结果因为行政部清楼断电,第二天发现电脑关机时差点吐血。

搜遍全网后,我在某个星标过万的GitHub项目里挖到宝藏,作者用小学生都能懂的比喻写道:“想象你的电脑是座孤岛,内网穿透就是修条海底隧道到公共码头(公网服务器),所有想上岛的车(数据请求)先开到码头,再通过隧道悄悄进岛。”

工具安装比想象中简单:下载一个10MB的绿色软件,复制黏贴官网生成的令牌,命令行输入./natapp -authtoken=你的令牌,眨眼功夫,屏幕上滚过两行日志:

Tunnel established at https://3k9s.natapp.cc
Forwarding http://3k9s.natapp.cc -> localhost:6379

把我惊到的是这工具居然能智能识别服务类型——当它检测到本地6379端口时自动切换成Redis协议,连密码认证都无缝衔接,更绝的是手机热点切换成公司WiFi时,隧道居然在3秒内自动重连,期间我的Redis客户端只是短暂显示“连接中断”就立即恢复。

【来源:程序员论坛深夜吐槽串】

当然也有翻车的时候,有次用某个知名穿透工具调试Sentinel模式,明明单节点连接正常,但一开哨兵就超时,翻了三小时论坛才发现,这工具默认只映射单个端口,而Redis哨兵需要同时暴露26379、26380等多个端口,后来换用「frp」才解决问题,它的配置文件能像乐高一样拼装:

[redis-master]
type = tcp
local_ip = 127.0.0.1
local_port = 6379
remote_port = 16379
[redis-sentinel]
type = tcp
local_ip = 127.0.0.1
local_port = 26379
remote_port = 26379

这种灵活度让人惊喜,但配置过程也确实劝退,直到发现「花生壳」的硬件版——买个U盘大小的盒子插公司路由器上,手机APP点几下就能生成外网地址,连电脑都不用开,虽然免费版限速1Mbps,但传Redis的文本指令绰绰有余。

【来源:技术社群口口相传的骚操作】

现在我们的开发流程彻底变了样:新同事入职不再需要申请VPN权限,扫个二维码就能拿到临时测试环境连接地址;做压测时用「Ngrok」同时开10条隧道,每台负载生成器直连自己的Redis实例;甚至有一次机房光纤被挖断,我们靠着项目经理手机开热点+内网穿透,硬是在咖啡馆完成了线上热修复。

最戏剧性的时刻发生在上周三,aws北京区域突然网络抖动,云Redis控制台一片飘红,而我已经悄悄用「Serveo」做了灾备方案——这是最绝的工具,完全零配置,只需在本地执行 ssh -R redis:6379:localhost:6379 serveo.net,系统就自动分配一个像「foobar.serveo.net」的域名,当时直接让运维把流量切到这个临时入口,等aws恢复时用户完全没感知。

或许未来某天云服务会像水电一样稳定,但当我凌晨两点在家修复bug,手指一动就能让笔记本和云端Redis秒连时,突然理解了武侠小说里打通任督二脉的感觉——那种“墙不存在”的自由,才是程序员最上瘾的浪漫。

云Redis内网穿透跨平台搞定,随时连通不受限的那种感觉