
はじめに
DNS(Domain Name System)は、インターネット上でドメイン名をIPアドレスに変換する重要なシステムです。その中でも、SRV(Service)レコード は、特定のサービスを提供するサーバーの場所を指定するために使用されます。
本記事では、SRVレコードの役割や設定方法、dig
コマンドを使った動作確認まで詳しく解説します。初心者の方でも理解できるように説明していきますので、ぜひ最後までお読みください。
SRVレコードとは?
SRVレコード(Service Record)は、特定のサービスを提供するサーバーのホスト名とポート番号を指定するDNSレコードです。
通常のAレコードやCNAMEレコードは、単にドメインをIPアドレスに紐付ける役割を持ちますが、SRVレコードは 「どのサーバーがどのポートでサービスを提供しているか」 を定義する点が異なります。
例えば、MicrosoftのActive Directory(AD)やSIP(Session Initiation Protocol)などの通信サービスでよく使われます。
SRVレコードの構成
SRVレコードは、以下の形式で定義されます。
_service._protocol.example.com. TTL IN SRV priority weight port target
各フィールドの説明
フィールド名 | 説明 |
---|---|
_service | 提供するサービス名(例: _sip 、_ldap ) |
_protocol | 使用するプロトコル(_tcp または _udp ) |
example.com. | 対象のドメイン名 |
TTL | キャッシュの有効期限(秒単位) |
IN | インターネットクラスの指定(固定値) |
SRV | レコードの種類(固定値) |
priority | 優先度(小さい値ほど優先される) |
weight | 重み付け(同じ優先度の中で負荷分散するため) |
port | サーバーがリスニングしているポート番号 |
target | 実際のホスト名 |
SRVレコードの具体例
例えば、SIPサービス(VoIP)で example.com
のサーバーを定義する場合、以下のように設定します。
_sip._tcp.example.com. 86400 IN SRV 10 60 5060 sipserver.example.com.
この設定の意味は以下の通りです。
- _sip: SIP(Session Initiation Protocol)サービス
- _tcp: TCPプロトコルを使用
- example.com: 管理するドメイン
- 86400: キャッシュの有効期限(1日)
- 10: 優先度(この値が小さい方が優先)
- 60: 負荷分散の重み
- 5060: SIPの標準ポート
- sipserver.example.com: 実際のホスト名
SRVレコードの動作と dig
コマンドでの確認
SRVレコードが正しく設定されているかを確認するには、dig
コマンドを使用します。
dig
コマンドの基本
SRVレコードを問い合わせるには、以下のコマンドを実行します。
dig _sip._tcp.example.com SRV
dig
の出力例
;; ANSWER SECTION:
_sip._tcp.example.com. 86400 IN SRV 10 60 5060 sipserver.example.com.
この結果から、example.com
の SIP サーバーは sipserver.example.com
であり、ポート 5060
でリスニングしていることが分かります。
SRVレコードの使用例
1. Active Directory(AD)での利用
MicrosoftのActive Directory環境では、クライアントPCがドメインコントローラー(DC)を見つけるために SRV レコードが使用されます。
_ldap._tcp.dc._msdcs.example.com. 3600 IN SRV 0 100 389 dc1.example.com.
この設定により、LDAPプロトコルを使用して dc1.example.com
で認証が行われます。
2. SIP(VoIP)サービス
SIPプロトコルを使う VoIP サービスでは、SRVレコードを利用して適切なSIPサーバーに接続します。
_sip._tcp.example.com. 86400 IN SRV 10 60 5060 sipserver.example.com.
SRVレコードの設定方法(BINDの場合)
BIND(Berkeley Internet Name Domain)を使用してSRVレコードを設定する場合、ゾーンファイルに以下のように記述します。
$TTL 86400
@ IN SOA ns1.example.com. admin.example.com. (
2024021001 ; Serial
3600 ; Refresh
1800 ; Retry
1209600 ; Expire
86400 ; Minimum TTL
)
IN NS ns1.example.com.
IN NS ns2.example.com.
_sip._tcp IN SRV 10 60 5060 sipserver.example.com.
実際のアウトプット例の解説
それでは
dig srv _sips._tcp.tkosec.incontact.com
; <<>> DiG 9.18.30-0ubuntu0.22.04.2-Ubuntu <<>> srv _sips._tcp.tkosec.incontact.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 51196
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;_sips._tcp.tkosec.incontact.com. IN SRV
;; ANSWER SECTION:
_sips._tcp.tkosec.incontact.com. 300 IN SRV 20 0 5061 osasec.incontact.com.
_sips._tcp.tkosec.incontact.com. 300 IN SRV 10 0 5061 tkosec.incontact.com.
;; Query time: 151 msec
;; SERVER: 127.0.0.53#53(127.0.0.53) (UDP)
;; WHEN: Mon Feb 10 10:15:07 JST 2025
;; MSG SIZE rcvd: 140
1. クエリの内容
これは SRVレコード を検索するクエリであり、_sips._tcp.tkosec.incontact.com
というサービスに関するSRVレコードを問い合わせています。
2. 出力の解釈
ヘッダー情報
>>HEADER<<- opcode: QUERY, status: NOERROR, id: 51196
opcode: QUERY → 標準的なDNSクエリ
status: NOERROR → クエリは正常に処理され、エラーはなし
id: 51196 → クエリの識別番号
QUESTION SECTION
;; QUESTION SECTION:
;_sips._tcp.tkosec.incontact.com. IN SRV
これは、どのレコードを問い合わせたのかを示します。
SRVレコード (IN SRV) を問い合わせたことが分かります。
ANSWER SECTION(重要部分)
yamlコピーする編集する;; ANSWER SECTION:
_sips._tcp.tkosec.incontact.com. 300 IN SRV 20 0 5061 osasec.incontact.com.
_sips._tcp.tkosec.incontact.com. 300 IN SRV 10 0 5061 tkosec.incontact.com.
SRVレコードのフォーマットは以下のようになっています:
<サービス名> <TTL> <クラス> <レコードタイプ> <優先度> <重み> <ポート> <ターゲットホスト>
この場合:
- 1つ目のレコード
- サービス名:
_sips._tcp.tkosec.incontact.com
- TTL:
300秒
- クラス:
IN
(インターネット) - レコードタイプ:
SRV
- 優先度:
20
(値が小さい方が優先される) - 重み:
0
- ポート:
5061
(SIP over TLS) - ターゲットホスト:
osasec.incontact.com
- サービス名:
- 2つ目のレコード
- 優先度:
10
(こちらの方が優先度が高い) - ターゲットホスト:
tkosec.incontact.com
- その他の値: 同じ(重み
0
、ポート5061
)
- 優先度:
優先度の解釈
tkosec.incontact.com
の方が 優先度10 なので 先に接続される。osasec.incontact.com
は 優先度20 なので、tkosec
が利用できない場合に接続される。
3. その他の情報
Query time: 151 msec
;; SERVER: 127.0.0.53#53(127.0.0.53) (UDP)
;; WHEN: Mon Feb 10 10:15:07 JST 2025
;; MSG SIZE rcvd: 140
- Query time:
151 msec
→ DNSクエリにかかった時間 - SERVER:
127.0.0.53
→ ローカルのDNSリゾルバを使用 - WHEN: クエリを実行した日時
- MSG SIZE rcvd:
140バイト
→ レスポンスのサイズ
4. 結論
この SRV
レコードの意味は:
- SIP over TLS (
sips
) を使用するクライアントは、まずtkosec.incontact.com:5061
に接続する。 - もし
tkosec.incontact.com
が利用できない場合は、代わりにosasec.incontact.com:5061
に接続する。 - 負荷分散のための「重み」は設定されていない(両方とも
0
)。
このように、SRVレコードを使うことで、特定のサービス(この場合は SIP over TLS)をホスト名だけでなく ポートや優先順位付き で指定できます。
まとめ
- SRVレコードは、特定のサービスを提供するサーバーを指定するDNSレコード である。
- 優先度・重み・ポート番号・ホスト名を含む ことで、通常のAレコードより詳細な制御が可能。
- Active DirectoryやSIPサーバーの動作に重要な役割 を果たす。
dig
コマンドを使って設定を確認できる。- BINDのゾーンファイルで簡単に設定できる。
SRVレコードを理解することで、DNSの仕組みをより深く学ぶことができます。特に、ネットワーク管理やクラウドサービスを扱う人にとって、知っておくべき重要な概念です。
この記事がSRVレコードの理解に役立てば幸いです!