当前位置:首页>Linux>Linux网络连通性排查:从ping不通到定位问题

Linux网络连通性排查:从ping不通到定位问题

  • 2026-10-22 02:03:14
Linux网络连通性排查:从ping不通到定位问题

"ping不通"大概是运维听到最多的问题描述了。

但"ping不通"只是现象,原因可能有一百种。这篇整理一套排查流程,从最简单的开始,一层层定位问题。


排查思路

网络问题排查有个基本原则:从近到远,逐层排查。

本机 → 网关 → 路由 → 目标

先确认本机没问题,再看网关,再看中间链路,最后看目标。


第一步:确认网络接口状态

# 查看网卡状态ip addr# 或ifconfig# 看什么:# 1. 网卡是否UP# 2. 是否有IP地址# 3. IP地址对不对

常见问题:

# 网卡DOWN了ip link set eth0 up# 没有IP(DHCP没获取到)dhclient eth0# IP配置错误# 检查 /etc/sysconfig/network-scripts/ifcfg-eth0 或 /etc/netplan/

确认网卡有IP且状态正常后,继续下一步。


第二步:ping网关

# 查看网关ip route# 或route -n# 输出示例:# default via 192.168.1.1 dev eth0# 192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.100# ping网关ping -c 4 192.168.1.1

ping网关不通,说明本地网络有问题:

  • 网线没插好/网线坏了
  • 交换机端口问题
  • VLAN配置问题
  • IP地址配错网段了

ping网关能通,继续下一步。


第三步:ping目标IP

ping -c 4 目标IP

能ping通,说明网络是通的,问题在应用层(端口、服务、防火墙)。

ping不通,继续排查。


第四步:traceroute定位断点

# Linuxtraceroute 目标IP# 或者用mtr(更直观)mtr 目标IP# 如果没装apt install mtr    # Debian/Ubuntuyum install mtr    # CentOS

traceroute会显示到目标的每一跳:

traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets 1  192.168.1.1 (192.168.1.1)  1.123 ms  1.089 ms  1.076 ms 2  10.0.0.1 (10.0.0.1)  5.456 ms  5.423 ms  5.410 ms 3  * * * 4  * * * 5  8.8.8.8 (8.8.8.8)  15.789 ms  15.756 ms  15.743 ms
  • 看到* * *说明那一跳没响应(可能是禁ping,不一定是故障)
  • 如果从某一跳开始全是* * *,那一跳可能有问题
  • 看延迟,如果某一跳延迟突然变大,那里可能有拥塞

mtr更好用,持续探测并统计丢包率:

mtr -r -c 100 目标IP# -r 报告模式# -c 100 发100个包# 输出示例:HOST: myserver              Loss%   Snt   Last   Avg  Best  Wrst StDev  1.|-- 192.168.1.1          0.0%   100    0.5   0.6   0.3   1.2   0.1  2.|-- 10.0.0.1             0.0%   100    5.2   5.1   4.8   6.1   0.3  3.|-- 172.16.1.1          15.0%   100   10.2  12.3   9.8  45.2   8.1  <- 这里丢包  4.|-- 8.8.8.8              0.0%   100   15.3  15.1  14.8  16.2   0.4

看到中间某跳丢包,但最终目标不丢包,可能是中间设备限制了ICMP,不用管。

中间和最终都丢包,那确实是链路问题。


第五步:检查DNS(如果用域名)

# 测试DNS解析nslookup 域名# 或dig 域名# 查看DNS配置cat /etc/resolv.conf# 测试特定DNS服务器dig @8.8.8.8 域名

DNS问题的症状:

  • ping IP能通,ping域名不通
  • curl超时,但用IP就正常

临时解决:

# 加hostsecho"1.2.3.4 example.com" >> /etc/hosts# 或者换DNSecho"nameserver 8.8.8.8" > /etc/resolv.conf

第六步:检查端口连通性

网络层通了,但服务不通?检查端口:

# telnet(需要安装)telnet 目标IP 端口# nc/netcat(推荐)nc -zv 目标IP 端口nc -zv 192.168.1.100 80# 输出:# Connection to 192.168.1.100 80 port [tcp/http] succeeded!# 或# nc: connect to 192.168.1.100 port 80 (tcp) failed: Connection refused# 批量检测nc -zv 192.168.1.100 80-90# curl测试HTTPcurl -v http://目标IP:端口/

