32.7. 域名系统(DNS) ===================== 域名系统(DNS)是将域名映射到 IP 地址的协议,反之亦然。DNS 通过一个由权威根、顶级域(TLD)和其他规模较小的名称服务器组成的复杂系统在互联网上进行协调,这些服务器托管和缓存各个域信息。无需运行名称服务器即可在系统上执行 DNS 查找。 下表介绍了与 DNS 关联的一些术语: 表 4. DNS 术语 =========== ======================================================================================== 术语 定义 =========== ======================================================================================== Forward DNS 主机名到 IP 地址的映射。 Origin 引用特定区域文件中涵盖的域。 Resolver 一个系统进程,计算机通过该进程向名称服务器查询区域信息。 Reverse DNS 将 IP 地址映射到主机名。 Root zone 互联网区域层次结构的开头。所有区域都属于根区域,类似于文件系统中的所有文件都属于根目录。 Zone 由同一颁发机构管理的单个域、子域或 DNS 的一部分。 =========== ======================================================================================== 区域示例: - ``.`` 是文档中通常引用根区域的方式。 - ``org.`` 是根区域下的顶级域(TLD)。 - ``example.org.`` 是 ``org.``\ TLD 下的一个区域。 - ``1.168.192.in-addr.arpa`` 是引用属于 ‘192.168.1.\*’ IP 地址空间的所有 IP 地址的区域。 正如人们所看到的,主机名中更具体的部分出现在其左边。例如,\ ``example.org.比 org``.更具体,因为 ``org.`` 比根区更具体。主机名的每个部分的布局很像一个文件系统:目录 **/dev** 属于根目录,以此类推。 32.7.1. 运行域名服务器的原因 ---------------------------- 域名服务器通常有两种形式:权威域名服务器和缓存(也称为解析)域名服务器。 在以下情况下,需要权威域名服务器: - 人们希望向全世界提供 DNS 信息,权威地回复查询。 - 域(如 ``example.org``\ )已注册,并且需要为其下的主机名分配 IP 地址。 - IP 地址阻止需要反向 DNS 条目(IP 到主机名)。 - 备份或辅助域名服务器(称为从属服务器)将回复查询。 在以下情况下需要缓存域名服务器: - 本地 DNS 服务器可能比查询外部域名服务器更快地缓存和响应。 当查询 ``www.FreeBSD.org`` 时,解析器通常会查询上行链路 ISP 的域名服务器,并检索回复。使用本地缓存 DNS 服务器时,只需由缓存 DNS 服务器向外界进行一次查询。其他查询不必进入本地网络之外,因为信息缓存在本地。 32.7.2. DNS 服务器配置 ---------------------- FreeBSD 基本系统中提供了 Unbound。在默认情况下,它将仅向本地计算机提供 DNS 解析。虽然基本系统包可以配置为提供本地机器之外的解析服务,但建议通过从 FreeBSD ports 安装 Unbound 来满足这些要求。 要启用 Unbound,请将以下内容添加到 **/etc/rc.conf**\ : .. raw:: latex \diilbookstyleinputcell .. code:: shell-session local_unbound_enable="YES" **/etc/resolv.conf** 中的任何现有域名服务器都将在新的 Unbound 配置中配置为转发器。 **注意** 如果列出的任何域名服务器不支持 DNSSEC,则本地的 DNS 解析将失败。请务必测试每个域名服务器,并删除任何未通过测试的域名服务器。以下命令将显示信任树或运行的域名服务器的故障:\ ``192.168.1.1``\ : .. code:: shell-session % drill -S FreeBSD.org @192.168.1.1 确认每个域名服务器支持 DNSSEC 后,启动 Unbound: .. raw:: latex \diilbookstyleinputcell .. code:: shell-session # service local_unbound onestart 这将负责更新 **/etc/resolv.conf**\ ,以便 DNSSEC 安全域的查询现在正常工作。例如,运行以下命令以验证 FreeBSD.org DNSSEC 信任树: .. raw:: latex \diilbookstyleinputcell .. code:: shell-session % drill -S FreeBSD.org ;; Number of trusted keys: 1 ;; Chasing: freebsd.org. A DNSSEC Trust tree: freebsd.org. (A) |---freebsd.org. (DNSKEY keytag: 36786 alg: 8 flags: 256) |---freebsd.org. (DNSKEY keytag: 32659 alg: 8 flags: 257) |---freebsd.org. (DS keytag: 32659 digest type: 2) |---org. (DNSKEY keytag: 49587 alg: 7 flags: 256) |---org. (DNSKEY keytag: 9795 alg: 7 flags: 257) |---org. (DNSKEY keytag: 21366 alg: 7 flags: 257) |---org. (DS keytag: 21366 digest type: 1) | |---. (DNSKEY keytag: 40926 alg: 8 flags: 256) | |---. (DNSKEY keytag: 19036 alg: 8 flags: 257) |---org. (DS keytag: 21366 digest type: 2) |---. (DNSKEY keytag: 40926 alg: 8 flags: 256) |---. (DNSKEY keytag: 19036 alg: 8 flags: 257) ;; Chase successful