如何快速上手pwru:10分钟学会Linux内核网络调试

【免费下载链接】pwru Packet, where are you? -- eBPF-based Linux kernel networking debugger 【免费下载链接】pwru 项目地址: https://gitcode.com/gh_mirrors/pw/pwru

pwru(Packet, where are you?)是一款基于eBPF技术的Linux内核网络调试工具,它能帮助开发者追踪网络数据包在内核中的流转路径,轻松定位复杂的网络连接问题。无论是排查丢包原因、分析转发逻辑还是调试防火墙规则,pwru都能提供精准的内核级视角,让网络调试不再盲人摸象。

🌟 为什么选择pwru?

传统的网络调试工具往往停留在用户态,难以深入内核黑盒。而pwru通过eBPF技术直接在 kernel 空间进行追踪,具有以下优势:

  • 细粒度追踪:可观察数据包在内核函数间的完整路径
  • 低侵入性:无需修改内核源码或重启系统
  • 强大过滤:支持pcap过滤语法和内核函数级筛选
  • 多场景支持:适用于物理机、容器和Kubernetes环境

pwru实时追踪网络数据包演示

📋 准备工作:系统要求与环境配置

内核版本要求

  • 最低支持:Linux 5.3+
  • 推荐版本:5.18+(支持kprobe-multi后端,性能更佳)

必备内核配置

通过 zgrep <选项> /proc/config.gz 验证以下配置是否启用:

配置选项说明
CONFIG_DEBUG_INFO_BTF=y提供内核类型信息(5.3+可用)
CONFIG_KPROBES=y支持内核动态探针
CONFIG_PERF_EVENTS=y性能事件子系统支持
CONFIG_BPF_SYSCALL=yBPF系统调用支持

快速安装debugfs

如果系统未挂载debugfs,执行以下命令:

mount -t debugfs none /sys/kernel/debug

⚡ 三种安装方式,5分钟搞定

方式1:直接下载二进制(推荐)

从项目发布页面获取预编译可执行文件:

# 克隆仓库
git clone https://gitcode.com/gh_mirrors/pw/pwru
cd pwru

# 下载对应架构的二进制文件(以x86_64为例)
wget https://github.com/cilium/pwru/releases/latest/download/pwru-amd64 -O pwru
chmod +x pwru

方式2:Docker一键运行

docker run --privileged --rm -t --pid=host \
  -v /sys/kernel/debug/:/sys/kernel/debug/ \
  cilium/pwru pwru --output-tuple 'host 1.1.1.1'

方式3:Kubernetes节点部署

使用项目提供的脚本快速部署:

# 使用 contrib/scripts 目录下的部署脚本
contrib/scripts/pwru-on-k8s-node --node=your-node-name --args="--output-tuple 'host 1.1.1.1'"

🚀 入门实战:3个常用调试场景

场景1:追踪特定IP的网络包

# 追踪目标IP为1.1.1.1的所有数据包
./pwru --output-tuple 'host 1.1.1.1'

场景2:定位丢包原因

# 追踪被DROP的ICMP包,显示调用栈
./pwru --output-stack 'icmp and host 8.8.8.8'

场景3:调试NAT后的流量

# 追踪经过NAT的流量,保持跨连接追踪
./pwru --filter-track-skb 'dst port 80'

📝 核心参数解析

参数作用示例
--output-tuple显示L4网络元组(源/目的IP:端口)--output-tuple
--output-stack显示内核调用栈--output-stack
--filter-func按内核函数名过滤--filter-func=".*iptable.*"
--output-skb打印完整skb结构--output-skb
--output-jsonJSON格式输出便于解析--output-json

📚 进阶资源

💡 小贴士

  1. 首次使用建议从简单过滤规则开始,逐步添加复杂条件
  2. 使用 --output-limit-lines N 限制输出行数,避免信息过载
  3. 结合 grep 和 jq 处理输出:./pwru --output-json | jq '.func'
  4. 内核版本低于5.18时,添加 --backend=kprobe 参数

通过pwru这款强大的eBPF网络调试工具,你可以像侦探一样追踪每个数据包的内核之旅。无论是开发、运维还是网络排障,pwru都能让你轻松看透Linux内核的网络黑盒,成为你的必备调试利器!

【免费下载链接】pwru Packet, where are you? -- eBPF-based Linux kernel networking debugger 【免费下载链接】pwru 项目地址: https://gitcode.com/gh_mirrors/pw/pwru

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