Як я можу побачити час роботи (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, на який він вказує, у цьому випадку також може бути важливим.

Якщо ви зачекаєте пару секунд і почнете копати знову на локальному сервері імен, вам слід побачити, що кількість TTL зменшиться на кількість секунд, яких ви чекали (приблизно). Якщо він потрапить у 0, оновиться або якщо сервер імен чомусь оновить зону.

Як вже було сказано вище, існує різниця між виконуваним кодом проти сервера імен із кешованим записом та сервером імен, який є авторитетним для цього запису.

(у прикладах, які я використовую нижче, я використовую +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

Якщо ви потрапили на вікно і маєте доступ лише до 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-сервери будуть перелічені в розділі Авторизації виводу копання)

Швидкий перевірте, чи не вимагаєте ви авторитетного NS: Якщо ви digзнову запустите і зміни TTL, ви, ймовірно, потрапили в кеш. Якщо він залишається таким же, ви, ймовірно, запитуєте авторитетного сервера (або сервера, який порушив кешування).


1
якщо ttl не змінюється, це може бути лише той, хто вважає себе авторитетним: власник домену, можливо, змінив DNS-сервер без вимкнення старого. У минулому місяці була проблема.
Ясен

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 $@
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.