Amazon Web Services ブログ

AWS PrivateLink とデュアルスタック Network Load Balancer の UDP サポートにより IPv6 アプリケーションへの移行を加速

本稿では、AWS PrivateLink の User Datagram Protocol (UDP) サービスサポートを活用し、デュアルスタック Network Load Balancer (NLB) の UDP サポートにより Internet Protocol version 6 (IPv6) への移行を加速する方法について解説します。2つの新機能の設定手順やユースケース、既存環境に統合するためのベストプラクティスを解説します。

PrivateLink の UDP サポートが追加されたことで、AWS PrivateLink を使用して Amazon Virtual Private Cloud (VPC) を、PrivateLink エンドポイントを通じて公開される UDP ベースのサービスへプライベートに接続できるようになりました。サービスは、複数の VPC に跨る AWS 環境にデプロイでき、またはパートナーや Software as a Service (SaaS) プロバイダーがお客様の AWS アカウントと共有することができます。Transmission Control Protocol (TCP) ベースのサービスにアクセスする際と同様に、UDP ベースの VPC エンドポイントサービスにアクセスするための VPC エンドポイントを作成できるようになりました。

IPv6 導入の加速を支援するため、AWS では現在デュアルスタック NLB の UDP リスナーをサポートしています。これにより、リアルタイムゲームや Voice over IP (VoIP)、メディアストリーミングなどの UDP ベースのアプリケーションへの着信トラフィックを自動的に分散し、高可用性とスケーラビリティを確保することができます。デュアルスタック NLB は、IPv4 / IPv6 両方のクライアントがアプリケーションのエンドポイントにアクセスできるようにし、AWS 上での IPv6 の導入を加速させます。デュアルスタック NLB の UDP サポートにより、TCP リスナーで利用可能な機能 (ヘルスチェック、自動スケーリング、透過的アップグレードなど) を、カスタムロードバランシングソリューションを維持する必要なく利用できます。

前提条件

本稿では、Amazon VPCElastic Load BalancingNLBAWS PrivateLinkAmazon CloudWatch など、AWS の基本的なネットワーキング構成に精通していることを前提としています。また、IPv4 や IPv6、TCP、UDP にも精通していることを想定しています。これらのサービスや概念の定義に焦点を当てるのではなく、2つの新機能のユースケースと設定手順を示すために使用します。AWS 上での IPv6 導入リソースの詳細は、AWS re:Postの記事「Get started with IPv6 on AWS – Resources & Content」を参照してください。

デュアルスタック NLB と AWS PrivateLink の UDP サポート

デュアルスタック NLB の UDP サポートにより、クライアントは IPv4 / IPv6 の両方を使用して UDP サービスに接続できます。この機能を使用するには、デュアルスタック NLB の UDP リスナーに対して IPv6 タイプのターゲットグループを作成する必要があります。NLB は IPv6 を使用して UDP トラフィックをターゲットに送信します。

クライアントは、関連する Fully Qualified Domain Name (FQDN) を解決することで、UDP リスナーを持つデュアルスタック NLB に直接アクセスできます。また、UDP リスナーを持つデュアルスタック NLB を使用して AWS PrivateLink サービス (VPC エンドポイントサービス) を構成することもできます。クライアントは IPv4 または IPv6 を使用して、UDP ベースのサービスにアクセスするために、VPC 内に AWS PrivateLink エンドポイント (VPC エンドポイント) を作成することができます。

図1 は、クライアントが IPv4 または IPv6 を使用して UDP 経由で VPC エンドポイントサービスに接続するアーキテクチャです。NLB はデュアルスタックで、サービス用の UDP リスナーを持っています。サービスプロバイダーのサービスのターゲットグループは、IPv6 を使用する必要があります。クライアントには、IPv4、IPv6、またはデュアルスタック VPC エンドポイントをデプロイし、トラフィックを送信するオプションがあります。クライアントは、VPC エンドポイントに接続することで、UDP ベースのサービスを利用できます。

This figure shows clients connecting over IPv4 and IPv6, the NLB set to dual stack, and the NLB connections to its target group over IPv6.

