Linux Netfilter:在碎片整理之前将数据包排队到用户空间



问题是:如何在 de片段之前使用netfilter NFQUEUE 将数据包排队到用户空间?

根据Linux内核源代码,nf_defrag_ipv4安装在NF_INET_PRE_ROUTING (iptables/nftables中称为PREROUTING)和NF_INET_LOCAL_OUT (OUTPUT)中。

所以我尝试了以下反碎片整理nftables过滤器(原始:https://stackoverflow.com/a/30638753/5167443) NF_INET_LOCAL_OUT,但我仍然得到de碎片数据包。

sudo nft add table filter
sudo nft add chain filter predefrag { type filter hook output priority -- -450 ; }
sudo nft add filter predefrag skuid nfqhooked counter queue num 42

在上面的过滤器中,-450表示NF_IP_PRI_CONNTRACK_DEFRAG=-400之前的优先级。也就是说,过滤器应该在nf_defrag_ipv4之前工作。

我使用的是Linux 3.19 (Ubuntu 15.04),这是我自己对libnetfilter_queue.so.1的绑定

我刚刚自己解决了。

我误解了netfilter处理的TCP重组实际上是由"TCP Auto Corking"处理的。

现在我可以通过将0写入/proc/sys/net/ipv4/tcp_autocorking来获得碎片(即非软木塞)数据包。

http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=f54b311142a92ea2e42598e347b84e1655caf8e3

最新更新