我想将 DNS 记录从 Network Solutions 转移到 DNS Made Easy,主要是为了利用 DNS Made Easy 提供的“DNS 故障转移”功能,如果 DNS Made Easy 感知到本地的主要 IP 不可用,则自动将几个关键的 A 记录转移到我的数据中心的新 IP,我将服务器复制到该数据中心进行 DR。
本指南很有帮助,但我不明白关于 TTL 的第一步。我对 TTL 的理解一直是主机在查询记录时根据 TTL 指定的时间缓存记录。如果这种理解是正确的,我如何控制过期时间?
我的计划是:
- 在空闲时间在新的 DNS 提供商上创建新的区域文件
- 晚上将注册商现有的名称服务器更改为新的 DNS Made Easy 名称服务器,祈祷并等待早晨
关于 TTL,我可以做些什么来提高实现无缝连接的机会?
答案1
我对 TTL 的理解一直是,主机会按照 TTL 规定的时间缓存记录
这是正确的。TTL 的定义如下,源自古老的 RFC1034:
TTL 是 RR 的生存时间。此字段是一个 32 位整数,以秒为单位,主要由解析器在缓存 RR 时使用。TTL 描述了 RR 在应被丢弃之前可以缓存多长时间。
顺便注意:
- 这是最大值,解析器可以在达到 TTL 值之前清空其缓存(出于政策原因或为了在缓存中腾出空间)
- 如果外界认为 TTL 值太低,某些解析器会将 TTL 值限制到最小值;通常低于 5 分钟,则可能会有某些解析器不遵守该值的风险
通常建议对任何记录进行如下更改:
- 您将当前记录的 TTL 降低到 5 分钟左右
- 你等待至少前一个 TTL 的值,然后再进行下一步
- 你改变记录,保持较小的值
- 您测试一切是否正确
- 然后你可以设置更高的 TTL 值
为了完整起见,根据您的 NS 基础设施,您可能还需要:
- 降低 SOA MINIMUM 值,这实际上是“负 TTL”:这仅在添加之前不存在的记录时才有意义
- 如果您不控制辅助名称服务器,请降低 SOA REFRESH 值,以便它们更快地获取新值(或者向它们发送 NOTIFY 消息并确保它在之后不久触发来自它们的 AXFR/IXFR 查询)。
你的情况略有不同:
- 如果你更改名称服务器集
- 和如果新名称服务器配置了与之前完全相同的区域内容
- 那么这意味着联系旧的名称服务器或新名称服务器将产生完全相同的效果
- 因此您可以更改它们而不更改任何 TTL。
- 但是,在更改之后,您需要至少等待父区域中 NS 记录的 TTL,以考虑所有解析器都将收到新的名称服务器集。只有在此延迟之后,您才能开始更改区域的内容。
一些例子:
$ for tld in com biz info org guru fr de ; do echo -n $tld ' '; dig @`dig $tld. NS +short|head -1` nic.$tld NS +noall +auth | grep "IN NS" | head -1 | awk '{ print $2}' ; done
com 2d
biz 2h
info 1d
org 1d
guru 1d
fr 2d
de 1d
PS:如果是签名域名(DNSSEC),事情会稍微复杂一些。