図1. デュアルスタック UDP NLB クライアントとターゲットの IP 互換性を示すネットワークトポロジー図

デュアルスタック NLB の 送信元 IP アドレスの保持

TCP および TLS リスナー

IPv4 クライアントが IPv6 ターゲットを持つデュアルスタック NLB に直接接続する場合、NLB はクライアントの IPv4 アドレスを保持できません。IPv6 が IPv4 との下位互換性を持たないためです。IPv6 ターゲットはクライアントの IPv4 アドレスを処理できないため、NLB はクライアントの IPv4 送信元アドレスを自身の IPv6 アドレスに変換し、ターゲットの IP バージョンに合わせます。

同様に、IPv4 および IPv6 クライアントが VPC エンドポイントに接続する場合、NLB はプロトコルバージョンに関係なく、クライアントの IP アドレスを保持しません。NLB では IP NAT が行われるため、クライアント VPC とサービスプロバイダー VPC 間で IP アドレスが重複していても AWS PrivateLink を使用できます。NAT の結果、ターゲットアプリケーションはクライアントの IP アドレスを認識しません。ターゲットアプリケーションにクライアント IP アドレスを知らせるために、ターゲットグループで Proxy Protocol version 2 (PPv2) を有効にすることができます。これにより、NLB はクライアント IP アドレスを Type-Length-Value (TLV) としてパケットヘッダーに追加できます。この機能は、IPv4 および IPv6 の両方のタイプのターゲットグループで有効にできます。

UDP および TCP_UDP リスナー

UDP はコネクションレスプロトコルであるため、デュアルスタック NLB の UDP サポートにおいて送信元 NAT には異なる実装が必要です。TCP と比較して2つの主要な違いがあります。

  1. UDP は TCP と異なりコネクションの概念がないため、ポートを使用して NLB を通過するセッションを追跡することができません。そのため、NLB は IPv6 アドレスを使用して UDP リスナーの各クライアントを一意に識別します。
  2. TCP トラフィックの場合、NLB はコネクションが確立されたときに最初のパケットにのみ PPv2 ヘッダーを追加します。UDP では、コネクションが確立されることはなく、各パケットが独立したものとして扱われます。その結果、UDP ターゲットグループで PPv2 が有効になっている場合、NLB はすべてのパケットに PPv2 ヘッダーを追加します。

デュアルスタック NLB の UDP リスナーと、UDP ベースの VPC エンドポイントサービスの設定手順を見ていきましょう。

デュアルスタック Network Load Balancers の UDP リスナーの設定

始める前に、以下の前提条件を満たしていることを確認してください。

  • VPC IP 設定の確認:VPC に IPv6 プレフィックスが関連付けられていることを確認してください。VPC における IPv6 の設定に関する詳細については、Amazon VPC ユーザーガイドの「VPC の IPv6 サポートを追加する」を参照してください。
  • サブネット IP 設定の確認:NLB のサブネットはデュアルスタックである必要があります。ターゲットグループのサブネットはデュアルスタックまたは IPv6 のみのいずれかです。
  • Amazon Elastic Compute Cloud (Amazon EC2) インスタンス設定の確認:各インスタンスにはプライマリ IPv6 アドレスが設定されている必要があります。プライマリ IPv6 アドレスの設定に関する詳細については、Amazon EC2 ユーザーガイドの「ネットワークインターフェイスの IP アドレスを管理する」を参照してください。
  • NLB と ターゲットのセキュリティグループインバウンドルールの作成:セキュリティグループのインバウンドルールで、NLB の UDP リスナーとターゲットがトラフィックを受信するように、設定されているポートで UDP を許可する必要があります。
  • アプリケーションが IPv6 トラフィックを許可していることの確認:アプリケーションが IPv6 トラフィックを処理でき、IPv6 をサポートするソケットライブラリを使用していることを確認してください。

次の手順は、新規および既存のデュアルスタック NLB に対して UDP リスナーを構成する方法を示しています。

