LoginSignup
9
6

Azure VNet (Azure VM) からの外部接続(インターネット接続) について考える

Last updated at Posted at 2024-05-22

こんにちは、アーキテクトのやまぱんです。
補足コメントや質問、いいね、拡散、是非お願いします🥺!
間違ってたら優しく教えてください!

きっかけ

「既定の SNAT 通信が廃止されるし、いつ明示的な外部接続方法が必要になるかわからないから、Azure VM からの外部接続方法(インターネット接続)をまとめよ!」 との天啓が下りました。

2025 年 10 月 1 日よりも前に作成している既存の Azure VM は、現状、本通知の対象外となるため影響を受けませんが明示的に送信接続の設定を加えていただくことを推奨としています。

追記 : その後 RTT 比較もしてみました!

外部接続方法一覧表

さて早速ですが、外部接続方法の一覧とその機能の表になります。
表が大きくなるので 2 つに分けています。

  • 表1: 構成単位、IP 割当、NAT 方式、最大 SNAT ポート、タイムアウト、プロトコル、インバウンド接続
構成単位 IP 割当 NAT 方式 最大 SNAT ポート タイムアウト プロトコル インバウンド接続
既定のSNAT(*) VM or 可用性セット ランダム NAPT 1,024 4 TCP/UDP なし
NATGW サブネット 固定 NAPT 1,032,192(64,512/IP × 16) 4~120 TCP/UDP なし
Public IP NIC 固定 NAT - 4 TCP/UDP/ICMP/ESP あり
外部LB-送信規則 バックエンドプール 固定 NAPT 64,000 / Public IP 4~100 TCP/UDP 負荷分散規則やインバウンド NAT 規則 により可能
外部LB-負荷分散規則 バックエンドプール 固定 NAPT 1,024 4 TCP/UDP あり
Azure FW VNet (跨ぎも可) 固定 NAPT 624,000(2,496 / IP × 250 ) 4 TCP/UDP Azure FW の DNAT構成に依存
Azure FW + NATGW VNet (跨ぎも可) 固定 NAPT 1,032,192(64,512/IP × 16) 4 TCP/UDP Azure FW の DNAT構成に依存
  • 表2: スループット、ユースケース
スループット ユースケース
既定のSNAT(*) VM に依存 テスト用 VM
NATGW MS Learn参照 大量アウトバウンド
Public IP VM に依存 VM 単位 の Public IP 、インバウンド通信も必要な場合
外部LB-送信規則 VM に依存 ・負荷分散
・サブネット未満の単位で送信接続制御
外部LB-負荷分散規則 VM に依存 負荷分散規則と同時に簡易送信接続を構成する場合
Azure FW MS Learn参照 集中管理
Azure FW + NATGW NATGW に準ずる 集中管理

*NATGW は Azure NAT Gateway をさす。
*既定の SNAT は廃止が決定しています。Ref:MS Learn

  • 既定の SNAT を使う条件:

同じグループ(VM、可用性セット、またはVMスケールセット)内のすべての NIC が、Standard PIP、Standard Public LB、またはNAT Gatewayに関連付けられていないこと。VMSS (仮想マシンスケールセット) の一部ではないこと。

VNet をまたがる集約構成をとれるか?

結論から言うと Azure Firewall を用いた構成(Azure Firewall 単体 or Azure Firewall + NATGW) でのみ、ルーティング次第で取れます。

また、 Azure Load Balancer や Azure NAT Gateway は以下のように VNet をまたぐ構成をサポートしていません。

ロード バランサーの規則は、2 つの仮想ネットワークにまたがることはできません。 すべてのロード バランサーのフロントエンドとそのバックエンド インスタンスは、1 つの仮想ネットワーク内に存在する必要があります。

NAT ゲートウェイは、複数の仮想ネットワークにまたがることはできません。

その他の方法として NVA にアウトバウンド 接続をルーティングし、その NVA に Public IP をつけてアウトバウンド接続を構成するようなやや作りこむ方法もありますが、ここでは考慮しません。

Azure Firewall 単体か Azure Firewall + NATGW か

集約化、および一括管理のために Azure Firewall を採用するとなった場合に、Azure Firewall 単体か Azure Firewall + NATGW かの検討が必要になります。

  • ポイント1 . Azure Firewall のゾーン冗長が必要か否か
     まず、そもそも要件としてゾーン冗長が必要な場合、 Azure FW + NATGW の構成は取れません。
    Azure Portal の場合、以下より確認可能です。
    image.png

  • ポイント2. Azure Firewall + NATGW のメリット

    1. 最大 SNAT ポート数が NATGW を使った時の方が多い
    2. NATGWの方が IP アドレスの集約ができる
        Azure Firewall では 1 インスタンス (1 Public IP) あたり 2,496 個の SNAT ポート
        NAT Gateway では 1 Public IP アドレスあたり 64,512 個の SNAT ポート
  • ポイント3. Azure Firewall のメリット
    NATGW が無い分コストが安い

  • ポイント4. IP アドレスの割り当て
    Azure Firewall + NATGW はIP 割当がランダムなのに対し、Azure Firewall の場合は概ねプライマリ IP が枯渇したら次の IP を使うような動きになる

  • ポイント5. 最大 SNAT ポート数
    Azure Firewall + NATGW :の方が最大 SNAT ポート数は以下の通り大きいです。

