web-dev-qa-db-ja.com

NATの背後にあるWebサーバー、パブリックIPアドレスをリッスンする方法

NATを使用してファイアウォールの背後で実行されているDebianWebサーバー(nginx)があります。 Webサーバーは、SSLと独自のIPアドレスを必要とするいくつかのサイトをホストしています。 SSLサイトが特定のIPアドレスのみをリッスンし、共有サイトが共有IPのみをリッスンするようにしたいのですが。

現在、私はすべてのドメインのワイルドカード*をリッスンしています。これは、単一のLANアドレスをリッスンし、IPアドレスではなくホスト名に基づいてサイトコンテンツを提供していることを意味します。これを修正したいのですが。

適切な行動方針は何ですか? IPアドレスごとに1:1 NATを作成し、リッスンするネットワークインターフェイスにLAN IPを追加してから、LAN IPを特定のドメインに割り当てるのですか?それとも、より良い方法がありますか?パブリックIPを渡し、それに基づいてアクションを実行する方法はありますか?ありがとうございます。

1
Matt Mombrea

いいえ、NATを実行した後は、少なくとも直接ではなく、元の宛先IPアドレスを通過することはできません。

外部IPブロックとして192.0.2.0/24を使用し、内部IPブロックとして198.51.100.0/24を使用します(RFC5737を参照)。

あなたができるいくつかのことは次のとおりです。

  • 各外部IPのターゲットポートを内部IPの異なるポートセットにNATします。たとえば、NAT 192.0.2.1:80および192.0.2.1:443から198.51.100.1:80および198.51.100.1:443、そしてNAT 192.0 .2.2:80および192.0.2.2:443から198.51.100.1:81および198.51.100.1:444。適切なサービスを区別されたポートでリッスンするようにWebサーバーを構成します。他の目的で使用されていないポートを選択し、ファイアウォールの設定を確認してください。
  • 追加の内部IPをWebサーバーに割り当てます。たとえば、Webサーバー198.51.100.1および198.51.100.2を割り当てます。 NAT適切な外部IP /ポートペアから対応する内部IP /ポートペア(例:192.0.2.1から198.51.100.1、および192.0.2.2から198.51.100.2)。nginxにバインドするように指示します。適切な内部IPへの適切なサービス。

後者のソリューションを使用する場合、通常とは異なるポート番号やポート変換を処理しないため、環境はよりシンプルで標準に準拠しますが、各Webサーバーに複数の内部IPを割り当てる必要があります(一つだけです)。また、後者のソリューションを使用する場合は、1:1NATを使用できます。

とはいえ、WebサーバーをNATの背後に置く理由がまったくない場合(NATはファイアウォールではありません)、外部IPをリッスンするだけです(これを行うには、トポロジの変更も)。

3
Falcon Momot

サイトごとに異なるパブリック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アドレスから異なるサイトにサービスを提供することは可能であり、これはほとんどの最新のクライアントでサポートされていますが、すべてではありません。

2
nachbar