通过api.ipify.org获取公网IP遇curl连接超时问题求助
排查curl访问api.ipify.org 443端口超时问题
问题现象
执行curl https://api.ipify.org获取公网IP时,触发超时错误:
curl: (28) Failed to connect to api.ipify.org port 443 after 134767 ms: Connection timed out
已完成的测试信息:
防火墙配置
- iptables规则(全ACCEPT策略):
❯ sudo iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination
- ufw状态:
inactive
DNS解析测试
- 本地DNS解析结果:
175.139.142.25(无法ping通) - 使用Cloudflare DNS(1.1.1.1)解析得到多个IP:
104.26.13.205、172.67.74.152、104.26.12.205
连通性测试
- 将
172.67.74.152 ipify.org添加到/etc/hosts后,ping可正常连通,但curl访问443端口仍超时。
排查步骤及解决方案
1. 直接测试其他解析IP的443端口
绕过hosts配置,针对Cloudflare解析出的其他IP进行测试,验证是否为单一IP的线路问题:
curl https://104.26.13.205 --resolve api.ipify.org:443:104.26.13.205 curl https://104.26.12.205 --resolve api.ipify.org:443:104.26.12.205
若某一IP可正常返回结果,替换/etc/hosts中的IP即可。
2. 验证TCP端口连通性
用telnet或nc测试目标IP的443端口是否能建立基础连接:
# 使用telnet telnet 172.67.74.152 443 # 使用nc nc -zv 172.67.74.152 443
若连接失败,说明该IP的443端口在当前网络环境下被拦截,可能是运营商封禁、目标站点防火墙限制或路由异常。
3. 排除TLS握手问题
尝试访问HTTP版本接口,确认是否为HTTPS层问题:
curl http://api.ipify.org
若HTTP可正常访问,尝试指定TLS版本重试:
curl https://api.ipify.org --tlsv1.2 curl https://api.ipify.org --tlsv1.3
4. 检查代理设置
排查是否存在全局代理或curl专属代理配置:
# 查看环境变量中的代理参数 echo $HTTP_PROXY $HTTPS_PROXY $NO_PROXY # 强制不使用代理测试 curl https://api.ipify.org --noproxy "*"
若存在代理,尝试关闭后重试。
5. 检查路由表
确认到目标IP的路由路径是否正常:
ip route get 172.67.74.152
若路由指向异常网关或接口,需调整路由配置或联系网络管理员排查。
6. 更换DNS服务器
修改系统DNS为Cloudflare(1.1.1.1)或Google(8.8.8.8),清除缓存后重试:
# 清除systemd-resolved缓存(若使用该服务) sudo systemd-resolve --flush-caches # 重新执行curl curl https://api.ipify.org
内容的提问来源于stack exchange,提问作者Kai Yi Tan
相关产品推荐
相关产品推荐

