> For the complete documentation index, see [llms.txt](https://book.bsdcn.org/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://book.bsdcn.org/man/man5/resolver.5.md).

# resolver.5

`resolver` — 解析器配置文件

## 名称

`resolver`

## 概要

`resolv.conf`

## 描述

resolver(3) 是 C 库中的一组例程，提供对 Internet 域名系统的访问。解析器配置文件包含在进程首次调用解析器例程时读取的信息。该文件设计为人类可读，包含一系列带值的关键字，提供各种类型的解析器信息。

在正常配置的系统上，不需要手动设置此文件。要查询的唯一名称服务器将位于本地机器上，或通过 DHCP 或类似机制自动配置，域名由主机名确定，域搜索路径由域名构造。

不同的配置选项有：

**`nameserver`** 解析器应查询的名称服务器的 IPv4 或 IPv6 地址。最多可以列出 `MAXNS`（当前为 3）个名称服务器，每个关键字一个。如果有多个服务器，解析器库按列出的顺序查询它们。如果没有 **nameserver** 条目，默认使用本地机器上的名称服务器。（所用算法是尝试一个名称服务器，如果查询超时，尝试下一个，直到名称服务器用完，然后重复尝试所有名称服务器，直到达到最大重试次数。）

**`domain`** 本地域名。对此域内名称的大多数查询可以使用相对于本地域的短名称。如果没有 **domain** 条目，域名由 gethostname(3) 返回的本地主机名确定；域名部分取为第一个 `.` 之后的所有内容。最后，如果主机名不包含域名部分，则假定根域为域名。

**`search`** 主机名查找的搜索列表。搜索列表通常由本地域名确定；默认情况下，它仅包含本地域名。可以通过在 **search** 关键字后列出所需的域搜索路径来更改，名称之间用空格或制表符分隔。大多数解析器查询将依次使用搜索路径的每个组件进行尝试，直到找到匹配项。注意，如果所列域的服务器不在本地，此过程可能很慢并会产生大量网络流量，如果某个域没有可用的服务器，查询将超时。搜索列表目前限制为六个域，总共 256 个字符。

**`sortlist`** 排序列表允许对 gethostbyname 返回的地址进行排序。排序表由 IP 地址网络掩码对指定。如果未指定网络掩码，则默认为网络的历史 A/B/C 类网络掩码；此用法已弃用。IP 地址和网络对之间用斜杠分隔。最多可指定 10 对。例如：

```sh
sortlist 10.9.1.0/255.255.240.0 10.9.0.0/255.255.0.0
```

**`options`** 选项允许修改某些内部解析器变量。语法为

`options option ...`

其中 **option** 是以下之一：

**`debug`** 在 \_res.options 中设置 `RES_DEBUG`。

**`usevc`** 设置 `RES_USEVC`，在查询时使用 TCP 而不是 UDP。

**`ndots:`**`n` 设置一个阈值，即在传递给 res\_query（参见 resolver(3)）的名称中必须出现的点数，超过此阈值才会进行*初始绝对查询*。*n* 的默认值为 “1”，意味着如果名称中有任何点，则该名称将首先作为绝对名称尝试，然后才向其追加任何*搜索列表*元素。

**`timeout:`**`n` 设置解析器在通过不同名称服务器重试查询之前，等待远程名称服务器响应的初始时间量。解析器在当前查询的后续重试中可能会等待更长时间，因为会对超时值应用指数退避。以秒为单位测量，默认值为 `RES_TIMEOUT`，允许的最大值为 `RES_MAXRETRANS`（参见 `<resolv.h>`）。

**`attempts:`**`n` 设置解析器在放弃并向调用应用程序返回错误之前，向每个名称服务器发送查询的次数。默认值为 `RES_DFLRETRY`，允许的最大值为 `RES_MAXRETRY`（参见 `<resolv.h>`）。

**`edns0`** 设置 `RES_USE_EDNS0`。为 EDNS0 扩展附加一个 OPT 伪 RR，如 RFC 2671 所规定。这允许解析器通告更大的 UDP 接收缓冲区大小，允许超过原始 512 字节限制的响应。

**`inet6`** 设置 `RES_USE_INET6`。使 gethostbyname(3) 在查找 A 记录之前先查找 AAAA 记录，并将 IPv4 响应映射到 IPv6 地址。不鼓励使用此选项。

**`insecure1`** 设置 `RES_INSECURE1`。禁用对响应是否从发送查询的同一服务器接收的检查。使用此选项有安全风险，不建议使用。

**`insecure2`** 设置 `RES_INSECURE2`。禁用对响应是否包含与发送的查询匹配的查询的检查。使用此选项有安全风险，不建议使用。

**`no-check-names`** 设置 `RES_NOCHECKNAME`。禁用对传入主机名中无效字符（如下划线、非 ASCII 字符或控制字符）的检查。

**`no_tld_query`** 告诉解析器不要尝试解析顶级域名，即不包含点的名称。使用此选项不会阻止解析器对给定名称遵循标准的 **domain** 和 **search** 规则。

**`rotate`** 设置 `RES_ROTATE`。使解析器在配置的名称服务器之间轮转，分发查询负载，而不是始终尝试第一个列出的服务器。

**`reload-period:`**`n` 解析器每 `n` 秒检查一次 **/etc/resolv.conf** 的修改时间。如果 **/etc/resolv.conf** 已更改，则会自动重新加载。`n` 的默认值为两秒。将其设置为零可禁用文件检查。

选项也可以使用 `RES_OPTIONS` 环境变量以空格或制表符分隔的列表指定。

**domain** 和 **search** 关键字互斥。如果存在这些关键字的多个实例，最后一个实例将覆盖前面的。

关键字和值必须出现在同一行上，关键字（例如 **nameserver**）必须位于行首。值跟在关键字之后，用空白字符分隔。

## 文件

**`/etc/resolv.conf`** `resolv.conf` 文件位于 **/etc**。

## 实例

一个基本的 resolv.conf 文件可能采用以下形式。

```sh
# domain 指令仅在你的本地路由器通告类似 localdomain
# 的名称，并且你已通过外部域设置了主机名时才需要。
domain localdomain.tld
# 如果你运行本地 dns 服务器或缓存名称服务器，
# 例如 local-unbound(8)。
nameserver 127.0.0.1
# 本地或 ISP 名称服务的 IP 地址
nameserver 192.168.2.1
# 后备名称服务器，此处为 Google 的名称服务器。
nameserver 8.8.8.8
nameserver 8.8.4.4
# 为 EDNS0 扩展附加一个 OPT 伪 RR，
# 如 RFC 2671 所规定。
options edns0
```

## 参见

gethostbyname(3), resolver(3), [hostname(7)](/man/man7/hostname.7.md), resolvconf(8)

## 历史

`resolv.conf` 文件格式出现于 4.3BSD。


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## 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, and the optional `goal` query parameter:

```
GET https://book.bsdcn.org/man/man5/resolver.5.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
