このような悩みを持つエンジニアは少なくありません。AWSのNAT Gatewayは耳にしたことがあっても、AzureでNATゲートウェイを設定した経験がある人は意外と少ないものです。
この記事では、azure nat サブネット の基本から、NATゲートウェイとプライベートサブネットの構築手順を、Azureポータルを使ったハンズオン形式でステップバイステップに解説します。
Azureのネットワーク設計を実務で扱うエンジニアを対象に、動作確認まで含めた実践的な内容をお届けします。
この記事のポイント
・azure nat サブネット はVNetのルートテーブルにNATゲートウェイを割り当てることで機能する
・プライベートサブネットとは、インターネットゲートウェイが直接付いていないサブネットのこと
・NATゲートウェイには静的パブリックIPアドレス(パブリックIPプレフィックス)が必要
・動作確認はVMからcurlコマンドを実行して外部IPを確認するのが最速
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
AzureのNATゲートウェイとは何か(概要と仕組み)
Azure NAT ゲートウェイ(NAT Gateway)は、プライベートサブネット内のリソースがアウトバウンド方向のインターネット通信を行うための仕組みです。
「NAT」は「Network Address Translation(ネットワークアドレス変換)」の略で、プライベートIPアドレスを持つVMが外部と通信する際、NATゲートウェイが持つパブリックIPアドレスに変換して送信します。
Azure NAT ゲートウェイの特徴をまとめると以下のとおりです。
・アウトバウンドのみ:外部から直接アクセスはできない(インバウンド通信はApplication GatewayやAzure Firewallで制御)
・固定のパブリックIP:静的なパブリックIPアドレスを割り当てるため、外部サービスへのIP許可申請が容易
・フルマネージド:可用性・スケーリングをAzureが管理するため、自前でNATサーバーを立てる必要がない
・複数IPのSNAT対応:最大16個のパブリックIPを割り当て可能。接続数が増えてもSNATポート枯渇を防げる
Azureのネットワーク構成においてNATゲートウェイは欠かせない要素です。特にセキュリティ上の理由でサーバーに直接パブリックIPを割り当てたくない場合に、azure nat サブネット の構成が活躍します。
プライベートサブネットとパブリックサブネットの違い
Azureでは、VNet(Virtual Network)内のサブネットを「パブリックサブネット」と「プライベートサブネット」に分けて設計します。
ただし、AWSと異なり、Azureには「パブリックサブネット」という公式の用語は存在しません。便宜上、次のように区別します。
| 種類 | インターネットへの経路 | 主な用途 |
|---|---|---|
| パブリックサブネット(相当) | VMに直接パブリックIPを割り当て | 踏み台サーバー(Bastion)、Webフロントエンド |
| プライベートサブネット | NATゲートウェイ経由でアウトバウンド通信 | DBサーバー、アプリケーションサーバー、バックエンド |
プライベートサブネットに配置したVMは、パブリックIPアドレスを持ちません。そのため、直接インターネットには接続できませんが、NATゲートウェイをサブネットに関連付けることで、アウトバウンドの通信(パッケージダウンロード・外部API呼び出しなど)が可能になります。
セキュリティの観点では、DBサーバーやAPIバックエンドをプライベートサブネットに配置し、外部からの直接アクセスを遮断する構成がベストプラクティスです。
前提条件と環境準備(Azureアカウント・リソースグループ)
この記事の手順を実施するには、以下の環境が必要です。
・Azureアカウント:無料試用版(Azure Free Tier)でも試せます
・リソースグループ:作成済みであること(なければ手順1で作成)
・動作確認環境:Azure Cloud Shell またはSSH接続できる端末
今回の構成では、Azure CLIを使いながらAzureポータルで確認する流れで進めます。Azure CLIはCloud Shellから実行するか、PCにインストールして使用してください。
1. リソースグループの作成
まずリソースグループを作成します。今回は「rg-nat-demo」という名前を使います。
# リソースグループの作成(Japaneastリージョン) az group create \ --name rg-nat-demo \ --location japaneast # 作成確認 az group show --name rg-nat-demo --query "{Name:name, Location:location}" -o table
実行結果の例:
Name Location ------------- ---------- rg-nat-demo japaneast
リソースグループが作成されたことを確認できたら、次のステップに進みます。
VNetとサブネットの作成手順
次に、VNet(仮想ネットワーク)とその中にプライベートサブネットを作成します。
今回の構成は以下のとおりです。
・VNet名:vnet-nat-demo(アドレス空間:10.0.0.0/16)
・プライベートサブネット名:subnet-private(10.0.1.0/24)
2. VNet(仮想ネットワーク)の作成
# VNetの作成 az network vnet create \ --resource-group rg-nat-demo \ --name vnet-nat-demo \ --address-prefix 10.0.0.0/16 \ --location japaneast # VNet作成確認 az network vnet show \ --resource-group rg-nat-demo \ --name vnet-nat-demo \ --query "{Name:name, AddressSpace:addressSpace.addressPrefixes}" -o json
実行結果の例:
{ "AddressSpace": [ "10.0.0.0/16" ], "Name": "vnet-nat-demo" }
3. プライベートサブネットの作成
# プライベートサブネットの作成 az network vnet subnet create \ --resource-group rg-nat-demo \ --vnet-name vnet-nat-demo \ --name subnet-private \ --address-prefix 10.0.1.0/24 # サブネット確認 az network vnet subnet list \ --resource-group rg-nat-demo \ --vnet-name vnet-nat-demo \ --query "[].{Name:name, Prefix:addressPrefix}" -o table
実行結果の例:
Name Prefix -------------- ----------- subnet-private 10.0.1.0/24
この時点では、subnet-privateはまだNATゲートウェイに関連付けられていないため、このサブネット内のVMはインターネットに接続できません。次のステップでNATゲートウェイを作成・割り当てます。
NATゲートウェイの作成と設定手順
NATゲートウェイを作成するには、事前にパブリックIPアドレスが必要です。NATゲートウェイは必ずパブリックIPを持ち、プライベートサブネット内のVMはこのIPに変換されて外部と通信します。
4. パブリックIPアドレスの作成
# NATゲートウェイ用パブリックIPアドレスの作成 az network public-ip create \ --resource-group rg-nat-demo \ --name pip-nat-demo \ --sku Standard \ --allocation-method Static \ --location japaneast # パブリックIPの確認(割り当てられたIPアドレスを確認) az network public-ip show \ --resource-group rg-nat-demo \ --name pip-nat-demo \ --query "{Name:name, IP:ipAddress, AllocationMethod:publicIPAllocationMethod}" -o json
実行結果の例(IPアドレスはマスクしています):
{ "AllocationMethod": "Static", "IP": "20.xxx.xxx.xxx", "Name": "pip-nat-demo" }
ポイントは --sku Standard(StandardSKU)と --allocation-method Static の2点です。NATゲートウェイはBasicSKUのIPアドレスをサポートしていないため、StandardSKUを必ず指定してください。
5. NATゲートウェイの作成
パブリックIPが準備できたら、NATゲートウェイ本体を作成します。
# NATゲートウェイの作成 az network nat gateway create \ --resource-group rg-nat-demo \ --name nat-gateway-demo \ --public-ip-addresses pip-nat-demo \ --idle-timeout 10 \ --location japaneast # NATゲートウェイ作成確認 az network nat gateway show \ --resource-group rg-nat-demo \ --name nat-gateway-demo \ --query "{Name:name, ProvisioningState:provisioningState, IdleTimeout:idleTimeoutInMinutes}" -o json
実行結果の例:
{ "IdleTimeout": 10, "Name": "nat-gateway-demo", "ProvisioningState": "Succeeded" }
--idle-timeout はアイドルタイムアウトの設定(分単位)です。デフォルトは4分、最大120分まで指定できます。長時間接続するアプリケーションがある場合は適宜延ばしてください。
プライベートサブネットへのNATゲートウェイ割り当て
NATゲートウェイを作成しただけでは機能しません。プライベートサブネットにNATゲートウェイを明示的に割り当てることで、そのサブネットのアウトバウンド通信がNATゲートウェイ経由になります。
6. サブネットへのNATゲートウェイ関連付け
# サブネットにNATゲートウェイを関連付ける az network vnet subnet update \ --resource-group rg-nat-demo \ --vnet-name vnet-nat-demo \ --name subnet-private \ --nat-gateway nat-gateway-demo # 関連付け確認 az network vnet subnet show \ --resource-group rg-nat-demo \ --vnet-name vnet-nat-demo \ --name subnet-private \ --query "{Subnet:name, NatGateway:natGateway.id}" -o json
実行結果の例(/subscriptions/.../resourceGroups/rg-nat-demo/providers/Microsoft.Network/natGateways/nat-gateway-demo のような形式で表示されます):
{ "NatGateway": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/rg-nat-demo/providers/Microsoft.Network/natGateways/nat-gateway-demo", "Subnet": "subnet-private" }
NatGatewayのフィールドにnat-gateway-demoのリソースIDが表示されれば、関連付けは成功です。
これで azure nat サブネット の構成が完成しました。subnet-privateに配置されたVMは、NATゲートウェイが持つパブリックIP(pip-nat-demo)を使ってアウトバウンド通信を行います。
現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、Azureの学習をもっと体系的に進めたいなら、Azure実践ハンズオン講座をご覧ください。現役エンジニアが教える実務直結カリキュラムで、VM構築からインフラ管理まで一気に習得できます。
動作確認(VMからのインターネットアクセス確認)
構成が完了したら、プライベートサブネット内にVMを起動して動作を確認します。NATゲートウェイ経由でインターネットにアクセスできることを確認しましょう。
7. 動作確認用VMの作成
プライベートサブネット内にVMを作成します。パブリックIPなし・SSH接続はAzure Bastionや踏み台VMを使用するのが実務上の正しい構成ですが、今回はCloud Shellからの確認を簡略化するため、一時的にパブリックIPなし構成でSSHが使えるようにします。
# プライベートサブネット内にVMを作成(パブリックIPなし) az vm create \ --resource-group rg-nat-demo \ --name vm-private-test \ --image Ubuntu2204 \ --vnet-name vnet-nat-demo \ --subnet subnet-private \ --public-ip-address "" \ --admin-username azureuser \ --generate-ssh-keys \ --size Standard_B1s # VM起動確認 az vm show \ --resource-group rg-nat-demo \ --name vm-private-test \ --query "{Name:name, PrivateIP:privateIps, ProvisioningState:provisioningState}" -o json
実行結果の例:
{ "Name": "vm-private-test", "PrivateIP": "10.0.1.4", "ProvisioningState": "Succeeded" }
8. Azure Bastionまたはシリアルコンソールで接続して動作確認
プライベートIPのみのVMにSSH接続するには、Azure Bastionまたはシリアルコンソール(Azureポータル → VM → シリアルコンソール)を使用します。
接続後、以下のコマンドでインターネットへのアクセスと送信元IPを確認します。
# パッケージリストの更新(インターネット疎通確認) sudo apt update # 外部から見た自分のIPアドレスを確認(NATゲートウェイのIPが返るはず) curl -s https://ifconfig.me # または curl -s https://api.ipify.org
実行結果の例:
20.xxx.xxx.xxx
返ってきたIPアドレスが、先ほど作成した pip-nat-demo のIPアドレスと一致していれば、NATゲートウェイ経由でのアウトバウンド通信が正常に機能しています。
VMのプライベートIP(10.0.1.4)が外部からは pip-nat-demo のIPアドレスに変換されて送信されていることが確認できます。これがNATの「アドレス変換」の動きです。
【注意】SNATポート枯渇に気をつける
NATゲートウェイは1つのパブリックIPにつき約64,000個のSNATポートを提供します。大量の並行接続が発生するワークロード(大量APIコール、バッチ処理など)では、SNATポートが枯渇することがあります。
その場合は、パブリックIPを追加(最大16個まで)するか、パブリックIPプレフィックスを割り当ててポート数を増やしてください。
AWSのNAT Gatewayとの比較
AWSに慣れているエンジニアがAzureに移行する際によく聞かれるのが「AzureのNATゲートウェイとAWSのNAT Gatewayって何が違うの?」という質問です。主な違いをまとめます。
| 比較項目 | Azure NATゲートウェイ | AWS NAT Gateway |
|---|---|---|
| 料金体系 | 時間課金+データ処理量(円換算で約0.063円/時間+データ転送費) | 時間課金+データ処理量(約0.062 USD/時間+データ転送費) |
| 関連付けの単位 | サブネット単位で関連付け | サブネットのルートテーブルで設定 |
| 冗長性 | ゾーン冗長(Availability Zone内で自動冗長化) | AZ単位。マルチAZにするには各AZに1つずつ作成が必要 |
| スケーリング | 自動スケール(最大50 Gbps) | 自動スケール(最大100 Gbps) |
| パブリックIP数 | 最大16個のIPアドレスまたはIPプレフィックス | 最大8個のElastic IP |
AzureのNATゲートウェイはゾーン冗長がデフォルトで組み込まれているため、AWSのように「各AZに個別にNAT Gatewayを置く」という設計が不要です。コスト面でAzureが有利になるケースがあります。
AWS VPCのNAT構成については、IPv6 設定の参考とあわせて確認しておくと、クラウド間のネットワーク設計の違いがより明確になります。
トラブルシュートと注意事項
NATゲートウェイを構築した後に発生しやすい問題と対処法をまとめます。
【エラー対処1】プライベートサブネットからインターネットに到達できない
原因の候補:
・NATゲートウェイがサブネットに正しく関連付けられていない
・NSG(ネットワークセキュリティグループ)のアウトバウンドルールで443/80が拒否されている
・VMのゲストOSファイアウォール(ufw/firewalld)がアウトバウンドをブロックしている
確認コマンド:
# サブネットのNATゲートウェイ関連付けを確認 az network vnet subnet show \ --resource-group rg-nat-demo \ --vnet-name vnet-nat-demo \ --name subnet-private \ --query "natGateway.id" -o tsv # NSGのアウトバウンドルールを確認 az network nsg rule list \ --resource-group rg-nat-demo \ --nsg-name
\ --query "[?direction=='Outbound'].{Name:name, Priority:priority, Action:access}" -o table
【エラー対処2】NATゲートウェイの作成が失敗する(ProvisioningStateFailed)
原因の候補:
・指定したパブリックIPがBasicSKUになっている(StandardSKUが必須)
・サブスクリプションのIPアドレス数クォータに達している
・リージョンでNATゲートウェイがサポートされていない(一部のリージョンは未対応)
対処法:
パブリックIPのSKUを確認し、Standardであることを確認します。
# パブリックIPのSKU確認 az network public-ip show \ --resource-group rg-nat-demo \ --name pip-nat-demo \ --query "{Name:name, SKU:sku.name}" -o json # → "SKU": "Standard" であることを確認 # "SKU": "Basic" の場合は削除して再作成が必要 az network public-ip delete --resource-group rg-nat-demo --name pip-nat-demo az network public-ip create \ --resource-group rg-nat-demo \ --name pip-nat-demo \ --sku Standard \ --allocation-method Static \ --location japaneast
本記事のまとめ
AzureでNATゲートウェイとプライベートサブネットを構築する手順を振り返ります。
| やりたいこと | コマンド・手順 |
|---|---|
| リソースグループを作成する | az group create --name rg-nat-demo --location japaneast |
| VNetを作成する | az network vnet create --name vnet-nat-demo --address-prefix 10.0.0.0/16 |
| プライベートサブネットを作成する | az network vnet subnet create --name subnet-private --address-prefix 10.0.1.0/24 |
| StandardSKUのパブリックIPを作成する | az network public-ip create --name pip-nat-demo --sku Standard --allocation-method Static |
| NATゲートウェイを作成する | az network nat gateway create --name nat-gateway-demo --public-ip-addresses pip-nat-demo |
| サブネットにNATゲートウェイを関連付ける | az network vnet subnet update --name subnet-private --nat-gateway nat-gateway-demo |
| 外部IPの確認(VM内から実行) | curl -s https://ifconfig.me |
azure nat サブネット の構成は「プライベートサブネット + NATゲートウェイ + パブリックIP(StandardSKU)」の3点セットで成り立ちます。
AWSのNAT GatewayとAzureのNATゲートウェイは概念的に近いものですが、AzureではサブネットへのNATゲートウェイ直接関連付けでゾーン冗長まで含めて実現できるのが特徴です。
ポート確認やネットワーク診断には Linux ポート確認の全コマンド も参考にしてください。Linuxサーバー側でのネットワーク状態を把握するのに役立ちます。
またDNS設定との組み合わせは Linux DNS 設定の基本 で解説しています。NATゲートウェイ構成後に名前解決がうまくいかない場合の確認先として押さえておきましょう。
Azureの学習をもっと体系的に進めたいなら、Azure実践ハンズオン講座をご覧ください。現役エンジニアが教える実務直結カリキュラムで、VM構築からインフラ管理まで一気に習得できます。
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
登録10秒/合わなければ解除3秒 / 詳細はこちら
- 次のページへ:AzureのVMSSとLoad Balancerで高可用性を実現する方法|スケールセット構築と自動スケーリングの実践ハンズオン
- 前のページへ:AzureとAWSの違いを比較|Linuxエンジニアがクラウド2つ目に学ぶ理由
- この記事の属するカテゴリ:Azureへ戻る

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。
登録無料・いつでも解除できます