绑定区域错误 - 输入意外结束

绑定区域错误 - 输入意外结束

一切似乎都正常,但我得到了意外的输入结束:

$TTL    10800
@       IN      SOA     ns1.riddimdub.com.
admin.radiohost.riddimdub.com. (
        1        ; Serial
        10800       ; Refresh after 3 hours
        3600       ; Retry after 1 hour
        604800       ; Expire after 1 week
        3600 )     ; Negative caching TTL of 1 day
@       IN      NS      ns1.riddimdub.com.
@       IN      NS      ns2.riddimdub.com.
radiohost.riddimdub.com.        IN       MX     10      radiohost.riddimdub.com.
radiohost.riddimdub.com.        IN      A       185.40.20.124
ns1     IN      A       185.40.20.124
ns2     IN      A       185.40.20.124
www     IN      CNAME   radiohost.riddimdub.com.
mail    IN      A       185.40.20.124
ftp     IN      CNAME   radiohost.riddimdub.com.

我还收到了意外的 RR 类型 10800。

可能是什么问题呢?

答案1

作为人类,我可以将文件的这一部分识别为应有的SOA记录:

@       IN      SOA     ns1.riddimdub.com.
admin.radiohost.riddimdub.com. (
        1        ; Serial
        10800       ; Refresh after 3 hours
        3600       ; Retry after 1 hour
        604800       ; Expire after 1 week
        3600 )     ; Negative caching TTL of 1 day

但如果这些行被正确解析的话,那并不是上述内容的实际含义。

问题

由于主文件格式使用换行符作为记录之间的分隔符*,记录数据的第一个字段后的换行符意味着这应该是记录SOA

 @       IN      SOA     ns1.riddimdub.com.

*) 但人们可以发挥想象力,使用括号 ( ( )) 来以跨越多行的方式格式化单个记录(纯粹是出于风格/人类可读性的原因)。

由于一条SOA记录必须包含七个记录数据字段,但该假定SOA记录只有一个字段,因此您会收到“意外输入结束”错误。
(我完全相信原始错误消息也引用了发生这种情况的行号。)

接下来,当本应是记录其余SOA数据的内容从下一行开始并被视为下一条记录时,您就会遇到二次故障。
您在这里使用了括号,因此整个位被读取为跨多行的单个记录。

那个假定的“下一个记录”被解释如下:

admin.radiohost.riddimdub.com.    1            10800     ...
^                                 ^            ^
owner name                        ttl          "must be the record type, I guess"?!

这会导致出现“未知 RR 类型 10800”错误消息。
这个错误并不那么重要,只要您修复了第一个问题,它就会消失,这个问题导致一半SOA记录的内容在错误的上下文中浮动。

修复

有多种编写方法:

最简单(不使用花哨的语法,可能最直观地了解SOA记录的实际组成):

@       IN      SOA     ns1.riddimdub.com. admin.radiohost.riddimdub.com. 1 10800 3600 604800 3600

相当常见的多行格式,为注释序列和计时器留出空间:

@       IN      SOA     ns1.riddimdub.com. admin.radiohost.riddimdub.com. (
        1        ; Serial
        10800    ; Refresh after 3 hours
        3600     ; Retry after 1 hour
        604800   ; Expire after 1 week
        3600 )   ; Negative caching TTL of 1 hour

另一种选择是,如果你想注释所有内容:

@       IN      SOA     ns1.riddimdub.com. ( ; Mname (master nameserver)
        admin.radiohost.riddimdub.com. ; Rname (email address)
        1        ; Serial
        10800    ; Refresh after 3 hours
        3600     ; Retry after 1 hour
        604800   ; Expire after 1 week
        3600 )   ; Negative caching TTL of 1 hour

请注意如何在同一行上写记录的字段(编写记录的典型方式),或者必须使用括号来指定如何将记录拆分到多行上。

相关内容