yinmin
3 月 19 日
接#10 解释一下:脏记录叠加脏记录
1. 域名会有 ttl 过期时间,如果域名 ttl 过期就必须重新去上级 dns server 查询。例如:ttl 60 秒,如果第一次查询获取 ip 地址,第二次查询间隔小于 60 秒就用原来的结果,大于 60 秒就需要再次查询新结果。
2. dns server 都会有最小 ttl 值,如果域名 ttl 小于这个值,就强制改成这个最小 ttl 值。例如:你的域名 ttl 是 10 秒,alidns 公共 dns 的允许最小 ttl 是 30 秒,最终发给客户的 ttl 就是 30 秒。许多电信宽带运营商 dns server 的最小 ttl 是 5 分钟,甚至是 10 分钟。常见的宽带路由器的最小 ttl 也是 5 分钟-10 分钟。
3. dns server 一般都是开启 dns 脏记录快速返回机制的,当 dns server 发现域名 ttl 过期了,会马上返回旧 ip 结果并将 ttl 设置为 1 秒-5 秒,同时向上级 dns server 去请求 ip 结果,毕竟绝大多数的域名很少变更 ip 地址。电信级 dns server 同一个 ip 会有多台服务器做负载均衡的,多台服务器是各自独立的。因此,你会发现,ddns ip 变更后,你从同一个电信级 dns server 获取 ip ,旧 ip 和新 ip 会来回跳。
讲完原理,讲家宽路由器的脏记录叠加脏记录:
家宽路由器 dns server 最小 ttl 是 5 分钟,电信 dns server 最小 ttl 5 分钟,你的域名 ttl 是 60 秒。你从家宽 dns 获取 ip 地址,1 分钟后 ddns 变更后,5 分钟后家宽路由器向电信 dns 请求 ip ,电信 dns 返回脏 ip (旧 ip ),10 分钟后家宽路由器再次向电信 dns 请求 ip ,如果很幸运是访问负载均衡的同一台电信 dns 服务器,获得了新 ip ;如果访问了负载均衡的另一台 dns ,还是返回老 ip ; 15 分钟后家宽路由器再次向电信 dns 请求 ip…
尽管域名 ttl 是 1 分钟,你会发现过了十几分钟还是老 ip 。