OpenCloudOS / nettrace

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

在跟踪数据包时是否可以考虑增加自定义链表详细信息输出 #111

Closed sun363587351 closed 1 week ago

sun363587351 commented 2 months ago

在进行数据包追踪过程发现,可以列出原始的默认的链表信息,但是对于自定义的链表丢弃数据包的时候没有了详细信息,例如可以追踪到INPUT链,但是时间丢弃数据包是在INPUT链下面的INPUT_direct链,输出没有显示到INPUT_direct. tcp

menglongdong commented 2 months ago

你的意思是在INPUT链里,-j到了自定义的INPUT_direct链,然后在INPUT_direct链中产生了丢包,然后没有跟踪到INPUT_direct这个链吗?

sun363587351 commented 2 months ago

你的意思是在INPUT链里,-j到了自定义的INPUT_direct链,然后在INPUT_direct链中产生了丢包,然后没有跟踪到INPUT_direct这个链吗?

是的 就是这种自定义链 在k8s环境大量存在

sun363587351 commented 1 month ago

请问此issue有考虑吗

menglongdong commented 1 month ago

有考虑的。。。最近有点忙,还要再等一等

sun363587351 commented 3 weeks ago

请问相关优化好久考虑一下

menglongdong commented 3 weeks ago

你好,我看了下内核代码,这块无法实现。内核是在ipt_do_table或者nft_do_chain来处理链上的规则的。如果存在规则jump到自定义的chain,那么内核还是会在当前函数中进行处理。而nettrace是通过跟踪内核函数来实现的,因此对于nettrace来说,它看不到自定义链的处理过程,因此无法进行跟踪。

sun363587351 commented 3 weeks ago

好的 感谢 明白了

menglongdong commented 3 weeks ago

你可以使用系统自带的功能来跟踪报文在iptables中的处理过程,用法为:

用下面的命令给要跟踪的报文打上trace的标签

iptables -t raw -I PREROUTING -p icmp -j TRACE

使用下面的命令来监听报文的trace事件

nft monitor

sun363587351 commented 2 weeks ago

明白 但有的服务器没有使用nftable 还是iptables 这种方式我们试过 效率不高

menglongdong commented 2 weeks ago

明白 但有的服务器没有使用nftable 还是iptables 这种方式我们试过 效率不高

这个一般是debug的时候才会有这种需求吧,生产环境中有这种监控具体丢包的链和规则的需求吗?

sun363587351 commented 1 week ago

有的 有时候在k8s生产环境 会莫名端口或者ip不通 因为我们的环境开了防火墙和白名单

menglongdong commented 1 week ago

好的,我试试在netfilter框架里加个tracepoint,看看kernel社区能不能接受

menglongdong commented 1 week ago

好的,我试试在netfilter框架里加个tracepoint,看看kernel社区能不能接受

算了,感觉不靠谱