NAT とファイアウォールの使用
ネットワーク接続のクライアントとサーバーには、直接開いている通信用のパスが存在しないことがよくあります。 パケットは、エンドポイント コンピューター上だけでなく、ネットワーク上の中間コンピューターによってもフィルター処理、ルーティング、分析、および変換されます。 ネットワーク アドレス変換 (NAT: Network Address Translation) とファイアウォールは、ネットワーク通信に参加できる中間アプリケーションの一般的な例です。
Windows Communication Foundation (WCF) のトランスポートとメッセージ交換パターン (MEP: Message Exchange Pattern) では、NAT とファイアウォールに対する反応がそれぞれ異なります。 ここでは、一般的なネットワーク トポロジで NAT とファイアウォールがどのように機能するかについて説明します。 WCF のトランスポートと MEP の特定の組み合わせに関する推奨事項は、ネットワーク上の NAT とファイアウォールに対するアプリケーションの堅牢性を向上させる上で役立ちます。
NAT が通信に及ぼす影響
NAT は、複数のコンピューターで 1 つの外部 IP アドレスを共有できるようにするために作成されました。 ポート再割り当て NAT は、新しいポート番号を使用して、接続する内部 IP アドレスとポートを外部 IP アドレスに割り当てます。 新しいポート番号により、NAT は、リターン トラフィックを元の通信に関連付けることができます。 現在、多くのホーム ユーザーがプライベートでのみルーティング可能な IP アドレスを持ち、パケットのグローバル ルーティングを実現するために NAT に依存しています。
NAT は、セキュリティの境界を提供しません。 ただし、一般的な NAT 構成は、内部コンピューターが直接アドレス指定されないようにします。 これにより、内部コンピューターが望ましくない接続から保護されると共に、データをクライアントに非同期的に送り返す必要があるサーバー アプリケーションの作成が困難になります。 NAT はパケットのアドレスを書き換え、接続が NAT コンピューターで発生しているかのように見せます。 このため、サーバーがクライアントへの接続を開こうとしても失敗します。 サーバーが、明らかになっているクライアントのアドレスを使用しても、クライアントのアドレスをパブリックにルーティングできないため、失敗します。 サーバーが NAT アドレスを使用した場合は、該当するコンピューターにリッスンしているアプリケーションが存在しないため、接続できません。
一部の NAT は、転送ルールの構成をサポートし、外部コンピューターが特定の内部コンピューターに接続できるようにします。 転送ルールの構成手順は NAT によってそれぞれ異なるため、ほとんどのアプリケーションについて、NAT 構成の変更をエンド ユーザーに求めることはお勧めしません。 多くのエンド ユーザーが、特定のアプリケーションに対する NAT 構成を変更できないか、変更を望まないからです。
ファイアウォールが通信に及ぼす影響
"ファイアウォール" とは、通過するトラフィックにルールを適用し、通過を許可するか、拒否するかを決定するソフトウェアまたはハードウェア デバイスです。 ファイアウォールは、トラフィックの受信ストリームまたは送信ストリーム、あるいはこの両方を調べるように構成できます。 ファイアウォールは、ネットワークの端またはエンドポイント ホストで、ネットワークのセキュリティ境界を提供します。 ビジネス ユーザーは、悪質な攻撃を防ぐために従来からファイアウォールの内側にサーバーを保持しています。 Windows XP にパーソナル ファイアウォールが導入されて以降、ファイアウォールを使用するホーム ユーザーの数も大幅に増えています。 このため、接続の一端または両端に、パケットを検査するファイアウォールが存在する場合が多くなっています。
ファイアウォールは、パケットを調べる際の複雑さと能力の点で千差万別です。 簡単なファイアウォールは、パケット内の送信元および送信先のアドレスとポートに基づいてルールを適用します。 また、インテリジェント ファイアウォールもパケットの内容を調べて判断を下すことができます。 これらのファイアウォールはさまざまな構成で提供され、多くの場合、特別な用途に使用されます。
ホーム ユーザー用ファイアウォールの一般的な構成では、以前に送信接続したことがあるコンピューター以外からの受信接続を禁止します。 ビジネス ユーザー用ファイアウォールの一般的な構成では、特別に指定したポート グループを除き、すべてのポートで受信接続を禁止します。 この一例としては、HTTP サービスと HTTPS サービスを提供するポート 80 とポート 443 以外のすべてのポートで接続を禁止するファイアウォールが挙げられます。 管理されたファイアウォールは、ホーム ユーザーとビジネス ユーザーの両者を対象にしており、コンピューター上の信頼済みユーザーやプロセスによるファイアウォール構成の変更を許可します。 管理されたファイアウォールの対象は、ネットワークの使用状況を制御する企業ポリシーが存在しないホーム ユーザーであるのがより一般的です。
Teredo の使用
Teredo は、NAT の内側にあるコンピューターの直接アドレス指定を可能にする IPv6 移行テクノロジです。 Teredo は、パブリックにもグローバルにもルーティングが可能なサーバーを使用して考えられる接続をアドバタイズします。 Teredo サーバーは、アプリケーション クライアントとサーバーに、接続情報を交換できる共通のミーティング ポイントを提供します。 コンピューターは一時 Teredo アドレスを要求し、パケットが既存のネットワークをトンネリングされます。 WCF での Teredo のサポートには、オペレーティング システムでの IPv6 と Teredo のサポートの有効化が必要です。 Windows XP 以降のオペレーティング システムでは、Teredo がサポートされています。 Windows Vista 以降のオペレーティング システムでは、IPv6 が既定でサポートされています。ユーザーは Teredo のみ有効にする必要があります。 Windows XP SP2 および Windows Server 2003 では、ユーザーは IPv6 と Teredo の両方を有効にする必要があります。 詳細については、「Teredo の概要」を参照してください。
トランスポートとメッセージ交換パターンの選択
トランスポートと MEP の選択は、次の 3 つの手順から成るプロセスです。
エンドポイント コンピューターのアドレスの指定可能性を分析します。 一般に、エンタープライズ サーバーは直接アドレス指定できますが、エンド ユーザーの場合は、NAT により、アドレス指定できないようになっています。 エンド ユーザー間のピアツーピア シナリオなどで、両方のエンドポイントが NAT の内側にある場合は、アドレス指定を可能にする Teredo などのテクノロジが必要です。
エンドポイント コンピューターのプロトコルとポートの制限を分析します。 一般にエンタープライズ サーバーは、多くのポートをブロックする強力なファイアウォールの内側にあります。 ただし、多くの場合、ポート 80 (HTTP トラフィックを許可するため) とポート 443 (HTTPS トラフィックを許可するため) は開かれています。 エンド ユーザーがポートを制限している可能性はほとんどありませんが、送信接続だけを許可するファイアウォールを使用している可能性があります。 一部のファイアウォールでは、エンドポイントのアプリケーションによる管理が可能で、選択的に接続を開くことができます。
ネットワークのアドレス指定可能性とポートの制限によって許可されるトランスポートと MEP を計算します。
クライアント/サーバー アプリケーションの一般的なトポロジでは、送信専用のファイアウォールを持ち、Teredo を使用しない NAT の内側にあるクライアントと、強力なファイアウォールを持つ直接アドレス指定が可能なサーバーを展開します。 このシナリオでは、双方向 MEP を使用する TCP トランスポートと、要求/応答 MEP を使用する HTTP トランスポートが適しています。 ピアツーピア アプリケーションの一般的なトポロジでは、両方のエンドポイントを NAT とファイアウォールの内側に展開します。 このシナリオと、ネットワーク トポロジが不明なシナリオでは、次の推奨事項を検討してください。
双方向トランスポートは使用しません。 双方向トランスポートはより多くの接続を開くため、正常に接続できる可能性が低下します。
元の接続でのバック チャネルの確立をサポートします。 双方向 TCP などでバック チャネルを使用すると、開かれる接続の数が少なくなるため、正常に接続できる可能性が向上します。
エンドポイントの登録用、またはトラフィックの中継用に到達可能なサービスを使用します。 Teredo サーバーなどの、グローバルに到達できる接続サービスを使用すると、ネットワーク トポロジの制限が厳しい場合やトポロジが不明な場合に正常に接続できる可能性が大幅に向上します。
WCF における一方向、要求/応答、双方向の各 MEP と、標準 TCP、Teredo を使用する TCP、および標準と双方向 HTTP の各トランスポートについて次の表にまとめます。
アドレスの指定可能性 | サーバー (直接指定) | サーバー (NAT トラバースによる直接指定) | サーバー (NAT) | サーバー (NAT トラバースによる NAT) |
---|---|---|---|---|
クライアント (直接指定) | トランスポートおよび MEP。 | トランスポートおよび MEP。 | サポートされていません。 | サポートされていません。 |
クライアント (NAT トラバースによる直接指定) | トランスポートおよび MEP。 | トランスポートおよび MEP。 | サポートされていません。 | Teredo を使用する TCP および任意の MEP。 Windows Vista には、Teredo を使用する HTTP をサポートするための、マシン全体に適用される構成オプションが用意されています。 |
クライアント (NAT) | 任意の一方向トランスポートおよび MEP。 双方向 MEP には TCP トランスポートが必要です。 | 任意の一方向トランスポートおよび MEP。 双方向 MEP には TCP トランスポートが必要です。 | サポートされていません。 | サポートされていません。 |
クライアント (NAT トラバースによる NAT) | 任意の一方向トランスポートおよび MEP。 双方向 MEP には TCP トランスポートが必要です。 | 双方向 HTTP 以外のすべてと任意の MEP。 双方向 MEP には TCP トランスポートが必要です。 双方向 TCP トランスポートには Teredo が必要です。 Windows Vista には、Teredo を使用する HTTP をサポートするための、マシン全体に適用される構成オプションが用意されています。 | サポートされていません。 | Teredo を使用する TCP および任意の MEP。 Windows Vista には、Teredo を使用する HTTP をサポートするための、マシン全体に適用される構成オプションが用意されています。 |
ファイアウォールの制限 | ファイアウォールを使用しないサーバー | 管理されたファイアウォールを使用するサーバー | HTTP 専用のファイアウォールを使用するサーバー | 送信専用のファイアウォールを使用するサーバー |
---|---|---|---|---|
ファイアウォールを使用しないクライアント | トランスポートおよび MEP。 | トランスポートおよび MEP。 | 任意の HTTP トランスポートおよび MEP。 | サポートされていません。 |
管理されたファイアウォールを使用するクライアント | 任意の一方向トランスポートおよび MEP。 双方向 MEP には TCP トランスポートが必要です。 | 任意の一方向トランスポートおよび MEP。 双方向 MEP には TCP トランスポートが必要です。 | 任意の HTTP トランスポートおよび MEP。 | サポートされていません。 |
HTTP 専用のファイアウォールを使用するクライアント | 任意の HTTP トランスポートおよび MEP。 | 任意の HTTP トランスポートおよび MEP。 | 任意の HTTP トランスポートおよび MEP。 | サポートされていません。 |
送信専用のファイアウォールを使用するクライアント | 任意の一方向トランスポートおよび MEP。 双方向 MEP には TCP トランスポートが必要です。 | 任意の一方向トランスポートおよび MEP。 双方向 MEP には TCP トランスポートが必要です。 | 任意の HTTP トランスポートおよび任意の非双方向 MEP。 | サポートされていません。 |