Я хотел бы увидеть значение времени жизни (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?
Да, число - это количество секунд, оставшихся до истечения срока действия этой записи (при условии, что мы не запрашиваем авторитетный сервер имен). Очевидно, что с CNAME существует уровень перенаправления, поэтому TTL для записи A, на которую он указывает, в этом случае также может быть важным.
Если вы подождете пару секунд и снова запустите dig на локальном сервере имен, вы должны увидеть, что значение TTL уменьшилось на количество секунд, которые вы ждали (приблизительно). Когда он достигнет 0, он обновится, или если ваш сервер имен обновит зону по какой-то причине.
Как упоминалось выше, есть разница между запуском dig на сервере имен с кэшированной записью и сервером имен, который является полномочным для этой записи.
(в примерах, которые я использую ниже, я использую +noauthority
+noquestion
& +nostats
flags, чтобы вывод был лаконичным).
Обратите внимание на разницу между следующими запросами:
$ 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
раздел, обратите особое внимание на аа флаг, который означает, что это авторитетный ответ (т.е. не кешируется).
$ 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
В приведенном выше запросе у нас нет аа флаг, и TTL будет продолжать уменьшаться по мере выполнения запросов и запросов. По сути, это тот счетчик, о котором я говорил ранее.
Если вы застряли в окне Windows и имеете доступ только к nslookup:
nslookup -qa=A -debug host.example.com authoritiative-dns-host-here.com
Is the value '43200' the TTL for this DNS record?
Да - как сообщил вам сервер, ответивший на ваш запрос (если вы запрашиваете сервер кеширования, он вернет оставшееся время в своем кеше).
Чтобы увидеть TTL, установленный для фактического запроса записи, авторитетный сервер имен (dig @some.dns.server host.example.gov
- Авторитетные DNS-серверы будут перечислены в разделе Authority вывода dig)
Быстрая проверка, спрашиваете ли вы авторитетный NS: если вы запустите dig
снова и TTL изменяется, вы, вероятно, попадаете в кеш. Если он не изменится, вы, вероятно, запрашиваете авторитетный сервер (или тот, у которого нарушено кеширование).
Я не мог видеть авторитетные серверы в выходных данных по умолчанию, но следующие
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 $@