NS レコード
概要
NS レコード は、ドメインの DNS 情報を管理する権威 DNS サーバーを指定するレコードタイプです。RFC 1035(1987年)で定義されています。
インターネット上の DNS リゾルバーは、ドメインの情報を問い合わせる際に NS レコードを辿って権威 DNS サーバーにたどり着きます。NS レコードが正しく設定されていなければ、A レコードや MX レコードなどドメインの全 DNS 情報が機能しません。ドメインの DNS 設定における最上位の参照先です。
NS レコードは最低 2 つ設定することを推奨します。単一障害点を避けるためで、RFC 2182 は最低 3 つの独立した NS サーバーを推奨しています。
仕組み
NS レコードは DNS の名前解決フローにおける権威サーバーの参照先を定め、ゾーン委任やグルーレコードと連携してドメイン階層を構成します。
レコードの構造
NS レコードは次のフィールドで構成されます。
example.com. IN NS ns1.cloudflare.com.
| フィールド | 説明 |
|---|---|
| NAME | レコードの所有者名。ゾーンの頂点(example.com.)やサブドメイン(subdomain.example.com.)を指定する |
| CLASS | 通常は IN(Internet) |
| TYPE | NS(レコードタイプ番号 2) |
| RDATA | 権威ネームサーバーのホスト名(FQDN)。IP アドレスは指定できない |
1 つのドメインに複数の NS レコードを設定できます。NS レコードには MX レコードのようなプリファレンス値(優先度)は存在せず、リゾルバーは NS レコードの一覧からランダムに選択して問い合わせます。
DNS の名前解決フロー
ブラウザーが www.example.com にアクセスする際の DNS 解決フローは次の通りです。
- フルサービスリゾルバー(ISP や 8.8.8.8 など)がルート DNS サーバーに問い合わせる
- ルートサーバーが
.comの TLD(Top Level Domain)ネームサーバーのアドレスを返す .comTLD ネームサーバーにexample.comを問い合わせると、example.comの NS レコード(権威 DNS サーバーのホスト名)を返す- 権威 DNS サーバーに
www.example.comを問い合わせて A レコードを取得する
ステップ 3 で返る NS レコードが example.com の権威 DNS サーバーを指しています。Cloudflare DNS を使う場合は ns1.cloudflare.com と ns2.cloudflare.com のような値になります。
ゾーン委任
NS レコードはゾーン委任(delegation)にも使います。subdomain.example.com を別の DNS サーバーで管理したい場合、example.com のゾーンに次のような NS レコードを設定します。
subdomain.example.com. IN NS ns1.subdomain-provider.com.
subdomain.example.com. IN NS ns2.subdomain-provider.com.
これにより、subdomain.example.com 以下の DNS 情報は ns1.subdomain-provider.com が管理することになります。大企業で部署ごとに DNS 管理を分担したり、買収したサービスのドメインを別の DNS プロバイダーで管理し続けたりする場合に使います。
グルーレコード
NS レコードが指すネームサーバーのホスト名が、委任先のゾーン自身のサブドメインである場合、循環参照が発生します。例えば example.com の NS レコードが ns1.example.com を指しているとき、ns1.example.com の IP アドレスを知るために example.com の NS を引く必要があり、解決できなくなります。
この問題を解決するのがグルーレコード(Glue Record)です。親ゾーン(.com TLD)のサーバーに ns1.example.com の A レコードを直接登録して、循環参照を断ち切ります。ドメインレジストラの管理画面でネームサーバーを登録する際に IP アドレスの入力を求められる場合があり、その IP がグルーレコードとして TLD サーバーに登録されます。
設定例
基本的な NS レコード、サブドメインのゾーン委任、グルーレコードの設定パターンを示します。
基本的な NS レコード
example.com. IN NS ns1.cloudflare.com.
example.com. IN NS ns2.cloudflare.com.
サブドメインのゾーン委任
mail.example.com. IN NS ns1.mail-provider.com.
mail.example.com. IN NS ns2.mail-provider.com.
グルーレコード
委任先のネームサーバーが同一ドメイン内にある場合のグルーレコードです。この設定はレジストラ管理画面で行うため、通常のゾーンファイルには現れません。
; 親ゾーン (.com) に登録されるグルーレコード
ns1.example.com. IN A 198.51.100.1
ns2.example.com. IN A 198.51.100.2
確認方法
dig でドメインの NS レコードを確認するには次のコマンドを使います。
dig NS example.com
出力の ANSWER SECTION にネームサーバーのホスト名が表示されます。
;; ANSWER SECTION:
example.com. 86400 IN NS ns1.cloudflare.com.
example.com. 86400 IN NS ns2.cloudflare.com.
TTL フィールドの値(上記では 86400)がキャッシュの残り秒数です。複数の NS レコードが返るのが正常な状態で、1 つしか返らない場合は冗長性に問題があります。
権威サーバーに直接問い合わせて確認したい場合は +trace オプションを使います。ルートから委任のチェーンを辿って解決する様子を確認できます。
dig NS example.com +trace
特定の権威サーバーに直接問い合わせるには @ でサーバーを指定します。
dig NS example.com @ns1.cloudflare.com
外部の視点からも確認したい場合は、Labee Dev Toolbox の DNS API を使うと、外部の視点から見た結果を取得できます。
curl "https://labee.dev/api/dns?domain=example.com&type=NS"
レスポンスは次の形式で返ります。
{
"success": true,
"data": {
"domain": "example.com",
"records": {
"NS": ["ns1.cloudflare.com", "ns2.cloudflare.com"]
}
},
"error": null,
"meta": { "responseTime": 40 }
}
records.NS はネームサーバーのホスト名を文字列として格納した配列です。末尾のドット(FQDN 表記)は除去された状態で返ります。NS レコードが未設定のドメインでは records.NS が null になります。
よくある問題
NS レコードの設定ミスはドメイン全体の名前解決停止につながるため、影響範囲が大きい問題です。
DNS プロバイダー移行時の NS 変更が反映されない
DNS プロバイダーを移行する際、レジストラの NS 設定を変更しても古い NS がキャッシュされている間は新しい DNS サーバーへの問い合わせが行われません。NS レコードの TTL(通常 24〜48 時間)が切れるまでの伝搬待ちが必要です。移行前に元の NS レコードの TTL を短く(300〜600 秒)設定しておくと伝搬が速くなります。
ゾーン委任後にレコードが引けない
サブドメインをゾーン委任したが、委任先の DNS サーバーにレコードが設定されていない場合、SERVFAIL または NXDOMAIN が返ります。委任の設定と、委任先サーバーへのレコード登録は両方が揃って初めて機能します。dig NS subdomain.example.com +trace で委任が正しく行われているかを確認します。
グルーレコードの IP が古いまま
DNS プロバイダーを移行してネームサーバーの IP アドレスが変わった場合、レジストラに登録したグルーレコードも更新する必要があります。グルーレコードが古いと、ネームサーバーへの到達性が失われて ドメイン全体の名前解決が停止します。移行手順にグルーレコードの更新を必ず含めます。
NS レコードが 1 つしかない
NS サーバーが 1 台しかない状態では、そのサーバーに障害が発生するとドメイン全体の名前解決が止まります。異なるネットワークやデータセンターに配置された最低 2 つの NS サーバーを設定します。主要 DNS プロバイダー(Cloudflare、Route 53、Google Cloud DNS)は複数の NS サーバーをデフォルトで提供しています。