単一のパブリックIPアドレスを使用してNATの背後にある複数のサーバーを公開する


17

これは、NATおよびDNSに関する正規の質問です

現在、ネットワークアドレス変換(NAT)ファイアウォールによってインターネットから分離されたWebサーバーと電子メールサーバーを含むDMZでネットワークをセットアップしようとしています。

次のインターフェイスを使用してNATファイアウォールをインストールしました。

WAN - x.x.x.x (redacted public IP address)
DMZ - 192.168.124.5/24
LAN - 192.168.123.5/24

DMZには2つのホストがあります。

Web server - 192.168.124.30
E-mail server - 192.168.124.32

example.comドメインのDNSを構成して、パブリックIPアドレスexample.comとその両方を解決する必要があることを知っていmail.example.comます。

NATファイアウォールで、すべての着信要求をexample.com192.168.124.30のWebサーバーに転送し、すべての着信要求をmail.example.com192.168.124.32の電子メールサーバーに転送するようにします。NATファイアウォールの構成に「ポート転送」機能がありますが、探しているものを達成できないようです。


3
あなたの質問を編集して、特定の技術への言及を削除しました。この質問は、同じ基本的なことを技術的に中立な方法で求めています。同様に、私の答えは元の質問に当てはまりますが、ファイアウォールやサービスホストの状況が異なる他の人がここで答えを探しに来る場合にも当てはまります。
エヴァンアンダーソン

回答:


18

TCP / IPプロトコルスタックのレイヤー間、具体的にはDNSとアプリケーションレイヤープロトコルの間で情報がどのように流れるかについて考えることに戸惑っています。

パブリックIPアドレスが1つあります。DNSは確かに両方mail.example.comを解決できexample.com、同じパブリックIPアドレスに解決できます。

一般に、ファイアウォールの外部インターフェイスによって受信されるパブリックIPアドレスへの要求を含むIPデータグラムには、リモートクライアントがアクセスを試みているホストの名前は含まれていません。ファイアウォールは、両方のホスト名が同じIPアドレスに解決されるため、リモートクライアントが解決したホスト名を魔法のように「知る」ことはできません。IP層は、アプリケーション層で使用されるホスト名を認識しません。

TCPおよびUDPプロトコルは、ポート番号を使用してホストが提供する特定のサービスを区別します。この例の場合、NATファイアウォールのポート転送(ポートアドレス変換、またはPATとも呼ばれます)機能を使用して、TCPポート80(HTTP)への着信要求をWebサーバーに送信し、着信TCPポートを送信できる場合があります。メールサーバーへの25(SMTP)。

ただし、両方のマシンで同じサービスをホストする場合は、この戦略が問題になります。Webサーバー上の安全なWebサイト(顧客アクセス用)と電子メールサーバー上の安全なWebサイト(Webメール用)の両方をホストするとします。NATファイアウォールのパブリックIPアドレスからTCPポート443(HTTPS)に送られる要求は、どちらかのサーバーにのみルーティングできます。

この状況に対する一般的な解決策は、パブリックIPアドレスを増やすことです。IPv4アドレスが不足しているため、これも問題になる可能性があります。

最終的に、アプリケーション層の一部のプロトコルでパブリックIPアドレスが不足する問題を回避します。たとえば、HTTP / 1.1はHost:ヘッダーを追加して、Webサーバーが同じパブリックIPアドレスで複数のWebサイトをホストできるようにします。TLSは、サーバー名表示(SNI)拡張機能を追加して、リモートクライアントが入力したホスト名に基づいて適切な証明書を選択できるようにします。

アプリケーション層でこの種の回避策を実行すると、すべてのアプリケーション層プロトコルに独自の「修正」が必要になります(そして、すべてのサーバーおよびクライアントソフトウェアがその「修正」を実装する必要があります)。それは大変な注文です。

アプリケーション層プロトコルを変更する代わりに、一部のプロトコルは、要求を「ルーティング」できるソフトウェアを使用して、複数のホスト間で「多重化」されやすくなります。これは、パケットをアプリケーション層で検査する必要があるため、単純なNATファイアウォールの能力を超える可能性があります。nginxのようなリバースプロキシを使用することは、HTTPプロトコルのこの種の「多重化」(またはMicrosoft環境のForefront TMGまたはISA ServerでのWeb公開ルール)の良い例です。理論的には、どのプロトコルもリバースプロキシを介して多重化できますがプロトコルが難解であるほど、カスタムコードを記述することについて話している可能性が高くなります。

単一のパブリックIPアドレス上の2つの異なるホストから同じサービスを提供する必要がある場合、ホストの1つを非標準ポートに移動するオプションが常にあります。ただし、これにはクライアントが非標準ポートを認識する必要があります。HTTP(S)の場合、これにより、http://example.com:XXX表記のURLが生成されます(ここXXXで、非標準のポート番号です)。これがあなたの状況で問題になるかどうかは、あなただけが決めることができるものです。(私の経験では、エンドユーザーが:XXX手入力しなければならないURLのポート表記を処理できることはほとんどないことが示されています。)


1
「修正」ではなく回避策。:)
マイケルハンプトン

@MichaelHampton-聞こえます!>スマイル<
エヴァンアンダーソン

@EvanAndersonご回答ありがとうございます。私はForeFrontでの作業に慣れていたため、物事を台無しにしてしまったようです。アプリケーション層で動作するこの機能を持つLinuxファイアウォールディストリビューションを知っていますか?まだShorewallを見ましたが、これが可能かどうかはわかりません。これは、ip層に基づいているiptablesに基づいているからです。
アトロティグマ

5

「ポートフォワーディング」機能を使用すると、:80および:443宛てのトラフィックを192.168.124.30に送信し、残りのポート(またはメールサーバーが使用するように構成されているポートのみ)を192.168.124.32に​​送信できます。何らかの理由で電子メールサーバーとWebサーバーの両方にこれらの2つのポートのいずれかが必要な場合、問題が発生しています。この方法が機能するには、電子メールサーバーへのWebアクセスが別の(ほとんどの場合、非標準の)ポートで行われている必要があります。また、ポート番号を追加したり、セキュア接続を指定したりする方法がわからないユーザーのために、代わりmail.example.comに使用する" " をリダイレクトするようにWebサーバーをセットアップします。(あなたはされている右、メールサーバにのみセキュアなWeb接続を使用するつもり?)https://mail.example.com:other_port

これはアプリケーション層ではなくトランスポート層にあるため、詳細なパケット検査に依存する必要はありません。代わりに、ポートのTCPヘッダーで見つけやすい場所を見ることができます。


3

「受信リクエスト」が異なる場合、つまりWebサーバーのWebトラフィック(HTTP)とメールサーバーのメールトラフィック(SMTP)の場合、これは実際に実行できます。HTTPはTCPポート80(HTTPSの場合は443)を使用しますTCPポート25を使用します。したがって、同じパブリックIPアドレスから、HTTPトラフィックをWebサーバーに転送し、SMTPトラフィックをメールサーバーに転送できます。これが「ポート転送」の意味です。まともなファイアウォールはこれが可能です。

ただし、偶然に2つのサーバーが同じタイプのトラフィックを受け入れる必要がある場合、メールサーバーがウェブメールサービスもホストしている場合、特定のポート(80および/または443)を転送できるため、問題が発生します単一のサーバーのみ。クライアントが要求に使用した名前に基づいてWebトラフィックを分離するには、リバースプロキシなど、TCP / IPよりも高いレベルで動作するものが必要です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.