クラウド移行直後のLinuxエンジニアがよくぶつかる壁のひとつです。オンプレミスではNICに静的IPを設定すれば永続的に固定されますが、Azureでは「動的割り当て(Dynamic)」と「静的割り当て(Static)」が分かれており、正しく設定しないとVMを停止するたびにIPが変わります。
この記事では、AzureのパブリックIPとプライベートIPを静的に固定する方法を、azコマンドによるハンズオン形式で解説します。新規VM作成時の設定と、稼働中の既存VMへの後付け変更の両方をカバーします。RHEL 9.4 / Ubuntu 24.04 LTSで動作確認済みです。
この記事のポイント
・Azure VMのパブリックIPはVM停止(割り当て解除)で変わる。Staticを明示指定して固定する
・パブリックIPはStandard SKU + Static割り当てが2025年以降の推奨(Basic SKUは非推奨)
・既存VMのプライベートIPはaz network nic ip-config updateで後から静的に変更できる
・サブネットの先頭4アドレスと末尾1アドレスはAzure予約済みで使用不可
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
なぜAzure VMのIPは変わってしまうのか
Azureでは、VMのNICに割り当てられるIPアドレスは「動的割り当て(Dynamic)」がデフォルトです。動的割り当ての挙動はパブリックIPとプライベートIPで少し異なります。・パブリックIPアドレス(動的の場合):VMが「停止(割り当て解除)」状態になると解放され、次回起動時に別のIPが割り当てられます。OSレベルの「reboot」ではIPは変わりませんが、Azureポータルの「停止」ボタンや az vm deallocate コマンドでVMを停止すると、コンピューティングリソースが解放されるとともにパブリックIPも変わります。
・プライベートIPアドレス(動的の場合):AzureのDHCPサービスがVNet内のサブネットから割り当てます。VMが稼働中は同じIPが維持されますが、設定が「Dynamic」のままだとアドレス空間の再配置で将来的にIPが変わる可能性があります。
ファイアウォールルールや他サーバーとの通信設定でIPを直指定している場合は、静的に固定しておくのが現場の鉄則です。
パブリックIPアドレスの作成とSKU選択
パブリックIPを静的に固定するには、Standard SKUで静的割り当て(Static)のパブリックIPリソースをあらかじめ作成し、VMのNICにアタッチします。1. BasicとStandard SKUの違いを理解する
パブリックIPには2種類のSKUがあります。新規環境では迷わずStandard SKUを選んでください。・Basic SKU(旧世代):Dynamic/Staticどちらも選択可能。ただしAvailability Zoneに非対応。デフォルトで全インバウンドを許可するため、セキュリティリスクが高い。Microsoftは2025年9月以降の新規作成を非推奨としており、既存環境も順次Standard SKUへの移行が必要。
・Standard SKU(推奨):Static割り当てのみをサポート。デフォルトで全インバウンドをNSGで制御するためセキュアな設計。Availability Zone対応でゾーン冗長構成が可能。
2. 静的パブリックIPを作成する
# リソースグループが未作成の場合はまず作成する az group create --name myRG --location japaneast # Standard SKUで静的パブリックIPを作成 # --zone 1 2 3 でAvailability Zone冗長を有効化(推奨) az network public-ip create \ --resource-group myRG \ --name myStaticPublicIP \ --sku Standard \ --allocation-method Static \ --zone 1 2 3 # 作成されたIPアドレスを確認 az network public-ip show \ --resource-group myRG \ --name myStaticPublicIP \ --query '{ip:ipAddress, allocationMethod:publicIPAllocationMethod, sku:sku.name}' \ --output json
{ "allocationMethod": "Static", "ip": "20.89.xxx.xxx", "sku": "Standard" }
allocationMethod: Staticとsku: Standardが確認できれば正常です。このIPはVMを停止(割り当て解除)しても解放されません。3. 既存VMのNICに静的パブリックIPを割り当てる
稼働中の既存VMのパブリックIPを静的に切り替えるには、まずVMに紐付いているNIC名を調べ、そのNICのIP設定を更新します。VMを停止せずに変更できますが、変更直後に一瞬だけ外部からのSSH接続が途切れることがあります。メンテナンスウィンドウ内での作業を推奨します。# VMに紐付いているNIC名を確認(末尾のリソース名を使用) az vm nic list \ --resource-group myRG \ --vm-name myLinuxVM \ --query '[].id' \ --output tsv # 出力例 # /subscriptions/xxxx-xxxx/resourceGroups/myRG/providers/Microsoft.Network/networkInterfaces/myLinuxVMVMNic # NICのipconfig1に静的パブリックIPをアタッチ az network nic ip-config update \ --resource-group myRG \ --nic-name myLinuxVMVMNic \ --name ipconfig1 \ --public-ip-address myStaticPublicIP # 設定後の確認 az vm show -d \ --resource-group myRG \ --name myLinuxVM \ --query '{publicIP:publicIps, privateIP:privateIps}' \ --output table
PublicIP PrivateIP ---------------- ----------- 20.89.xxx.xxx 10.0.0.4
プライベートIPアドレスを静的に固定する
プライベートIPの静的固定は「新規VM作成時に指定する方法」と「稼働中の既存VMを後から変更する方法」の2つがあります。1. 新規VM作成時にプライベートIPを指定する
az vm createの--private-ip-addressオプションでサブネット範囲内の任意のIPを指定します。# VNetとサブネット(10.0.0.0/24)が既に存在する前提 # --private-ip-address でサブネット範囲内のIPを明示指定 az vm create \ --resource-group myRG \ --name myWebServer \ --image Ubuntu2404 \ --size Standard_B2s \ --vnet-name myVNet \ --subnet mySubnet \ --private-ip-address 10.0.0.10 \ --public-ip-sku Standard \ --public-ip-address myStaticPublicIP \ --admin-username azureuser \ --generate-ssh-keys # 作成後のIP確認 az vm show -d \ --resource-group myRG \ --name myWebServer \ --query '{name:name, publicIP:publicIps, privateIP:privateIps}' \ --output table
Name PublicIP PrivateIP ------------ ---------------- ----------- myWebServer 20.89.xxx.xxx 10.0.0.10
--private-ip-addressで指定した 10.0.0.10 が正しく設定されています。この状態ではプライベートIPは「Static」として登録されています。2. 既存VMのプライベートIPを後から静的に変更する
動的割り当てのまま稼働している既存VMのプライベートIPを静的に切り替えます。既存のIPアドレスを維持したまま、割り当て方式だけを「Dynamic」から「Static」に変更できます。# 現在のプライベートIPとアロケーション方式を確認 az network nic show \ --resource-group myRG \ --name myLinuxVMVMNic \ --query 'ipConfigurations[0].{ip:privateIPAddress, method:privateIPAllocationMethod}' \ --output table # 変更前の出力例 # Ip Method # --------- ------- # 10.0.0.4 Dynamic # 同じIPを維持したまま割り当て方式をStaticに変更 az network nic ip-config update \ --resource-group myRG \ --nic-name myLinuxVMVMNic \ --name ipconfig1 \ --private-ip-address 10.0.0.4 # 変更後の確認 az network nic show \ --resource-group myRG \ --name myLinuxVMVMNic \ --query 'ipConfigurations[0].{ip:privateIPAddress, method:privateIPAllocationMethod}' \ --output table # 変更後の出力例 # Ip Method # --------- ------- # 10.0.0.4 Static
IPアドレス設定の確認方法
IP変更後はazコマンドとLinuxゲストOSの両面から確認します。1. azコマンドによる確認
# VMのパブリック・プライベートIPを一覧表示 az vm list-ip-addresses \ --resource-group myRG \ --name myWebServer \ --output table # 出力例 # VirtualMachine PublicIPAddresses PrivateIPAddresses # ---------------- ------------------- -------------------- # myWebServer 20.89.xxx.xxx 10.0.0.10 # 利用可能なサブネット内IPアドレスを確認(重複割り当て防止) az network vnet subnet list-available-ips \ --resource-group myRG \ --vnet-name myVNet \ --name mySubnet \ --output table
2. Linux VMにSSHログインして確認する
# SSHでVMにログイン後(azureuser はVM作成時に指定したユーザー名) $ ssh azureuser@20.89.xxx.xxx # IPアドレスの確認 $ ip addr show eth0 2: eth0:
mtu 1500 qdisc mq state UP group default qlen 1000 link/ether 00:0d:3a:xx:xx:xx brd ff:ff:ff:ff:ff:ff inet 10.0.0.10/24 metric 100 brd 10.0.0.255 scope global eth0 valid_lft forever preferred_lft forever # SSHポートの待機状態を確認 $ ss -tlnp | grep :22 LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=1234,fd=3))
inet 10.0.0.10/24と表示されており、静的IPが反映されています。ssコマンドによるポート22番の受信待機確認については「Linux ポート確認の全コマンド」もあわせて参照してください。トラブルシュートとよくあるエラー
1. 「Cannot update a static public IP to dynamic allocation method」エラー
Standard SKUのパブリックIPをDynamicに変更しようとすると発生します。Standard SKUはStaticのみをサポートしており、Dynamic割り当てへの変更はできません。BasicからStandardへの移行を検討してください。2. 指定したプライベートIPが使用できない
プライベートIPはサブネットのアドレス範囲内で指定する必要があります。Azureはサブネットの先頭4アドレスと末尾1アドレスをシステム用に予約しているため使用できません。例えばサブネットが 10.0.0.0/24 の場合、使用可能な範囲は 10.0.0.4~10.0.0.254 です。# サブネット内で使用中・予約済みを除いた利用可能IPを一覧表示 az network vnet subnet list-available-ips \ --resource-group myRG \ --vnet-name myVNet \ --name mySubnet \ --output table # 出力例 # Address # ---------- # 10.0.0.4 # 10.0.0.5 # 10.0.0.6 # 10.0.0.7 # 10.0.0.8 # ...
--private-ip-address を指定してください。3. 「Basic SKU public IP cannot be associated with a Standard SKU NIC」エラー
Basic SKUのパブリックIPをStandard SKUのNICに割り当てようとすると発生します。既存のBasic IPを削除してStandard SKUで再作成してください。# NICからBasic IPをデタッチ az network nic ip-config update \ --resource-group myRG \ --nic-name myLinuxVMVMNic \ --name ipconfig1 \ --remove publicIpAddress # Basic SKUのパブリックIPを削除 az network public-ip delete \ --resource-group myRG \ --name myOldBasicIP # Standard SKUで静的パブリックIPを再作成 az network public-ip create \ --resource-group myRG \ --name myNewStandardIP \ --sku Standard \ --allocation-method Static
本記事のまとめ
| やりたいこと | コマンド |
|---|---|
| Standard SKUの静的パブリックIPを作成 | az network public-ip create --sku Standard --allocation-method Static --zone 1 2 3 |
| NICに静的パブリックIPを割り当て | az network nic ip-config update --nic-name NIC名 --name ipconfig1 --public-ip-address IP名 |
| VM作成時にプライベートIPを静的指定 | az vm create --private-ip-address 10.0.0.10 --public-ip-sku Standard |
| 既存VMのプライベートIPを静的に変更 | az network nic ip-config update --nic-name NIC名 --name ipconfig1 --private-ip-address 10.0.0.4 |
| VMのパブリック・プライベートIP一覧確認 | az vm list-ip-addresses --resource-group RG名 --name VM名 --output table |
| NICのIP設定とアロケーション方式を確認 | az network nic show --resource-group RG名 --name NIC名 --query 'ipConfigurations[0]' |
| サブネットの利用可能IPを確認 | az network vnet subnet list-available-ips --resource-group RG名 --vnet-name VNet名 --name サブネット名 |
Azure VNetのNSGルールを使ってLinux VMへの接続元IPを制限する方法は「AzureのNSGとSSH公開鍵認証でLinux VMを安全に保護する方法」を参照してください。
Azure対応セミナーの詳細を見る >>
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら
- 前のページへ:AzureのVNetサービスエンドポイントを設定する方法|StorageをサブネットIPに限定してPrivate Endpointと使い分ける実践手順
- この記事の属するカテゴリ:Azureへ戻る

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