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

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

この記事では、azure nat サブネット の基本から、NATゲートウェイとプライベートサブネットの構築手順を、Azure CLIを使ったハンズオン形式でステップバイステップに解説します。UDR(User Defined Route:カスタムルートテーブル)によるルーティング制御と、NSG(ネットワークセキュリティグループ)によるポートアクセス制御まで含めた、実務レベルの設計を網羅します。
Azureのネットワーク設計を実務で扱うエンジニアを対象に、動作確認まで含めた実践的な内容をお届けします。

この記事のポイント

・azure nat サブネット はサブネットにNATゲートウェイを割り当てることで機能する
・NATゲートウェイにはStandardSKUの静的パブリックIPアドレスが必要
・NSGでポートを絞り、UDRで経路を制御する「二刀流」が現場の標準設計
・動作確認はVMからcurlコマンドを実行してNATゲートウェイのIPが返るかで判断する


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

AzureのNATゲートウェイとは何か(概要と仕組み)

Azure NAT ゲートウェイ(NAT Gateway)は、プライベートサブネット内のリソースがアウトバウンド方向のインターネット通信を行うための仕組みです。
「NAT」は「Network Address Translation(ネットワークアドレス変換)」の略で、プライベートIPアドレスを持つVMが外部と通信する際、NATゲートウェイが持つパブリックIPアドレスに変換して送信します。

AWSのVPCに慣れたエンジニアがAzureに移ると、ネットワーク設計の違いに戸惑うことがよくあります。特に以下の点が大きな差異です。
AWSのVPC:サブネット間通信はルートテーブルで明示的に設定が必要
AzureのVNet:同一VNet内のサブネット間通信は、NSGで明示的にブロックしない限りデフォルト許可

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バックエンドをプライベートサブネットに配置し、外部からの直接アクセスを遮断する構成がベストプラクティスです。プライベートサブネットへのSSH接続には、パブリックサブネットに踏み台VM(ジャンプサーバー)を置くか、Azure Bastionを使用します。

前提条件と環境準備(Azureアカウント・リソースグループ)

この記事の手順を実施するには、以下の環境が必要です。
Azureアカウント:無料試用版(Azure Free Tier)でも試せます
リソースグループ:作成済みであること(なければ手順1で作成)
動作確認環境:Azure Cloud Shell またはSSH接続できるPC

今回の構成では、Azure CLIを使いながらAzureポータルで確認する流れで進めます。Azure CLIはCloud Shellから実行するか、PCにインストールして使用してください。
実行環境:Azure CLI 2.60.0 / Ubuntu 22.04 LTSで動作確認済み。

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(仮想ネットワーク)と、その中にパブリックサブネット・プライベートサブネットの2つを作成します。
今回の構成は以下のとおりです。
・VNet名:vnet-nat-demo(アドレス空間:10.0.0.0/16)
・パブリックサブネット名:subnet-public(10.0.0.0/24):踏み台VM用
・プライベートサブネット名:subnet-private(10.0.1.0/24):アプリ・DBサーバー用

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. パブリックサブネットの作成

踏み台VM用のパブリックサブネット(subnet-public)を作成します。このサブネットにはVMへのパブリックIPを直接割り当て、プライベートサブネットへのSSH接続の中継点として使います。

# パブリックサブネットの作成 az network vnet subnet create --resource-group rg-nat-demo --vnet-name vnet-nat-demo --name subnet-public --address-prefix 10.0.0.0/24 # 作成確認 az network vnet subnet show --resource-group rg-nat-demo --vnet-name vnet-nat-demo --name subnet-public --query "{Name:name, Prefix:addressPrefix}" -o json

4. プライベートサブネットの作成

# プライベートサブネットの作成 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-public 10.0.0.0/24 subnet-private 10.0.1.0/24

この時点では、subnet-privateはまだNATゲートウェイに関連付けられていないため、このサブネット内のVMはインターネットに接続できません。次のステップでNATゲートウェイを作成・割り当てます。

NATゲートウェイの作成と設定手順

NATゲートウェイを作成するには、事前にパブリックIPアドレスが必要です。NATゲートウェイは必ずパブリックIPを持ち、プライベートサブネット内のVMはこのIPに変換されて外部と通信します。

