LAN连接调用自有API报CORS错误、热点访问正常该如何解决?
问题根因
- 最常见的原因是你LAN网络的公网出口IP和你之前加入MongoDB Atlas白名单的IP不一致。大部分家庭、办公场景的LAN公网IP是运营商动态分配的,部分运营商还会配置多公网IP轮询出口流量,你之前查询到的IP只是其中一个,实际请求Atlas时使用了未加入白名单的其他IP。手机热点的公网IP是单次连接分配的,刚好在你已经添加的白名单范围内,所以连接正常。
- 第二种可能是你的LAN网络的防火墙、或者运营商的网络策略封禁了MongoDB Atlas默认使用的27015~27017端口,而手机热点对应的运营商没有限制这些端口,所以可以正常通信。
- 还有个低概率的问题:你之前添加到白名单的是LAN内网IP(比如192.168开头的网段),这类内网IP不会被Atlas识别,只有公网出口IP才会作为白名单校验的依据。
修复步骤
- 先确认当前LAN的实际公网IP:连接LAN后,在终端执行
curl ifconfig.me拿到你当前的公网出口IP,去Atlas控制台确认这个IP是否已经加入白名单,没有的话新增即可。 - 确认IP已经在白名单后还报错的话,测试端口连通性:在终端执行
telnet <你的Atlas集群地址> 27017,如果连接失败就是端口被封禁。这种情况可以联系网络运营商开放对应端口,也可以暂时把Atlas白名单设置为允许所有IP访问(仅测试用,生产环境不要这么配置),或者通过代理中转数据库请求。 - 快速排查方案:可以先在Atlas控制台把白名单配置为
0.0.0.0/0,测试LAN环境下能否正常连接,如果可以就确认是IP白名单匹配的问题,后续再处理IP变动的问题即可。 - 长期解决方案:如果你的LAN公网IP经常变动,可以写个定时脚本自动查询公网IP并更新Atlas白名单,或者开启Atlas的身份验证优先模式,替代IP白名单校验。
内容的提问来源于stack exchange,提问作者r121
相关产品推荐
相关产品推荐

