皆さん、こんにちは。
Avi Load Balancer担当です。
本記事ではAvi Load Balancerにおける「Server Name Indication(SNI)」の設定についてご紹介します。
第1章:SNIとは
Server Name Indication(SNI)とは、HTTPS通信において1つのIPアドレスで複数のドメインをホストする仮想ホスティングのための機能です。SNIは、TLSハンドシェイクの最初の段階で、クライアントが接続先の「ホスト名(FQDN)」をサーバーに通知します。これにより、サーバーはどのドメインに対するリクエストかを判断し、適切なSSL証明書を返すことができます。
Avi Load Balancerは、SNIを活用することで、1つの仮想IP(VIP)に複数のドメインとSSL証明書をバインドする仮想ホスティングを実現できます。
第2章:Avi Load BalancerにおけるSNIのアーキテクチャ
AviにおけるSNIの設定では、一つの親Virtual Service(親VS)と複数の子Virtual Service(子VS)にVSの設定が分離されます。
親VSで仮想IP(VIP)を持ち、子VSにFQDNとSSL証明書を持たせる事で、一つのIPアドレスで複数のSNIホスト名を紐づけられ、SNIの実装を可能にしています。

クライアントからの接続の流れは以下のようになります。
- クライアントからのTCPハンドシェイクを親VSが処理
- Client Helloを親VSが受信する。Client HelloにはSNI(Server Name Indication)が含まれているため、AviはSNIに基づいてSNIホスト名(ドメイン名)が一致する子VSを選択
- 子VSのSSLプロファイルが使用される。子VSのSSLプロファイルにより、SSL/TLSのバージョンに基づいて接続を許可または拒否し、使用する暗号方式(cipher)を選択
- 子VSがServer Helloで応答する。応答には選択された暗号方式と、子VSの証明書が含まれる
子VSに一致するSNIホスト名(ドメイン名)が存在しない場合は親VSが応答し、HTTP Requestは親VSに設定されているPoolに転送されます。
第3章:Avi Web GUIによるSNI設定手順
AviのWeb UIによるSNIの基本的な設定手順について説明します。
AviでSNIを実装するためには親VSと子VSを作成する必要があります。
親VSにはVIP(IPアドレス)および待ち受けポート番号を設定し、子VSにはSNIホスト名とSSL証明書を設定します。
1:親VSの作成
VSの作成画面に進み、以下の項目を設定します。下記の項目以外についてはSNIの基本的な設定手順とは直接関係の無い設定となるため、ここでは説明を割愛します。
- VSの名前
- Virtual Hosting VS を 有効化およびParentを選択
- Virtual Hosting TypeはSNIを選択
- VIP(IPアドレス)
- Service Port(待ち受けポート番号)
- Pool
- SSL Profile(TLSバージョンや暗号スイート)
- SSL Certificate (SSL証明書)


必要な設定を入力したら画面下部の「Next」をクリックして進み、Step2タブ以降の設定を行い、SAVEして設定を完了します。
2:子VSの作成
親VS作成後、新たなVSの作成画面に進み、以下の項目を設定します。下記の項目以外については親VSと同様にここでは割愛します。
- VSの名前
- Virtual Hosting VS を 有効化およびChildを選択
- Virtual Hosting TypeはSNIを選択
- Virtual Hosting Parentは先ほど作成した親VSを選択
- Domain Name(ドメイン名)※SNIで送信されるSNIホスト名と一致させる
- Pool
- SSL Profile(TLSバージョンや暗号スイート)
- SSL Certificate (SSL証明書)


必要な設定を入力したら画面下部の「Next」をクリックして進み、Step2タブ以降の設定を行い、SAVEして設定を完了します。
子VSは設定したいドメインの数だけ同様の手順で作成します。
設定したVSは「Applications」>「Virtual Services」に一覧表示され、「Health」が赤もしくはグレーアウトしていなければUpした状態となっています。

第4章:通信ログからSNI情報を確認
「Applications」>「Virtual Services」に表示されている子VSの名前をクリックし、Logsタブを開くとクライアントと子VS間の通信ログが表示され、通信ログにはSNIホスト名や暗号スイートの情報が確認できます。

以上となります。
Avi Load Balancerには「Enhanced Virtual Hosting(EVH)」という、SNIに似た独自機能もあり、その説明についてもいずれ公開したいと思います。