在现网环境中,IPv4/IPv6双栈部署已经成为企业网络的标准配置。但实际运维中经常遇到这样的场景:用户访问IPv4服务出现异常时,由于双栈环境的复杂性,故障点可能存在于协议栈、路由策略、安全策略等多个层面。上周我们数据中心就遇到一个典型案例——某业务系统的IPv4访问时断时续,而IPv6连接却完全正常。经过6小时的排查,最终发现是防火墙的IPv4会话表项溢出导致的。这个经历让我意识到,需要建立一套系统的双栈网络IPv4故障排查方法论。
建议采用OSI七层模型进行逐层排查:
netstat -s -4查看IPv4协议统计ip -4 route vs ip -6 routeip rule list检查路由策略iptables -L -n -v检查IPv4规则命中bash复制# IPv4基础测试
ping -4 目标IP
traceroute -4 目标IP
# 对比IPv6测试
ping -6 目标IP
traceroute -6 目标IP
注意:当IPv6正常而IPv4异常时,基本可以排除物理层和数据链路层问题
bash复制# 查看IPv4协议栈状态
cat /proc/sys/net/ipv4/* | grep -v "0$"
# 检查ICMP限制
sysctl net.ipv4.icmp_echo_ignore_all
bash复制# 打印IPv4路由缓存
ip -4 route show cache
# 检查策略路由
ip rule list | grep -i "from.*lookup"
症状:大包传输失败,小包正常
排查工具:
bash复制ping -4 -s 1472 -M do 目标IP # 测试PMTU
诊断命令:
bash复制cat /proc/net/ip_conntrack | wc -l
sysctl net.ipv4.netfilter.ip_conntrack_max
监控方法:
bash复制vtysh -c "show ip bgp neighbors" # 对BGP场景
ip monitor route # 实时监控路由变化
tcpdump -ni eth0 ip proto 4mtr -4 --report 目标IPnmap -4 -Pn 目标IP建议建立自动化检查脚本:
bash复制#!/bin/bash
check_ipv4(){
local target=$1
ping -c 3 -4 $target || {
echo "[FAIL] IPv4 ping failed"
ip -4 route get $target
return 1
}
return 0
}
监控关键指标:
定期健康检查:
bash复制# 每周执行路由校验
diff <(ip -4 route show) /etc/backup/ipv4_route.bak
配置基线管理:
bash复制# 保存iptables配置基线
iptables-save > /etc/iptables.rules.v4
在实际运维中,我们发现约70%的IPv4故障集中在路由策略和防火墙规则两个层面。建议优先检查这两个区域,可以快速缩小排查范围。另外要特别注意IPv4和IPv6在ACL实现上的差异,很多厂商设备对两者的处理逻辑并不完全一致。