SOA 记录是每个域名区文件里的第一条记录,管的是这个区怎么被复制和缓存,不负责把流量引到哪台机器。每个区有且只有一条。
域名系统里每种记录都有自己的活,第 32 期做过汇总。地址记录负责把名字指向服务器,邮件记录指明哪台服务器收信。SOA 记录不指向任何地方,它描述的是这个区本身:谁在管、数据是第几个版本、多久同步一次、解析不到时缓存多久。按标准,每个区有且只有一条,位置在区的最顶上。
它由七个字段组成。第二个字段是负责人的邮箱,写法特殊:邮箱里的 @ 换成点号,所以主机管理员的邮箱在记录里写成 hostmaster.example.com 这样的形式。第三个字段是序列号,相当于版本号,区文件每改一次就要往上加,备用服务器靠比较序列号判断要不要拉新数据。
剩下几个字段都是时间:刷新间隔指备用服务器多久去问一次主服务器有没有更新;重试间隔指问不到时过多久再试;过期时间是备用服务器联系不上主服务器时的忍耐上限,超过就不再回答这个区的查询;最小 TTL 曾经指区内记录的最短缓存时长,后来被重新定义成解析不到时的缓存时长。
改完记录忘了加序列号,备用服务器不会去拉新数据,同一个域名在不同解析器上会得到不同答案。这类同步问题,排查时看的都是 SOA 里的这些数字。
最后一个常被忽略的点:SOA 所在的区文件如果允许任何人传送,整个区的记录会被人一次性拉走,包括从没公开过的内部子域名。这不是 SOA 本身的问题,但通常是在查这个记录的字段时才会注意到。