ステップ1 (任意):既存の NLB を変更してデュアルスタックとソース NATを使用する

IP アドレスタイプをデュアルスタックに変更するには、既存の UDP および TCP_UDP リスナーを削除し、図 2 に示すように NLB サブネットがデュアルスタックであることを確認する必要があります。

This figure is an AWS management console screenshot which states the requirements for an IP address type change. It says, "All of the following must be true before changing your load balancer- to Dualstack. First, any existing UDP or TCP_UDP listeners must be deleted. After switching to Dualstack you will be able to configure IPv6-compatible UDP and TCP_UDP listeners. Second, the VPC subnets within the network mapping must include an IPv6 CIDR.

図2. NLB の IP アドレスタイプを変更する前の要件

既存の NLB の IP アドレスタイプを更新する場合、Amazon EC2 コンソールのロードバランサーに移動し、対象の NLB を選択します。図3 のように、アクションを選択し、IP アドレスタイプの編集を選択します。

This figure is an AWS management console screenshot that shows choosing a load balancer, selecting "Actions", and then choosing "Edit IP address type".

図3. NLB の IP アドレスタイプを編集

NLB を変更し、ロードバランサーの IP アドレスタイプデュアルスタックに変更する際、IPv6 ソース NATのプレフィックスを有効にするオン (サブネットごとのソース NAT プレフィックス) に設定し、サブネットを選択し、ソース NAT IPv6 アドレスを割り当てます。図4 に例を示しています。

This figure is an AWS management console screenshot which shows the modifications to make to your load balancer. You choose dual stack, turning the prefix for IPv6 source NAT on, and assigning IPv6 addresses for the source NAT capability through auto-assignment.

図4. デュアルスタックに変更し、IPv6 ソース NAT のプレフィックスを有効にし、IPv6 アドレス範囲を設定

ステップ2:新しいデュアルスタック UDP NLB を作成する

UDP リスナーを持つ新しいデュアルスタック NLB を作成するには、Amazon EC2 コンソールのロードバランサーに移動し、ロードバランサーの作成を選択します。Network Load Balancer を選択し、作成を選択します。基本的な設定で、NLB に一意の名前を付け、スキーム (内部またはインターネット向け) を選択します。ロードバランサーの IP アドレスタイプでは、デュアルスタックを選択します。図5 に例を示しています。

This figure is an AWS management console screenshot of creating a new dual stack NLB. The name is an arbitrary name you define. The scheme we selected is Internal rather than Internet-facing, and the IP address type is set to dual stack.

図5. NLB の基本的な設定

ステップ3:NLB サブネットとソース NAT 設定を構成する

図6 に示されているように、NLB をデプロイする VPC を選択してください。

This figure is an AWS management console screenshot of selecting our VPC under the Network Mapping section.

図6. NLB の VPC を選択

図7 に示すように、IPv6 ソース NATのプレフィックスを有効にするオンに設定します。

This figure is an AWS management console screenshot which specifies to set the "Enable prefix for IPv6 Source NAT" option to "On".

図7. IPv6 ソース NATのプレフィックスを有効化

図8 に示すように、ソース NAT IPv6 プレフィックスの割り当て方法を選択してください。

This figure is an AWS management console screenshot which shows that you can select to set the Source NAT IPv6 prefix to be auto assigned or a custom IPv6 CIDR that you specify. We chose the auto-assign option.

図8. ソース NAT IPv6 プレフィックスオプション

NLB のアベイラビリティゾーンのマッピングサブネットセキュリティグループを選択し、設定を確認してロードバランサーの作成を選択してください。

ステップ4:Amazon EC2 インスタンスをターゲットとして登録する

前提条件にて、プライマリ IPv6 アドレスを持つように IPv6 ターゲットを登録することを言及しました。図9 に示すように、IPv6 ターゲットをターゲットグループに登録するために必要となります。

This figure is an AWS management console screenshot which shows your target group's targets and the ability to select the "Register targets" button to add more targets.

図9. ターゲットグループへのターゲットの登録

ステップ5:UDP リスナーを設定する

