iptables 中的 OUTPUT 链和 FORWARD 链有什么区别?

iptables 中的 OUTPUT 链和 FORWARD 链有什么区别?

CentOS 6.0

我正在研究 iptables,并且对 FORWARD 和 OUTPUT 链之间的区别感到困惑。在我的培训文档中,它指出:

如果您要追加到 (-A) 链或从 (-D) 删除链,您需要将其应用于沿三个方向之一传输的网络数据:

  • 输入 - 所有传入数据包都会根据此链中的规则进行检查。
  • 输出 - 根据此链中的规则检查所有传出数据包。
  • 转发 - 所有发送到另一台计算机的数据包都会根据此链中的规则进行检查。

这让我很困惑,因为在我看来,发送到主机的数据包应该是传出的。那么是否存在数据包将发送到另一台计算机但不“传出”的情况? iptables 如何区分两者?

答案1

OUTPUT 用于主机发出的数据包。它们的目的地通常是另一台主机,但也可以通过环回接口到达同一主机,因此并非所有通过 OUTPUT 的数据包实际上都是传出的。

FORWARD 适用于既不是由主机发出也不是定向到主机的数据包。它们是主机仅路由的数据包。

当您开始深入研究数据包修改和 NAT 时,完整的故事是相当复杂

答案2

据我了解:

输入:目标 IP 位于主机上,即使它具有多个端口和多个子网

输出:src IP 来自主机,任一端口

FORWARD:既不是主机上的 dst IP,也不是主机的 src IP

在此输入图像描述

以路由器A为例

输入是:

192.168.10.1 -> 192.168.10.199

192.168.10.1 -> 192.168.2.1

输出是:

192.168.10.199->xxxx

192.168.2.1->xxxx

转发是:

192.168.10.1 -> 192.168.2.199

192.168.10.1 -> 192.168.8.1

192.168.10.1 -> 192.168.8.199

相关内容