# 32.7.域名系统（DNS）

域名系统（DNS）是通过该协议将域名映射到 IP 地址，反之亦然。DNS 在互联网上通过一个相对复杂的系统进行协调，该系统包括权威根、顶级域（TLD）和其他小规模的名称服务器，这些服务器承载并缓存各个域的信息。执行 DNS 查询并不需要运行名称服务器。

以下表格描述了一些与 DNS 相关的术语：

**表 4. DNS 术语**

| 术语     | 定义                                           |
| ------ | -------------------------------------------- |
| 正向 DNS | 将主机名映射到 IP 地址。                               |
| 原点     | 指的是特定区域文件中所覆盖的域。                             |
| 解析器    | 一种系统进程，通过该进程，计算机向名称服务器查询区域信息。                |
| 反向 DNS | 将 IP 地址映射到主机名。                               |
| 根区     | 互联网区域层次结构的起点。所有区域都位于根区下，类似于文件系统中所有文件都位于根目录下。 |
| 区域     | 一个由同一权威管理的独立域、子域或 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** 中添加以下内容：

```sh
local_unbound_enable="YES"
```

**/etc/resolv.conf** 中的任何现有名称服务器将作为新的 Unbound 配置中的转发器。

> **注意**
>
> 如果列出的任何名称服务器不支持 DNSSEC，本地 DNS 解析将失败。请务必测试每个名称服务器，并删除任何测试失败的服务器。以下命令将显示信任树或在运行在 `192.168.1.1` 上的名称服务器失败的情况：
>
> ```
> % drill -S FreeBSD.org @192.168.1.1
> ```

待确认每个名称服务器支持 DNSSEC，启动 Unbound：

```sh
# service local_unbound onestart
```

这将更新 **/etc/resolv.conf**，以便现在可以查询支持 DNSSEC 的域名。例如，运行以下命令以验证 FreeBSD.org 的 DNSSEC 信任树：

```ini
% 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
```

## 32.7.3. 权威名称服务器配置

FreeBSD 的基本系统中不提供权威名称服务器软件。建议用户安装第三方应用程序，如包或 Port [dns/nsd](https://cgit.freebsd.org/ports/tree/dns/nsd/) 或 [dns/bind918](https://cgit.freebsd.org/ports/tree/dns/bind918/) 。


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://handbook.bsdcn.org/di-32-zhang-wang-luo-fu-wu-qi/32.7.-yu-ming-xi-tong-dns.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
