概要
Azureのルーティングを設定して、外部への通信をAzureFW経由にしていたのだが、これをすると外部通信の際の接続元グローバルIPアドレスがAzureFWに紐づけたグローバルIPアドレスからランダムに選出され、固定ができないという問題に直面したので解決メモ。
外部に接続する際、グローバルIPアドレスを固定できないと、外部サービス連携時のIPアドレス制限ができない(設定が大変)なこともあり、これを固定したかったお話。
前提
- 仮想ネットワークのルーティングでデフォルトルートをAzureFWに向けている
やりたいこと
- Azure仮想マシンが外部に接続する際のグローバルIPアドレスを固定したい
- でも外部から仮想マシンへの接続にはAzureFWを噛ませたい
方法
以下の2点を設定すればOK
- AzureネットワークのデフォルトルートをInternetに向ける
- 独自にルーティング設定をしていなければ、基本的にはこの設定になってます。
- 仮想マシンのNICにパブリックIPアドレスを紐づける
ざっと調べてみた感じ、Azure仮想マシンの送信元グローバルIPアドレスの選出は以下のようになっている模様。
仮想マシンへのPIP付与 | デフォルトルート | 送信元PIP |
---|---|---|
なし | Internet | ランダムで決定(再起動するまでは固定) |
あり | Internet | 仮想マシンのPIPで固定 |
なし | AzureFW | AzureF/WのPIPからランダム決定 |
あり | AzureFW | AzureF/WのPIPからランダム決定 |
※ PIP -> パブリックIPアドレス
固定したい場合はデフォルトルート->Internet + 仮想マシンへのPIP付与
デフォルトルートがインターネットを向いていれば、仮想マシンにPIPを付与することで、外部に接続する際のグローバルIPアドレスもそれに固定が可能。
ただし、この場合は外部への通信フィルタリングがNSG依存になるため、正しくNSGを設定しましょう。初期設定では仮想マシン->Internetへの接続は全OPENになっています。
必要な通信のみをOPENにしたい場合、既定ルールのAllowInternetOutBondを別のルールで上書きして拒否するように設定する必要があります。
AzureFW経由にすると現実的に固定できない
デフォルトルートをAzureFWに向けている場合、仮想マシンに付与されたPIPは無視され、AzureFWでSNAT変換が行われる。その際に選出されるグローバルIPアドレスは、AzureFWに紐づけられたPIPからランダムで選出されます。
AzureFWに紐づけられたPIPが1つの場合は疑似的に固定できるが、外部からのDNAT設定のため複数紐づけが必要な場合が多いため、そうなるとランダム選出になってしまう。また、ランダムになってしまうことで、どの仮想マシンからの通信か?が判別できなくなってしまいます。
逆に言えば、Azureネットワークから出る通信も含めてすべてAzureF/Wで管理したい、ということになると送信元グローバルIPアドレスの固定や、特定ができなくなってしまいます。
終わり
わかってしまえば簡単な話ですが、できればAzureF/Wを経由する状態でも特定のIPアドレスでSNATできるようにしてほしい・・・ MSさんなんとかなりませんかね!