linux 系统 ping 不通 问题排查思路

1. ICMP 层

1.1 icmp_echo_ignore_all 参数

# 检查是否禁用了 ICMP 回应
cat /proc/sys/net/ipv4/icmp_echo_ignore_all
# 0 表示响应,1 表示忽略所有 ICMP echo 请求

1.2 ICMP checksum 错误

# 查看 ICMP 校验和错误计数
cat /proc/net/snmp | grep Icmp
# 重点关注 InCsumErrors 字段

1.3 其他 ICMP 相关参数

# 忽略广播 ping
cat /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

# ICMP 速率限制
cat /proc/sys/net/ipv4/icmp_ratelimit
cat /proc/sys/net/ipv4/icmp_ratemask

2. IP 层

2.1 iptables 防火墙规则

# 查看 iptables 规则
iptables -L -n -v
iptables -t nat -L -n -v
iptables -t mangle -L -n -v

# 查看具体的 DROP/REJECT 计数
iptables -L -n -v | grep -E "DROP|REJECT"

2.2 rp_filter 反向路径过滤

# 检查反向路径过滤设置
cat /proc/sys/net/ipv4/conf/all/rp_filter
cat /proc/sys/net/ipv4/conf/default/rp_filter
cat /proc/sys/net/ipv4/conf/eth0/rp_filter  # 具体网卡

2.3 路由问题

# 查看路由表
ip route show
ip rule show
# 查看策略路由
ip route show table all

2.4 IP 转发设置

# 检查 IP 转发是否开启(作为网关时需要)
cat /proc/sys/net/ipv4/ip_forward

3. 链路层

3.1 TC (Traffic Control) 规则

# 查看 tc 规则
tc qdisc show
tc filter show
tc class show

3.2 TC 队列满

# 查看队列统计信息和丢包计数
tc -s qdisc show
# 重点关注 dropped 字段

3.3 网卡硬件问题

# 查看网卡统计信息
ip -s link show
ethtool -S eth0  # 查看详细硬件统计

# 查看网卡驱动信息
ethtool -i eth0

# 查看 Ring Buffer 设置
ethtool -g eth0

3.4 网卡中断问题

# 查看中断分布
cat /proc/interrupts | grep eth0

# 查看 CPU 亲和性设置
cat /proc/irq/[irq_number]/smp_affinity

4. 中间网络或对端问题

4.1 MTU 问题

# 测试不同大小的包
ping -M do -s 1472 目标IP  # 禁止分片测试 MTU

# 查看接口 MTU
ip link show

4.2 网络延迟和丢包

# 使用 mtr 综合诊断
mtr 目标IP

# 使用 traceroute 追踪路径
traceroute 目标IP

5. 其他情况

5.1 MAC 地址变化/冲突

# 查看 ARP 缓存
ip neigh show
arp -n

# 监控 ARP 变化
arpwatch

5.2 ARP 表项满

# 查看 ARP 表大小限制
cat /proc/sys/net/ipv4/neigh/default/gc_thresh1
cat /proc/sys/net/ipv4/neigh/default/gc_thresh2
cat /proc/sys/net/ipv4/neigh/default/gc_thresh3

# 查看当前 ARP 表项数
ip neigh show | wc -l

5.3 ARP 无应答

# 手动发送 ARP 请求
arping -c 3 目标IP

# 查看 ARP 超时设置
cat /proc/sys/net/ipv4/neigh/default/base_reachable_time

5.4 CPU 负载过高

# 查看 CPU 使用情况
top
htop
mpstat -P ALL 1

# 查看软中断
cat /proc/softirqs
watch -n 1 'cat /proc/softirqs'

5.5 收发网卡不一致(非对称路由)

# 抓包确认收发路径
tcpdump -i any -n icmp
tcpdump -i eth0 -n icmp
tcpdump -i eth1 -n icmp

5.6 收发 MAC 不一致

# 查看网卡 MAC 地址
ip link show
# 检查是否有 MAC 地址伪装

5.7 IP 地址冲突

# 使用 arping 检测 IP 冲突
arping -D -I eth0 -c 3 本机IP

# 查看系统日志
dmesg | grep -i "duplicate"
journalctl -xe | grep -i "duplicate"

6. 补充诊断方法

6.1 内核参数检查

# 检查连接跟踪表
cat /proc/sys/net/netfilter/nf_conntrack_max
cat /proc/sys/net/netfilter/nf_conntrack_count

# 检查 TIME_WAIT 相关参数
cat /proc/sys/net/ipv4/tcp_tw_reuse
cat /proc/sys/net/ipv4/tcp_tw_recycle

6.2 SELinux/AppArmor

# 检查 SELinux 状态
getenforce
# 查看 SELinux 日志
ausearch -m avc -ts recent

6.3 网络命名空间

# 查看网络命名空间
ip netns list
# 在特定命名空间执行 ping
ip netns exec <namespace> ping 目标IP

6.4 虚拟化环境特有问题

# 检查网桥设置
brctl show
bridge link show

# 检查 OVS(Open vSwitch)
ovs-vsctl show

6.5 诊断工具使用

# 使用 ss 查看 socket 统计
ss -s

# 使用 netstat 查看网络统计
netstat -s

# 使用 nstat 查看网络统计变化
nstat -az

# 实时监控网络流量
iftop -i eth0
nethogs

6.6 系统日志排查

# 查看系统日志
journalctl -xe
tail -f /var/log/messages
tail -f /var/log/syslog

7. 系统化排查流程

  1. 确认基本连通性
  • ping 127.0.0.1(本地回环)
  • ping 本机 IP
  • ping 网关
  • ping 外网
  1. 逐层排查
  • 从物理层开始(网线、网卡状态)
  • 链路层(ARP、MAC)
  • 网络层(路由、防火墙)
  • 传输层(如果涉及 TCP/UDP)
  1. 对比测试
  • 其他机器是否能 ping 通
  • 反向 ping 是否正常
  • 其他协议是否正常(如 TCP 80 端口)
  1. 抓包分析

分析包的往返路径

在本机抓包看是否发出 ICMP 请求

在对端抓包看是否收到请求

本文版权归原作者zhaofujian所有,采用 CC BY-NC-ND 4.0 协议进行许可,转载请注明出处。

发表评论