nettrace icon indicating copy to clipboard operation
nettrace copied to clipboard

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

Open hezhiye opened this issue 1 year ago • 4 comments

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

hezhiye avatar Jul 03 '23 07:07 hezhiye

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

menglongdong avatar Jul 05 '23 03:07 menglongdong

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

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

已经有bpf_fib_lookup这样的函数了

我再找找有没有相应的hook

kawhicurry avatar Nov 30 '23 08:11 kawhicurry

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

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

已经有bpf_fib_lookup这样的函数了

我再找找有没有相应的hook

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

kawhicurry avatar Nov 30 '23 13:11 kawhicurry

这个有些困难,因为路由选择的时候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

kawhicurry avatar Nov 30 '23 14:11 kawhicurry