Linux Netfilter:在碎片整理之前将数据包排队给用户-space
Linux Netfilter: Enqueue packets to the user-space before defragment
问题是:如何使用 netfilter NFQUEUE before de 片段将数据包排队到 user-space?
根据 Linux kernel source,nf_defrag_ipv4
安装在 NF_INET_PRE_ROUTING
(在 iptables/nftables 中称为 PREROUTING)和 NF_INET_LOCAL_OUT
(输出)。
所以我为 NF_INET_LOCAL_OUT
尝试了以下反碎片整理 nftables 过滤器(原始:),但我仍然收到 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
。
我自己解决了
我误以为 netfilter 处理的 TCP 重组实际上是由 "TCP Auto Corking" 处理的。
现在我只需将 0
写入 /proc/sys/net/ipv4/tcp_autocorking
就可以获得碎片化的(即非软木塞)数据包。
问题是:如何使用 netfilter NFQUEUE before de 片段将数据包排队到 user-space?
根据 Linux kernel source,nf_defrag_ipv4
安装在 NF_INET_PRE_ROUTING
(在 iptables/nftables 中称为 PREROUTING)和 NF_INET_LOCAL_OUT
(输出)。
所以我为 NF_INET_LOCAL_OUT
尝试了以下反碎片整理 nftables 过滤器(原始:
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
。
我自己解决了
我误以为 netfilter 处理的 TCP 重组实际上是由 "TCP Auto Corking" 处理的。
现在我只需将 0
写入 /proc/sys/net/ipv4/tcp_autocorking
就可以获得碎片化的(即非软木塞)数据包。