このエントリは2020/03/13現在の情報に基づいています。将来の機能追加・変更に伴い、記載内容との乖離が発生する可能性があります。
AzureでVirtual Network NATが一般提供された。Azure全リージョンで利用可能。
基本的な内容は以下のドキュメントに記載されている通り。
Virtual Network NATとは / What is Virtual Network NAT?
https://docs.microsoft.com/azure/virtual-network/nat-overview
NAT ゲートウェイ リソースを使用した仮想ネットワークの設計 / Designing virtual networks with NAT gateway resources
https://docs.microsoft.com/azure/virtual-network/nat-gateway-resource
特長
- フルマネージドで自動的にスケールアウト
- 複数の障害ドメインを常に有する
- リージョナルサービス
- 可用性ゾーン (Availability Zones) を利用する場合、NATを特定のゾーンに分離できる(ゾーンへのデプロイメント)。
- SLAはNAT のデータ パスの可用性が 99.9% 以上

- Azure Monitorで公開される以下の多次元メトリックを使ってNATを監視できる
- Bytes
- Packets
- Dropped Packets
- Total SNAT connections
- SNAT connection state transitions per interval
- 以下のリソースと組み合わせて利用できる(いずれもStandard SKUのみ)
- Load Balancer
- Public IP
- Public IP Prefix
ユースケース
以下のユースケースが考えられる。
- 静的なIPアドレスを使ったアウトバウンド接続
- 複数のIPアドレスを使ってスケールできるオンデマンドSNAT
- インバウンド、アウトバウンドの共存(下図)
- インバウンドはLoad Balancer
- アウトバウンドはNAT
NAT設計時に注意すべきこと
コストの最適化
コストの最適化 / Cost optimization
https://docs.microsoft.com/azure/virtual-network/nat-gateway-resource#cost-optimization
NATを使わない条件下では、コスト最適化のためにサービスエンドポイントもしくはプライベートリンクを利用するという選択肢がある。以下の点を考慮して利用を検討すべき。
- 共通すること
- NATではサービスエンドポイントもしくはプライベートリンクへのトラフィックを処理しない
- サービスエンドポイント
- AzureサービスとVNetを接続し、Azureサービスへのアクセスを管理
- 無償
- プライベートリンク
- Azure PaaSサービスやプライベートリンクを使ってホストされている他のサービスをVNet内のプライベートエンドポイントとして公開
- 期間、処理データ量に応じて課金
可用性ゾーン
可用性ゾーン / Availability zones
https://docs.microsoft.com/azure/virtual-network/nat-gateway-resource#availability-zones
- 可用性ゾーンにNATを構成する場合、ゾーンに配置したNAT Gatewayには当該ゾーンのIPアドレスが必要(異なるゾーンのIPアドレスやIPアドレスなしの構成はサポート外)
- VNetやサブネットはリージョナルサービスであってゾーンと一致しない。アウトバウンド接続をゾーンで限定する場合、VMはNAT Gatewayが存在するゾーンになければならない。
- ゾーン分離は可用性ゾーンごとにゾーンスタックを作成して実現する
- ゾーンに配置したNAT Gatewayのゾーンを横断する、もしくはリージョナルNAT GatewayをゾーンVMとともに利用する場合、アウトバウンド接続のゾーンごとのプロミスは存在しない。
- VMSSをデプロイしてNATとともに利用する場合
- 1個のゾーンに配置したVMSSを独自のサブネットにデプロイし、同じゾーンのNAT Gatewayをそのサブネットにアタッチする。
- ゾーンを跨ぐVMSSを使う場合、NAT Gatewayはゾーン冗長をサポートしていないためリージョナルもしくはゾーン分離されたもののみの利用がサポートされる(下図)
- ゾーンのプロパティはImmutable
- 意図したリージョンやゾーンに合わせてNAT Gatewayをデプロイする必要がある。
- 間違えた場合は削除の上再デプロイ。
- IPアドレスとゾーン指定の関係
- ゾーン指定されていない場合、IPアドレスはゾーン冗長ではない
- Standard Load Balancerの場合、NATとは異なり、IPアドレスが特定ゾーンに作成されていない場合にはゾーン冗長(NATはゾーン分離もしくはリージョナルのみサポート対象)
その他の注意点
ドキュメントに記載の通り、以下の点に注意が必要。
- Basic SKUのPublic IP、Public IP Prefix、Load BalancerはNATと組み合わせて利用できない。
- IPv4アドレスファミリーのみサポート(IPv6はサポート外)
- サブネットやNICのNSG (Network Security Gateway) は、NATを使うPublic endpointへのアウトバウンドフローで使用されない。
- NAT利用時、NSGフローのロギングはサポートされない
- 複数仮想ネットワーク (VNet) にまたがるNATは構成できない
- アイドルタイムアウトはデフォルトで4分(最大120分まで設定可能)。
- SNATポートリリースにあたって以下のタイマーを利用する(今後の変更の可能性あり)
- TCP FIN : 60秒
- TCP RST : 10秒
- TCP half open : 30秒
チュートリアルなど
- クイック スタート: NAT ゲートウェイの作成 / Quickstart: Create a NAT gateway
- チュートリアル: NAT ゲートウェイの作成と NAT サービスのテスト / Tutorial: Create a NAT Gateway and test the NAT service
チュートリアル通りに実施すると、Source側でheyを実行した結果は以下のようになるはず。

対して、Destination側でnetstat -natを実行すると、Source IPがNAT Gatewayに割り当てたIP(Address、Prefix)であることを確認できる。

なお前述の通り、チュートリアルを東日本リージョンで実施するときは、可用性ゾーンに注意が必要。