2 つのサブネット間の iptables 接続

2 つのサブネット間の iptables 接続

ゲートウェイとして使用するLinuxシステムと、AとBという2つの異なるシステムがあります。ゲートウェイマシンはeth0、eth1、eth2です。 eth1 はマシン A に接続され、eth2 はマシン B に接続されます。 AからBへ、またはその逆にpingを送信できるようにしたい。私はこれを使ってこれを試しましたiptables

iptables -A FORWARD -i eth1 -o eth2 -j ACCEPT
iptables -A FORWARD -i eth2 -o eth1 -j ACCEPT

ただし、pingを試みると、「ホストに接続できません」というメッセージが表示されます。

私が走るとき

iptables -L -n -V

転送ルールにゼロ個のパケットとゼロバイトがあることがわかります。今私はおそらく多くを見逃していることを知っていますが、配信チェーンは決して到着しないようです。文書によると、目的地ではない場合は転送チェーンに入ります。

編集1:
iptablesをクリーンアップし、次のコマンドを使用して最初から始めました。

    iptables -A FORWARD  -i eth1 -o eth2 -j ACCEPT
    iptables -A FORWARD  -i eth2 -o eth1 -j ACCEPT

    iptables -t nat -A PREROUTING -i eth1 -j DNAT --to-destination y.y.y.y
    iptables -t nat -A PREROUTING -i eth2 -j DNAT --to-destination x.x.x.x

    iptables -t nat -A POSTROUTING -o eth2 -d y.y.y.y -j SNAT --to-source x.x.x.x
    iptables -t nat -A POSTROUTING -o eth1 -d x.x.x.x -j SNAT --to-source y.y.y.y

それでも「ネットワークにアクセスできません」というメッセージが表示されます。

答え1

iptablesあなたの誤解は、配信がどのように機能するかを考えているようです。

最初の例で使用したルールは転送のみを許可します。転送は既定ですでに許可されているため、これらのルールは後で提供される一般拒否ルールの例外としてのみ意味があります。

パケット転送を有効にするだけです。

echo 1 > /proc/sys/net/ipv4/ip_forward

もちろん、あなたのゲートウェイは、両方AのデフォルトゲートウェイであるBか、少なくとも互いに接続されているゲートウェイでなければなりません。したがって、転送が有効な状態で機能しない場合は、3つのシステムすべてにルーティングテーブルを含める必要があります。

関連情報