「NATゲートウェイの設定でハマった。ルートテーブルを変えても通信できない」
AWSとAzureではネットワークサービスに似た名称が多く存在しますが、設計の細部はかなり異なります。特にプライベートサブネットとNATゲートウェイの構成方法は、AWSとは発想が違うため混乱しやすいポイントです。
この記事では、AWS Virtual Private Cloud(VPC)とAzureのVirtual Network(VNet)を比較しながら、azコマンドを使ったプライベートサブネット構築とNATゲートウェイ設定の手順を解説します。想定環境はAzure CLI(az)が利用できるLinux端末(RHEL 9系/Ubuntu 24.04 LTSを含む)で、AWSのVPC基礎知識がある方を対象とします。
この記事のポイント
・Azure VNetはAWS VPCに対応するが、IGW(Internet Gateway)は存在しない
・Azure NATゲートウェイはルートテーブルでなくサブネットに直接関連付ける
・azコマンドでVNet・サブネット・NATゲートウェイを30分で構築できる
・AWSとAzureの対応表で「あのサービスはAzureでは何?」が一目でわかる
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
AWS VPCとAzure VNetの基本概念の違い
AWSのVirtual Private Cloud(VPC)は、AWS上に作る論理的に分離されたネットワーク空間です。VPCの中にサブネットを切り、Internet Gateway(IGW)をアタッチしてルートテーブルで誘導すればパブリックサブネット、NAT Gatewayを経由すればプライベートサブネットのEC2がインターネットへ送信できる、という設計です。Azureの対応物はVirtual Network(VNet)です。VNetの中にサブネットを切る点はAWSと同じですが、以下の3点が大きく異なります。
・Internet Gatewayが存在しない:AzureではVNet内のVMにパブリックIPを割り当てれば自動的にインターネット通信が可能です。AWSのようにIGWを別途アタッチしてルートテーブルに追記する操作は不要です
・デフォルトアウトバウンドは2025年9月30日以降に廃止:以前のAzureでは、NATゲートウェイ未設定のサブネットでも「デフォルトアウトバウンドアクセス」という仕組みでインターネットへの送信が可能でした。しかし2025年9月30日以降に作成された新規VMにはこの仕組みが適用されなくなりました。現在は本番環境で明示的にNATゲートウェイを設定することが必須です
・NATゲートウェイの関連付け先がサブネット:AWSのNAT Gatewayはパブリックサブネット内に配置し、プライベートサブネットのルートテーブルで参照します。AzureのNATゲートウェイはルートテーブルを経由せず、サブネットに直接関連付けます
AWS VPCとAzure VNetのサービス対応表
主要なネットワークサービスの対応関係をまとめます。| AWSサービス | Azure対応サービス | 主な違い |
|---|---|---|
| VPC | Virtual Network(VNet) | 概念はほぼ同じ |
| Subnet | Subnet | AzureはデフォルトSNATが2025年9月に廃止 |
| Internet Gateway | なし(PublicIPで代替) | AzureはVM個別にPublicIPを割り当て |
| NAT Gateway | NAT Gateway | AzureはサブネットへDirect関連付け |
| Route Table | Route Table(UDR) | AzureはNATGWへの経路追記不要 |
| Security Group | Network Security Group(NSG) | NSGはサブネット/NICに付与 |
| VPC Peering | VNet Peering | 概念はほぼ同じ |
azコマンドでVNetとサブネット・NATゲートウェイを構築する
Azureのネットワーク構築はAzure CLIで完結できます。以下の手順で、VNet・サブネット・NATゲートウェイを作成し、プライベートサブネットのVMがNATゲートウェイ経由でインターネットへ送信できる構成を組みます。Azureのネットワーク設計をLinuxエンジニアの視点から体系的に学びたい場合は、azure.linuxmaster.jpで基礎から実践まで解説しています。
1. リソースグループとVNetを作成する
まずリソースグループを作成します。リソースグループはAWSのタグ管理に近い概念ですが、Azureではリソースを束ねる必須の入れ物です。VNet作成時にリソースグループとリージョンを指定します。# リソースグループを作成(リージョン: 東日本) az group create --name myNetRG --location japaneast # VNetを作成(アドレス空間: 10.0.0.0/16) az network vnet create \ --name myVNet \ --resource-group myNetRG \ --location japaneast \ --address-prefixes 10.0.0.0/16
{ "newVNet": { "addressSpace": { "addressPrefixes": ["10.0.0.0/16"] }, "location": "japaneast", "name": "myVNet", "provisioningState": "Succeeded" } }
2. パブリック・プライベートサブネットを作成する
VNetの中にサブネットを作成します。AzureではIGWへのルートの有無ではなく、パブリックIPの有無とNATゲートウェイの設定でパブリック/プライベートを区別します。# パブリックサブネット(VMにPublicIPを割り当てる側) az network vnet subnet create \ --name publicSubnet \ --resource-group myNetRG \ --vnet-name myVNet \ --address-prefixes 10.0.1.0/24 # プライベートサブネット(NATゲートウェイを関連付ける側) az network vnet subnet create \ --name privateSubnet \ --resource-group myNetRG \ --vnet-name myVNet \ --address-prefixes 10.0.2.0/24
3. NATゲートウェイを作成してプライベートサブネットに関連付ける
AzureのNATゲートウェイ作成は①パブリックIP作成→②NATゲートウェイ作成→③サブネットへの直接関連付けの3ステップです。AWSのように「パブリックサブネット内に配置」「ルートテーブルでプライベートサブネットの0.0.0.0/0をNAT GWへ」という設定は不要です。# ① Standard SKUのパブリックIPを作成(NATゲートウェイにはStandard SKU必須) az network public-ip create \ --name myNatGwPIP \ --resource-group myNetRG \ --sku Standard \ --allocation-method Static \ --location japaneast # ② NATゲートウェイを作成 az network nat gateway create \ --name myNatGw \ --resource-group myNetRG \ --location japaneast \ --public-ip-addresses myNatGwPIP \ --idle-timeout 10 # ③ プライベートサブネットにNATゲートウェイを直接関連付ける(ルートテーブル変更は不要) az network vnet subnet update \ --name privateSubnet \ --resource-group myNetRG \ --vnet-name myVNet \ --nat-gateway myNatGw
4. 設定内容を確認する
サブネットへのNATゲートウェイ関連付けが正しいことを確認します。# サブネットのNATゲートウェイ関連状態を確認 az network vnet subnet show \ --name privateSubnet \ --resource-group myNetRG \ --vnet-name myVNet \ --query "{natGateway:natGateway.id, addressPrefix:addressPrefix}" \ --output table
NatGateway AddressPrefix ---------------------------------------------------------------------------------- -------------- /subscriptions/xxxxxxxx-xxxx/resourceGroups/myNetRG/providers/Microsoft.Network/natGateways/myNatGw 10.0.2.0/24
AWS NAT GatewayとAzure NATゲートウェイの設計上の3つの違い
・配置場所の違い:AWSのNAT GatewayはパブリックサブネットのAZ内に配置します。マルチAZ構成では可用性確保のためにAZごとに1つ作成するのが一般的です。AzureのNATゲートウェイはAvailability Zone(AZ)を指定してゾーン冗長(zone-redundant)にする設定もあり、AZに依存しない設計も可能です
・経路制御の違い:AWSはルートテーブルでの0.0.0.0/0の誘導が必須です。AzureはサブネットへのDirect関連付けなので、ルートテーブルの修正が不要です。誤ってルートテーブルに不要なエントリを追加するミスが起きにくい点はAzureの利点といえます
・IPプレフィックスのサポート:AzureのNATゲートウェイはPublic IP Prefixと組み合わせて固定されたIPアドレス範囲からNATできます。外部サービスのIPホワイトリスト登録が必要な場合に便利な機能です
よくあるエラーと対処法
「Cannot use Basic SKU public IP」エラー
NATゲートウェイに関連付けるパブリックIPはStandard SKUが必須です。Basic SKUのIPを指定するとエラーになります。# NG: Basic SKU(NATゲートウェイへの関連付け不可) az network public-ip create --name myPIP --resource-group myNetRG --sku Basic # OK: Standard SKU(Static固定) az network public-ip create \ --name myPIP \ --resource-group myNetRG \ --sku Standard \ --allocation-method Static
NATゲートウェイ作成後もアウトバウンド通信が通らない
NATゲートウェイの作成が完了しても、プライベートサブネットとの関連付けが漏れているケースがあります。`az network vnet subnet show` でサブネットの `natGateway` フィールドが `null` の場合は `az network vnet subnet update --nat-gateway` で関連付けを実施します。また、プライベートサブネット内のVMにNSG(ネットワークセキュリティグループ)でアウトバウンドが制限されていないかも合わせて確認してください。
「Subscription not registered for resource type Microsoft.Network/natGateways」
サブスクリプションでリソースプロバイダーが有効化されていない場合に発生します。以下のコマンドで有効化します。# リソースプロバイダーを登録 az provider register --namespace Microsoft.Network # 登録状態を確認(Registered になるまで数分かかることがある) az provider show --namespace Microsoft.Network --query registrationState
本記事のまとめ
AWS Virtual Private CloudとAzureのVNet・NATゲートウェイの比較と、azコマンドによる構築手順の要点をまとめます。| 比較項目 | AWS VPC | Azure VNet |
|---|---|---|
| ネットワーク空間 | VPC(CIDR指定) | VNet(address-prefixes指定) |
| インターネット接続(VM) | IGWをVPCにアタッチ必須 | パブリックIPのみで可(IGW不要) |
| プライベートサブネット送信 | NAT Gatewayをルートテーブルで参照 | NATゲートウェイをサブネットに直接関連付け |
| NAT用IP SKU | Elastic IP(Static固定) | Standard SKUのパブリックIPが必須 |
| デフォルトアウトバウンド | プライベートサブネットはブロック | 2025年9月30日以降の新規VMは廃止 |
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら
- 前のページへ:azureゾーン冗長VMの構築手順|可用性ゾーンとロードバランサーをCLIで設定
- この記事の属するカテゴリ:Azureへ戻る

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