今日はSNAT について書きます。
あまり意識していなかったのですが、Azure では仮想マシンにパブリックIPをつけなくても、インターネットに出られます。これは、既定でSNAT (Source NAT)がはたらいているからで、サブネットを出るときに自動的にパブリックIP アドレスに変換されているんだそうです。
この既定のSNAT は廃止されることが決まっています。そのため、インターネットに出る他の手段を考えておく必要があります。
yamapan さんが詳しくまとめてくれているのでご参照ください。記事
この記事では、ロードバランサーを使ったSNAT を検証してみます。
概要
- 既定のSNAT を観察。つまりパブリックIP を与えない仮想マシンからブラウザでインターネットに出ます。
- 既定のSNAT を無効にして、インターネットに出られないことを確認。
- ロードバランサーのNAT 機能を有効にし、インターネットに出られることを確認。
1.既定のSNAT
適当に仮想ネットワークを作成し、パブリックIP を持たない仮想マシンを作成します。
仮想ネットワークを作成するときにも特に注意はありません。Bastion 入れています。
赤枠のところで、今回のネタになっているSNAT (言葉は出てきてませんが)について書かれていますね。要するに既定のSNAT はおすすめしません、と言っているのだと思います。そしてその対策としてNAT ゲートウェイがおすすめだと。
仮想マシンの作成時に、ロードバランサーが作れますがここでは「なし」を選択します。
パブリックIP はつけません。
インターネットに出る
Bastion 経由で仮想マシンにRDP し、ブラウザでIP アドレスを確認すると、このようなIP アドレスが見えました。
これはサブネットを出るときに変換された後のパブリックIP アドレスです。
仮想マシンを確認すると、パブリックIP はありません。既定のSNATなのでIP アドレス確認くんで見たアドレスはここで見えません。
意識しないとまぁそんなもんか、という感じですが、パブリックIP がないと外には出られないはずのところ、Azure が貸してくれているみたいなもんで、デフォルトでは出られるようになっています。それが今後廃止になる、というところにこの記事のモチベーションがあります。
2.既定のSNAT を無効にする
サブネットの作成時に既定のSNAT を無効にすることができます。有効/無効を作成後に切り替えることはできません。検証のために作り直します。
仮想ネットワークの作成時に、プライベートサブネットという設定を行います。
default サブネットを選択するとそのオプションがでてきます。プレビュー期間のようですね。
これに✓を入れて作成。そのほかは既定のSNAT を試したときと同じです。
仮想マシンの方は、プライベートサブネットにしたdefault サブネットに置くこと、パブリックIP を与えないことが注意点です。
インターネットに出る
先ほどと同じようにBastion した仮想マシンからブラウザでIP アドレス確認くんに接続しようとしても、確認できません。プライベートサブネットで既定のSNAT が無効になっているためこうなっています。
3.ロードバランサーでSNAT
インターネットに出る方法はさまざまあります(詳細は冒頭で紹介した記事をご覧ください)。
今回はロードバランサーを使ってみます。
ロードバランサーはフロントエンドIP アドレスで通信を待ち受け、バックエンドプールに通信を分散する機能を持ちます。逆に、バックエンドプールからインターネットに出るときは、フロントエンドIP アドレスに変換してくれます。
それではロードバランサーの作成から始めます。
種類はパブリックで、SKU はStandard にしておきます。種類をパブリックにしないとパブリックIP 使わないんじゃないか、たぶん。また検証しよう。
フロントエンドIP 構成では、パブリックIP アドレスを新規作成しました。
バックエンドプールでは、バックエンドプールの追加から仮想ネットワークを選択し、NIC を選択し、IP 構成には仮想マシンを追加します。
今回はインバウンド規則は触りません。
アウトバウンド規則では、
- 先ほど新規作成したパブリックIP アドレスをフロントエンドIP アドレスに指定
- プロトコルはTCP (HTTPS を運んでほしいため)
- バックエンドプールに先ほどのバックエンドプールを指定
- ポートの割り当ては適当に設定しました。手動、インスタンスごとのポート数、16 のように
作成されたら、すでに構成は終わっているので、先ほどの仮想マシンのBastion に戻ってインターネットへの接続を試みます。
インターネットに出る
ブラウザの更新ボタンをクリックすると即時でページが変わりました。
さてこのIP アドレスは??というと・・・
お分かりの通り、ロードバランサーのフロントエンドIP アドレスですね。
仮想マシンが、ロードバランサーを経由して、インターネットに出られるようになりました。
おわりに
あんまり意識していませんでしたが、パブリックIP アドレスがないと外には出られないのが本来です。Azure は今まで意識しなくてもいいようになっていたようです。
AWS は元から(?)NAT ゲートウェイを置かないとインターネットに出られない仕組みだったようです。1年ほど前にやったAWS の本を復習したときにハッとしました。
この構成は、既定のSNAT が廃止になったら一般化するかなぁと思うので、今度はBicep でIaC にしてみたいと思います。
今回はここまで。お疲れさまでした。