share facebook facebook facebook twitter twitter menu hatena pocket slack

2021.03.30 TUE

Azure VM の SNAT Port枯渇への対処

新川 貴章

WRITTEN BY 新川 貴章

概要

  • Azure 初心者の新川です。今回は、Azure VM の SNAT Portが枯渇した場合の対処について、記載します。

Azure VM のSNAT とは

  • SNAT(ソースネットワークアドレス変換)とは、送信元となるプライベートアドレスをグローバルアドレスに変換する技術を指します。
  • Azure VMでは、パブリックロードバランサー(LB)のフロントエンド IPアドレスを使用して、バックエンドインスタンスにアウトバウンド接続を提供します。この通信においてSNATが利用され、バックエンドインスタンスは、LBのパブリック IPアドレスを共有します。

SNAT Port の制約

  • LBはバックエンドインスタンスからの接続要求を受けますが、接続の確立にはエフェメラルポートを使用します。このSNAT を使用するための一時的なポートを SNAT Portと呼びます。
  • パブリック IPアドレスがLB のフロントエンドIP として追加されると、最大で64,000 個の SNAT Portが使用できるようになります。逆に言えば、64,000個以上の SNAT Port が必要であれば、パブリック IPアドレスを追加する必要があります。
  • SNAT Port の詳細は、下記Azure Document を参照ください。
Azure Load Balancer を送信インターネット接続のプロキシとして使用する方法について説明します

Azure VM の SNAT Port枯渇

LBのアウトバウンド規則

  • 以前、下記記事において、VMSS のデプロイ方法を紹介しました。この時、LBに対してアウトバウンド規則を設定しています。SNATを使用するには、アウトバウンド規則が必要になります。このアウトバウンド規則に指定した「インスタンスごとのポート」or「バックエンド インスタンスの最大数」いずれかの設定によって、SNAT Port 数の割り当てが自動的に計算されます。(下図参照)
  • 前述の通り、パブリック IPアドレスあたり、64,000 個の SNAT Port が使用できるため、インスタンス 1台あたりの Port数 × LB 配下の VM 台数が 64k に収まるように設計する必要があります。
概要 Azure 初心者の新川です。今日は、VMSSのデプロイ方法をAzure Portal および Azure CLI の2パターンでご紹介します。構築で両方使ってみると、初めはAzure Portalの方が分かりやすいですが、慣れるとAzure CLI の方がサクサクと捗ります。 VMSSはVirtual Machin...

SNAT Port の枯渇について

  • 接続要求のバーストによって、SNAT Port の枯渇が発生する可能性があります。SNAT Port が枯渇した場合、バックエンドインスタンスへのSNAT Port割り当てが足りずパフォーマンスに影響を及ぼす、あるいはVMSSのスケールアウトに失敗します。
  • 以下は、使用可能なSNAT Port を超えたため、スケールアウトに失敗した場合のエラーメッセージです。

outboundrule exceeds total number of available ports XXXX. Reduce allocated ports or increase number of IP addresses for outbound rule.

対処1. インスタンス 1台あたりのPort割り当て数を減らす

  • SNAT Port の枯渇が発生した場合、可能であればインスタンス 1台あたりのPort割り当て数を減らします。
  • インスタンス 1台あたりの Port数 × LB 配下の VM 台数 = 64k に収まるようにSNAT Portを再設計する必要があります。

対処2. パブリック IPアドレスを追加する

  • インスタンス 1台あたりのPort割り当て数を減らすことが難しい場合は、パブリック IPアドレスを追加します。
  • 下記の例では、使用可能なSNAT Port数は"63992“となります。仮に、インスタンス 1台あたりのPort数を12,000個とした場合、「バックエンド インスタンスの最大数」は"5" になっております。

  • パブリック IPアドレスの追加手順を記載します。
  • 先ず、Azureコンソールから「パブリック IP アドレス」を選択し、追加でパブリック IP アドレスを作成します。

  • 次にロードバランサーの「フロントエンド IP 構成」を選択し、追加でフロントエンド IP アドレスを作成して先ほど作成したパブリック IP アドレスを指定します。

  • 続けて、「アウトバウンド規則」に、先ほど作成したフロントエンド IP アドレスを追加で割り当てます。フロントエンド IP アドレスの追加割り当て後、"2個が選択済み“に変わりました。
  • 下記の例では、使用可能なSNAT Port数は"127992“に増えました。また、"バックエンド インスタンスの最大数"も"10" に増えております。

SNAT Port のメトリクス

  • Load Balancer リソースにおいて、SNAT Port に関するメトリクスが取得できます。以下、ドキュメントからの説明抜粋です。
  • SNAT 接続数 (SUM)
    • Standard Load Balancer にて、パブリック IP アドレス フロントエンドにマスカレードされた送信フローの数を報告します。 成功した送信 SNAT フローと失敗した送信 SNAT フローのカウンターがレポートされるので、送信フローの正常性について、トラブルシューティングしたり、理解したりするのに役立てることができます。
  • 割り当てられる SNAT ポート (Average)
    • Standard Load Balancer にて、バックエンド インスタンスごとに割り当てられる SNAT ポートの数が報告されます。
  • 使用された SNAT ポート (Average)
    • Standard Load Balancer にて、バックエンド インスタンスごとに使用されている SNAT ポートの数が報告されます。

参考資料

Azure Load Balancer を送信インターネット接続のプロキシとして使用する方法について説明します
ご利用の Azure Standard Load Balancer を診断するために取得可能なメトリック、アラート、およびリソース正常性情報を使用します。
Azure Networking テクニカル サポートの山口です。 Azure VM がインターネットに接続する際には、パブリック IP アドレスでの送信元 NAT (SNAT) が必要です。Azure は、外部接続の SNAT に関して多くのオプションを提供していますが、オプションが多くて便利な反面...

元記事はこちら

Azure VM の SNAT Port枯渇への対処

cloudpack

cloudpackは、Amazon EC2やAmazon S3をはじめとするAWSの各種プロダクトを利用する際の、導入・設計から運用保守を含んだフルマネージドのサービスを提供し、バックアップや24時間365日の監視/障害対応、技術的な問い合わせに対するサポートなどを行っております。
AWS上のインフラ構築およびAWSを活用したシステム開発など、案件のご相談はcloudpack.jpよりご連絡ください。