这几天我一直在尽力正确理解bind9官方文档:
http://ftp.isc.org/isc/bind9/cur/9.7/doc/arm/Bv9ARM.html
网上有很多 bind9 教程。但是,我在将建议的解决方案与我能找到的任何 SOA RR 官方定义相协调时遇到了很多问题。
除此之外,我还检查了:
http://en.wikipedia.org/wiki/Resource_record#DNS_resource_records
http://en.wikipedia.org/wiki/List_of_DNS_record_types
https://www.rfc-editor.org/rfc/rfc1035#page-12
尽管如此,我仍然对 SOA RR 的正确格式感到非常困惑。
许多教程似乎提供了与此类似的语法:
example.com. 43200 IN SOA ns1.example.com. other.example.com. (
2011090302 ;Serial Number
86400 ;refresh
7200 ;retry
1814400 ;expire
86400 ;minimum
)
我不太能解释为什么括号前面有两个域。但是,如果没有第二个域,named-checkzone 就会报错。
然而,这个网站尤其如此:
http://forums.devshed.com/dns-36/bet-you-want-to-setup-a-dns-server-huh-141940.html
提供具有 SOA RR 的区域文件,如下所示:
@ SOA ns1 ( ; ns1.basiczone.com is the primary server for basiczone.com
postmaster ; contact email for basiczone.com is [email protected]
2004041700 ; Serial ID in reverse date format
21600 ; Refresh interval for slave servers
1800 ; Retry interval for slave servers
604800 ; Expire limit for cached info on slave servers
900 ) ; Minimum Cache TTL in zone records
请注意,没有类 IN。此外,在左括号之前只有一个域 (ns1)。
因此,主要问题是:SOA RR 的精确、官方或最推荐的语法是什么?此语法最精确的定义在哪里?
最后,何时使用 SOA 记录?我的理解是,对于我想要托管的任何域,以及我想要成为其权威名称服务器的任何域,我都需要一个 SOA 记录。
答案1
SOA 后面的第一个名称是MNAME
,即该区域的权威名称服务器 - 例如,您的名称服务器本身的名称。
第二个名称RNAME
看起来像域名,但实际上不是。它是将区域负责人的电子邮件地址中的“@”字符替换为“.”后得到的字符串。(希望您的电子邮件地址在“@”之前没有“.”。)
对于这两个名称(以及区域文件中的其他名称),除非名称以句点结尾,否则区域名称本身会被隐式附加:foo
表示foo.example.com
,而foo.
表示foo
。一个常见的错误是写foo.example.com
,bind 会将 向全世界发布为foo.example.com.example.com
,而您应该写foo.example.com.
。
括号允许您在文本文件中编写跨多行的资源记录。您提供的一个示例将左括号放在 和 之间MNAME
,RNAME
而另一个示例将其放在 之后RNAME
,但功能上没有区别。
“IN”指定“internet”类,这是默认类,因此您可以将其省略。
推荐语法:遵循维基百科示例dig
并使用类似或的工具dnsq
来显示您的名称服务器实际上告诉世界的内容,而不是花费太多精力去猜测 bind 如何解析您的区域文件。
精确语法:BIND 源代码。(仅当您真的想变得严谨时才需要——如果您只是想让您的区域文件正常工作,则没有必要。)
官方语法(或至少是互联网上官方的语法):
- https://www.rfc-editor.org/rfc/rfc1035(第 5.1 节“格式”)
每个区域都应该有一个 SOA。如果您为该区域提供服务(无论是否“权威”),您都应该拥有 SOA 以及该区域中的所有其他记录。实际上,如果您正在编写区域文件,请将 SOA 放入其中 - 如果您要从其他人那里复制整个区域文件,那么您将以这种方式获得 SOA,因此您无需担心它。