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を使用する特別な理由はありますか?