用語辞典・DNS・ドメイン

SOAレコード

SOAレコードとは

SOAレコードは、DNSゾーンの起点と、更新元・管理連絡先・版番号・同期用時間などの管理情報を示すリソースレコードです。正式名称はStart of Authority record(スタート・オブ・オーソリティー・レコード)です。

SOAはゾーン頂点に置かれ、ゾーンごとに一つのSOA RRを持ちます。Webサイトやメールの接続先を示すレコードではなく、権威DNSサーバーがゾーンを維持するための制御情報です。

SOAの七つの値は同じ種類の設定ではありません。名前、連絡先、版番号、三つの同期タイマー、否定キャッシュ時間に分けて読みます。

ゾーンの管理カードを見て、セカンダリが版と時間を管理する更新確認、失敗後の再試行、権威を停止する期限を別々に持つ
SOAレコードの更新元、連絡先、版番号、更新確認、再試行、失効、否定キャッシュ時間と、セカンダリDNSの同期を示す図解
図1SOAの時刻関連フィールドは秒単位です。ゾーンファイルで時間単位付き表記を受け付けるかはDNSソフトウェアや管理画面によります。

七つのフィールドを、用途別に読む

名前・版・同期時間・否定キャッシュを一行に持つSERIALは更新順、REFRESH以下はセカンダリの維持動作
MNAME更新元サーバー名

このゾーンの原本またはプライマリとなる名前

RNAME管理連絡先

メールボックスをDNS名形式で表す

SERIALゾーンの版番号

新旧を32ビットの系列として比較する

REFRESH更新確認間隔

セカンダリが次に版を調べるまで

RETRY再試行間隔

確認に失敗した後、再び試すまで

EXPIRE権威の失効期限

同期できないまま提供を続けられる上限

MINIMUM否定キャッシュ時間

現行の扱いでは否定応答のTTL計算に使う

図2RFC 2308により、SOAのMINIMUMは否定応答をキャッシュするTTLの計算へ使われます。RFC 1035初期の「ゾーン内RRの最小TTL」という説明だけで運用を判断しません。

SERIALは日付文字列ではなく、巡回する32ビット版番号

SERIALが増えたと判断すると、セカンダリはゾーン転送を行います。日付と通し番号を組み合わせた表記は人が管理しやすい慣例ですが、DNSプロトコルがカレンダーとして読むわけではありません。

32ビット最大値を越えると巡回するため、単純な整数の大小比較だけでは正しくありません。RFC 1982のserial number arithmetic(シリアル番号算術)で新旧を比較します。同じSERIALのまま内容だけ変えると、セカンダリが更新を認識できない場合があります。

REFRESH・RETRY・EXPIREは一本のタイマーではない

REFRESHは通常時の確認間隔、RETRYは確認失敗後の再試行間隔です。EXPIREはプライマリへ長時間到達できないとき、古いゾーンを権威データとして提供し続けられる上限です。EXPIREを過ぎたセカンダリは、そのゾーンへの権威応答を停止します。

値を短くすれば常に安全とは限りません。短すぎる確認間隔は問い合わせを増やし、短すぎるEXPIREは一時的な経路障害で全セカンダリが早く停止する危険を高めます。ゾーン転送通知や運用監視と組み合わせます。

RNAMEの最初の点は、メールアドレスの@に相当する

RNAMEはドメイン名形式で管理者のメールボックスを表します。たとえばhostmaster.example.test.は概念上hostmaster@example.testに相当します。メールボックスのローカル部に点を含める場合はエスケープが必要です。

公開される情報なので個人用アドレスを直接置くより、DNS障害時にも受信できる管理用連絡先を設計します。ただし現代の連絡実務では、レジストリ情報や事業者の窓口が別に使われることもあります。

仕様の確認資料:RFC 1035「Domain Names — Implementation and Specification」RFC 1982「Serial Number Arithmetic」RFC 2308「Negative Caching of DNS Queries」

関連用語