如何查看 DNS 记录的生存时间 (TTL)?

Ste*_*ski 124 domain-name-system ttl dig

我想查看 CNAME 记录的生存时间 (TTL) 值。

我可以访问dig(在 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
Run Code Online (Sandbox Code Playgroud)

值“43200”是此 DNS 记录的 TTL 吗?

Phi*_*lds 148

是的,那里的数字是该记录到期前剩余的秒数(假设我们不查询权威名称服务器)。显然,对于 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
Run Code Online (Sandbox Code Playgroud)

所以在上面的查询中,我们正在查询一个对 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
Run Code Online (Sandbox Code Playgroud)

在上面的查询中,我们没有aa标志,随着我们的查询和查询,TTL会不断减小。这基本上就是我之前所说的计数器。


小智 56

如果您碰巧卡在 windows 机器上并且只能访问 nslookup:

nslookup -qa=A -debug host.example.com authoritiative-dns-host-here.com
Run Code Online (Sandbox Code Playgroud)


vor*_*aq7 16

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

是 - 正如回答您查询的服务器向您报告的那样(如果您询问缓存服务器,它将返回其缓存中的剩余时间)。

要查看实际记录上的 TTL 设置,请查询权威名称服务器(dig @some.dns.server host.example.gov- 权威 DNS 服务器将列在 dig 输出的权威部分中)

快速检查一下您是否在询问权威 NS:如果您dig再次运行并且 TTL 发生变化,您可能会遇到缓存。如果它保持不变,您可能会询问权威服务器(或已损坏缓存的服务器)。

  • @Jasen 是的,这绝对是可能的(这也表明了一些重要的事情:DNS 管理员将在下一次公司郊游时购买饮料来搞砸迁移!) (2认同)

Ada*_*dam 7

我在默认的 dig 输出中看不到权威服务器,但是以下内容

dig +nssearch host.example.com
Run Code Online (Sandbox Code Playgroud)

返回它们,然后可以按照 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 $@
Run Code Online (Sandbox Code Playgroud)