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