为什么在POSTROUTING链中发生SNAT而在PREROUTING链中发生DNAT?

Mar*_*tin 8 iptables netfilter

为什么SNAT(修改源IP和/或端口)发生在natPOSTROUTING链,即经过路由?为什么DNAT(修改目标 IP 蚂蚁/或端口)会在PREROUTING链中发生?我猜后者是因为 PC 中可能有多个具有不同私有网络的 NIC,如果目标 IP 地址仍然是公共可路由地址,PC 不知道如何路由数据包?但是,因为SNAT我看不出为什么这不能在PREROUTING.

Aar*_*sco 5

我很确定来自本地机器的任何东西都不会通过PREROUTING表,如这个很棒的 ASCII 图所示


hob*_*bbs 4

通常,SNAT 的主要标准是“流出给定接口的流量”(即-o eth0)。数据包将通过哪个接口发出由路由决定,因此要应用该标准,您需要在上下文中运行它POSTROUTING

\n\n

DNAT 重写数据包的目标地址,这意味着它可以影响数据包发送到 \xe2\x80\x94 的位置,例如,看起来像是发往网关的数据包最终可能会被重写以发送到机器而是在网络上。由于您希望路由在做出决定时能够考虑到重写的目的地,以便数据包真正到达需要的地方,DNAT 应该在PREROUTING

\n