我们正在开发我们自己的内核模块,该模块在 netfilter 预路由钩子中执行高级源 nat。从 Linux 内核 2.6.32 (Ubuntu 10.04) 升级到 2.6.35 (Ubuntu 10.04 lucid-back-ports) 后,似乎 SNAT 化的数据包被简单地丢弃在 Linux 内核中。
我知道从不建议在一般用途的预路由挂钩中完成 SNAT(Netfilter 邮件列表),但是仍然有一些原因我们更愿意在做出实际路由决定之前进行源 natting。
有没有人开发过在 2.6.35+ linux 内核的 netfilter 预路由钩子中执行 SNAT 的内核模块的经验?究竟应该在 linux-kernel/netfilter-kernel-module 代码中进行哪些更改,以便不会丢弃经过 SNAT 处理的数据包?也许预路由中的 SNAT 对于 2.6.35+ Linux 内核来说只是一个坏主意,我们应该更好地使用 nf_marks 进行路由决策并在后路由中进行 SNAT?
我在 X86_64 上使用带有反向移植 Linux 内核 (2.6.35) 的 Ubunut 10.04。