SVCBレコードとHTTPSレコード
通常Cloudflareをオリジンに対してセットアップする場合、A
,AAAA
,CNAME
,CNAME Flattening
レコードを利用する場合が一般的です。
CNAME Flatteting はZone Apexに本来利用できないCNAMEをセットアップ可能となるRFC非準拠のCloudflare独自のものです。(AWSやIIJなどは類似のAliasレコードというものをサポートしているのでそこまで特殊というわけでもなかったりします。)
SVCB レコードと HTTPS レコード
SVCB レコードと HTTPS レコードは RFC 9460 で定義された新しいHTTPSエンドポイント用DNSレコードです。
SVCB とは特定のサービスのために利用可能なエンドポイントを指定可能なレコードで、すなわち特定のプロトコルに関連する情報を提供するために設計されたものです。
そしてそのHTTPS用がHTTPSレコードです。
Cloudflareの観測ではiOS14のリリースに伴いHTTPSレコードトラフィックが増えたことがわかっており、2020年にHTTPSレコードをサポートしています。
さっそくやってみる
Cloudflare マネージメントコンソールのDNS Record 設定画面を開きAdd record
をクリックします。
Type
でHTTPS
レコードを選択するといくつか入力項目が出てきます。
Name
はCNAME
やA
レコードと同様にこのゾーンでアクセス可能となるサブドメイン名です。
その横にCNAME
やA
レコードと異なり、TTLが設定可能となっています。通常マネージメントコンソール経由でDNSレコードを設定する場合3600
で固定となっています。(API経由で変更は可能です)
HTTPSレコードの場合、複数のIPアドレスを登録することでロードバランサ不要のDNSラウンドロビンによる複数オリジンへのロードバランシングが用途として期待されていますので、細かいTTLが制御可能になっています。
(https://www.cloudns.net/wiki/article/182/)
通常のロードバランサの様なセッションステッキネスやパスベースルーティング、加重ルーティングなどの機能がないため完全にロードバランサを代替することは難しいからもしれませんが、そこまでロードバランサに多くの機能を求めない場合はコスト削減が期待できます。
Priority
Priority は他のDNSレコードにはない特殊なものですが、HTTPSレコードでは同じ名前のDNSレコードを複数作成することが可能です。
数字の小さい方から優先的にアクセスされ、この図の場合、127.0.0.1
にアクセスが出来なかった場合、127.0.0.2
にアクセスを行います。
Value
Valueでは様々なパラメータを指定可能ですが、以下に主なものを列記します。
alpn: "h3,h2"
等のように利用可能なHTTPプロトコルを指定します。通常ブラウザは最初にウェブサーバと通信を行った後、ウェブサーバが利用可能なHTTPプロトコルバージョンを入手します。この指定があることでブラウザは最初からウェブサーバと通信可能なHTTPプロトコルバージョンを入手することが可能となりより速いセッションの確立が期待できます。
ipv4hint: 単一レコードにおいて、複数のIPアドレスを設定することが出来ます。
HTTPSレコードではTarget
にIPアドレスを設定することも、CNAMEの用に別のFQDN名を設定することもできます。この例の場合、test.kameda.com
に対するアクセスが"192.0.2.1
,192.0.2.2
に対してラウンドロビンされることになります。
また以下のようにPriority
を用いてレコード単位の冗長化と組み合わせることができます。
example.com. 3600 IN HTTPS 1 . alpn="h2" ipv4hint="192.0.2.1,192.0.2.2"
example.com. 3600 IN HTTPS 2 . alpn="http/1.1" ipv4hint="198.51.100.1,198.51.100.2"
port: HTTPS通信に用いるポート番号を指定できますが、443
以外を設定することは推奨されていないため注意が必要です。
Discussion