iptablesルールが機能しない

iptablesルールが機能しない

iptablesルールに問題があります。

要件は、ポート 9443 のサーバー A からサーバー B の 443 に着信する要求を処理することです。

私のシナリオでは

  • サーバーA 10.10.8.33 - - iptablesはここで設定されています。
  • サーバーB 10.21.2.31 - - Webサーバー。

私はこのルールを整理しました

iptables -t nat -A PREROUTING -p tcp --dport 9443 -j DNAT --to-destination10.21.2.31:443

iptables -t nat -A POSTROUTING -p tcp -d 10.21.2.31 --dport 9443 -j SNAT --to-source 10.10.8.33:9443

どちらがうまくいきませんか?

探索しようとしています。https://10.10.8.33:9443私のローカルWindows 10システムC.. IP 10.21.2.93から。

私の要求について詳しく説明すると、9443のサーバーAに入ってくる要求は、NATを介してサーバーBの443に移動する必要があり、Cはページを取得できます。

助けを求める。

ベストアンサー1

DNATのみを実行する必要がある場合は、POSTROUTINGに配置されたルールは必要なく(削除できます)、完全なNATの場合はSNATルールが必要です。 DNATルールの場合、--dportパラメーターに外部サーバーAから呼び出されるポート(9443)を入れる必要があるため、これは間違っています。したがって、正しい規則は次のとおりです。

iptables -t nat -A PREROUTING -d 10.10.8.33/32 -p tcp -m tcp --dport 9443 -j DNAT --to-destination 10.21.2.31:443

編集する:

@Sandy あなたの質問は明確ではありません。したがって、あなたが達成したいことを正しく理解することを願っています。

必要なものと問題が何であるかを確認してください。

  • ポートTCP 9443(9443から443までのDNATルール)からPC Cを呼び出して、サーバーAを介してサーバーBに到達します。
  • サーバー B と PC C は同じサブネットにあります。
  • サーバーBとPC Cは同じサブネット上にあるため、サーバーBはPC Cに直接応答するため、DNAT自体は機能しません。これがSNATルールが必要な理由です。

したがって、前述のDNATは正確でなければなりませんが、サーバーAのIPを使用してPC Cからの要求をなりすまし(SNATを使用)する必要があります。 PC C のなりすまし要求に対する SNAT 規則は、次のようにする必要があります。

iptables -t nat -A POSTROUTING -s 10.21.2.93/32 -d 10.21.2.31/32 -p tcp -m tcp --dport 443 -j SNAT --to-source 10.10.8.33

ネットワークトポロジは図に示されていますか?これがトポロジ(または非常に似ている)の場合、Apache、nginx、またはHAProxyをリバースプロキシとして実装する代わりにiptablesを使用する特別な理由はありますか? ネットワークソリューション

おすすめ記事