问题是:如何在 de 片段之前使用netfilter NFQUEUE 将数据包排入用户空间?
根据Linux kernel source,nf_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
。
答案 0 :(得分:0)
我自己解决了。
我误解了netfilter处理实际由“TCP Auto Corking”处理的TCP重组。
现在,只需将0
写入/proc/sys/net/ipv4/tcp_autocorking
即可获得支离破碎(即非塞住)的数据包。