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

Mik*_*e B 40 linux iptables

CentOS 6.0

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

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

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

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

Gil*_*il' 37

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

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

当您开始深入研究数据包处理和 NAT 时,整个故事就变得更加复杂了

  • @Grizly 不,从记忆中(我承认我在写这个答案时没有专门测试过)并且根据我链接到的图表,数据包总是通过三个“过滤器”链(“INPUT”或“OUTPUT”)中的一个`或`前向`)。(假设其他一些链之前没有丢弃它。) `mangle` 和 `nat` 链是不同的,也许你想到的是 `mangle` 链? (2认同)

flz*_*flz 5

据我了解:

INPUT:dst IP 在主机上,即使它有多个端口和多个子网

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

转发:主机上的 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