ゲートウェイとして使用する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つのシステムすべてにルーティングテーブルを含める必要があります。