NATを使用してファイアウォールの背後で実行されているDebianWebサーバー(nginx)があります。 Webサーバーは、SSLと独自のIPアドレスを必要とするいくつかのサイトをホストしています。 SSLサイトが特定のIPアドレスのみをリッスンし、共有サイトが共有IPのみをリッスンするようにしたいのですが。
現在、私はすべてのドメインのワイルドカード*をリッスンしています。これは、単一のLANアドレスをリッスンし、IPアドレスではなくホスト名に基づいてサイトコンテンツを提供していることを意味します。これを修正したいのですが。
適切な行動方針は何ですか? IPアドレスごとに1:1 NATを作成し、リッスンするネットワークインターフェイスにLAN IPを追加してから、LAN IPを特定のドメインに割り当てるのですか?それとも、より良い方法がありますか?パブリックIPを渡し、それに基づいてアクションを実行する方法はありますか?ありがとうございます。
いいえ、NATを実行した後は、少なくとも直接ではなく、元の宛先IPアドレスを通過することはできません。
外部IPブロックとして192.0.2.0/24を使用し、内部IPブロックとして198.51.100.0/24を使用します(RFC5737を参照)。
あなたができるいくつかのことは次のとおりです。
後者のソリューションを使用する場合、通常とは異なるポート番号やポート変換を処理しないため、環境はよりシンプルで標準に準拠しますが、各Webサーバーに複数の内部IPを割り当てる必要があります(一つだけです)。また、後者のソリューションを使用する場合は、1:1NATを使用できます。
とはいえ、WebサーバーをNATの背後に置く理由がまったくない場合(NATはファイアウォールではありません)、外部IPをリッスンするだけです(これを行うには、トポロジの変更も)。
サイトごとに異なるパブリックIPアドレスが必要なようです。つまり、ファイアウォールはさまざまなパブリックIPアドレスを提示する必要があります。次に、ファイアウォールは、異なるIPアドレスへの要求をnginxサーバーに転送したり、それらの要求を同じIPアドレス上の異なるポートに転送したりできます。その後、nginxサーバーにそれに応じて応答させることができます。
正確にどのように構成するかは、ファイアウォールによって異なります。たとえば、iptablesを使用すると、スクリプトで次のようなことができます。
KINCAID=192.168.1.112
EXTIPJMN=50.60.70.80
iptables -t nat -A PREROUTING -d $EXTIPJMN -p tcp -i $EXT --dport 8081 -j DNAT --to-destination $KINCAID:8080
これにより、IPアドレスEXTIPJMN(50.60.70.80)およびポート8081で送信された要求が、IPアドレスKINCAID(192.168.1.112)およびポート8080の内部サーバーにルーティングされます。
Httpsを介しても同じIPアドレスから異なるサイトにサービスを提供することは可能であり、これはほとんどの最新のクライアントでサポートされていますが、すべてではありません。