Azure の仮想マシンとIPアドレス

インターネットでの通信を行うには、何らかの形で「IPアドレス」をネットワークインターフェイスの各ポートに割り当てる必要があります。
発信元を示すのに自身のIPアドレスを、宛先を示すのに相手のIPアドレスがパケットのIPヘッダに記載されます。複雑に絡み合うインターネットなかを、宛先のIPアドレスを頼りにパケットは相手に送り届けられ、そして相手は発信元IPアドレスへ返信を行うわけです。

さて、Azure の仮想マシンの場合、1つのネットワークインターフェイス(NIC)に対して「パブリックIPアドレス」と「プライベートIPアドレス」の2つの設定があります。 

 (ネットワークインターフェイスのIPアドレスの設定: パブリックとプライベート、2つのIPアドレスの設定がある)

● プライベートIPアドレス

仮想マシンのNICに実際に割り当てられるのは「プライベートIPアドレス」です。VNETに設定されたサブネットから選ばれたIPアドレスがDHCPで割り当てられます。NICに対して特定のIPアドレスをゲストOS側で設定するのではなく、必ずDHCPで割り振ることから、DIP(Dynamic IP)とも呼ばれます。
なお、「プライベートIPアドレス」とありますが、192.168.x.x 等のいわゆる(RFC1918で定められた)IPアドレスレンジである必要はありません。任意のアドレスレンジを設定することができます。
もちろん、インターネットで誰かが使っているレンジを使用するとそ事の通信で齟齬を起こしますので、特に理由がない限りはいわゆるプライベートIPアドレスのレンジから割り当てる方が無難です。

 「動的」の「プライベートIPアドレス」の場合、仮想マシンの起動すると、NICに対してサブネットから空いてる適当なIPアドレスがDHCPによって割り当てられ、仮想マシンが停止されると解放されます。次回起動時に同じIPアドレスが割り当てられる保証はありません。
一方、「静的」の場合は、DHCPを通じてIPアドレスが割り当てられるのは同じですが、設定したIPアドレスが必ずそのNICに割り当てられます。

 デフォルトは「動的」になっており、また通常は動的で問題ありません。
ただし、内部的なDNSサーバを立ち上げたり、ActiveDirectory のドメインコントローラを立ち上げるなど、IPアドレスが変わると困ってしまうサービスを使用する場合は「静的」にします。

この「プライベートIPアドレス」で通信できる範囲は以下の通りです 

  • 同じVNETに所属する仮想マシンやサービスとの間
  • S2S VPN で接続されたネットワーク
  • VNET-to-VNET VPNで接続された相互のVNETに属する仮想マシン、サービス
  • P2S VPN で接続された端末
  • ExpressRoute で接続されたオンプレミスのネットワーク
  • 同じ ExpressRoute に接続した VNET の間

インターネットへはこの「プライベートIPアドレス」では直接通信できません。
インターネットからの通信を受け付ける場合には、次の「パブリックIPアドレス」が必要になります。 

● パブリックIPアドレス

「パブリックIPアドレス」はインターネットからの通信を受け付けるのに必要なアドレスになります。
この「パブリックIPアドレス」は仮想マシンのNICには直接は割り当れません。

外部からそのIPアドレスへパケットを送ると、Azure でNATがかけられ「プライベートIPアドレス」に書き換え(マップ)された上で、仮想マシンのNICに到着します。仮想マシンから送付した場合は逆に「プライベートIPアドレス」から「パブリックIPアドレス」に書き換え(マップ)されます。
NICには直接設定されてないけど、実質的に使用されている事から、「VIP」(Virtual IP)とも呼ばれます。

(プライベートIPアドレスはNICに割り当てられ、パブリックIPアドレスはインターネットとのアクセスでマップされる)

 「パブリックIPアドレス」にもまた「動的」と「静的」があります。

「動的」は仮想マシンが起動したときにIPアドレスが割り当てられ、停止したときに解放されます。
「静的」は特定のIPアドレスが常に割り当てられます。なお、静的に確保された「パブリックIPアドレス」は「予約済IPアドレス」とも呼ばれます。 