5. パブリック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を必ず指定してください。

6. 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ゲートウェイ経由になります。

7. サブネットへの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構築からインフラ管理まで一気に習得できます。

UDR(ルートテーブル)でプライベートサブネットの経路を明示的に制御する

NATゲートウェイをサブネットに割り当てるだけでアウトバウンド通信は動きますが、実務ではUDR(User Defined Route:ユーザー定義ルート)を使って通信経路を明示的に定義する場面が多くあります。

UDRが必要になる主な場面:
Azure Firewallとの組み合わせ:プライベートサブネットのトラフィックをFirewallで検査してからインターネットに出す
BGPルート伝搬の無効化:VPN/ExpressRouteのBGPルートが不要に伝搬しないよう制御する
明示的なルーティング管理:インフラのルーティングをコードで明示的に管理し、変更に強くする

UDR(ルートテーブル)の役割を一言で表すと「NSGがポートを制御するのに対し、UDRは経路を制御する」です。両方を組み合わせるのが現場の標準設計です。

8. ルートテーブルの作成

# ルートテーブルの作成 az network route-table create --resource-group rg-nat-demo --name rt-private --location japaneast --disable-bgp-route-propagation false # 作成確認 az network route-table show --resource-group rg-nat-demo --name rt-private --query "{Name:name, ProvisioningState:provisioningState}" -o json

実行結果の例:

{ "Name": "rt-private", "ProvisioningState": "Succeeded" }

--disable-bgp-route-propagation false はBGPルートの伝搬を許可する設定です(デフォルト値)。VPN/ExpressRoute接続があり、BGPルートを伝搬させたくない場合は true に変更してください。

9. カスタムルートの追加

VNet内部のトラフィック(10.0.0.0/16宛)はVNet内で完結させ、インターネット宛(0.0.0.0/0)はNATゲートウェイ経由で外部に出るよう、ルートを明示的に定義します。

# VNet内部通信は VirtualNetwork ルートで処理 az network route-table route create --resource-group rg-nat-demo --route-table-name rt-private --name route-local-vnet --address-prefix 10.0.0.0/16 --next-hop-type VirtualNetwork # インターネット宛のデフォルトルート(NATゲートウェイが SNAT を担当) az network route-table route create --resource-group rg-nat-demo --route-table-name rt-private --name route-to-internet --address-prefix 0.0.0.0/0 --next-hop-type Internet # ルート一覧確認 az network route-table route list --resource-group rg-nat-demo --route-table-name rt-private --query "[].{Name:name, Prefix:addressPrefix, NextHop:nextHopType}" -o table

実行結果の例:

Name AddressPrefix NextHop ------------------ -------------- --------------- route-local-vnet 10.0.0.0/16 VirtualNetwork route-to-internet 0.0.0.0/0 Internet

0.0.0.0/0 のnext-hop-typeを Internet にした場合、サブネットにNATゲートウェイが割り当てられていれば、NATゲートウェイが優先してSNATを処理します。将来的にAzure Firewallを導入する際は、next-hop-typeを VirtualAppliance に変更し、Azure FirewallのプライベートIPアドレスをnext-hop-ip-addressに指定します。

10. ルートテーブルをプライベートサブネットにアタッチ

# プライベートサブネットにルートテーブルをアタッチ az network vnet subnet update --resource-group rg-nat-demo --vnet-name vnet-nat-demo --name subnet-private --route-table rt-private # アタッチ確認 az network vnet subnet show --resource-group rg-nat-demo --vnet-name vnet-nat-demo --name subnet-private --query "{Subnet:name, RouteTable:routeTable.id}" -o json

RouteTableフィールドに rt-private のリソースIDが表示されれば、アタッチ成功です。

NSGでポートアクセス制御を追加する

UDRがルーティング(どこを通るか)を制御するのに対し、NSG(Network Security Group)はポート・プロトコル(何を許可するか)を制御します。AWSのセキュリティグループに相当する機能で、インバウンド・アウトバウンドそれぞれのルールを設定できます。

プライベートサブネットへの推奨NSG設定:
インバウンド:パブリックサブネット(subnet-public: 10.0.0.0/24)からのSSH(22番)のみ許可、インターネットからの直接アクセスは全ブロック
アウトバウンド:デフォルトルールで全許可(Azureのデフォルトアウトバウンドルールにより、NATゲートウェイ経由の通信は通る)