リスナーのプロトコルUDP または TCP_UDP に設定し、リスナーのポートを選択する必要があります。図の例では、UDP とポート 53 を選択しています。ターゲットグループの IP アドレスタイプの値は IPv6 に設定する必要があります。ターゲットグループの IP アドレスタイプを確認するには、Amazon EC2 コンソールのターゲットグループを参照してください。ターゲットグループの IP アドレスタイプは作成後に変更できません。図10 は、上記例における IPv6 ターゲットグループの UDP リスナー設定を示しています。

This figure is an AWS management console screenshot which shows that the listeners and routing section is completed by specifying a protocol, port, and default action. In this example, we specify UDP as the protocol, 53 as the port, and a default action to forward traffic to our target group.

図10. NLB のリスナーとルーティング

AWS PrivateLink を使用している場合は、以下の手順に進んでください。

デュアルスタック UDP の AWS PrivateLink サービスを作成する

AWS PrivateLink サービスを作成する (サービスプロバイダー側)

サービスプロバイダーであれば、AWS PrivateLink を使用して UDP サービスをクライアントと共有できるようになりました。サービスプロバイダーには、組織内のチームや Independent Software Vendors (ISV) などのパートナー、規制当局などの関連組織が含まれます。

1 つの手順だけで、VPC エンドポイントサービスを作成できます。Amazon VPC コンソールのエンドポイントサービスに移動し、図11 に示すようにエンドポイントサービスの作成を選択します。

This figure is an AWS management console screenshot of the VPC endpoint services page. There are currently no endpoint services listed. There is a button for "Create endpoint service" which is highlighted.

図11. VPC エンドポイントサービスの作成

図12 に示すように、以下のオプションを設定してください。

  • (任意) エンドポイントサービスに名前を付けます。
  • ロードバランサーの種類ネットワークに選択します。
  • 前もって設定した UDP リスナーを持つ NLB を選択します。
  • (任意) 承認が必要を選択します。この設定の詳細については、AWS PrivateLink ユーザーガイド接続リクエストを承諾または拒否するを参照してください。
  • (任意) プライベート DNS 名を有効化を有効にします。エンドポイントサービスのプライベート DNS 名の詳細については、AWS PrivateLink ユーザーガイドのVPC エンドポイントサービス DNS の名前を管理するを参照してください。
  • VPC エンドポイントサービスが提供する IP アドレスタイプを選択します。今回の例では、クライアントが IPv4 や IPv6、またはデュアルスタックの VPC エンドポイントを作成できるように、IPv4 と IPv6 の両方を選択します。
  • (任意) エンドポイントサービスにタグを設定します。
This figure is an AWS management console screenshot of the configuration when creating a VPC endpoint service. In this example, we provide an arbitrary name, select our UDP NLB, choose "Acceptance required", choose to support both IPv4 and IPv6 address types, and provide a Name tag.

図12. VPC エンドポイントサービスの設定オプション

UDP の AWS PrivateLink エンドポイントを作成する (クライアント側)

AWS PrivateLink サービスにアクセスするには、クライアント VPC に VPC エンドポイントを作成する必要があります。このセクションでは、本記事の構成前提条件セクションでネットワーク構成手順に従ったことを前提としています。

ステップ1:サービスプロバイダーがサポートしている IP バージョンを特定する

VPC エンドポイントで IPv6 を有効にするには、サービスが SupportedIpAddressType として IPv6 を持っている必要があります。サービスが IPv6 をサポートしているかどうかは、以下のコマンドを実行して確認できます。レスポンスの中で、SupportedIpAddressTypes が VPC エンドポイントサービスで有効になっている IP バージョンを示します。

aws ec2 describe-vpc-endpoint-services \
--service-names <service-name>
Bash

ステップ2:AWS PrivateLink エンドポイントを作成する