「パブリックIPアドレス」には「プライベートIPアドレス」の時と異なる点がいくつかあります。VIPとしてマップ(NAT)されるというのもその1つです。それ以外にも、以下の点が異なります。

● パブリックIPアドレスには「DNS名」が付けれる

「パブリックIPアドレス」は、 <指定の名前>.<ロケーション>.cloudapp.azure.com というDNS名を設定することができます。
例えば、東日本リージョンで動作している foocontoso という名前の仮想マシンなら、foocontoso.japaneast.cloudapp.azure.com というDNS名を付けれます。

インターネット側の端末などからは、IPアドレスの値だけではなく、foocontoso.japaneast.cloudapp.azure.com という名前でもアクセスを行う事ができる訳です。 

これは特に、「動的」の「パブリックIPアドレス」の場合に便利です。
動的のIPアドレスは仮想マシンの停止~起動で IPアドレスの値が変わりえます。IPアドレスを指定してのアクセスだと、毎回IPアドレスを確認する必要が出てきます。
IPアドレスが変わってもこのDNS名とIPアドレスの対応は追従しますので、DNS名ならば IPアドレスの変化を気にする必要がなくなります。

お客様側のDNSの設定を追加することで、 <名前>.<ロケーション>.cloudapp.azure.com ではないDNS名を使う事も可能です。
例えば foo.contoso.com. の CNAME として foocontoso.japaneast.cloudapp.azure.com. とすれば、「動的」の「パブリックIPアドレス」でも foo.contoso.com のような独自のDNS名を割り当てる事ができます。 

一方、CNAMEではなくAレコードが必要なメールサーバの構築をする場合や、ファイアーウォールの設定で、通信できる対象をIPアドレスで指定しなければならない場合、「動的」では不向きとなります。
こうした時には「静的」の「パブリックIPアドレス」を使用します。
「静的」でIPアドレスを固定し、独自のDNSでそのIPアドレスへの名前をAレコードで定義する、固定されたIPアドレスをファイアーウォールで通信の許可先として設定する、などが可能になるためです。

● パブリックIPアドレスの値を決めることはできない 

「パブリックIPアドレス」ではIPアドレスの値そのものを利用者が決めることはできません。 

「静的」でも「動的」でも、どのIPアドレスが割り当てられるかは、割り当てられるまで分かりません。
割り当てられるのは Azure のもつグローバルIPアドレスのプールにあるIPアドレスのどれかで、例えば2つのパブリックIPアドレスで連番がほしい、などは指定できません。

● あえて「パブリックIPアドレス」を割り当てないことができる 

ネットワークインターフェイスにとって「プライベートIPアドレス」は必須のもので、動的か静的かぐらいしか選択肢がありません。
しかし、「パブリックIPアドレス」は、動的で割り当てるのか静的で割り当てるのか以外に、そもそも「割り当てない」という選択肢があります。

 「パブリックIPアドレス」を割り当てなかったネットワークインターフェイスへは、外部からアクセスする手段がなくなります。たとえ仮想マシンが SSH や RDP で接続待ちしていても、宛先としてのIPアドレスがないので外部から接続することはできません。

逆に、仮想マシンが外部へ通信することができます。このときは、Azure が保有している適当なパブリックIPアドレスが一時的に利用されます。 

DBサーバのように外部からアクセスされては困る場合、だけど WindowsUpdate や  yum update で外部のサーバからのアップデートは取得したいときなどは、「パブリックIPアドレス」を割り当てなければいいわけです。

 

●「静的」の 「パブリックIPアドレス」は有償である

これも重要な点です。「パブリックIPアドレス」は課金対象です。使えば使っただけコストがかかります。 
ではどれぐらいかかるかですが、以下料金ページに説明があります。

https://azure.microsoft.com/ja-jp/pricing/details/ip-addresses/

 ただ、少々複雑なため別の機会に改めて説明します。