11. NSGの作成とサブネットへのアタッチ

# NSG作成 az network nsg create --resource-group rg-nat-demo --name nsg-private --location japaneast # パブリックサブネットからのSSH接続を許可(踏み台VM経由のアクセス) az network nsg rule create --resource-group rg-nat-demo --nsg-name nsg-private --name allow-ssh-from-public --protocol Tcp --direction Inbound --priority 100 --source-address-prefixes 10.0.0.0/24 --destination-port-ranges 22 --access Allow # インターネットからの直接インバウンドを全ブロック az network nsg rule create --resource-group rg-nat-demo --nsg-name nsg-private --name deny-inbound-internet --protocol "*" --direction Inbound --priority 4000 --source-address-prefixes Internet --destination-port-ranges "*" --access Deny # NSGをプライベートサブネットにアタッチ az network vnet subnet update --resource-group rg-nat-demo --vnet-name vnet-nat-demo --name subnet-private --network-security-group nsg-private # NSGルール確認(優先度順) az network nsg rule list --resource-group rg-nat-demo --nsg-name nsg-private --query "sort_by([?direction=='Inbound'], &priority)[].{Priority:priority, Name:name, Access:access}" --output table

実行結果の例:

Priority Name Access ---------- ----------------------- -------- 100 allow-ssh-from-public Allow 4000 deny-inbound-internet Deny

NSGのルール評価はPriority番号が小さいほど優先されます(100が最優先、4096が最低)。DenyルールのpriorityがAllowルールより小さい数値になっていると、意図せず通信がブロックされるので注意してください。

動作確認(VMからのインターネットアクセス確認)

構成が完了したら、プライベートサブネット内にVMを起動して動作を確認します。NATゲートウェイ経由でインターネットにアクセスできることを確認しましょう。

12. 動作確認用VMの作成

プライベートサブネット内にVMを作成します。パブリックIPなし・SSH接続は踏み台VM(subnet-public側)経由で行います。

# プライベートサブネット内にVMを作成(パブリックIPなし) az vm create --resource-group rg-nat-demo --name vm-private-test --image Ubuntu2204 --vnet-name vnet-nat-demo --subnet subnet-private --nsg nsg-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 --show-details --query "{Name:name, PrivateIP:privateIps, PublicIP:publicIps, ProvisioningState:provisioningState}" -o json

実行結果の例(PublicIPが空であることを確認):

{ "Name": "vm-private-test", "PrivateIP": "10.0.1.4", "ProvisioningState": "Succeeded", "PublicIP": "" }

PublicIPが空であることを確認できます。これでプライベートサブネットに閉じたVMの完成です。

13. Azure Bastionまたは踏み台VM経由でSSH接続して動作確認

プライベートIPのみのVMにSSH接続するには、次の方法があります。
パブリックサブネットの踏み台VM:subnet-public上のVMにSSHし、そこからプライベートVMへSSH接続
Azure Bastionサービス:Azureポータル → VMページ → 「接続」→ 「Bastion」(事前にBastionリソースのデプロイが必要)
シリアルコンソール:Azureポータル → VM → 「シリアルコンソール」(OS設定が必要)

踏み台VMを使う場合は、SSHエージェントフォワーディング(-Aオプション)を使うと秘密鍵をコピーせずにプライベートVMへ接続できます。

# 踏み台VMにSSH接続(エージェントフォワーディングを有効にする) ssh -A azureuser@<踏み台VMのパブリックIP> # 踏み台VM上からプライベートVMへSSH ssh azureuser@10.0.1.4 # パッケージリストの更新(インターネット疎通確認) 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/時間+データ転送費)
関連付けの単位 サブネット単位で直接割り当て ルートテーブルの0.0.0.0/0にNAT GatewayのIDを指定
冗長性 ゾーン冗長(Availability Zone内で自動冗長化) AZ単位。マルチAZにするには各AZに1つずつ作成が必要
スケーリング 自動スケール(最大50 Gbps) 自動スケール(最大100 Gbps)
パブリックIP数 最大16個のIPアドレスまたはIPプレフィックス 最大8個のElastic IP
ルーティング制御 UDR(User Defined Route)で別途制御 ルートテーブルにNAT Gatewayを直接指定して制御