端口不通的原因:

  1. 服务没启动
  2. 服务监听地址是127.0.0.1不是0.0.0.0
  3. 防火墙拦截

第七步:检查防火墙

本机防火墙

# iptablesiptables -L -n# firewalld(CentOS 7+)firewall-cmd --list-all# ufw(Ubuntu)ufw status# 临时关闭防火墙测试systemctl stop firewalld# 或iptables -F

云服务器安全组

如果是云服务器,还要检查:

  • 安全组规则
  • 网络ACL
  • VPC路由表

这个经常被忽略,明明服务器上防火墙关了还是不通,结果是安全组没放行。


实用命令汇总

ss/netstat 查看连接

# 查看监听端口ss -tlnpnetstat -tlnp# 查看所有TCP连接ss -tnp# 查看特定端口ss -tlnp | grep :80# 查看连接状态统计ss -s

网卡流量

# 实时流量watch -n 1 "cat /proc/net/dev"# 更直观iftop         # 需要安装nload         # 需要安装sar -n DEV 1  # sysstat包

抓包

# 抓指定端口tcpdump -i eth0 port 80# 抓指定IPtcpdump -i eth0 host 192.168.1.100# 抓TCP SYN包(看连接建立)tcpdump -i eth0 'tcp[tcpflags] & tcp-syn != 0'# 保存到文件,用Wireshark分析tcpdump -i eth0 -w capture.pcap

ARP相关

# 查看ARP缓存arp -nip neigh# 清除ARP缓存ip neigh flush dev eth0# 手动添加(排查ARP问题时用)arp -s 192.168.1.1 00:11:22:33:44:55

常见问题速查

1. 能ping通IP,不能ping域名

# DNS问题cat /etc/resolv.confdig 域名# 临时用公共DNSdig @8.8.8.8 域名

2. 能ping通,端口不通

# 检查服务systemctl status 服务名ss -tlnp | grep 端口# 检查防火墙iptables -L -n | grep 端口firewall-cmd --list-ports

3. 连接超时

# 1. 看路由对不对ip route get 目标IP# 2. traceroute看断在哪mtr 目标IP# 3. 可能是安全组/防火墙

4. 连接被拒绝(Connection refused)

# 服务没启动或没监听在该端口ss -tlnp | grep 端口# 服务监听127.0.0.1# 需要改配置监听0.0.0.0

5. 间歇性丢包

# 持续pingping 目标IP# mtr统计丢包mtr -r -c 1000 目标IP# 可能原因:# - 线路质量差# - 带宽跑满# - 对端服务器负载高

6. 延迟高

# 正常参考值:# 同机房 < 1ms# 同城市 < 10ms# 跨城市 10-50ms# 跨国 100-300ms# 用mtr看是哪一跳延迟高mtr 目标IP

排查流程图

ping不通  │  ├─ ping 网关 ──不通──→ 本地网络问题(网线/交换机/IP配置)  │     │  │    通  │     │  │     ▼  ├─ ping 目标IP ──不通──→ traceroute/mtr 定位中间断点  │     │  │    通  │     │  │     ▼  ├─ 用域名?──是──→ nslookup/dig 检查DNS  │     │  │    不是/DNS正常  │     │  │     ▼  ├─ nc/telnet 目标端口 ──不通──→ 防火墙/安全组/服务未启动  │     │  │    通  │     │  │     ▼  └─ curl/应用层测试 ──→ 应用层问题

一个真实案例

上周同事说服务器A访问服务器B的8080端口不通。

排查过程:

  1. ping B的IP → 通的,网络层没问题
  2. nc -zv B 8080 → Connection refused
  3. 登录B,ss -tlnp | grep 8080 → 服务在跑,监听的是127.0.0.1
  4. 改配置,监听0.0.0.0 → 还是不通
  5. iptables -L -n → 没拦
  6. 想起来是云服务器,检查安全组 → 8080没放行
  7. 加安全组规则 → 通了

这个流程跑下来不到5分钟,比瞎猜快多了。


总结

网络排查的核心就是分层、逐步缩小范围:

  1. 先确认本机网络配置正常
  2. ping网关,确认本地网络通
  3. ping目标,确认链路通
  4. traceroute定位中间问题
  5. DNS问题用nslookup排查
  6. 端口问题用nc/telnet测试
  7. 别忘了防火墙和安全组

掌握这套流程,大部分"ping不通"都能快速定位。


评论区有问题可以聊。

最新文章

随机文章