Network Load Balancer (NLB) のデュアルスタックインスタンスは、IP バージョンアフィニティモードをサポートしています。このモードを有効にすると、IPv4 リクエストは IPv4 バックエンドサーバーのみに転送され、IPv6 リクエストは IPv6 バックエンドサーバーのみに転送されます。これにより、プロトコルを認識したトラフィックスケジューリングが可能になり、ネットワークアーキテクチャが簡素化されます。
ソリューションアーキテクチャ
問題となるシナリオ
IPv4 から IPv6 への移行中は、両方のプロトコルが共存することがよくあります。サーバーグループに IPv4 アドレスと IPv6 アドレスの両方を持つバックエンドサーバーが含まれている場合、NLB はデフォルトで IPv4 および IPv6 クライアントリクエストを区別しません。代わりに、ポーリングや最小接続数などのスケジューリングアルゴリズムに基づいてトラフィックを転送します。
その結果、クロスプロトコル転送が発生する可能性があります。たとえば、IPv6 クライアントからのリクエストが IPv4 のみをサポートするバックエンドサーバーに転送される、またはその逆のケースが発生します。このような不一致により、以下の問題が生じます。
バックエンドサーバーが送信元 IP アドレスを取得できず、地域ベースの分析や送信元 IP に基づくアクセス制御に影響が出る。
送信元 IP アドレスを取得するには、Nginx などの追加のプロキシレイヤーをデプロイし、Proxy Protocol を有効にする必要があります。これにより、運用およびメンテナンスコストが増加します。
ソリューション
NLB のサーバーグループは、IP バージョンアフィニティモードをサポートしています。このモードを有効にすると、4to4 および 6to6 のアフィニティ転送が行われます。
バックエンドサーバーは、追加のプロキシレイヤーを必要とせずに、対応するプロトコルのクライアント送信元 IP アドレスを直接取得できます。特定のプロトコルのすべてのバックエンドサーバーがヘルスチェックに失敗した場合、そのプロトコルのリクエストは、同一プロトコルの正常なバックエンドサーバー間でベストエフォートで配信されます。クロスプロトコル転送は発生しません。
適用範囲
カスタムドメイン名を登録します。本トピックでは、NLB インスタンスを中国 (上海) リージョンにデプロイします。そのため、ドメイン名にはICP 登録が必要です。
操作手順
開始前に、中国 (上海) リージョンに VPC1 という名前の VPC を作成済みであることを確認してください。また、ゾーン E およびゾーン G にそれぞれ vSwitch VSW1 および VSW2 を作成し、vSwitch に対して IPv6 が有効になっていることを確認してください。
1. ECS インスタンスの作成とサービスのデプロイ
次の表に従って、2 つの ECS インスタンスを作成します。
インスタンス名
リージョン
VPC
vSwitch
IP バージョン
ランタイムイメージ
ecs-ipv4
中国 (上海)
VPC1VSW1IPv4
Alibaba Cloud Linux 3.2104 LTS 64 ビット
ecs-ipv6
VSW2IPv6
ECS インスタンスを購入する際、「ネットワークとセキュリティグループ」の下にある無料 IPv6 アドレス割り当て
ecs-ipv4およびecs-ipv6にリモート接続し、次のコマンドを実行して Nginx サービスをデプロイします。ecs-ipv4
sudo yum install -y nginx sudo systemctl start nginx echo "Hello from IPv4 backend" | sudo tee /usr/share/nginx/html/index.htmlecs-ipv6
sudo yum install -y nginx sudo systemctl start nginx echo "Hello from IPv6 backend" | sudo tee /usr/share/nginx/html/index.html両方の ECS インスタンスのセキュリティグループにインバウンドルールを追加し、リクエストトラフィックを許可します。ルールの優先度が十分に高いことを確認してください。
インスタンス名
承認ポリシー
プロトコル
ソース
アクセス目的 (このインスタンス)
ecs-ipv4
許可
カスタム TCP
IPv4を選択した後、この VPC CIDR ブロックを選択します。ポートを選択した後、HTTP (80)を選択します。ecs-ipv6
IPv6を選択した後、この VPC CIDR ブロックを選択します。
関連操作については、「カスタムインスタンスの購入」、「ECS リモート接続操作ガイド」、および「セキュリティグループルールの設定」をご参照ください。
2. デュアルスタック NLB インスタンスの作成
NLB コンソールにログインします。中国 (上海) リージョンを選択し、NLB の作成 をクリックします。
次の構成を完了します。他のオプションはデフォルトのままにして、[今すぐ作成] をクリックします。
インスタンスネットワークタイプ: インターネット を選択します。
VPC:
VPC1を選択します。ゾーン: ゾーン E およびゾーン G を選択し、対応する vSwitch
VSW1およびVSW2を選択します。その後、パブリック IP を自動的に割り当てる を選択します。プロトコルバージョン: デュアルスタック を選択します。
作成後、インスタンス ID をクリックして インスタンスの詳細 ページに移動します。基本情報 セクションで、ネットワークタイプ を見つけます。IPv6: プライベートネットワーク の右側にある ネットワークタイプの変更 をクリックします。表示されたダイアログボックスで、OK をクリックし、変更が成功したことを確認します。
3. デュアルスタックサーバーグループの作成とアフィニティモードの有効化
サーバーグループコンソールで、サーバーグループの作成 をクリックします。
次の構成を完了します。[作成] をクリックします。
サーバーグループタイプ: サーバータイプ を選択します。
サーバーグループ名:
sgp-dualstackを入力します。VPC:
VPC1を選択します。バックエンドサーバープロトコル: TCP を選択します。
IP プロトコルバージョン: IPv4/v6 デュアルスタック を選択します。選択後、IPv4 および IPv6 のバックエンドサーバーを追加できます。
IP バージョンアフィニティモード: アフィニティモード を選択します。有効にすると、IPv4 リクエストは IPv4 バックエンドにのみ転送され、IPv6 リクエストは IPv6 バックエンドにのみ転送されます。
サーバーグループが作成されました ダイアログボックスで、バックエンドサーバーの追加 をクリックします。IP 列で、
ecs-ipv4の IPv4 アドレスと、ecs-ipv6の IPv6 アドレスを選択します。両方のインスタンスを選択し、次へ をクリックします。IPv6 バックエンドを一括で追加する場合は、IP テーブルヘッダーの横にある設定アイコンをクリックし、IPv6 を優先 を選択します。これにより、システムはサーバーの IPv6 アドレスを優先して選択します。
ポート/重み ステップで、両方のサーバーの ポート を
80に設定します。OK をクリックして追加を完了します。
4. リスナーの作成
NLB コンソールで、対象のインスタンス ID をクリックして インスタンスの詳細 ページに移動します。リスナー タブで、リスナーの作成 をクリックします。
[リスナーの設定] ステップで、リスナープロトコルの選択 を TCP に設定します。リスナーポート に
80を入力し、次へ をクリックします。[サーバーグループの選択] ステップで、サーバーグループ
sgp-dualstackを選択し、次へ をクリックします。[構成の確認] ステップで、構成を確認し、送信 をクリックします。
5. ドメイン名解決の設定
CNAME レコードを使用して、カスタムドメイン名を NLB インスタンスの DNS 名にポイントします。クライアントは、カスタムドメイン名経由で NLB にアクセスします。
本トピックでは、Alibaba Cloud DNS を例として使用します。Alibaba Cloud 以外で登録されたドメイン名の場合は、まずクラウド DNS コンソールにドメイン名を追加してください。
NLB コンソールで、対象インスタンスの ドメイン名 をコピーします。
ドメイン名解決コンソールにログインします。対象ドメイン名の Actions 列で、解決設定 をクリックします。解決設定 ページで、Add Record をクリックします。
次の情報を使用して CNAME レコードを追加し、OK をクリックします。
Record Type: CNAME を選択します。
Hostname: ドメイン名プレフィックス(例:
test)を入力します。カスタムルートドメインがexample.comの場合、NLB にアクセスするために使用するドメイン名はtest.example.comになります。Query Source および TTL: デフォルト値のままにします。
Record Value: NLB インスタンスの DNS 名を入力します。
Change Resource Record Confirmation ダイアログボックスで、解決情報を確認し、OK をクリックします。
6. アフィニティ転送の検証
クライアントが、IPv6 インターネット機能を備えたデュアルスタック NLB インスタンスにカスタムドメイン名経由でアクセスすると、DNS サーバーはクライアントのクエリタイプに応じて、A レコード (IPv4 アドレス) または AAAA レコード (IPv6 アドレス) を返します。
IPv4 リクエストのテスト
curl -4 http://test.example.com複数回リクエストを実行します。返される結果は常に Hello from IPv4 backend である必要があります。これにより、IPv4 リクエストが IPv4 バックエンド ecs-ipv4 にのみ転送されていることが確認できます。
IPv6 リクエストのテスト
curl -6 http://test.example.com複数回リクエストを実行します。返される結果は常に Hello from IPv6 backend である必要があります。これにより、IPv6 リクエストが IPv6 バックエンド ecs-ipv6 にのみ転送されていることが確認できます。
アフィニティ分離の検証
ecs-ipv4上で Nginx サービスを停止します:sudo systemctl stop nginx。再度 IPv4 リクエストをテストします。リクエストは失敗し、IPv6 バックエンド
ecs-ipv6には転送されません。ecs-ipv4サービスを再開します:sudo systemctl start nginx。IPv4 リクエストは正常に動作を再開します。
関連情報
課金詳細
NLB インスタンス: Network Load Balancer (NLB) は、従量課金およびリソースプラン(サブスクリプション)の 2 種類の課金方法をサポートしています。詳細については、「NLB 課金概要」をご参照ください。
ECS インスタンス: 詳細については、「ECS 課金概要」をご参照ください。テスト用に Elastic Compute Service (ECS) インスタンスを作成する場合は、低スペックの従量課金インスタンスを作成し、速やかにリリースしてください。
ドメイン名および DNS 解決料金: ドメイン名プロバイダーからの料金に加えて、Alibaba Cloud で DNS 解決を設定する場合は、権威 DNS 解決 の料金も発生します。
インターネット料金: NLB インスタンスにアタッチされた EIP およびインスタンスが配置されている VPC の IPv6 パブリック帯域幅 の料金が発生します。
デュアルスタック NLB をサポートするリージョン
本番環境に適用
高可用性デプロイメント: 複数のゾーンにバックエンドサーバーをデプロイします。IPv4 および IPv6 の両方のバックエンドに冗長性を持たせ、単一障害点を回避します。
ヘルスチェックの設定: 必要に応じてヘルスチェックの間隔、タイムアウト期間、しきい値を調整します。これにより、異常なサーバーが迅速に削除されます。
よくある質問
アフィニティモードを有効にした後、IPv4 リクエストは IPv6 バックエンドに転送されますか?
いいえ。アフィニティモードを有効にすると、IPv4 リクエストは IPv4 バックエンドにのみ転送され、IPv6 リクエストは IPv6 バックエンドにのみ転送されます。クロスプロトコル転送はサポートされていません。
サーバーグループに IPv4 バックエンドしか含まれていない場合、IPv6 リクエストはどのように処理されますか?
アフィニティモードが無効の場合、NLB は IPv6 リクエストを IPv4 リクエストに変換してバックエンドに転送できます。アフィニティモードが有効の場合、IPv6 リクエストは転送できません。このシナリオでは、NLB インスタンスに正常な IPv4 および IPv6 バックエンドの両方が存在することを確認してください。
既存のサーバーグループの IP プロトコルバージョンを変更できますか?
いいえ。サーバーグループ作成後に、IP プロトコルバージョン(IPv4 または IPv4/v6 デュアルスタック)を変更することはできません。変更するには、サーバーグループを削除して新しいものを作成する必要があります。
既存のサーバーグループの IP バージョンアフィニティモード を変更できますか?
はい。サーバーグループコンソールで、デュアルスタックサーバーグループを見つけ、基本情報の変更 列の 操作 をクリックします。
デュアルスタックサーバーグループを IPv4 NLB インスタンスに関連付けられますか?
いいえ。デュアルスタックサーバーグループは、デュアルスタック NLB インスタンスのリスナーにのみ関連付けられます。