AzureでNATゲートウェイとプライベートサブネットを構築する方法

宮崎智広 この記事の監修:宮崎智広(Linux実務・教育歴20年以上・受講者3,100名超)
HOMELinux技術 リナックスマスター.JP(Linuxマスター.JP)Azure > AzureでNATゲートウェイとプライベートサブネットを構築する方法
「Azureでプライベートサブネットにあるサーバーをインターネットに接続させたい。でもどこから手をつければいいのか分からない」
このような悩みを持つエンジニアは少なくありません。AWSのNAT Gatewayは耳にしたことがあっても、AzureでNATゲートウェイを設定した経験がある人は意外と少ないものです。

この記事では、azure nat サブネット の基本から、NATゲートウェイとプライベートサブネットの構築手順を、Azureポータルを使ったハンズオン形式でステップバイステップに解説します。
Azureのネットワーク設計を実務で扱うエンジニアを対象に、動作確認まで含めた実践的な内容をお届けします。

この記事のポイント

・azure nat サブネット はVNetのルートテーブルにNATゲートウェイを割り当てることで機能する
・プライベートサブネットとは、インターネットゲートウェイが直接付いていないサブネットのこと
・NATゲートウェイには静的パブリックIPアドレス(パブリックIPプレフィックス)が必要
・動作確認はVMからcurlコマンドを実行して外部IPを確認するのが最速


「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
図解60P/登録10秒/解除も3秒 / 詳細はこちら

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構築からインフラ管理まで一気に習得できます。

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

登録10秒/合わなければ解除3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録
宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として20年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが悩み。最近、ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。