权威记录起始(英語:start of authority record,简称 SOA)是域名系统(DNS)的一种包含有关区域的管理信息(特别是关于区域传输的)的记录。SOA记录的格式在 RFC 1035[1] 中被定义。

背景

通常名称服务器被设置在集群中。每个集群内的数据库通过区域传输同步。区域的SOA记录包含控制区域传输的数据——序列号和不同的时间跨度。

记录也包括了区域的负责人的电子邮件地址以及主要名称服务器的名称。通常SOA记录位于区域顶部,没有SOA记录的区域是不符合RFC 1035的要求的。

结构

NAME
区域名字
TYPE
SOA,start of authority 的缩写
CLASS
区域类型(几乎都是IN
TTL
存活时间
MNAME
区域的主要名称服务器
RNAME
区域负责人的电子邮件地址。(通常,地址被编码为一个名称。地址@前的部分成为名称的第一个部分,@后的部分成为名称的剩余部分。在区域文件格式中,第一部分的点被反斜杠转义。例如,john.doe@example.com会在区域文件中被表示为john\.doe.example.com
SERIAL
区域的序列号。如果附属于此服务器的辅助名称服务器观察到此数字增加,则从服务器将假定该区域已更新并启动区域转移
REFRESH
辅助名称服务器应向主服务器查询SOA记录以检测区域更改的周期秒数。对于小而稳定的区域推荐86400秒(24小时)[4]
RETRY
如果主服务器没有响应,辅助服务器重新请求SOA记录的秒数,必须小于REFRESH。对于小而稳定的区域推荐7200秒(2小时)[4]
EXPIRE
如果主服务器没有响应,辅助服务器应该停止应答请求的秒数,必须大于REFRESHRETRY的和。对于小而稳定的区域推荐3600000秒(1000小时)[4]
MINIMUM
用于计算消极响应缓存的存活时间。权威名称服务器采用TTLMINIMUM中较小的一个作为消极响应中的TTL发送。解析器使用返回的TTL以得知应该将消极响应缓存多久。对于小而稳定的区域推荐172800秒(2天)[4]。最初,该字段的含义是该区域中资源记录的最小TTL值,RFC 2308中将其改为了现在的含义[5]

BIND语法的例子

$TTL 86400
@   IN SOA    ns.icann.org. noc.dns.icann.org. (
        2020080302  ; 序列号
        7200        ; 刷新时间
        3600        ; 重试时间
        1209600     ; 过期时间
        3600        ; 消极响应缓存 TTL
)

序列号更改

已经建立了几种方法来更新区域的SERIAL字段:

  • 从1开始,每次递增
  • 最后更改的日期(ISO 8601基本格式),并附带两位数的计数器(例如,2017031405是14 March 2017的第五次更改)。这种方法被RFC 1912所推荐。[6]
  • 区域数据文件的最后一次修改时间,表示为UNIX时间戳。这种方法是djbdns套件[7]的默认方法。尽管其使用32位计数器,由于序列号算法的影响,它不易受到2038年问题的影响。

參考資料

  1. ^ Mockapetris, P.. Domain names - implementation and specification. 1987-11. RFC 1035. . 
  2. ^ Dynamic Updates in the Domain Name System (DNS UPDATE). April 1997 [2017-12-28]. RFC 2136. 
  3. ^ A Mechanism for Prompt Notification of Zone Changes (DNS NOTIFY). August 1996 [2017-12-28]. RFC 1996. 
  4. ^ 4.0 4.1 4.2 4.3 Jun 1999, Publication date: 07. Recommendations for DNS SOA Values. RIPE Network Coordination Centre. [2022-12-25]. (原始内容存档于2022-12-25). 
  5. ^ Negative Caching of DNS Queries (DNS NCACHE). March 1998 [2017-12-28]. RFC 2308. 
  6. ^ Common DNS Operational and Configuration Errors. February 1996 [2017-12-28]. RFC 1912. 
  7. ^ How to run a DNS server in place of an existing BIND server. [2022-12-25]. (原始内容存档于2022-12-25).