数据包流,iptables(PREROUTING 和 POSTROUTING)

问题描述 投票:0回答:1

我正在学习iptables,实际上是netfilter,我想了解更多关于数据包流的信息,在我看来netfilter表的顺序如下,表raw,mangle,nat,filter,如果我错了请正确,所以我当前的问题是关于nat表的PREROUTING和POSTROUTING链,当数据包经过这些链时,我做了以下测试,我有两台机器,最终IP地址为101和102。

大家好,我正在学习iptables,实际上是netfilter,我想了解更多有关数据包流的信息,在我看来netfilter表的顺序如下,表raw,mangle,nat,filter,如果我'我错了请纠正,所以我当前的问题是关于nat表的PREROUTING和POSTROUTING链,当数据包经过这些链时,我做了以下测试,我有两台机器,最终IP地址为101和102。

在ip地址101上,我配置了一条SNAT规则,如下。

  iptables -Z
  iptables -t nat -A POSTROUTING -s 192.168.0.101 -j SNAT --to-source 192.168.0.101.
  iptables -t nat -nvL

在ip地址102处,我配置了一条DNAT规则,如下。

  iptables -Z
  iptables -t nat -A PREROUTING -d 192.168.0.102 -j DNAT --to-destination 192.168.0.102.
  iptables -t nat -nvL

如果我从机器 101 ping 到机器 102,机器 101 和 102 上的 DNAT 规则计数器会增加,但是当我从机器 102 ping 到机器 101 时,DNAT 规则计数器不会增加,我认为执行 ping 时在出去的时候,它会先经过 POSTROUTING,然后是 OUTPUT 链,当这个数据包返回时,它会经过 PREROUTING,但据我发现,如果这是生成该数据包的同一台机器,它不会经过 PREROUTING。 ping,因此,您能否详细向我解释一下,如果可能的话,还请解释一下内核路由表及其来源。

顺便说一下,snat 和 dnat 的规则,这只是为了教学目的,因为你显然不需要这样做。

c tcp linux-kernel iptables netfilter
1个回答
0
投票

https://en.m.wikipedia.org/wiki/File:Netfilter-packet-flow.svg

根据此图表(截至 2019 年准确且不太可能发生更改),因为 PREROUTING 和 POSTROUTING 数据包将首先通过

mangle
表,然后通过
nat
表。

关于为什么返回数据包似乎没有通过 PREROUTING

nat
链,图中的注释表明仅在新连接上才会咨询
nat
链。这意味着任何回复数据包都将绕过这些
nat
链。 (请参阅当前 Linux 源中的 net/netfilter/nf_nat_core.c:L674)

© www.soinside.com 2019 - 2024. All rights reserved.