tcpdump能抓到被iptables drop掉的包吗?

上一篇文章,在调查跨节点访问pod的时候用到了tcpdump和iptables两个工具。地址如下
记一次kubernetes Pod跨节点访问不通的调查过程
在调查的过程中,也引发了我的思考。
iptables明明已经把一些包给drop丢弃掉了,tcpdump为什么还能抓到包?
tcpdump与iptables相比谁离的网卡驱动更近一些?
根据自己的思考,在网上搜索相关答案,发现了外国老哥关于tcpdump与iptables相关问题的解答https://superuser.com/questions/925286/does-tcpdump-bypass-iptables
我根据自己的疑问,整理如下

tcpdump与iptables相比谁离的网卡驱动更近一些

tcpdump抓包的位置如下表所示,入流量出网卡后首先会被tcpdump抓到,然后进入iptable的规则。出流量则是先经过iptables,然后经过tcpdump抓包最后进入网卡驱动。

入流量:NIC -> tcpdump -> iptables

出流量:iptables -> tcpdump -> NIC

也就是说tcpdump和iptable相比,tcpdump离着网卡驱动更近一些。
如下图所示,图中绿色三角的位置就是tcpdump起作用的地方。
请输入图片描述

iptables把包drop丢弃掉了,tcpdump为什么还能抓到包

经过对iptables和tcpdump的分析,我发现这个提问本身还是有问题的。iptalbe将包drop掉了,tcpdump并不是都可以将这些包捕获。应该分情况来看。

入流量

入流量离开网卡后,首先遇到的就是tcpdump。在这种场景下,iptables规则还没有发挥作用。所以tcpdump可以抓到所有的包。

出流量

出流量会先经过iptables的规则处理,iptables的规则是和表table相关联的。而drop是filter表(table)中可以添加的规则。filter表(table)可以在INPUT、FORWARD、OUTPUT链(chain)中绑定。链(chain)可以理解为流量经过的不同阶段。
如下图所示,出流量根据drop规则添加的位置不同,tcpdump是否能抓到包表现也是不相同的。
比如上篇文章跨节点访问pod的问题中,drop规则是添加在FORWARD链上的。
当我们跨节点ping pod时,流量进入tunl0设备后并不会直接进入用户空间,而是根据路由表转发给calixxx网卡。这时因为经过Forward链,所以包被drop掉。tcpdump也就抓不到包。流程如下:

NIC -> PREROUTING -> ROUTE -> FORWARD -> POSTROUTING -> tcpdump

而同节点ping pod时,流量是从用户空间根据路由规则进入calixxx设备,不会经过FORWARD链没有触发drop规则,所以tcpdump可以抓到包。流程如下:

用户空间 -> OUTPUT -> ROUTE ->  POSTROUTING -> tcpdump

请输入图片描述

https://www.zsythink.net/archives/1199

  • 10
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值