Linux kernel netfilter预路由挂钩中的源nat

Linux kernel netfilter预路由挂钩中的源nat,linux-kernel,nat,kernel-module,netfilter,Linux Kernel,Nat,Kernel Module,Netfilter,我们正在开发自己的内核模块,在netfilter预路由钩子中执行高级源nat。在从Linux内核2.6.32 Ubuntu10.04升级到2.6.35 Ubuntu10.04 lucid back ports之后,似乎SNATted数据包被简单地丢弃在Linux内核中 我知道SNAT从来没有被建议在一般使用的预路由钩子中进行,但是我们仍然有一些原因希望在做出实际路由决定之前进行源NATT 有没有人有过为2.6.35+linux内核开发netfilter预路由钩子的内核模块的经验?linux内核/

我们正在开发自己的内核模块,在netfilter预路由钩子中执行高级源nat。在从Linux内核2.6.32 Ubuntu10.04升级到2.6.35 Ubuntu10.04 lucid back ports之后,似乎SNATted数据包被简单地丢弃在Linux内核中

我知道SNAT从来没有被建议在一般使用的预路由钩子中进行,但是我们仍然有一些原因希望在做出实际路由决定之前进行源NATT

有没有人有过为2.6.35+linux内核开发netfilter预路由钩子的内核模块的经验?linux内核/netfilter内核模块代码中到底应该更改哪些内容,以便不会丢弃SNAT数据包?也许预路由中的SNAT对于2.6.35+Linux内核来说只是个坏主意,我们应该更好地使用nf_标记进行路由决策,并在后路由中进行SNAT


我正在X86_64上使用带后端口Linux内核2.6.35的Ubunut 10.04。

首先查找丢弃数据包的确切线路。

更新源IP后是否重新计算了所有校验和?请记住,您还需要更新TCP/UDP校验和,因为它们基于src/dst IP地址。

您在预路由方面有SNAT经验吗?也许有一个比查看源代码并自己修复更简单的解决方案,例如,可能已经有一个补丁在某处漫游;或者,这可以通过/sys文件系统完成。Linux代码库非常大,我知道在自己修复这个问题后,我不可能在一周内分析所有可能的回归。这也是我寻求专家帮助的原因,他们以前可能已经解决了类似的问题。无论如何,谢谢你的建议:它很大,但任意的线不能使一个包消失。你至少在找kfree_skb电话。这一点你不知道发生了什么,你的脱节模块也没有帮助。