小编idl*_*n89的帖子

Linux Netfilter:连接跟踪如何跟踪 NAT 更改的连接?

目前我正在深入研究 Linux 的 Netfilter 架构的细节。我已经熟悉 Netfilter 钩子、表、链、不同的内核模块等。
但是我不了解 NAT 结合连接跟踪的一个细节。

我尝试用一​​个小 SNAT 示例来解释我的问题。在这个例子中,我将忽略传输层,因为我认为没有必要理解我的问题。如果我错了,请纠正我!

本地网络上有一台 IP 地址为 192.168.2.55 的客户端计算机和一个外部 IP 地址为 193.157.56.3 的 NAT 网关。现在客户端想要与服务器通信,IP 地址为 217.254.1.76 在 Internet 上。
因此,客户端将一个 src = 192.168.2.55/dst = 217.254.1.76 的数据包发送到 NAT 网关,该网关也是默认网关。连接跟踪跟踪这个新连接并创建两个新元组:

IP_CT_DIR_ORIGINAL:src = 192.168.2.55,dst = 217.254.1.76
IP_CT_DIR_REPLY:src = 217.254.1.76,dst = 192.168.2.55

IP_CT_DIR_ORIGINAL 和 IP_CT_DIR_REPLY 是访问两个元组数组的宏。

在 POSTROUTING 钩子处,NAT 要求对现有连接进行连接跟踪,如果成功,则更改数据包标头中的源地址。它还悄悄地创建了一个 DNAT 规则来恢复回复的目标地址。
现在我说到我的问题了。NAT 将 IP_CT_DIR_REPLY 中的目标地址更改为其外部 IP 地址 193.157.56.3。所以元组看起来像这样:

IP_CT_DIR_ORIGINAL:src = 192.168.2.55,dst = 217.254.1.76
IP_CT_DIR_REPLY:src = 217.254.1.76,dst = 193.157.56.3

这就是连接跟踪可以跟踪 PREROUTING 钩子中的回复的原因,因为有一个现有的回复元组。但是在跟踪数据包后,NAT 将目标地址更改为客户端的地址 192.168.2.55。 …

networking linux nat

5
推荐指数
1
解决办法
1万
查看次数

标签 统计

linux ×1

nat ×1

networking ×1