虚拟机网络问题故障定位

链路问题

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

相关推荐
大树887 小时前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠7 小时前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
bush47 小时前
嵌入式linux学习记录十四、术语
linux·嵌入式
载数而行5207 小时前
Linux 11 动态监控指令top
linux
小宇宙Zz8 小时前
Maven依赖冲突
java·服务器·maven
网络研究院9 小时前
2026年网络安全
网络·安全·法律·法规·趋势·发展
酣大智9 小时前
ARP代理--工作原理
运维·网络·arp·arp代理
treesforest9 小时前
AI安全系统如何识别异常访问?IP风险识别正在成为关键能力
网络·人工智能·tcp/ip·安全·web安全
不会C语言的男孩9 小时前
Linux 系统编程 · 第 8 章:进程基础
linux·c语言
shushangyun_9 小时前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化