2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

既定のSNATを無効にして、ロードバランサーのSNATを利用する

Last updated at Posted at 2024-07-01

今日はSNAT について書きます。

あまり意識していなかったのですが、Azure では仮想マシンにパブリックIPをつけなくても、インターネットに出られます。これは、既定でSNAT (Source NAT)がはたらいているからで、サブネットを出るときに自動的にパブリックIP アドレスに変換されているんだそうです。

この既定のSNAT は廃止されることが決まっています。そのため、インターネットに出る他の手段を考えておく必要があります。
yamapan さんが詳しくまとめてくれているのでご参照ください。記事

この記事では、ロードバランサーを使ったSNAT を検証してみます。

概要

  1. 既定のSNAT を観察。つまりパブリックIP を与えない仮想マシンからブラウザでインターネットに出ます。
  2. 既定のSNAT を無効にして、インターネットに出られないことを確認。
  3. ロードバランサーのNAT 機能を有効にし、インターネットに出られることを確認。

1.既定のSNAT

適当に仮想ネットワークを作成し、パブリックIP を持たない仮想マシンを作成します。
仮想ネットワークを作成するときにも特に注意はありません。Bastion 入れています。
image.png
赤枠のところで、今回のネタになっているSNAT (言葉は出てきてませんが)について書かれていますね。要するに既定のSNAT はおすすめしません、と言っているのだと思います。そしてその対策としてNAT ゲートウェイがおすすめだと。

仮想マシンの作成時に、ロードバランサーが作れますがここでは「なし」を選択します。image.png
パブリックIP はつけません。

インターネットに出る

Bastion 経由で仮想マシンにRDP し、ブラウザでIP アドレスを確認すると、このようなIP アドレスが見えました。
image.png
これはサブネットを出るときに変換された後のパブリックIP アドレスです。
仮想マシンを確認すると、パブリックIP はありません。既定のSNATなのでIP アドレス確認くんで見たアドレスはここで見えません。
image.png
意識しないとまぁそんなもんか、という感じですが、パブリックIP がないと外には出られないはずのところ、Azure が貸してくれているみたいなもんで、デフォルトでは出られるようになっています。それが今後廃止になる、というところにこの記事のモチベーションがあります。

2.既定のSNAT を無効にする

サブネットの作成時に既定のSNAT を無効にすることができます。有効/無効を作成後に切り替えることはできません。検証のために作り直します。

仮想ネットワークの作成時に、プライベートサブネットという設定を行います。
default サブネットを選択するとそのオプションがでてきます。プレビュー期間のようですね。
image.png
これに✓を入れて作成。そのほかは既定のSNAT を試したときと同じです。
仮想マシンの方は、プライベートサブネットにしたdefault サブネットに置くこと、パブリックIP を与えないことが注意点です。image.png

インターネットに出る

image.png
先ほどと同じようにBastion した仮想マシンからブラウザでIP アドレス確認くんに接続しようとしても、確認できません。プライベートサブネットで既定のSNAT が無効になっているためこうなっています。

3.ロードバランサーでSNAT

インターネットに出る方法はさまざまあります(詳細は冒頭で紹介した記事をご覧ください)。
今回はロードバランサーを使ってみます。
ロードバランサーはフロントエンドIP アドレスで通信を待ち受け、バックエンドプールに通信を分散する機能を持ちます。逆に、バックエンドプールからインターネットに出るときは、フロントエンドIP アドレスに変換してくれます。
それではロードバランサーの作成から始めます。
image.png

種類はパブリックで、SKU はStandard にしておきます。種類をパブリックにしないとパブリックIP 使わないんじゃないか、たぶん。また検証しよう。
image.png

フロントエンドIP 構成では、パブリックIP アドレスを新規作成しました。
image.png

バックエンドプールでは、バックエンドプールの追加から仮想ネットワークを選択し、NIC を選択し、IP 構成には仮想マシンを追加します。
image.png

今回はインバウンド規則は触りません。

アウトバウンド規則では、

  1. 先ほど新規作成したパブリックIP アドレスをフロントエンドIP アドレスに指定
  2. プロトコルはTCP (HTTPS を運んでほしいため)
  3. バックエンドプールに先ほどのバックエンドプールを指定
  4. ポートの割り当ては適当に設定しました。手動、インスタンスごとのポート数、16 のように
    image.png

これで検証通ったので作成しました。
image.png

作成されたら、すでに構成は終わっているので、先ほどの仮想マシンのBastion に戻ってインターネットへの接続を試みます。

インターネットに出る

ブラウザの更新ボタンをクリックすると即時でページが変わりました。image.png
さてこのIP アドレスは??というと・・・
お分かりの通り、ロードバランサーのフロントエンドIP アドレスですね。
image.png
仮想マシンが、ロードバランサーを経由して、インターネットに出られるようになりました。

おわりに

あんまり意識していませんでしたが、パブリックIP アドレスがないと外には出られないのが本来です。Azure は今まで意識しなくてもいいようになっていたようです。
AWS は元から(?)NAT ゲートウェイを置かないとインターネットに出られない仕組みだったようです。1年ほど前にやったAWS の本を復習したときにハッとしました。

この構成は、既定のSNAT が廃止になったら一般化するかなぁと思うので、今度はBicep でIaC にしてみたいと思います。

今回はここまで。お疲れさまでした。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?