NAT 下“能 ping 不能 curl”:TCP/443 链路排障

现象:

ping 1.1.1.1 通

但 curl https://... 失败 / 卡住 / 超时
结论:这通常不是"有没有网"的问题,而是 TCP/443、DNS、代理、MTU、证书/时间 其中之一。


0. 先把问题分成两类:DNS 还是 TCP/443

0.1 跳过 DNS 直连 IP(只判断链路)

bash 复制代码
curl -I --connect-timeout 5 https://1.1.1.1
  • 如果这里都失败:优先排 TCP/443/MTU/代理/防火墙
  • 如果这里能通,但域名不通:优先排 DNS

1. Step 1:确认 DNS 是否正常(最常见)

1.1 看解析结果

bash 复制代码
dig +short google.com
dig +short http.kali.org

1.2 看 resolv.conf

bash 复制代码
cat /etc/resolv.conf

如果 dig 不出结果,先重启网络拿一次 DHCP:

bash 复制代码
sudo systemctl restart NetworkManager

2. Step 2:确认默认路由与出口网卡

bash 复制代码
ip a
ip route

你应该能看到:

  • 有一个默认路由:default via <网关> dev <网卡>
  • 网卡通常是 eth0(虚拟机里常见)

3. Step 3:验证 TCP/443 是否能建立连接(不依赖 curl)

3.1 用 openssl 测 TLS 握手(最直观)

bash 复制代码
openssl s_client -connect http.kali.org:443 -servername http.kali.org -brief

3.2 或用 nc 验证端口可达

bash 复制代码
nc -vz http.kali.org 443
  • 如果端口不可达:优先看 代理/VPN/防火墙/MTU
  • 如果端口可达但 curl 失败:优先看 证书/时间/代理环境变量

4. Step 4:检查"代理把你坑了"(NAT 环境最常见之一)

bash 复制代码
env | egrep -i 'http_proxy|https_proxy|all_proxy|no_proxy'

如果你看到配置了代理,但代理并不可用,临时取消(当前终端会话):

bash 复制代码
unset http_proxy https_proxy all_proxy HTTP_PROXY HTTPS_PROXY ALL_PROXY

再测:

bash 复制代码
curl -I https://http.kali.org

5. Step 5:检查时间与证书(经常被误判成"网络问题")

bash 复制代码
timedatectl
date

若 System clock synchronized: no 或时间明显不对:先按 B2-09 修复 NTP,再回来测 curl。


6. Step 6:排 MTU/MSS(VPN/代理/公司网络常见)

6.1 快速测:大包是否丢

bash 复制代码
ping -c 3 -M do -s 1472 1.1.1.1
  • 若失败:说明路径 MTU 可能更小(常见于 VPN/隧道/NAT 叠加)
  • 可尝试降低测试值(例如 1400、1360)定位阈值

6.2 临时把网卡 MTU 调小(应急)

示例把 MTU 调到 1400(只建议用于定位/临时修复)

bash 复制代码
sudo ip link set dev eth0 mtu 1400
ip link show eth0
curl -I https://http.kali.org

7. Step 7:抓一把关键证据(最省时间)

7.1 看 curl 细节

bash 复制代码
curl -Iv https://http.kali.org --connect-timeout 10

你要关注:

  • 卡在 Trying ...:偏连接问题(TCP)
  • 卡在 TLS handshake:偏证书/时间/中间盒
  • 直接报代理:偏代理变量/代理不可达

7.2 抓 TCP 连接(可选)

bash 复制代码
sudo tcpdump -i eth0 -nn host http.kali.org and port 443

8. 最小复盘清单(可复制)

bash 复制代码
# DNS
dig +short http.kali.org
cat /etc/resolv.conf

# 路由
ip route

# 443 可达性
nc -vz http.kali.org 443
openssl s_client -connect http.kali.org:443 -servername http.kali.org -brief

# 代理
env | egrep -i 'proxy'
unset http_proxy https_proxy all_proxy HTTP_PROXY HTTPS_PROXY ALL_PROXY

# 时间
timedatectl

# curl 细节
curl -Iv https://http.kali.org --connect-timeout 10
相关推荐
驭渊的小故事7 分钟前
UDP 和 TCP 网络知识和“Udp协议的回声服务器详细剖析”(5000字详细解析回升服务器的点点滴滴)(网络编程01)
网络
砚凝霜17 分钟前
软考网络工程师|第 2 章 信道延迟、传输介质、数据编码、数字调制、PCM 完整备考笔记
网络·笔记·pcm
aixingkong92134 分钟前
Atlas 950 1024卡SuperPoD推测分析
网络·人工智能·硬件架构·硬件工程
码农学院3 小时前
基于运维监控体系的网络品牌推广方案:从架构设计到技术实现
运维·网络
REDcker10 小时前
显示分辨率标准对照详解
前端·网络·分辨率·显示·屏幕
ANSIOT12 小时前
安朔科技蓝牙无感开锁方案,靠近自动解锁
网络·科技·物联网
晏宁科技YaningAI12 小时前
VoIP系统的工程实现模型:从信令控制到媒体传输的完整架构解析
网络·人工智能·架构·系统架构·信息与通信
神奇霸王龙15 小时前
Claude Code屠榜:MiMo与Grok紧追Codex
服务器·网络·人工智能·gpt·ai·ai编程
数智化管理手记17 小时前
账龄分析手工统计易遗漏?自动账龄分析工具怎么搭建
大数据·网络·数据库·人工智能·数据挖掘
LabVIEW开发17 小时前
NI Package Manager安装LabVIEW时InternalServerError错误
网络·数据库·labview·labview知识·labview功能·labview程序