虚拟机网络问题故障定位

链路问题

tcpdump(链路抓包)

tcpdump -i eth0 tcp port 22 and host 192.168.12.22 -enn

系统内核问题

概念

eBPF:

( extended Berkeley Package Filter扩展柏克莱封包过滤器),是一种Linux内核技术,它允许开发者在不修改内核源码或加载内核模块的情况下,将自定义代码安全的运行在内核上下文中。最初用于网络数据包过滤,如今已经扩展到性能分析、安全监控、流量控制等多个领域。

hook:

狗子观测点

内核函数

kfree_skb

kfree_skb是linux内核中用于释放sk_buff结构体(网络数据包缓冲区)的函数,当数据包印错误或异常被丢弃是调用它。

典型调用场景:

1、接收路径错误:网卡驱动检查到校验和错误时,直接调用kfree_skb丢弃数据包;

2、协议栈处理失败:如TCP确认接收后释放skb, 或理由不可达时丢弃;

EulerOS : xd_ntrace2(内核协议栈抓包)

xd_ntrace2基于eBPF开发在内核网络协议栈经过关键节点函数中添加hook观测点,实时跟踪报文经过路径;

实现的功能包括:

1、网络报文跟踪:跟踪网络报文从进入到内核协议栈接收、发送过程中,以及被丢弃在内核中所走过的路径;对于有一定内核协议栈经验的人来说可以快速、有效的发现网络问题。

2、网络故障诊断:将以往的经验集成到工具的故障知识库,通过故障知识库匹配的方式来主动诊断当前网络故障,给出诊断结果已经修复建议;

常见问题场景:
iptables规则导致的丢包

./xd_ntrace2 -t tcp -S 源地址 -p 22 -c

在iptable的INPUT链上包被kfree

Diagnostic result: Check iptables Chain INPUT* or Firewall

********** 290718235_24616 skb:0xff9346873c4400 ************

IN _netif_receive_skb_core TCP: 8.82.242.75:44824 -> 8.82.245.92:22 SYN seq:1781155 ack:0 dev:eth0 | *L2 Layer Receive routine

IN ip_rcv_core TCP: 8.82.242.75:44824 -> 8.82.245.92:22 SYN seq:1781155 ack:0 dev:eth0 | *L2 Layer Receive routine

IN nf_hook_slow TCP: 8.82.242.75:44824 -> 8.82.245.92:22 SYN seq:1781155 ack:0 dev:eth0 | *Check iptables Chain PREROUTING*

IN ip_route_input_noref TCP: 8.82.242.75:44824 -> 8.82.245.92:22 SYN seq:1781155 ack:0 dev:eth0 | *(null)

IN fib_validate_source TCP: 8.82.242.75:44824 -> 8.82.245.92:22 SYN seq:1781155 ack:0 dev:eth0 | *Check reverse path filter

IN ip_local_deliver TCP: 8.82.242.75:44824 -> 8.82.245.92:22 SYN seq:1781155 ack:0 dev:eth0 | *Check Chain INPUT* or package reassembly

IN **nf_hook_slow** TCP: 8.82.242.75:44824 -> 8.82.245.92:22 SYN seq:1781155 ack:0 dev:eth0 | *Check iptables Chain INPUT* or Firewall

IN **kfree_skb** TCP: 8.82.242.75:44824 -> 8.82.245.92:22 SYN seq:1781155 ack:0 dev:eth0 | *Drop the package

rp_filter反向路径过滤导致的丢包

问题现象:

1、源上ping不通目的,但是能ping通目录的网关,目的tcpdump能抓到ICMP的request报文,但是没有发出reply报文。

2、源上traceroute/ip route get目的地址,路径走的是目的eth1网卡的网关,目的上traceroute/ip route get源地址,路径走的是目的的eth2的一条明细路由。

./xd_ntrace2 -t tcp -a 源地址 -c

Diagnostic result: Network unreachable

********** 290718235_24616 skb:0xff9346873c4400 ************

IN _netif_receive_skb_core TCP: 8.82.242.75:44824 -> 8.82.245.92:22 SYN seq:1781155 ack:0 dev:eth0 | *L2 Layer Receive routine

IN ip_rcv_core TCP: 8.82.242.75:44824 -> 8.82.245.92:22 SYN seq:1781155 ack:0 dev:eth0 | *L2 Layer Receive routine

IN nf_hook_slow TCP: 8.82.242.75:44824 -> 8.82.245.92:22 SYN seq:1781155 ack:0 dev:eth0 | *Check iptables Chain PREROUTING*

IN ip_route_input_noref TCP: 8.82.242.75:44824 -> 8.82.245.92:22 SYN seq:1781155 ack:0 dev:eth0 | *(null)

IN **fib_validate_source** TCP: 8.82.242.75:44824 -> 8.82.245.92:22 SYN seq:1781155 ack:0 dev:eth0 | *Check reverse path filter

IN **kfree_skb** TCP: 8.82.242.75:44824 -> 8.82.245.92:22 SYN seq:1781155 ack:0 dev:eth0 | *Drop the package
IN ip_route_input_noref TCP: 8.82.242.75:44824 -> 8.82.245.92:22 SYN seq:1781155 ack:0 dev:eth0 | *(null)

IN **fib_validate_source** TCP: 8.82.242.75:44824 -> 8.82.245.92:22 SYN seq:1781155 ack:0 dev:eth0 | *Check reverse path filter

IN **kfree_skb** TCP: 8.82.242.75:44824 -> 8.82.245.92:22 SYN seq:1781155 ack:0 dev:eth0 | *Drop the package

相关推荐
阿米亚波1 小时前
【EVE-NG 实战】防火墙基础(VLAN · VRRP · NAT · ACL · 静态路由)
运维·网络·笔记·网络协议·计算机网络·网络安全·运维开发
零意@1 小时前
海光平台debian11的系统,打开pstore功能和验证功能
网络
日取其半万世不竭1 小时前
云服务器迁移怎么少停机?DNS 切换前后的完整清单
运维·服务器
学究天人1 小时前
数学公理体系大全:Comprehensive Collection of Mathematical Axiom Systems(卷6)
网络·算法·数学建模·动态规划·几何学·图论·拓扑学
tiantianuser2 小时前
NVME-oF IP 设计2 :设计之前的调研!
网络·网络协议·rdma·roce v2·nvme of
FREEDOM_X2 小时前
Linux 多线程编程——总结
java·linux·运维·ubuntu
星恒讯工业路由器2 小时前
工业无线通信选型常见问题解答
网络·信息与通信·无线ap·设备选型·工业无线通信·防爆无线设备·4g/5g路由器
智慧光迅AINOPOL2 小时前
校园全光网建设成本对比:全光网取代传统校园网建设成本分析
网络·全光网解决方案·全光网·校园全光网·校园全光网解决方案
2401_873479403 小时前
如何识别代理IP和伪装流量?用IP情报工具三步穿透住宅代理伪装
网络·数据库·网络协议·tcp/ip·ip
s09071363 小时前
深入解析 Sensor Hub Transport Protocol (SHTP) 协议
网络·协议·传感器·shtp