这维基百科关于 iptables 的文章提到这个
PREROUTING
:数据包将在做出路由决策之前进入该链。
iptables 可以对数据包执行很多操作,例如DROP
将其JUMP
发送到另一条链以进行进一步处理、DNAT
将其发送到与预期不同的目的地等。
因此,在可以采取的所有操作中iptables
,什么会发生“路由决定”涵盖?
例如,“路由决策”是否包含 iptables 可能做出的所有可能操作?即,您能否将短语“路由决策”替换为短语“最终决策”? IE:
PREROUTING
:数据包将在最终的做出决定。该表本身不会提供关于如何处理数据包的决定性决定,只是对数据包进行一些调整
并DROP
算作路由决策吗?
或者“路由决策”仅适用于路由的实际操作?例如将数据包转发到新网络?
答案1
因此,为了简化起见,让我们完全忽略桥接并仅保留在网络层的上下文中。
在这种情况下,您提到的“路由决策”在遍历nat
表的PREROUTING
链后立即发生,它只是意味着确定有问题的数据包是否绑定到本地主机本身,或者应该转发到另一台主机。
这些是 iptables 中不同的路径,因此必须做出决定:
- 如果数据包发往本地主机,它将离开网络层,
INPUT
在到达应用程序层之前穿过多个表中的多个链。 - 如果要转发数据包,它会停留在网络层并遍历多个
FORWARD
链。
做出这个“决定”的原因后遍历nat
表的PREROUTING
链是因为如果您对这些数据包执行网络地址转换,则该链是目标地址将被更改的位置。
影响您遍历链和/或表(即ACCEPT
和DROP
)的目标是您可以通过在规则中定义这些跳转来跳转到的目标;它们不是 iptables 自行采取的操作。
还值得注意的是,包含任何ACCEPT
orDROP
语句的链将被遍历后该“路由决策”已做出,因此对该决策没有直接影响。
还有其他地方会做出“路由决策”,并且根据数据包的上下文(发往本地主机、离开本地主机等),该决策可能包含不同的内容。这是了解差异的良好资源;您可以看到您提到的“决定”是表 6-3 的步骤 5。