Как посмотреть время жизни (TTL) для записи DNS?

117

Я хотел бы видеть значение времени жизни (TTL) для записи CNAME.

У меня есть доступ к копать (на Apple Mac OS X), что дает мне ответ вроде этого:

% 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» TTL для этой записи DNS?

Стефан Ласевский
источник

Ответы:

142

Да, число - это количество секунд, оставшихся до истечения срока действия этой записи (при условии, что мы не запрашиваем авторитетный сервер имен). Очевидно, что с CNAME существует уровень перенаправления, поэтому TTL для записи A, на которую он указывает, в этом случае также может быть важным.

Если вы подождете пару секунд и снова запустите 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-серверы будут перечислены в разделе Authority вывода копий)

Быстрая проверка, чтобы узнать, спрашиваете ли вы авторитетный NS: если вы запустите digснова и TTL изменится, вы, вероятно, попадете в кеш. Если он останется прежним, вы, вероятно, спросите у авторитетного сервера (или тот, у которого нарушено кэширование).

voretaq7
источник
1
если ttl не меняется, то это может быть только тот, кто считает себя авторитетным: владелец домена мог сменить DNS-сервер, не отключая старый ... у него была проблема в прошлом месяце.
Ясен
2
@Jasen Да, это определенно возможно (это также указывает на кое-что важное: администратор DNS будет покупать напитки на следующей компании, чтобы
обойти
7

Я не мог видеть авторитетные серверы в выводе dig по умолчанию, но следующее

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 $@
Адам
источник