構成方法 最大SNATポート数
Azure Firewall + NATGW 1,032,192 (64,512/IP × 16)
Azure Firewall 624,000 (2,496 / IP × 250)

その他、および詳細は下記参照

  • NAT ゲートウェイを使用した SNAT ポートのスケーリング

Azure DDoS Protection について

Azure DDoS Protection は Public IP リソースに着けることが可能です。
(注意:NATGW には DDoS プロテクション をつけられませんが、他のリソースと異なり、送信専用接続なので考慮不要です)

不特定多数のIPアドレスからの通信を許可している場合、Azure DDoS Protection を付けないと万一の場合、特定の IP アドレス(NAT の Public IP) が DDoS 攻撃を受けるとそれが紐づくインスタンスリソースがダウンする可能性があるので、重要なシステムの場合には必ず DDoS 保護 を有効にしましょう。

また Azure には標準で Azure 基盤そのものに対する DDoS 保護(Azure DDoS インフラストラクチャ保護)が存在しますが、こちらはお客様固有のリソース・環境に対する保護ではありません。

他のサービスでは、既定のインフラストラクチャ レベル DDoS 保護が適用
Ref:https://learn.microsoft.com/ja-jp/azure/ddos-protection/ddos-protection-overview#architecture

特定の IP アドレスからのインバウンド通信しか NSG で許可していない場合は、Azure DDoS 保護 (有償プラン) を導入しても、インバウンド通信を軽減するような動き・攻撃を軽減する措置はそもそもとれないので、のこるメリットとしては監視できるメリットがあります。

  • Azure DDoS Protection とは何か?

そもそもなぜ SNAT ポート数を気にするか

NAT(Network Address Translation)や SNAT(Source NAT)の概念を理解する際に、なぜ SNAT ポート数を気にする必要があるのか疑問に思うかもしれません。
これには一般論として以下のような理由があります。

1. ポートの数に限りがある

各 IP アドレスは最大 65535 のポートが使えます。一つの Public IP を多くの端末が共有すると、1 台当たりが利用可能な Public IP のポート数が限られてきます。例えば、企業のネットワークや家庭内の複数のデバイスがすべて同じパブリックIPアドレスを使用する場合、この限られたポート数がすぐに枯渇してしまいます。

2. ポートがすぐに解放されない

セッションが終了しても、ポートがすぐに解放されないことがあります。
これにより、実際には使用されていないポートも再利用できず、枯渇してしまう可能性が高まります。

3. アプリケーションによるポートの大量使用

特定のアプリケーションやサービスは、一度に大量のポートを使用するため、ポート枯渇の原因となります。

例え話で理解する

想像してみてください。ある家(内部ネットワーク)には、1本の電話線(1つのパブリックIPアドレス)しかありません。この家族は、電話をかけるために多くの電話番号(ポート)を共有します。しかし、電話線は限られた数の電話しか同時にかけられません。

もし家族全員が同時に電話をかけようとすると、使える電話番号がすぐになくなってしまいます。さらに、電話が終わってもすぐには電話番号を再利用できないことがあります。これがSNATでポートが枯渇する理由です。

対策

SNATポート枯渇を回避するためには、以下のような対策が考えられます。

  • 複数のパブリックIPアドレスを使用する。
  • ポートを効率的に管理する。

その他参考

  • Azure VM の送信接続 (SNAT) オプション まとめ
    こちら非常に詳しくまとまっておる公式サポートブログです。

送信規則は Standard SKU のパブリック ロードバランサーで利用可能な送信接続構成です。バックエンド プールに Azure VM を配置して送信規則を定義すると、フロントエンドのパブリック IP アドレスを使った SNAT が提供されます。

注意事項
複数のパブリック IP アドレス (フロントエンド IP 構成) をまとめて指定すると、バックエンド プール全体としては 64,000 x だけ SNAT ポートが用意されます。しかし、どれだけパブリック IP アドレスを追加しても、各 Azure VM に割り当てられる最大の SNAT ポート数は 64,000 までです。

  • Azure NAT Gateway とは

完全にプライベートなままでインターネットにアウトバウンド接続できます。 インターネットからの未承諾のインバウンド接続は、NAT ゲートウェイ経由では許可されません。 NAT ゲートウェイを通過できるのは、アウトバウンド接続への応答パケットとして到着するパケットのみです。

  • Azure Firewall での SNAT/DNAT について

Azure Firewall での NAT 構成について非常にわかりやすく説明されています。

  • Azure Firewall のスケールアウトにはどのくらいの時間がかかりますか。 - Azure Firewall に関する FAQ

  • Azure NAT Gateway 接続のトラブルシューティング

TCP アイドル タイムアウト タイマーを 4 分より短く設定することはできません。

謝辞

この記事を作成するにあたり、親愛なる同僚・仲間にアドバイスをいただきました、感謝します。


補足:2024/05/21(火) 時点での情報です。

9
6
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
9
6