我正在构建一个模块,对其中包含的协议进行大量修改。我只处理第 4 层数据包。我在另一端将它们转换回应有的状态。数据包大小仍然是 1:1,所以真的不需要重新分配 skb...
也就是说,我改变了skb->data
,然后NF_ACCEPT
从我的NF_IP_LOCAL_OUT
钩子中返回。我有另一个钩子显示 sk_buff 已传递给NF_IP_POST_ROUTING
,但数据包实际上从未离开主机(因为我在 Wireshark 中看不到它)。我不知道发生了什么。数据包是否被丢弃在某个地方?除了 netfilter 钩子之外,我没有使用任何其他内核钩子,也没有操纵目的地,所以它应该毫无疑问地离开机器。
有什么想法可能导致它吗?我需要向内核注册我的自定义 IPPROTO 吗?我有它,/etc/protocols
我认为这就足够了。还是我完全走错了路?我尝试使用 IPsec 内核中的 ESP 和 AH 代码,因为它也会破坏数据包,但是所有转换代码都比我正在做的事情更复杂。