VPC エンドポイントを作成するには、図13 に示すように、以下の設定を行います。

  • (任意) VPC エンドポイントに名前タグを付けます。
  • 適切な VPC エンドポイントサービスをサービス名として選択します。
  • VPC エンドポイントをデプロイする VPC を選択します。IPv4、IPv6、またはデュアルスタックのエンドポイントを設定することができます。この設定は VPC エンドポイントサービスの SupportedIpAddressTypes 値とクライアントの機能に依存します。
  • (任意) 追加設定で、DNS 名を有効化を有効にすることができます。この設定の詳細については、AWS PrivateLink ユーザーガイドのプライベートDNS名を有効にするを参照してください。
  • VPC エンドポイントのサブネットセキュリティグループを選択します。
This figure is an AWS management console screenshot of the VPC endpoint settings when creating a PrivateLink endpoint. In this example, we choose an arbitrary Name tag. We choose a "Service category" of "Other endpoint services". We provide the service name which begins "com.amazonaws.vpce", followed by the region ID "us-west-2", followed by "vpce-svc", and then followed by a unique ID string. There is a button to "Verify service" and the service name is verified. Then, we choose our VPC, subnets, and IP address type of IPv6 for our endpoints. We also choose a security group for the endpoints.

図13. VPC エンドポイントを作成

新しく作成されたエンドポイント接続は、VPC エンドポイントサービスに対して承認が必要な場合、AWS PrivateLink サービスプロバイダーによって承認される必要があります。

Amazon CloudWatch を使用して UDP ベースのサービスを監視する

この設定を完了すると、カスタマーは UDP ベースのサービスにトラフィックを送信できるようになります。サービスプロバイダーは、以下のような Amazon CloudWatch メトリクスを使用して、健全性とパフォーマンスを監視できます。

  • NewConnectionCount:NLB を通過する新しい UDP フローの数を測定します。
  • PacketsOutToTarget:NLB から登録されたターゲットに送信された UDP パケットの数を測定します。
  • HealthyHostCount:ターゲットグループ内の健全なターゲット数を測定します。

これらの CloudWatch メトリクスは、UDP ベースのサービスが期待通りにトラフィックを処理していることを確認し、潜在的な問題を特定するのに役立ちます。詳細については、AWS PrivateLink ユーザーガイド AWS PrivateLink の CloudWatch メトリクスを参照してください。

考慮事項

デュアルスタック UDP NLB は既存の機能を維持します。多数の NLB を持つ 1 つの VPC エンドポイントサービスをサポートします。これにはオンプレミスのターゲットにトラフィックを送信する機能も含まれます。UDP リスナーを持つデュアルスタック NLB を提供する VPC エンドポイントサービスは、エンドポイントポリシー、プライベート DNS 名、セキュリティグループをサポートします。UDP サポートのリリースでも、AWS PrivateLink のスループット、サービスクォータ、送信元 IP の保持は変更ありません。

まとめ

本稿では、UDP サービスで AWS PrivateLink のサポートを活用する方法と、デュアルスタック NLB の UDP サポートを使用して IPv6 への移行を加速する方法について説明しました。2つの新機能の設定手順、ユースケース、既存の環境に2つの新機能を統合するためのベストプラクティスを概説しました。これらの機能は、IPv6 の採用と UDP ベースのサービスの AWS への移行を加速し、リアルタイムゲーム、Voice over IP (VoIP)、メディアストリーミングなどの UDP ベースのアプリケーションへのインバウンドトラフィックを自動的に分散するのに役立ちます。デュアルスタック NLB の UDP サポートにより、カスタムロードバランシングソリューションを維持する必要なく、ヘルスチェック、自動スケーリング、透過的なアップグレードなど、TCP リスナーで利用可能な同じ機能の恩恵を受けることができます。

VPC コンソールのエンドポイントサービスとエンドポイントのオプションを使用して、AWS PrivateLink の使用を開始してください。詳細については、AWS PrivateLink および VPC エンドポイントのユーザーガイドを参照してください。

本稿は、2024年10月31日に Networking & Content Delivery で公開された “Accelerate IPv6 application migration with AWS PrivateLink and dual stack Network Load Balancers UDP support” を翻訳したものです。翻訳は Solutions Architect の武松が担当しました。