本帖最后由 杨童 于 2023-9-27 17:38 编辑
目前已经遇到了两次因为运营商导致的SPA敲门失败的问题,这里做个分享提供一个排查思路 首先说一下两次问题结论: 第一次问题原因是:家庭宽带环境下,运营商把TCP和UDP报文分别转换成了不同的公网IP地址,用户百度查到自己的公网IP只做了TCP敲门,而UDP敲门的报文是被运营商转换成了其他IP地址,导致UDP敲门后零信任放通的可信IP和后续TCP的敲门IP有偏差,所以导致了SPA失败------解决方案是由宽带注册用户来联系运营商的客服,让客服提个维修工单,和二线工程师沟通:直说TCP和UDP转换后的地址不一样,然后让运营商处理就好了
第二次问题原因是:用户百度查询自己的公网IP和TCP、UDP转换后的地址三者都不一致,导致UDP+TCP敲门失败
问题排查过程如下:
故障现象:SPA敲门失败,提示如下,用客户端诊断提示:TCP连接无法建立,接入控制中心失败,探测包发送成功
排查步骤: 1、通过百度查询本机的公网IP,用此IP去查用户日志,没有任何记录 2、在零信任服务端抓包,只有用户公网IP发来的TCP包(第一次问题)或者就是没有该IP的任何报文(第二次问题) 3、查日志,发现某IP很多UDP敲门成功的记录,但是只有UDP敲门没有后续TCP记录 4、点开这些日志记录,查看Client ID字段,发现和之前该终端用户登录时的记录,对比Client ID,明确这些敲门记录就是当前终端发出的,所以问题就是,零信任服务端确实收到了该终端发起的UDP敲门,但是UDP敲门的地址和用户百度查的自己的公网IP不同 5、在用户端抓包,确认终端是确实发出了UDP和TCP的报文---结果是确实发出了报文 6、在零信任服务端抓包,筛选第二步UDP敲门IP的报文---结果是只有UDP的报文,没有TCP的 7、在零信任服务端的网络出口设备抓包,结论也是只有UDP敲门包,没有TCP的 8、在零信任服务端抓包,筛选客户百度查的公网IP的报文---结果是有收到TCP报文
基于以上排查,目前得到的结论就是,终端确实发出了UDP和TCP的报文,但是服务端收到的UDP报文源公网IP和TCP报文的源公网不一致,基于这两个不同的IP进行如下排查确认
9、在零信任服务端和用户终端同时抓包对比 零信任服务端筛选TCP和UDP两个公网IP的报文 客户端筛选目的地址为零信任接入地址的报文 对比结论如下:两端报文完全一致,除了部分报文收发顺序有一点点偏差外,报文内容完全一致,证明就是运营商的地址转换问题,导致了SPA敲门失败 UDP报文举例: TCP报文举例 |