
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