下一页 上一页 目录

5. 一个简单的域名。

如何设置你自己的域名。

5.1 首先是一些枯燥的理论

首先:你已经阅读了之前的所有内容,对吗?你必须这样做。

在我们真正开始本节之前,我将为你讲解一些关于 DNS 工作原理的理论和示例。你最好阅读它,因为它对你有好处。如果你不想读,至少应该快速浏览一遍。当你看到应该放在你的 named.conf 文件中的内容时,停止浏览。

DNS 是一个分层的树状结构系统。顶部写为 `.',发音为 `根 (root)',这对于树数据结构来说很常见。在 . 下面有许多顶级域名 (TLD);最著名的有 ORGCOMEDUNET,但还有更多。就像一棵树一样,它有一个根,然后分支出来。如果你有任何计算机科学背景,你就会认识到 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/。你应该能够从那里继续下去。

5.2 我们自己的域名

现在来定义我们自己的域名。我们将创建域名 linux.bogus 并在其中定义机器。我使用一个完全虚假的域名来确保我们不会打扰到外界的任何人。

在我们开始之前还有一件事:并非所有字符都允许在主机名中使用。我们仅限于英文字母字符:a-z,以及数字 0-9 和字符 '-'(破折号)。请坚持使用这些字符(BIND 9 如果你违反此规则不会报错,BIND 8 会报错)。大写和小写字符对于 DNS 是相同的,因此 pat.uio.noPat.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.bogusmail.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 的信息,足以让你作为一个程序连接到它。

现在我们完成了一半。

5.3 反向区域

现在程序可以将 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 下解释了如何做到这一点

5.4 警示语

这里我应该补充一些内容。上面示例中使用的 IP 号码取自“私有网络”的块之一,即它们不允许在 Internet 上公开使用。因此,它们可以安全地在 HOWTO 的示例中使用。第二件事是 notify no; 行。它告诉 named 当它的一个区域文件得到更新时,不要通知它的辅助(从属)服务器。在 BIND 8 及更高版本中,当区域更新时,named 可以通知区域文件中 NS 记录中列出的其他服务器。这对于普通使用来说很方便。但是对于区域的私有实验,此功能应该关闭 --- 我们不希望实验污染 Internet,对吗?

当然,这个域名是高度虚假的,其中的所有地址也是如此。有关真实域名的真实示例,请参阅下一个主要部分。

5.5 为什么反向查找不起作用。

在设置反向区域时,通常会遇到一些“陷阱”,这些陷阱通常在名称查找中可以避免。在你继续之前,你需要让你的机器的反向查找在你的自己的域名服务器上工作。如果它不起作用,请返回并修复它,然后再继续。

我将讨论从你的网络外部看到的两种反向查找失败情况

反向区域未委派。

当你向服务提供商请求网络地址范围和域名时,域名通常会被委派,这是理所当然的事情。委派是 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 的表单,供你输入你的反向映射或其他自动魔法系统。

5.6 从属服务器

在主服务器上正确设置区域后,你需要设置至少一个从属服务器。需要从属服务器以提高稳健性。如果你的主服务器宕机,网络上的其他人仍然能够从从属服务器获取关于你的域的信息。从属服务器应该尽可能远离你。你的主服务器和从属服务器应该尽可能少地共享以下内容:电源、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

只有当主服务器上的序列号大于从属服务器上的序列号时,才会传输区域。每个刷新间隔,从属服务器都会检查主服务器是否已更新。如果检查失败(因为主服务器不可用),它将每隔重试间隔重试检查。如果它持续失败到过期间隔,从属服务器将从其文件系统中删除该区域,并且不再是它的服务器。


下一页 上一页 目录