🔖

SVCBレコードとHTTPSレコード

2024/07/29に公開

通常Cloudflareをオリジンに対してセットアップする場合、A,AAAA,CNAME,CNAME Flatteningレコードを利用する場合が一般的です。
CNAME Flatteting はZone Apexに本来利用できないCNAMEをセットアップ可能となるRFC非準拠のCloudflare独自のものです。(AWSやIIJなどは類似のAliasレコードというものをサポートしているのでそこまで特殊というわけでもなかったりします。)
https://zenn.dev/kameoncloud/articles/6dec28de015f6f

SVCB レコードと HTTPS レコード

SVCB レコードと HTTPS レコードは RFC 9460 で定義された新しいHTTPSエンドポイント用DNSレコードです。

SVCB とは特定のサービスのために利用可能なエンドポイントを指定可能なレコードで、すなわち特定のプロトコルに関連する情報を提供するために設計されたものです。
そしてそのHTTPS用がHTTPSレコードです。

Cloudflareの観測ではiOS14のリリースに伴いHTTPSレコードトラフィックが増えたことがわかっており、2020年にHTTPSレコードをサポートしています。
https://blog.cloudflare.com/speeding-up-https-and-http-3-negotiation-with-dns

さっそくやってみる

Cloudflare マネージメントコンソールのDNS Record 設定画面を開きAdd recordをクリックします。

TypeHTTPSレコードを選択するといくつか入力項目が出てきます。

NameCNAMEAレコードと同様にこのゾーンでアクセス可能となるサブドメイン名です。
その横にCNAMEAレコードと異なり、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