AzureのNATゲートウェイはゾーン冗長がデフォルトで組み込まれているため、AWSのように「各AZに個別にNAT Gatewayを置く」という設計が不要です。コスト面でAzureが有利になるケースがあります。

また、ルーティング制御の方式が異なります。AWSではルートテーブルの0.0.0.0/0エントリにNAT GatewayのIDを直接指定しますが、AzureではNATゲートウェイをサブネットに直接割り当て、ルーティング制御にはUDRを別途使います。

AWS VPCのNAT構成については、IPv6 設定の参考とあわせて確認しておくと、クラウド間のネットワーク設計の違いがより明確になります。

トラブルシュートと注意事項

NATゲートウェイを構築した後に発生しやすい問題と対処法をまとめます。

【エラー対処1】プライベートサブネットからインターネットに到達できない

原因の候補:
・NATゲートウェイがサブネットに正しく関連付けられていない
・NSG(ネットワークセキュリティグループ)のアウトバウンドルールで443/80が拒否されている
・VMのゲストOSファイアウォール(ufw/firewalld)がアウトバウンドをブロックしている
・UDRのルートが正しく設定されていない(next-hop-typeの誤り)

確認コマンド:

# サブネットのNATゲートウェイ関連付けを確認 az network vnet subnet show --resource-group rg-nat-demo --vnet-name vnet-nat-demo --name subnet-private --query "natGateway.id" -o tsv # ルートテーブルのアタッチを確認 az network vnet subnet show --resource-group rg-nat-demo --vnet-name vnet-nat-demo --name subnet-private --query "routeTable.id" -o tsv # NSGのアウトバウンドルールを確認 az network nsg rule list --resource-group rg-nat-demo --nsg-name nsg-private --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

【エラー対処3】NSGルールが競合して通信が通らない

NSGはPriority番号の小さい順にルールを評価します(100が最優先、4096が最低)。DenyルールのpriorityがAllowルールより小さい数値になっていると、意図せず通信がブロックされます。

また、NSGはサブネットレベルとNICレベルの2箇所に適用できます。両方に設定している場合、双方の評価を通過しないと通信できません。

# インバウンドルールをpriorityでソートして確認 az network nsg rule list --resource-group rg-nat-demo --nsg-name nsg-private --query "sort_by([?direction=='Inbound'], &priority)[].{Priority:priority, Name:name, Access:access, Port:destinationPortRange}" --output table # VMのNICに適用されているNSGを確認 az vm show --resource-group rg-nat-demo --name vm-private-test --query "networkProfile.networkInterfaces[0].id" -o tsv

本記事のまとめ

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-public --address-prefix 10.0.0.0/24
プライベートサブネットを作成する 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
ルートテーブルを作成してアタッチする az network route-table create --name rt-private + az network vnet subnet update --route-table rt-private
NSGを作成してサブネットに適用する az network nsg create --name nsg-private + az network vnet subnet update --network-security-group nsg-private
外部IPの確認(VM内から実行) curl -s https://ifconfig.me

azure nat サブネット の構成は「プライベートサブネット + NATゲートウェイ + パブリックIP(StandardSKU)」の3点セットで成り立ちます。
さらに実務では、UDRで通信経路を明示的に定義し、NSGでポートアクセスを制御する「二刀流」が標準的な設計です。AWSのNAT GatewayとAzureのNATゲートウェイは概念的に近いものですが、AzureではサブネットへのNATゲートウェイ直接関連付けでゾーン冗長まで含めて実現できるのが特徴です。

ポート確認やネットワーク診断には Linux ポート確認の全コマンド も参考にしてください。Linuxサーバー側でのネットワーク状態を把握するのに役立ちます。
またDNS設定との組み合わせは Linux DNS 設定の基本 で解説しています。NATゲートウェイ構成後に名前解決がうまくいかない場合の確認先として押さえておきましょう。

Azureの学習をもっと体系的に進めたいなら、Azure実践ハンズオン講座をご覧ください。現役エンジニアが教える実務直結カリキュラムで、VM構築からインフラ管理まで一気に習得できます。

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

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

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

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

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

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

姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら

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

この記事を書いた人

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

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

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