
6.0 の
私は iptables を勉強していますが、FORWARD チェーンと OUTPUT チェーンの違いがよくわかりません。トレーニング ドキュメントには次のように書かれています。
チェーンに追加 (-A) したり、チェーンから削除 (-D) したりする場合は、次の 3 つの方向のいずれかに移動するネットワーク データに適用する必要があります。
- INPUT - すべての着信パケットは、このチェーン内のルールに照らしてチェックされます。
- 出力 - すべての送信パケットは、このチェーン内のルールに照らしてチェックされます。
- FORWARD - 別のコンピューターに送信されるすべてのパケットは、このチェーンのルールに照らしてチェックされます。
これは私を混乱させます。なぜなら、私の考えでは、ホストに向けて出発するパケットは発信されるはずだからです。では、パケットが別のコンピュータに送られるが「発信」されないシナリオはあるのでしょうか? iptables はどのようにしてこの 2 つを区別するのでしょうか?
答え1
OUTPUT は、ホストによって送信されるパケット用です。送信先は通常は別のホストですが、ループバック インターフェイス経由で同じホストになることもあります。そのため、OUTPUT を通過するすべてのパケットが実際に送信されるわけではありません。
FORWARD は、ホストによって送信されず、ホストに向けられることもないパケット用です。これらは、ホストが単にルーティングしているパケットです。
パケットマングリングとNATを詳しく調べ始めると、全体像はむしろ複雑。
答え2
私の理解では:
入力: dst IP はホスト上にあり、複数のサブネットを持つ複数のポートがある場合でも
出力: 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
FORWARDとは:
192.168.10.1 -> 192.168.2.199
192.168.10.1 -> 192.168.8.1
192.168.10.1 -> 192.168.8.199