用語辞典・DNS・ドメイン

SRVレコード

SRVレコードとは

SRVレコードは、特定のサービスと通信方式について、接続先ホスト名・ポート・優先度・重みをDNSで示すリソースレコードです。正式名称はService record(サービス・レコード)です。

問い合わせ名は_service._proto.example.test.のように、サービス識別子、通信方式識別子、対象ドメインを組み合わせます。先頭のアンダースコアは、通常のホスト名ラベルとの衝突を避けるためです。

SRVは「そのドメインのどのホストの、どのポートでサービスを受けられるか」を、対応アプリが発見するためのレコードです。

サービスと通信方式を指定して候補を得る優先度、同順位の重み、ポート、対象名の順に接続先を決める
サービスと通信方式を含む問い合わせから複数のSRV候補を得て、優先度と重みで選び、対象名のアドレスと指定ポートへ接続する図解
図1選んだTargetはホスト名です。A・AAAAを別に調べてアドレスを得てから、SRVのPortへ接続します。

四つのデータフィールドを、決められた順で使う

優先度と重みは、同じ大小関係ではないPriorityで群を選び、同じ群の中をWeightで分ける
Priority優先度

到達できる中で数値が小さい群を先に使う

Weight相対的な重み

同じPriority内で大きい値ほど選ばれやすい

Portポート番号

対象ホストのどの受け取り口へ接続するか

Target接続先ホスト名

A・AAAAでアドレスへ解決する完全修飾名

図2例として10 60 5060 sip-a.example.test.なら、Priorityが10、Weightが60、Portが5060、Targetが末尾のホスト名です。

Priorityは小さい値、Weightは大きい値が選ばれやすい

PriorityはMXレコードと同様、値が小さい候補を先に試します。同じPriorityの候補が複数ある場合、Weightの比率を使って選択します。Weightが60と20なら、長期的には前者が後者より高い確率で選ばれる設計です。

Weightはサーバーの現在負荷を自動測定する値ではありません。管理者が設定した静的な比率です。動的負荷分散に使うため極端に短いTTLで書き換え続ける方法は、DNSキャッシュの利点を損ねます。

ポートを持てる点が、A・AAAAやMXと違う

A・AAAAはアドレスだけを示し、ポートを持ちません。MXはメール配送先名と優先度を持ちますが、SMTPのポート選択はメール規約側で決まります。SRVはポート番号をレコード内に持つため、既定でないポートもサービス発見結果として伝えられます。

TargetへIPアドレスを直接書くことはできません。またTargetをCNAMEの別名にせず、直接アドレスへ解決できるホスト名にすることがRFC 2782で求められます。

SRVを使うかどうかは、アプリの仕様が決める

DNSにSRVを置いても、すべてのアプリが自動利用するわけではありません。利用するサービス規約が問い合わせ名、選択方法、失敗時動作を定め、クライアントがSRV対応を実装している必要があります。

Webブラウザの一般的なHTTP・HTTPS接続先をSRVだけで変更することはできません。企業認証、音声通信、メッセージングなどSRV利用を定めたプロトコルで使われます。Targetをルート名の.にしたSRVは、そのサービスを提供していないことを示します。

仕様の確認資料:RFC 2782「A DNS RR for specifying the location of services」

関連用語