iptables 上下文中的“路由决策”是什么?

iptables 上下文中的“路由决策”是什么?

维基百科关于 iptables 的文章提到这个

PREROUTING:数据包将在做出路由决策之前进入该链。

iptables 可以对数据包执行很多操作,例如DROP将其JUMP发送到另一条链以进行进一步处理、DNAT将其发送到与预期不同的目的地等。
因此,在可以采取的所有操作中iptables,什么会发生“路由决定”涵盖?
例如,“路由决策”是否包含 iptables 可能做出的所有可能操作?即,您能否将短语“路由决策”替换为短语“最终决策”? IE:

PREROUTING:数据包将在最终的做出决定。该表本身不会提供关于如何处理数据包的决定性决定,只是对数据包进行一些调整

DROP算作路由决策吗?

或者“路由决策”仅适用于路由的实际操作?例如将数据包转发到新网络?

答案1

因此,为了简化起见,让我们完全忽略桥接并仅保留在网络层的上下文中。

在这种情况下,您提到的“路由决策”在遍历nat表的PREROUTING链后立即发生,它只是意味着确定有问题的数据包是否绑定到本地主机本身,或者应该转发到另一台主机。

这些是 iptables 中不同的路径,因此必须做出决定:

  • 如果数据包发往本地主机,它将离开网络层,INPUT在到达应用程序层之前穿过多个表中的多个链。
  • 如果要转发数据包,它会停留在网络层并遍历多个FORWARD链。

做出这个“决定”的原因遍历nat表的PREROUTING链是因为如果您对这些数据包执行网络地址转换,则该链是目标地址将被更改的位置。

影响您遍历链和/或表(即ACCEPTDROP)的目标是您可以通过在规则中定义这些跳转来跳转到的目标;它们不是 iptables 自行采取的操作。

还值得注意的是,包含任何ACCEPTorDROP语句的链将被遍历该“路由决策”已做出,因此对该决策没有直接影响。

还有其他地方会做出“路由决策”,并且根据数据包的上下文(发往本地主机、离开本地主机等),该决策可能包含不同的内容。是了解差异的良好资源;您可以看到您提到的“决定”是表 6-3 的步骤 5。

相关内容