Linux Netfilter:在进行碎片整理之前将数据包排入用户空间

时间:2015-07-29 03:00:16

标签: linux-kernel iptables netfilter ip-fragmentation

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

根据Linux kernel sourcenf_defrag_ipv4安装在NF_INET_PRE_ROUTING(在iptables / nftables中称为PREROUTING)和NF_INET_LOCAL_OUT(OUTPUT)。

所以我为NF_INET_LOCAL_OUT尝试了以下反碎片整理nftables过滤器(原始版本:https://stackoverflow.com/a/30638753/5167443),但我仍然收到 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)和this my own binding libnetfilter_queue.so.1

1 个答案:

答案 0 :(得分:0)

我自己解决了。

我误解了netfilter处理实际由“TCP Auto Corking”处理的TCP重组。

现在,只需将0写入/proc/sys/net/ipv4/tcp_autocorking即可获得支离破碎(即非塞住)的数据包。

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