Azure NAT Gateway のしくみ

完了

Azure NAT Gateway を使用して会社のポート不足の問題を解決し始める前に、そのしくみを理解する必要があります。 それを理解しておくと、このサービスを適切にデプロイ、構成、使用して接続の問題を解決するために必要な手順について、より良く理解できます。

Azure NAT Gateway ゲートウェイ サービスを作成するときは、パブリック IP アドレスまたはパブリック IP アドレス プレフィックスをそれに割り当てる必要があります。 Azure NAT Gateway ゲートウェイ リソースでは、最大 16 個のパブリック IP アドレスを使用できます。 NAT Gateway では、パブリック IP アドレスとパブリック IP アドレス プレフィックスを任意に組み合わせ、合計で 16 個のアドレスまで使用できます。

NAT Gateway の最大プレフィックス サイズは /28 (16 アドレス) です。 パブリック IP プレフィックスを Azure NAT Gateway サービスに関連付けると、必要なアウトバウンド IP アドレスの数に自動的にスケーリングされます。 Azure NAT Gateway では、TCP および UDP プロトコルのみがサポートされており、IPv6 パブリック IP アドレスや IPv6 パブリック IP プレフィックスと関連付けることはできません。

Azure NAT Gateway サービスを仮想ネットワーク内の 1 つまたは複数のサブネットに接続すると、トラフィックがインターネットにルーティングされる方法が自動的にオーバーライドされます。 そのサブネット内にパブリック IP アドレスを持つ Azure VM があったとしても、これらのアドレスはアウトバウンド接続に使われなくなります。

次の図は、2 つのサブネットを持つ仮想ネットワークのシナリオを示したものです。 これらのサブネット内の Azure VM と他のサービスには、パブリック IP アドレスは割り当てられません。 送信と受信のすべてのトラフィックは、Azure NAT Gateway サービス経由でルーティングされ、送信接続にはパブリック IP またはパブリック IP プレフィックスが使用されます。

すべてのトラフィックが Azure NAT Gateway 経由でルーティングされ、送信接続にはパブリック IP またはパブリック IP プレフィックスが使用される、2 つのサブネットが含まれる仮想ネットワーク。

次の図では、サブネット A の Azure VM にはインスタンス レベルのパブリック IP アドレスが割り当てられていますが、サブネット B の VM にはパブリック IP アドレスはありません。 このシナリオで Azure NAT Gateway をデプロイすると、サブネット A の VM に送信されるインバウンド トラフィックは、引き続きインスタンス レベルの IP に送信されます。 しかし、サブネット A とサブネット B の両方からのアウトバウンド トラフィックはすべて、Azure NAT Gateway 経由でルーティングされます。

2 つのサブネットのインバウンドとアウトバウンドのトラフィック フローを示す図。

次のスクリーンショットの Azure VM では、VM へのインバウンド RDP 接続を行うために使用するパブリック IP アドレスとして、192.0.2.22 が使われています。 一方、アウトバウンド接続用の IP アドレスには、異なるアドレス 203.0.113.22 が使われています。 このパブリック IP アドレスは、Azure NAT Gateway サービスによって使用されます。

Azure VM のパブリック IP アドレスと、アウトバウンド接続用の IP アドレスの違いを示すスクリーンショット。

仮想ネットワーク用にデプロイされたネットワーク ロード バランサーがあるシナリオでは、Azure NAT Gateway サービスを使用できます。 ただし、負荷分散規則またはアウトバウンド規則に基づくすべてのアウトバウンド構成は、NAT ゲートウェイによって置き換えられることを理解しておくことが重要です。 Azure NAT Gateway がインバウンド発信トラフィックに影響を与えることはありません。

Azure 可用性ゾーンを使用している場合は、仮想ネットワークが複数の可用性ゾーンとそのネットワーク内のサブネットにまたがる可能性があります。 現在の Azure NAT Gateway サービスはゾーン サービスであり、これは単一のゾーンにのみ指定できることを意味します。 ただし、そのゾーンの外側にあるリソースを操作するために使用することはできます。