2026年6月8日
2026年6月8日
doggo で TTL と NS を一括確認する方法|複数のドメイン・権威サーバー・キャッシュサーバーを1回で並べる
doggo は、1回のコマンドに複数の名前・複数の種別・複数の問い合わせ先を並べて書けるので、「各権威サーバーが返す NS と SOA と TTL」を一度に表で確かめられます。さらに --json の出力を jq で整えれば、管理している複数のドメインをまとめて点検する一覧も作れます。この記事では、キャッシュサーバーと権威サーバーでの確認の手順、親ゾーン側の委任の確かめ方、複数ドメインを一括で点検するスクリプト、結果の読み方と TTL を下げる作業での使い方を説明します。
doggo の導入方法と基本の書式、表の各列の読み方は別の記事で扱っています。オプションは版によって追加・変更されることがあるので、ここでの内容は執筆時点(2026年10月現在)のものとして、手元では doggo --help の表示を優先してください。
1回のコマンドにまとめて書く
doggo は、引数に並べたものを「名前」「種別」「問い合わせ先(@ で始まるもの)」に振り分けて解釈します。
# 2つのドメインの NS と SOA を、2つの公開 DNS に問い合わせる
doggo example.com example.net NS SOA @1.1.1.1 @8.8.8.8
この1行で、名前2つ × 種別2つ × 問い合わせ先2つの答えが1つの表に並びます。NAME・TYPE・TTL・ADDRESS・NAMESERVER の列で、どの名前の、どの種別の、どのサーバーからの答えかを見分けられます。端末以外に出力を渡すときは --color=false で色を外しておくと、制御文字が混ざりません。
手順1:キャッシュサーバーで今の見え方を確かめる
doggo example.com NS SOA @1.1.1.1 @8.8.8.8
キャッシュサーバーから返る TTL は、キャッシュが期限切れになるまでの残り時間です。設定値より小さい数字が出るのが普通で、数秒おいて繰り返すと減っていきます。ここで分かるのは「利用者の側に、どの NS があと何秒残るか」です。ネームサーバーを切り替えた直後なら、古い NS を返しているキャッシュサーバーが、あとどのくらいで入れ替わるかの目安になります。
手順2:権威サーバーごとに設定値を確かめる
権威サーバーに直接問い合わせると、TTL はゾーンに設定された値そのものが表示されます。まず NS の名前からアドレスを引き、そのアドレスを問い合わせ先に並べます。
# NS の名前を取り出す
doggo example.com NS --short
# 各ネームサーバーのアドレスを引く
doggo ns1.example.net ns2.example.net A AAAA --short
# 各権威サーバーに NS と SOA を問い合わせる
doggo example.com NS SOA @192.0.2.53 @198.51.100.53
問い合わせ先をホスト名で指定できるかどうかは版によって扱いが違う場合があるため、アドレスで指定しておくと迷いません。名前解決そのものを疑っている場面でも、アドレスなら手元のキャッシュサーバーの影響を受けません。
表では、次の3点を見比べます。
- 各サーバーが返す NS の一覧がそろっているか
- 各サーバーの SOA のシリアル(SOA の値の3番目)が同じか
- 各サーバーの NS と SOA の TTL が同じか
手順3:親ゾーン側の委任を確かめる
NS は、子ゾーン(自分のゾーン)の中だけでなく、親ゾーン(.com や .jp など)にも登録されています。レジストラで設定した NS が反映されているかは、親ゾーンの権威サーバーに問い合わせて確かめます。
# .com の権威サーバーのアドレスを引いてから問い合わせる(192.0.2.30 は引いたアドレスに置き換える)
doggo a.gtld-servers.net A --short
doggo example.com NS @192.0.2.30 --json | jq .
親ゾーンのサーバーは、自分で答えを持たず「この名前は次のサーバーに聞いてください」という紹介を返します。紹介の NS は応答の ANSWER ではなく AUTHORITY の部分に入るため、表の表示では見えない場合があります。--json の出力で AUTHORITY にあたる項目を確かめるか、dig の +norecurse で問い合わせて確認してください。親ゾーン側の NS の TTL は TLD を運営する側が決めた値で、ドメインの利用者は変えられません。
複数ドメインをまとめて点検するスクリプト
管理しているドメインが多い場合は、ドメインの一覧を読み込み、それぞれの全権威サーバーに NS と SOA を問い合わせて、タブ区切りの一覧にするスクリプトが便利です。doggo と jq を使います。
#!/bin/sh
# 使い方: sh doggo-ns-ttl.sh domains.txt > result.tsv
# 出力の列: ドメイン / 問い合わせ先 / 種別 / TTL(秒) / 値
while read -r zone; do
case "$zone" in ''|\#*) continue ;; esac
servers=""
for ns in $(doggo "$zone" NS --short --color=false); do
for ip in $(doggo "$ns" A --short --color=false | grep -E '^[0-9.]+$'); do
servers="$servers @$ip"
done
done
if [ -z "$servers" ]; then
printf '%s\t-\t-\t-\tNS またはアドレスが取得できません\n' "$zone"
continue
fi
# $servers は空白で区切って複数の引数として渡す
doggo "$zone" NS SOA $servers --json \
| jq -r --arg z "$zone" '
.. | objects | select(has("ttl") and has("nameserver"))
| [$z, .nameserver, .type, (.ttl | tostring | sub("s$"; "")), .address]
| @tsv'
done < "$1"
ドメインの一覧は、1行に1つずつドメイン名を書いたテキストファイルです。# で始まる行と空行は読み飛ばします。
JSON の入れ子の形は版や問い合わせ先の数によって変わることがあるため、jq では .. で全体をたどり、TTL と問い合わせ先を持つ項目だけを選んでいます。TTL は 300s のような文字列なので、末尾の s を取り除いて数字にしています。版を上げたときは、一度 jq . で構造を確かめてください。
このスクリプトは IPv4 のアドレスだけを使います。IPv6 の権威サーバーも確かめたい場合は、AAAA を引いてアドレスを加えます。
結果の読み方
結果のファイルから「ドメイン・種別・TTL」の組み合わせを数えると、食い違いが一目で分かります。
# ドメイン・種別・TTL ごとに、何件の答えがあったか
cut -f1,3,4 result.tsv | sort | uniq -c
# ドメイン・種別・値ごとに、何件の答えがあったか
cut -f1,3,5 result.tsv | sort | uniq -c
1つ目で、同じドメインの同じ種別に TTL の違う行が2つ以上出たら、権威サーバーの間で TTL がそろっていません。2つ目では、NS の各値や SOA の値の件数が、問い合わせた権威サーバーの台数と同じになるのが正常です。件数の少ない値があれば、一部のサーバーだけが違う内容を返しています。次の順に確認します。
- NS の一覧が違う:権威サーバーごとにゾーンの内容が違います。手作業で別々に設定している、または移転の途中で古い事業者の設定が残っている可能性があります。
- SOA のシリアルが違う:セカンダリへのゾーン転送が止まっているか、遅れています。プライマリ側のログや、転送を許可する設定を確認します。
- TTL だけが違う:転送の遅れか、設定の誤りです。シリアルもあわせて見ると、どちらか判断しやすくなります。
- ある問い合わせ先の行が無い:そのサーバーが時間切れになったか、ゾーンを持っていない(
REFUSED)状態です。委任に書かれているのに答えないサーバーは、名前解決を遅くする原因になるので、委任から外すか設定を直します。
TTL を下げる作業で使う
DNS 事業者の移転やサーバーの引っ越しの前には、関係するレコードの TTL を短くしておくと、切り替えの影響を早く収められます。この作業の確認にも同じ手順が使えます。
- 作業前にスクリプトを実行し、今の TTL を記録します。
- ゾーンの TTL を短い値に変更したら、権威サーバーの値がすべて新しい TTL になったことを確かめます。
- 変更前の TTL の秒数が過ぎるまで待ちます。キャッシュサーバーには、それまで古い長い TTL のまま残っているからです。
- キャッシュサーバーに問い合わせ、残り時間が新しい TTL 以下になっていることを確かめてから、切り替えの作業に進みます。
キャッシュサーバーの中には、TTL に上限や下限を設けているものがあります。設定値より長く残ったり、短く切り上げられたりすることがあるので、待ち時間には余裕を持たせます。
つまずきやすい点
- 短い名前を渡すと、resolv.conf の search の設定でドメインが補われることがあります。ドメイン名を末尾のドットまで書くか、
--search=falseを付けます。 - doggo の世界各地から問い合わせる機能(Globalping を使うもの)は、問い合わせる名前を外部のサービスに送ります。社内専用の名前には使わないでください。
- スクリプトを cron で短い間隔で動かすと、権威サーバーに無駄な負荷をかけます。日常の点検なら1日に数回程度で足ります。
- 問い合わせ先の1台がエラーになると、doggo はエラーのメッセージを表示します。結果のファイルにはその行が残らないので、標準エラー出力もログに残しておくと原因を追えます。
まとめ
- doggo は名前・種別・問い合わせ先を1行に並べられ、NS と SOA と TTL を一度に表で確かめられます。
- キャッシュサーバーの TTL は残り時間、権威サーバーの TTL は設定値です。権威サーバーはアドレスで指定して問い合わせます。
- 親ゾーン側の NS は紹介として返るため、
--jsonの AUTHORITY にあたる項目や dig の+norecurseで確かめます。 --jsonと jq で複数ドメインの一覧を作り、uniq -cで NS・シリアル・TTL の食い違いを探します。- TTL を下げる作業では、変更前の TTL の秒数だけ待ち、キャッシュサーバーの残り時間を確かめてから切り替えます。