最近遇到一个奇怪的问题,原本实现自动登陆的小程序一直登陆失败,于是逐步排查。
1.排查环境,本地、开发等环境均正常,测试、生产等环境登陆失败。
2.排查代码,发现各环境代码一致,没有改动。
3.排查测试、生产等环境日志,发现获取微信openid时,调用jscode2session接口超时。
4.排查网络,直接ping域名,只有测试、生产等环境出现超时丢包。
tcpdump -i ens160 -w ccw11074.cap
通过抓包发现解析api.weixin.qq.com后的ip与其他环境不一样。各环境DNS解析【api.weixin.qq.com】结果,
测试&生产:183.61.49.149
本地&开发:183.57.48.62
腾讯云:182.254.106.119
直接ping IP,发现测试、生产等环境解析之后的IP,在各个环境下ping的时候超时丢包。PS:这里可能是碰巧微信这个IP节点的服务出现问题,已反馈给官方。
5.排查网络配置,原来测试、生产等环境使用的是公司自己搭建的DNS服务,其他环境都是公共DNS——114.114.114.114
【解决办法】
将测试、生产等环境的DNS设置改为公共DNS,随后登录正常。
vi /etc/NetworkManager/NetworkManager.conf
【疑问】
公司自己搭建的DNS服务器,测试环境和生产环境都是一台物理机上的三台虚拟机。其实,公司的DNS服务器也只是转发114公共DNS而已,但不知为什么解析后的IP,与其他机子直接去请求114后解析的IP不同?