SRVレコードとは?
SRV(Service)レコードは、特定のサービス(SIP、XMPP、LDAP、Microsoftのautodiscoverなど)のホスト名とポートを、負荷分散のための優先度と重みとともに広告します。Aレコードと異なり、サービスがどこにあるかだけでなくどのポートにあるかも伝えるため、アプリケーションはハードコードされた設定なしにサービスを見つけられます。_service._proto.domainの形式で照会します。
SRVレコードの形式の仕組み
SRVレコードは特徴的なパターンで名付けられます。_service._proto.domain、例えば_sip._tcp.example.comです。アンダースコアは通常のホスト名との衝突を防ぎます。レコードのデータは4つの値を保持します。優先度、重み、ポート、ターゲットです。優先度はMXのように機能し、数字が小さいほど先に試されます。重みは同じ優先度のターゲット間で負荷を分散し、重みが大きいほど比例して多くのトラフィックを受けます。ポートはサービスが待ち受けるTCPまたはUDPポートで、ターゲットはそれを提供するホスト名であり、独自のAまたはAAAAレコードを持つ必要があります。
SRV検索結果の読み解き方
IPeekは、照会したサービス名に対する各SRVレコードの優先度、重み、ポート、ターゲットホストを返します。まず優先度を読みます。クライアントは優先度の低いターゲットを、高いものへフォールバックする前に使います。優先度が等しい中では、重みが各ターゲットが受けるトラフィックの割合を決めます。ポートが期待するサービスと一致することを確認してください。SIPは5060、LDAPは389、多くのautodiscoverは443です。各ターゲットが有効なホストに解決されることを確認します。結果が空なら、そのサービスはその名前でドメインに広告されていません。
SRVレコードが必要なとき
SRVレコードは、クライアントが固定設定に頼るのではなくサービスを自動的に発見しなければならないときに重要です。Microsoft Teams、Skype for Business、SIPプロバイダーは、音声やプレゼンスのサーバーを見つけるためにこれらを使います。XMPPチャット、LDAPディレクトリ検索、Minecraftサーバー、Kerberosもすべて、SRVによる発見に依存します。大きな利点は柔軟性です。サービスを新しいホストやポートへ移したり、複数のサーバーに分散させたりしても、クライアントは再設定なしにSRVレコードに従います。サービスが特定の_service._proto名を要求する場合は、対応するSRVレコードを公開しないとクライアントは見つけられません。