DNSレコードの有効期間(TTL)を表示するにはどうすればよいですか?


117

CNAMEレコードのTime-To-Live(TTL)値を確認したい。

(Apple Mac OS Xで)digにアクセスできます。これにより、次のような答えが得られます。

% dig host.example.gov
<*SNIP*>
;; ANSWER SECTION:
host.example.gov.       43200   IN  CNAME   host1.example.gov.
host1.example.gov.      43200   IN  A       192.168.16.10

値 '43200'はこのDNSレコードのTTLですか?

回答:


142

はい、そのレコードの有効期限が切れるまでの秒数があります(権限のあるネームサーバーに問い合わせていない場合)。CNAMEには明らかにリダイレクトのレベルがあるため、この場合にそれが指すAレコードのTTLも同様に重要です。

数秒待ってからローカルネームサーバーで再度digを実行すると、TTL数が(およそ)待機した秒数だけ減少することがわかります。0に達すると、更新されるか、ネームサーバーが何らかの理由でゾーンを更新する場合があります。

上記のように、キャッシュされたエントリを持つネームサーバーに対して実行されるdigと、そのエントリに対して権限を持つネームサーバーには違いがあります。

(以下で使用する例では、出力を簡潔にするために+noauthority +noquestion+nostatsフラグを使用しています)。

次のクエリの違いに注意してください。

$ dig +noauthority +noquestion +nostats stackoverflow.com @ns2.p19.dynect.net.

; <<>> DiG 9.7.0-P1 <<>> +noauthority +noquestion +nostats stackoverflow.com @ns2.p19.dynect.net.
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 50066
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 4, ADDITIONAL: 0
;; WARNING: recursion requested but not available

;; ANSWER SECTION:
stackoverflow.com.  432000  IN  A   69.59.196.211

したがって、上記のクエリでは、stackoverflow.comに対して権限を持つネームサーバーをクエリしています。flagsセクションに気付いた場合は、これが信頼できる回答(つまり、キャッシュされていない)であることを示すaaフラグに特に注意してください。

$ dig +noauthority +noquestion +noadditional +nostats stackoverflow.com 

; <<>> DiG 9.7.0-P1 <<>> +noauthority +noquestion +noadditional +nostats stackoverflow.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 43514
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 4, ADDITIONAL: 4

;; ANSWER SECTION:
stackoverflow.com.  246696  IN  A   69.59.196.211

上記のクエリでは、aaフラグはありません。TTLはクエリとクエリの実行中に減少し続けます。これは、基本的に私が以前話していたカウンターです。


49

あなたがたまたまWindowsボックスに引っかかって、nslookupにしかアクセスできない場合:

nslookup -qa=A -debug host.example.com authoritiative-dns-host-here.com

15

Is the value '43200' the TTL for this DNS record?

はい-クエリに応答したサーバーから報告されたとおりです(キャッシュサーバーに問い合わせる場合、キャッシュ内の残り時間を返します)。

実際のレコードクエリで設定されたTTLを確認するには、権限のあるネームサーバー(dig @some.dns.server host.example.gov-権限のあるDNSサーバーは、dig出力のAuthorityセクションにリストされます)

権限のあるNSに問い合わせているかどうかを簡単に確認します。dig再度実行してTTLが変更された場合、おそらくキャッシュにヒットしています。同じままの場合は、おそらく権限のあるサーバー(またはキャッシュが壊れているサーバー)に問い合わせているでしょう。


1
ttlが変更されない場合は、それ自体が信頼できると信じているものである可能性があります。ドメイン所有者は、古いサーバーをシャットダウンせずにDNSサーバーを変更した可能性があります。
-Jasen

2
@Jasenはい、それは間違いなく可能です(同様に重要なことを示しています。DNS管理者は、移行を
台無しに

7

デフォルトの発掘出力に権限のあるサーバーが表示されませんでしたが、次の

dig +nssearch host.example.com

返されたものは、voretaq7の説明に従って使用して、レコードの実際のTTL値を取得できます。

更新:これを行う方法を忘れて戻ってきなければならないので、最初に信頼できるネームサーバーをフェッチし、それを使用して掘るための小さなスクリプトを作成しました

#!/bin/bash

show_help(){
        echo Usage $0 domain
}

if [ -z "$1" ]; then
        show_help
        exit 1
fi

DOMAIN=$1
APEX_DOMAIN=`echo $DOMAIN | sed 's/\(.*\.\)\([^.]*\.[^.]*\)/\2/'`
FIRST_AUTHORITATIVE_NS=$(dig +nssearch $APEX_DOMAIN | awk '$1=="SOA"{sub(".$","",$2);print $2;exit;}')

echo
echo Using authoritative nameserver $FIRST_AUTHORITATIVE_NS

dig @$FIRST_AUTHORITATIVE_NS $@
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.