OpenCloudOS / nettrace

nettrace is a eBPF-based tool to trace network packet and diagnose network problem.
Other
326 stars 80 forks source link

nettrace --detail 能否显示主机发出的报文是哪个路由表中的规则选中? #61

Closed hezhiye closed 5 months ago

hezhiye commented 1 year ago

Hi: 目前似乎没有办法显示主机发出去的包是哪个ip rule 策略路由的table选中。这样对于配置路由表不是很方便,希望nettrace能显示 具体哪个路由表被选中而输出 image

menglongdong commented 1 year ago

这个有些困难,因为路由选择的时候skb还没有构造出来,因此无法进行跟踪。

kawhicurry commented 11 months ago

这个有些困难,因为路由选择的时候skb还没有构造出来,因此无法进行跟踪。

skb这个时候应该构造出来了吧,要实现的话理论上应该是可行的。

已经有bpf_fib_lookup这样的函数了

我再找找有没有相应的hook

kawhicurry commented 11 months ago

这个有些困难,因为路由选择的时候skb还没有构造出来,因此无法进行跟踪。

skb这个时候应该构造出来了吧,要实现的话理论上应该是可行的。

已经有bpf_fib_lookup这样的函数了

我再找找有没有相应的hook

大概搞明白了,现有的nettrace代码是围绕struct skb工作的,而想要追踪ip rule,就需要追踪fib。fib这里传递基本都是处理struct net。也就是说我们可能需要一个对标DEFINE_KPROBE_SKB的宏(比如叫它DEFINE_KPROBE_NET),那现有框架下确实做不到,需要进一步扩展才行。

kawhicurry commented 11 months ago

这个有些困难,因为路由选择的时候skb还没有构造出来,因此无法进行跟踪。

skb这个时候应该构造出来了吧,要实现的话理论上应该是可行的。 已经有bpf_fib_lookup这样的函数了 我再找找有没有相应的hook

大概搞明白了,现有的nettrace代码是围绕struct skb工作的,而想要追踪ip rule,就需要追踪fib。fib这里传递基本都是处理struct net。也就是说我们可能需要一个对标DEFINE_KPROBE_SKB的宏(比如叫它DEFINE_KPROBE_NET),那现有框架下确实做不到,需要进一步扩展才行。

是我学艺不精了,struct net只是个namespace的结构体,应该是fib_compute_spec_ds这个函数里,skb会被转换成flowi4然后传给fib_lookup。但是这样还是拿不到fib_lookupfib_result