0

我们正在开发我们自己的内核模块,该模块在 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。

4

2 回答 2

0

首先找到丢弃数据包的确切行。

于 2011-04-15T15:57:56.097 回答
0

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

于 2015-09-30T01:53:19.453 回答