iptables 是否对响应数据包执行自动 SNAT,如果执行,那么什么时候发生?

iptables 是否对响应数据包执行自动 SNAT,如果执行,那么什么时候发生?

假设我们有一个路由器,它有内部 ip(192.168.1.1) 和外部 ip(192.0.2.5),路由器后面有一台计算机,它有内部 ip(192.168.1.100)。路由器已经配置为 MASQUARADE 源 ip,因此用户可以访问互联网。

我很疑惑,当互联网服务器用一个数据包(SRC:8.8.8.8->DST:192.0.2.5)响应用户的请求,并且这个数据包进入 iptables,但没有配置规则将其 DNAT 回用户的 ip,用户如何收到响应?

我在谷歌上搜索过,有人说 Netfilter 会自动对其进行 DNAT,我不知道这是不是真的,如果是真的,那么这个隐藏 DNAT 是什么时候执行的,是在数据包到达 FILTER 表或 NAT 表还是其他地方时执行的?DNAT 之后,它会进入 FILTER 的 INPUT 表还是 FORWARD 表?

答案1

Netfilter 会持续跟踪您向MASQUERADE目标发送的信息。收到相应的响应(数据包)后,它们将受该nat表的约束。传入数据包通过该表的路径nat如下:

1. ingress at router external interface
2. nat - PREROUTING
    a. convert external IP to internal IP
3. nat - POSTROUTING
4. egress at router internal interface
5. ingress at internal computer interface

该操作在表链DNAT中执行。如果数据包的原始来源是 LAN 上的内部计算机,则数据包将不会通过路由器的表,因为它们根据其源 IP 和/或目标 IP 被识别为先前的数据包。但是,如果您的路由器PREROUTINGnatfilterNAT曾是原始来源,并且数据包最终的目的地是路由器本身,那么它们将通过filter路由器的表。

相关内容