如何设置你自己的域名。
首先:你已经阅读了之前的所有内容,对吗?你必须这样做。
在我们真正开始本节之前,我将为你讲解一些关于 DNS 工作原理的理论和示例。你最好阅读它,因为它对你有好处。如果你不想读,至少应该快速浏览一遍。当你看到应该放在你的 named.conf
文件中的内容时,停止浏览。
DNS 是一个分层的树状结构系统。顶部写为 `.
',发音为 `根 (root)',这对于树数据结构来说很常见。在 .
下面有许多顶级域名 (TLD);最著名的有 ORG
、COM
、EDU
和 NET
,但还有更多。就像一棵树一样,它有一个根,然后分支出来。如果你有任何计算机科学背景,你就会认识到 DNS 是一棵搜索树,并且你将能够找到节点、叶节点和边。点是节点,边在名称上。
当查找一台机器时,查询从根开始递归地进入层次结构。如果你想找到 prep.ai.mit.edu.
的地址,你的域名服务器必须从某个地方开始询问。它首先查看其缓存。如果它知道答案,之前已经缓存过,它会立即回答,正如我们在上一节中看到的那样。如果它不知道,它会查看它可以与请求的名称匹配的程度,并使用它缓存的任何信息。在最坏的情况下,没有匹配项,只有名称的 `.'(根),并且必须咨询根服务器。它将一次删除最左边的部分,检查它是否知道任何关于 ai.mit.edu.
、然后是 mit.edu.
、然后是 edu.
的信息,如果不知道,它确实知道关于 .
的信息,因为这在提示文件中。然后它会向 .
服务器询问关于 prep.ai.mit.edu
的信息。这个 .
服务器不会知道答案,但它会通过提供引荐来帮助你的服务器,告诉它应该在哪里查找。这些引荐最终将引导你的服务器到一个知道答案的域名服务器。我现在将说明这一点。+norec
表示 dig 正在询问非递归问题,以便我们自己进行递归。其他选项是为了减少 dig 的输出量,这样就不会占用太多页面
$ ;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 980
;; flags: qr ra; QUERY: 1, ANSWER: 0, AUTHORITY: 13, ADDITIONAL: 0
;; AUTHORITY SECTION:
. 518400 IN NS J.ROOT-SERVERS.NET.
. 518400 IN NS K.ROOT-SERVERS.NET.
. 518400 IN NS L.ROOT-SERVERS.NET.
. 518400 IN NS M.ROOT-SERVERS.NET.
. 518400 IN NS A.ROOT-SERVERS.NET.
. 518400 IN NS B.ROOT-SERVERS.NET.
. 518400 IN NS C.ROOT-SERVERS.NET.
. 518400 IN NS D.ROOT-SERVERS.NET.
. 518400 IN NS E.ROOT-SERVERS.NET.
. 518400 IN NS F.ROOT-SERVERS.NET.
. 518400 IN NS G.ROOT-SERVERS.NET.
. 518400 IN NS H.ROOT-SERVERS.NET.
. 518400 IN NS I.ROOT-SERVERS.NET.
这是一个引荐。它只给了我们一个“授权部分”,没有“答案部分”。我们自己的域名服务器将我们引荐到一个域名服务器。随机选择一个
$ dig +norec +noques +nostats +nocmd prep.ai.mit.edu. @D.ROOT-SERVERS.NET.
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 58260
;; flags: qr; QUERY: 1, ANSWER: 0, AUTHORITY: 3, ADDITIONAL: 3
;; AUTHORITY SECTION:
mit.edu. 172800 IN NS BITSY.mit.edu.
mit.edu. 172800 IN NS STRAWB.mit.edu.
mit.edu. 172800 IN NS W20NS.mit.edu.
;; ADDITIONAL SECTION:
BITSY.mit.edu. 172800 IN A 18.72.0.3
STRAWB.mit.edu. 172800 IN A 18.71.0.151
W20NS.mit.edu. 172800 IN A 18.70.0.160
它一次将我们引荐到 MIT.EDU 服务器。再次随机选择一个
$ dig +norec +noques +nostats +nocmd prep.ai.mit.edu. @BITSY.mit.edu.
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 29227
;; flags: qr ra; QUERY: 1, ANSWER: 1, AUTHORITY: 4, ADDITIONAL: 4
;; ANSWER SECTION:
prep.ai.mit.edu. 10562 IN A 198.186.203.77
;; AUTHORITY SECTION:
ai.mit.edu. 21600 IN NS FEDEX.ai.mit.edu.
ai.mit.edu. 21600 IN NS LIFE.ai.mit.edu.
ai.mit.edu. 21600 IN NS ALPHA-BITS.ai.mit.edu.
ai.mit.edu. 21600 IN NS BEET-CHEX.ai.mit.edu.
;; ADDITIONAL SECTION:
FEDEX.ai.mit.edu. 21600 IN A 192.148.252.43
LIFE.ai.mit.edu. 21600 IN A 128.52.32.80
ALPHA-BITS.ai.mit.edu. 21600 IN A 128.52.32.5
BEET-CHEX.ai.mit.edu. 21600 IN A 128.52.32.22
这次我们得到了一个“答案部分”,以及我们问题的答案。“授权部分”包含有关下次询问 ai.mit.edu
时应该询问哪些服务器的信息。因此,下次你想知道关于 ai.mit.edu
名称的信息时,你可以直接询问它们。Named 还收集了关于 mit.edu
的信息,因此如果请求 www.mit.edu
,它就更接近能够回答问题。
因此,从 .
开始,我们通过引荐找到了域名中每个级别的连续域名服务器。如果你使用了你自己的 DNS 服务器而不是使用所有其他服务器,你的 named 当然会缓存它为你挖掘出这些信息时找到的所有信息,并且它在一段时间内不必再次询问。
在树类比中,名称中的每个 ``.
'' 都是一个分支点。而 ``.
'' 之间的每个部分都是树中各个分支的名称。通过获取我们想要的名称 (prep.ai.mit.edu
),询问根 (.
) 或任何更远离根的服务器,朝向我们在缓存中拥有信息的 prep.ai.mit.edu
,来攀登树。一旦达到缓存限制,递归解析器就会外出询问服务器,追逐引荐(边)进一步进入名称。
一个较少被谈论但同样重要的域是 in-addr.arpa
。它也像“普通”域一样嵌套。in-addr.arpa
允许我们在知道主机地址时获取主机名。这里需要注意的重要一点是,IP 地址在 in-addr.arpa
域中以相反的顺序书写。如果你有一台机器的地址:198.186.203.77
,named 会像处理 prep.ai.mit.edu
一样,查找命名为 77.203.168.198.in-addr.arpa/ 的主机。示例:在任何匹配项(除了 `.')中找不到缓存条目,询问根服务器,m.root-servers.net
将你引荐到其他一些根服务器。b.root-servers.net
将你直接引荐到 bitsy.mit.edu/。你应该能够从那里继续下去。
现在来定义我们自己的域名。我们将创建域名 linux.bogus
并在其中定义机器。我使用一个完全虚假的域名来确保我们不会打扰到外界的任何人。
在我们开始之前还有一件事:并非所有字符都允许在主机名中使用。我们仅限于英文字母字符:a-z,以及数字 0-9 和字符 '-'(破折号)。请坚持使用这些字符(BIND 9 如果你违反此规则不会报错,BIND 8 会报错)。大写和小写字符对于 DNS 是相同的,因此 pat.uio.no
与 Pat.UiO.No
相同。
我们已经使用 named.conf
中的这一行开始了这一部分
zone "0.0.127.in-addr.arpa" { type master; file "pz/127.0.0"; };
请注意此文件中域名末尾缺少 `.
'。这表示现在我们将定义区域 0.0.127.in-addr.arpa
,我们是它的主服务器,并且它存储在一个名为 pz/127.0.0
的文件中。我们已经设置好这个文件,它读取如下
$TTL 3D @ IN SOA ns.linux.bogus. hostmaster.linux.bogus. ( 1 ; Serial 8H ; Refresh 2H ; Retry 4W ; Expire 1D) ; Minimum TTL NS ns.linux.bogus. 1 PTR localhost.
请注意此文件中所有完整域名末尾的 `.
',这与上面的 named.conf
文件形成对比。有些人喜欢用 $ORIGIN
指令开始每个区域文件,但这实际上是多余的。区域文件的 origin(它在 DNS 层次结构中的位置)在 named.conf
文件的 zone 部分中指定;在本例中,它是 0.0.127.in-addr.arpa
。
这个“区域文件”包含 3 个“资源记录” (RR):一个 SOA RR、一个 NS RR 和一个 PTR RR。SOA 是 Start Of Authority(起始授权)的缩写。`@' 是一个特殊符号,表示 origin,由于此文件的“域”列说明是 0.0.127.in-addr.arpa,因此第一行实际上意味着
0.0.127.in-addr.arpa. IN SOA ...
NS 是域名服务器 RR。此行开头没有 '@';这是隐式的,因为前一行以 '@' 开头。这样可以节省一些打字时间。因此,NS 行也可以写成
0.0.127.in-addr.arpa. IN NS ns.linux.bogus
它告诉 DNS 域名 0.0.127.in-addr.arpa
的域名服务器是哪台机器,它是 ns.linux.bogus
。“ns”是域名服务器的习惯名称,但与通常命名为 www.
something 的 Web 服务器一样。名称可以是任何名称。
最后,PTR(域名指针)记录说明子网 0.0.127.in-addr.arpa
中地址 1 的主机,即 127.0.0.1,被命名为 localhost
。
SOA 记录是所有区域文件的序言,并且每个区域文件中应该只有一个 SOA 记录,位于顶部(但在 $TTL
指令之后)。它描述了区域,它来自哪里(一台名为 ns.linux.bogus
的机器),谁负责其内容(hostmaster@linux.bogus
;你应该在此处插入你的电子邮件地址),这是区域文件的哪个版本(序列号:1),以及其他与缓存和辅助 DNS 服务器有关的事情。对于其余字段(refresh、retry、expire 和 minimum),请使用本 HOWTO 中使用的数字,你应该可以安全使用。在 SOA 之前有一行强制性行,即 $TTL 3D
行。将其放入所有区域文件中。
现在重启你的 named (rndc stop; named
) 并使用 dig
来检查你的工作成果。-x
请求反向查询
$ dig -x 127.0.0.1
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 30944
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0
;; QUESTION SECTION:
;1.0.0.127.in-addr.arpa. IN PTR
;; ANSWER SECTION:
1.0.0.127.in-addr.arpa. 259200 IN PTR localhost.
;; AUTHORITY SECTION:
0.0.127.in-addr.arpa. 259200 IN NS ns.linux.bogus.
;; Query time: 3 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sun Dec 23 03:02:39 2001
;; MSG SIZE rcvd: 91
所以它设法从 127.0.0.1 获取 localhost
,很好。现在进行我们的主要任务,linux.bogus
域,在 named.conf
中插入一个新的“zone”部分
zone "linux.bogus" { type master; notify no; file "pz/linux.bogus"; };
再次注意 named.conf
文件中域名末尾缺少 `.
'。
在 linux.bogus
区域文件中,我们将放入一些完全虚假的数据
; ; Zone file for linux.bogus ; ; The full zone file ; $TTL 3D @ IN SOA ns.linux.bogus. hostmaster.linux.bogus. ( 199802151 ; serial, todays date + todays serial # 8H ; refresh, seconds 2H ; retry, seconds 4W ; expire, seconds 1D ) ; minimum, seconds ; NS ns ; Inet Address of name server MX 10 mail.linux.bogus ; Primary Mail Exchanger MX 20 mail.friend.bogus. ; Secondary Mail Exchanger ; localhost A 127.0.0.1 ns A 192.168.196.2 mail A 192.168.196.4
关于 SOA 记录,必须注意两件事。ns.linux.bogus
必须是一台具有 A 记录的实际机器。在 SOA 记录中提到的机器上使用 CNAME 记录是不合法的。它的名称不必是“ns”,它可以是任何合法的主机名。接下来,hostmaster.linux.bogus
应该被理解为 hostmaster@linux.bogus。这应该是一个邮件别名或邮箱,负责维护 DNS 的人应该经常阅读邮件。任何关于该域的邮件都将发送到此处列出的地址。名称不必是“hostmaster”,它可以是你的普通电子邮件地址,但电子邮件地址“hostmaster”通常也被期望能够工作。
此文件中有一种新的 RR 类型,即 MX 或邮件交换器 RR。它告诉邮件系统将发送给 someone@linux.bogus
的邮件发送到哪里,即发送到 mail.linux.bogus
或 mail.friend.bogus
。每个机器名称之前的数字是该 MX RR 的优先级。编号最低的 RR (10) 是邮件应该发送到的首选服务器(如果可能)。如果发送失败,邮件可以发送到编号较高的服务器,即辅助邮件处理程序,此处为优先级 20 的 mail.friend.bogus
。
通过运行 rndc reload
重新加载 named。使用 dig
检查结果
$ dig any linux.bogus
; <<>> DiG 9.1.3 <<>> any linux.bogus
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 55239
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 1, ADDITIONAL: 1
;; QUESTION SECTION:
;linux.bogus. IN ANY
;; ANSWER SECTION:
linux.bogus. 259200 IN SOA ns.linux.bogus. \
hostmaster.linux.bogus. 199802151 28800 7200 2419200 86400
linux.bogus. 259200 IN NS ns.linux.bogus.
linux.bogus. 259200 IN MX 20 mail.friend.bogus.
linux.bogus. 259200 IN MX 10 mail.linux.bogus.linux.bogus.
;; AUTHORITY SECTION:
linux.bogus. 259200 IN NS ns.linux.bogus.
;; ADDITIONAL SECTION:
ns.linux.bogus. 259200 IN A 192.168.196.2
;; Query time: 4 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sun Dec 23 03:06:45 2001
;; MSG SIZE rcvd: 184
仔细检查后,你会发现一个错误。这一行
linux.bogus. 259200 IN MX 10 mail.linux.bogus.linux.bogus.
是完全错误的。它应该是
linux.bogus. 259200 IN MX 10 mail.linux.bogus.
我故意犯了一个错误,以便你可以从中学习 :-) 查看区域文件,我们找到这一行
MX 10 mail.linux.bogus ; Primary Mail Exchanger
它缺少一个句点。或者有太多 'linux.bogus'。如果区域文件中的机器名称未以句点结尾,则会将 origin 添加到其末尾,从而导致双重 linux.bogus.linux.bogus
。所以要么
MX 10 mail.linux.bogus. ; Primary Mail Exchanger
要么
MX 10 mail ; Primary Mail Exchanger
是正确的。我更喜欢后一种形式,因为它打字较少。有些 BIND 专家不同意,有些同意这种观点。在区域文件中,域名应该要么写出来并以 `.
' 结尾,要么根本不包含,在这种情况下,它默认为 origin。
我必须强调,在 named.conf 文件中,域名后面不应该有 `.
'。你无法想象多少次因为多一个或少一个 `.
' 而搞砸事情并让人们感到非常困惑。
因此,为了说明我的观点,这是新的区域文件,其中还有一些额外的信息
; ; Zone file for linux.bogus ; ; The full zone file ; $TTL 3D @ IN SOA ns.linux.bogus. hostmaster.linux.bogus. ( 199802151 ; serial, todays date + todays serial # 8H ; refresh, seconds 2H ; retry, seconds 4W ; expire, seconds 1D ) ; minimum, seconds ; TXT "Linux.Bogus, your DNS consultants" NS ns ; Inet Address of name server NS ns.friend.bogus. MX 10 mail ; Primary Mail Exchanger MX 20 mail.friend.bogus. ; Secondary Mail Exchanger localhost A 127.0.0.1 gw A 192.168.196.1 TXT "The router" ns A 192.168.196.2 MX 10 mail MX 20 mail.friend.bogus. www CNAME ns donald A 192.168.196.3 MX 10 mail MX 20 mail.friend.bogus. TXT "DEK" mail A 192.168.196.4 MX 10 mail MX 20 mail.friend.bogus. ftp A 192.168.196.5 MX 10 mail MX 20 mail.friend.bogus.
CNAME(规范名称)是一种为每台机器提供多个名称的方法。因此,www 是 ns 的别名。CNAME 记录的使用有点争议。但遵循以下规则是安全的:MX、CNAME 或 SOA 记录永远不应引用 CNAME 记录,它们应该只引用具有 A 记录的内容,因此不建议使用
foobar CNAME www ; NO!
但以下是正确的
foobar CNAME ns ; Yes!
通过运行 rndc reload
加载新数据库,这会导致 named 再次读取其文件。
$ dig linux.bogus axfr
; <<>> DiG 9.1.3 <<>> linux.bogus axfr
;; global options: printcmd
linux.bogus. 259200 IN SOA ns.linux.bogus. hostmaster.linux.bogus. 199802151 28800 7200 2419200 86400
linux.bogus. 259200 IN NS ns.linux.bogus.
linux.bogus. 259200 IN MX 10 mail.linux.bogus.
linux.bogus. 259200 IN MX 20 mail.friend.bogus.
donald.linux.bogus. 259200 IN A 192.168.196.3
donald.linux.bogus. 259200 IN MX 10 mail.linux.bogus.
donald.linux.bogus. 259200 IN MX 20 mail.friend.bogus.
donald.linux.bogus. 259200 IN TXT "DEK"
ftp.linux.bogus. 259200 IN A 192.168.196.5
ftp.linux.bogus. 259200 IN MX 10 mail.linux.bogus.
ftp.linux.bogus. 259200 IN MX 20 mail.friend.bogus.
gw.linux.bogus. 259200 IN A 192.168.196.1
gw.linux.bogus. 259200 IN TXT "The router"
localhost.linux.bogus. 259200 IN A 127.0.0.1
mail.linux.bogus. 259200 IN A 192.168.196.4
mail.linux.bogus. 259200 IN MX 10 mail.linux.bogus.
mail.linux.bogus. 259200 IN MX 20 mail.friend.bogus.
ns.linux.bogus. 259200 IN MX 10 mail.linux.bogus.
ns.linux.bogus. 259200 IN MX 20 mail.friend.bogus.
ns.linux.bogus. 259200 IN A 192.168.196.2
www.linux.bogus. 259200 IN CNAME ns.linux.bogus.
linux.bogus. 259200 IN SOA ns.linux.bogus. hostmaster.linux.bogus. 199802151 28800 7200 2419200 86400
;; Query time: 41 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sun Dec 23 03:12:31 2001
;; XFR size: 23 records
很好。正如你所见,它看起来有点像区域文件本身。让我们检查一下它对单独的 www
有什么说明
$�dig www.linux.bogus
; <<>> DiG 9.1.3 <<>> www.linux.bogus
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 16633
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 1, ADDITIONAL: 0
;; QUESTION SECTION:
;www.linux.bogus. IN A
;; ANSWER SECTION:
www.linux.bogus. 259200 IN CNAME ns.linux.bogus.
ns.linux.bogus. 259200 IN A 192.168.196.2
;; AUTHORITY SECTION:
linux.bogus. 259200 IN NS ns.linux.bogus.
;; Query time: 5 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sun Dec 23 03:14:14 2001
;; MSG SIZE rcvd: 80
换句话说,www.linux.bogus
的真实名称是 ns.linux.bogus
,它也为你提供了一些关于 ns 的信息,足以让你作为一个程序连接到它。
现在我们完成了一半。
现在程序可以将 linux.bogus 中的名称转换为它们可以连接的地址。但还需要一个反向区域,一个使 DNS 能够从地址转换为名称的区域。许多不同类型的服务器(FTP、IRC、WWW 等)使用此名称来决定是否要与你对话,如果想对话,甚至可能决定应该给你多少优先级。要完全访问 Internet 上的所有服务,需要一个反向区域。
将此放入 named.conf
zone "196.168.192.in-addr.arpa" { type master; notify no; file "pz/192.168.196"; };
这与 0.0.127.in-addr.arpa
完全相同,内容也类似
$TTL 3D @ IN SOA ns.linux.bogus. hostmaster.linux.bogus. ( 199802151 ; Serial, todays date + todays serial 8H ; Refresh 2H ; Retry 4W ; Expire 1D) ; Minimum TTL NS ns.linux.bogus. 1 PTR gw.linux.bogus. 2 PTR ns.linux.bogus. 3 PTR donald.linux.bogus. 4 PTR mail.linux.bogus. 5 PTR ftp.linux.bogus.
现在你重新加载你的 named (rndc reload
) 并再次使用 dig
检查你的工作
$ dig -x 192.168.196.4 ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 58451 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1 ;; QUESTION SECTION: ;4.196.168.192.in-addr.arpa. IN PTR ;; ANSWER SECTION: 4.196.168.192.in-addr.arpa. 259200 IN PTR mail.linux.bogus. ;; AUTHORITY SECTION: 196.168.192.in-addr.arpa. 259200 IN NS ns.linux.bogus. ;; ADDITIONAL SECTION: ns.linux.bogus. 259200 IN A 192.168.196.2 ;; Query time: 4 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Sun Dec 23 03:16:05 2001 ;; MSG SIZE rcvd: 107
所以,看起来不错,转储整个内容以检查它
$ dig 196.168.192.in-addr.arpa. AXFR ; <<>> DiG 9.1.3 <<>> 196.168.192.in-addr.arpa. AXFR ;; global options: printcmd 196.168.192.in-addr.arpa. 259200 IN SOA ns.linux.bogus. \ hostmaster.linux.bogus. 199802151 28800 7200 2419200 86400 196.168.192.in-addr.arpa. 259200 IN NS ns.linux.bogus. 1.196.168.192.in-addr.arpa. 259200 IN PTR gw.linux.bogus. 2.196.168.192.in-addr.arpa. 259200 IN PTR ns.linux.bogus. 3.196.168.192.in-addr.arpa. 259200 IN PTR donald.linux.bogus. 4.196.168.192.in-addr.arpa. 259200 IN PTR mail.linux.bogus. 5.196.168.192.in-addr.arpa. 259200 IN PTR ftp.linux.bogus. 196.168.192.in-addr.arpa. 259200 IN SOA ns.linux.bogus. \ hostmaster.linux.bogus. 199802151 28800 7200 2419200 86400 ;; Query time: 6 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Sun Dec 23 03:16:58 2001 ;; XFR size: 9 records
看起来不错!如果你的输出看起来不像那样,请在你的 syslog 中查找错误消息,我在第一节的标题 启动 named 下解释了如何做到这一点
这里我应该补充一些内容。上面示例中使用的 IP 号码取自“私有网络”的块之一,即它们不允许在 Internet 上公开使用。因此,它们可以安全地在 HOWTO 的示例中使用。第二件事是 notify no;
行。它告诉 named 当它的一个区域文件得到更新时,不要通知它的辅助(从属)服务器。在 BIND 8 及更高版本中,当区域更新时,named 可以通知区域文件中 NS 记录中列出的其他服务器。这对于普通使用来说很方便。但是对于区域的私有实验,此功能应该关闭 --- 我们不希望实验污染 Internet,对吗?
当然,这个域名是高度虚假的,其中的所有地址也是如此。有关真实域名的真实示例,请参阅下一个主要部分。
在设置反向区域时,通常会遇到一些“陷阱”,这些陷阱通常在名称查找中可以避免。在你继续之前,你需要让你的机器的反向查找在你的自己的域名服务器上工作。如果它不起作用,请返回并修复它,然后再继续。
我将讨论从你的网络外部看到的两种反向查找失败情况
当你向服务提供商请求网络地址范围和域名时,域名通常会被委派,这是理所当然的事情。委派是 glue NS 记录,它可以帮助你从一个域名服务器转到另一个域名服务器,正如上面枯燥的理论部分所解释的那样。你读过那部分了,对吗?如果你的反向区域不起作用,请返回并阅读它。现在就去读。
反向区域也需要被委派。如果你从你的提供商那里获得了带有 linux.bogus
域名的 192.168.196
网络,他们需要在你的反向区域以及你的正向区域中放入 NS
记录。如果你沿着从 in-addr.arpa
到你的网络的链条向上追踪,你可能会发现链条中断了,最有可能是在你的服务提供商处。找到链条中的断点后,请联系你的服务提供商并要求他们更正错误。
这是一个有点高级的主题,但无类别子网现在非常普遍,如果你是一家小公司,你可能就有一个。
无类别子网是当今互联网得以持续运行的原因。几年前,人们对 IP 号码短缺感到非常担忧。IETF(互联网工程任务组,他们负责维护互联网的正常运行)的聪明人聚集在一起解决了这个问题。但付出了代价。代价部分是你会得到少于一个 “C” 子网,并且有些东西可能会崩溃。请参阅 Ask Mr. DNS,以获得对此的良好解释以及如何处理它。
你读了吗?我不打算解释它,所以请阅读它。
问题的第一个部分是你的 ISP 必须理解 Mr. DNS 描述的技术。并非所有小型 ISP 都对此有有效的理解。如果是这样,你可能需要向他们解释并坚持不懈。但首先要确保你理解它 ;-)。然后他们将在他们的服务器上设置一个很好的反向区域,你可以使用 dig 检查其正确性。
问题的第二部分也是最后一部分是,你必须理解这项技术。如果你不确定,请返回并再次阅读有关它的内容。然后你可以按照 Mr. DNS 描述的方式设置你自己的无类别反向区域。
这里还有另一个陷阱潜伏着。(非常)旧的解析器将无法在解析链中遵循 CNAME
技巧,并且将无法反向解析你的机器。这可能会导致服务为其分配不正确的访问类别、拒绝访问或类似的情况。如果你偶然发现这样的服务,唯一的解决方案(据我所知)是让你的 ISP 将你的 PTR 记录直接插入到他们的 trick 无类别区域文件中,而不是 trick CNAME 记录。
一些 ISP 将提供其他方法来处理此问题,例如基于 Web 的表单,供你输入你的反向映射或其他自动魔法系统。
在主服务器上正确设置区域后,你需要设置至少一个从属服务器。需要从属服务器以提高稳健性。如果你的主服务器宕机,网络上的其他人仍然能够从从属服务器获取关于你的域的信息。从属服务器应该尽可能远离你。你的主服务器和从属服务器应该尽可能少地共享以下内容:电源、LAN、ISP、城市和国家。如果你的主服务器和从属服务器的所有这些方面都不同,那么你就找到了一个非常好的从属服务器。
从属服务器只是一个从主服务器复制区域文件的域名服务器。你像这样设置它
zone "linux.bogus" { type slave; file "sz/linux.bogus"; masters { 192.168.196.2; }; };
一种称为区域传输的机制用于复制数据。区域传输由你的 SOA 记录控制
@ IN SOA ns.linux.bogus. hostmaster.linux.bogus. ( 199802151 ; serial, todays date + todays serial # 8H ; refresh, seconds 2H ; retry, seconds 4W ; expire, seconds 1D ) ; minimum, seconds
只有当主服务器上的序列号大于从属服务器上的序列号时,才会传输区域。每个刷新间隔,从属服务器都会检查主服务器是否已更新。如果检查失败(因为主服务器不可用),它将每隔重试间隔重试检查。如果它持续失败到过期间隔,从属服务器将从其文件系统中删除该区域,并且不再是它的服务器。