/etc/resolv.conf 文件是 Linux 和类 Unix 系统中 DNS 配置的核心组件。它决定了系统如何将域名解析为 IP 地址,这是网络通信的关键环节。本文将深入探讨 resolv.conf 文件的核心内容,重点讲解 nameserver 指令以及 options 配置中的 attemptsrotate 选项。

resolv.conf 文件是什么?

resolv.conf 文件是系统 DNS 解析器使用的配置文件,用于指定如何查询 DNS 服务器。它包含了以下几个关键部分:

  1. nameserver:指定 DNS 服务器的 IP 地址。
  2. domain/search:定义默认域名或搜索列表,用于补全短名称。
  3. options:提供额外的配置选项,控制解析行为。

大多数 Linux 用户对这些基本功能都有一定了解,但 options 配置中的一些高级选项,如 attemptsrotate,往往被忽视。接下来,我们将重点探讨这些选项的实际作用。

核心组件解析

1. nameserver:DNS 服务器的指定

nameserver 指令指定了系统用于解析域名的 DNS 服务器 IP 地址。例如:

nameserver 8.8.8.8
nameserver 8.8.4.4

通常,系统会按照文件中列出的顺序依次尝试这些 DNS 服务器,直到成功解析或全部失败。需要注意的是,resolv.conf 文件默认最多支持 3 个 nameserver。这一限制来源于底层 glibc 库的 resolv.h 文件中定义的 MAXNS 常量(通常为 3)。如果需要支持更多 nameserver,则需修改 MAXNS 并重新编译 glibc,这在实际操作中较为复杂,且不常见。

2. domain/search:简化域名解析

domainsearch 指令允许用户使用短名称访问域名。例如:

search abc.com

如果用户查询短名称 A,系统会自动补全为 A.abc.com 并进行解析。这一功能在企业内网中尤为常见,可显著提高效率。

3. options:高级解析控制

options 部分允许用户微调 DNS 解析行为。本文将重点探讨两个关键选项:attemptsrotate

attempts:控制重试次数

attempts 选项指定当 DNS 查询失败时,系统尝试联系每个 nameserver 的次数。默认值为 2 次,最大可设置为 5 次。例如:

options attempts:3

假设有以下配置:

nameserver 192.168.1.70
nameserver 192.168.1.71
nameserver 192.168.1.72
options attempts:2

如果第一个 nameserver(192.168.1.70)不可用,系统会尝试两次后切换到下一个 nameserver(192.168.1.71),依此类推。如果将 attempts 设置为 3,则每个 nameserver 最多尝试 3 次,总尝试次数为 nameserver 数量 × attempts

rotate:轮换 DNS 服务器

rotate 选项改变 nameserver 的查询顺序。默认情况下,系统按 resolv.conf 中的顺序依次查询 nameserver。如果启用 rotate

options rotate

系统会在每次查询时随机选择 nameserver 的顺序。例如,对于以下配置:

nameserver 192.168.1.70
nameserver 192.168.1.71
nameserver 192.168.1.72
options rotate

第一次查询可能使用顺序 70→71→72,第二次可能变为 71→72→70。这种轮换机制可以平衡多个 DNS 服务器的负载,适用于高可用性场景。

实践验证:attemptsrotate 的行为

为了更直观地理解这些选项,我们通过一个实验来验证其行为。假设以下 resolv.conf 配置:

nameserver 192.168.1.70
nameserver 192.168.1.71
nameserver 192.168.1.72
nameserver 192.168.1.68

其中,前三个 nameserver(70、71、72)不可用,只有最后一个(68)可用。

实验 1:默认配置(无 attemptsrotate

我们使用 getaddrinfo(glibc 的 DNS 解析函数)查询一个 IPv4 地址,并通过 strace 跟踪系统调用。结果显示:

  • 系统按顺序尝试 70、71、72,每次尝试两次(默认 attempts:2)。
  • 总共尝试 4 次(70 两次 + 71 两次,72 未尝试,因为解析失败)。
  • 第四个 nameserver(68)未被使用,因为 glibc 限制最多 3 个 nameserver。

实验 2:设置 attempts:3

修改配置为:

options attempts:3

再次运行查询,结果显示:

  • 每个 nameserver 尝试 3 次,总共 6 次(70 3 次 + 71 3 次)。
  • 依然只使用前三个 nameserver,68 未被调用。

实验 3:启用 rotate

启用 rotate

options rotate

假设 68 是唯一可用的 nameserver。由于 glibc 仍只识别前三个 nameserver,查询仍失败。启用 rotate 后,查询顺序随机变化(例如 71→72→70),但结果不变,因为 68 未被使用。

实验 4:只保留一个可用 nameserver

修改配置为:

nameserver 192.168.1.68
options attempts:3

查询立即成功,因为 68 可解析域名。strace 显示仅尝试了一次,解析完成。

常见误解:hostdig 命令的行为

许多用户误以为 hostdig 命令会完全遵循 resolv.conf 的配置。实际上,这些命令使用自己的解析逻辑(基于 libresolv),而非 glibc 的解析器。实验表明:

  • nameserver 限制hostdig 只读取 resolv.conf 中的前三个 nameserver。
  • options 无效attemptsrotate 选项对 hostdig 无影响。它们按照固定顺序查询 nameserver,且重试次数由命令自身逻辑决定。

例如,使用 host -d(调试模式)查询时:

nameserver 192.168.1.70
nameserver 192.168.1.71
nameserver 192.168.1.72
nameserver 192.168.1.68
options rotate
  • host 依次尝试 70(两次)、71(一次)、72(一次),忽略 68 和 rotate
  • 解析失败,因为前三个 nameserver 不可用。

总结与建议

通过以上分析,我们得出以下结论:

  1. nameserver 限制resolv.conf 默认最多支持 3 个 nameserver,受 glibc MAXNS 常量限制。
  2. attempts:控制每个 nameserver 的重试次数,默认 2 次,最大 5 次。
  3. rotate:启用后随机轮换 nameserver 查询顺序,适合负载均衡。
  4. 命令行为hostdig 使用自己的解析逻辑,仅读取 nameserver 列表,忽略 options 配置。

实际应用建议

  • 检查 nameserver 数量:确保 resolv.conf 中列出的 nameserver 不超过 3 个,以避免无效配置。
  • 合理设置 attempts:根据网络环境调整重试次数,过高可能导致延迟。
  • 使用 rotate 优化负载:在多 DNS 服务器场景下启用 rotate,提高解析效率。
  • 验证工具行为:使用 hostdig 调试时,注意其与 glibc 解析器的差异。

通过深入理解 resolv.conf 的配置和行为,你可以更有效地优化系统的 DNS 解析流程,确保网络通信的稳定性和效率。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/92609.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/92609.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/92609.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【LeetCode】102 - 二叉树的层序遍历

题目描述 给你二叉树的根节点 root,返回其节点值的层序遍历(即逐层地,从左到右访问所有节点)。 解题思路 使用 BFS(广度优先搜索)的思想,维护当前层的所有节点,逐层处理:…

计算机网络1-5:计算机网络的性能指标

目录 常用性能指标 速率 带宽 吞吐量 时延 时延带宽积 ​往返时间 ​利用率 ​丢包率 常用性能指标 性能指标可以从不同的方面来度量计算机网络的性能 常用的计算机网络的性能指标有8个:速率、带宽、吞吐量、时延、时延带宽积、往返时间、利用率、丢包率 速率 比特…

TDengine IDMP 文档介绍

TDengine IDMP (Industrial Data Management Platform) 是一款 AI 原生的物联网、工业数据管理平台。它通过经典的树状层次结构组织传感器、设备采集的数据,建立数据目录,对数据提供语境化、标准化的处理、并提供实时分析、可视化、事件管理与报警等功能…

使用 iFLOW-CLI GitHub Action 和 Qwen3-Coder 给 GitHub 仓库生成幻灯片风格的文档站点

阿里的心流 https://www.iflow.cn/ 团队最近开源了一款基于终端的 AI Agent 工具 iFLOW CLI, 目前可以免费使用到强大的 Qwen3-Coder、Kimi K2 等模型。又是一款类似 Anthropics Claude Code 的产品。 iFlow CLI 是一款直接在终端中运行的强大 AI 助手。它能够无缝分析代码仓库…

【2025最新】在 macOS 上构建 Flutter iOS 应用

推荐超级课程: 本地离线DeepSeek AI方案部署实战教程【完全版】Docker快速入门到精通Kubernetes入门到大师通关课AWS云服务快速入门实战 目录软件要求操作系统开发工具文本编辑器或集成开发环境安装 Flutter SDK下载并安装 Flutter将 Flutter 添加到您的PATH配置 i…

MySQL 临时表详细说明

目录 MySQL 临时表详细说明 1. 定义 2. 核心特性 3. 创建与使用 4. 典型应用场景 5. 生命周期管理 6. 注意事项 7. 性能优化建议 MySQL 临时表详细说明 1. 定义 临时表是存储在内存或磁盘上的临时性数据表,仅在当前数据库会话中存在。会话结束时自动销毁&a…

深入解析 Apache APISIX 在微服务网关中的性能优化实践指南

深入解析 Apache APISIX 在微服务网关中的性能优化实践指南 文章类型:性能优化实践指南 技术领域:微服务架构 —— API 网关 文章结构:原理深度解析型 目标读者:有一定微服务与运维基础的后端开发工程师一、技术背景与应用场景 随…

【Spring Boot刷新上下文核心流程详解】

Spring Boot 刷新上下文核心流程详解 一、前言 在使用 Spring Boot 启动应用时,控制台会打印出一大串日志,其中最核心的启动动作之一就是 刷新上下文(refresh)。 refresh 方法不仅负责 Bean 的创建与初始化,还涉及监…

关于过滤器(Filter)的学习

过滤器(Filter)概述 过滤器是 Java Servlet 规范的一部分,用于在请求到达 Servlet 之前或响应返回客户端之前拦截请求和响应。它可以用于执行各种任务,如请求预处理、响应后处理、身份验证、日志记录等。 过滤器的作用 预处理请…

Spring AI 打造智能面试人实战

Spring AI人工智能面试机器人相关实例 以下是与Spring AI人工智能面试机器人相关的实用案例,涵盖技术实现、功能设计及常见问题解决方案,按应用场景分类呈现: 技术集成案例 调用Hugging Face模型库处理专业领域问题 通过Spring Security添加面试会话身份验证 结合WebSoc…

QT 程序发布时候调用自定义动态库

1、需要在pro文件中增加下面的内容:QMAKE_LFLAGS "-Wl,-rpath,\\$$ORIGIN\" QMAKE_LFLAGS "-Wl,-rpath,\\$$ORIGIN/lib\" QMAKE_LFLAGS "-Wl,-rpath,\\$$ORIGIN/../lib\"其中lib为动态库的文件夹名称,可以根据自己喜好…

SpringBoot学习日记 Day6:解锁微服务与高效任务处理

一、开篇:从单体到微服务的思维转变刚开始接触微服务时,我总习惯把所有功能写在一个项目里。直到项目越来越臃肿,每次修改都要全量部署,才意识到微服务架构的价值。今天我们就来探索SpringBoot在微服务场景下的强大能力&#xff0…

机械学习--DBSCAN 算法(附实战案例)

DBSCAN 算法详解DBSCAN(Density-Based Spatial Clustering of Applications with Noise,带噪声的基于密度的空间聚类应用)是一种经典的密度聚类算法,由 Martin Ester 等人于 1996 年提出。与 K-means 等基于距离的聚类算法不同&am…

【昇腾】基于RK3588 arm架构Ubuntu22.04系统上适配Atlas 200I A2加速模块安装EP模式下的驱动固件包_20250808

一、背景 1.1 主要的硬件是:1.2 主要的软件是: RK3588跑操作系统Atlas 200I A2加速模块作为EP模式关键参数版本说明CPU架构aarch64OS版本Ubuntu 22.04.5 LTSkernel版本5.10.198 二、适配 准备固件run包文件:Ascend-hdk-310b-npu-firmware_7.…

如何在 VS Code 中进行 `cherry-pick`

cherry-pick 是 Git 的一个功能,允许你选择某个 commit 并将其应用到当前分支,而无需合并整个分支。在 VS Code 中,你可以通过 内置的 Git 功能 或 终端 来完成 cherry-pick。方法 1:使用 VS Code 的 Git 图形界面(GUI…

STM32CubeMX(十三)FatFs文件系统(SPI驱动W25Qxx)

目录 一、知识点 1. 什么是Fatfs文件系统? 2. Fatfs操作系统控制流程 二、实战操作 1.CubeMX配置 2. 配置串口以及SPI 3. 修改功能映射接口 4. 添加测试代码 5. 实验现象 在完成本章之前需要完成一些基础配置,详情查看下面的文章。 STM32CubeMX(二)新建工…

【前端后端部署】将前后端项目部署到云服务器

更多笔记在这里☞ 全栈之路: https://gitee.com/oldbe/notes 【跳转到】 觉得有用请点个 star ,非常感谢! 现在AI太强大,开发个人产品的门槛和成本太低了,只要你有好的想法都可以很快速的开发一款产品 1.…

vue如何监听localstorage

在Vue中监听localStorage的变化可以通过几种方式实现,但需要注意的是,localStorage本身不提供原生的事件监听机制,如DOM元素的MutationObserver。不过,你可以通过一些间接的方法来监听localStorage的变化。方法1:使用w…

灰狼算法+四模型对比!GWO-CNN-LSTM-Attention系列四模型多变量时序预测

摘要:聚划算!大对比!灰狼算法四模型对比!GWO-CNN-LSTM-Attention系列四模型多变量时序预测,该代码特别适合需要横向对比不同深度学习模型性能的时序预测场景,研究者可通过参数快速适配不同预测需求&#xf…

冒泡排序实现以及优化

一,冒泡排序说明冒泡排序是从第一个元素开始和后面一个元素进行判断是否满足左小右大,如果不满足就交换位置,再拿第二个和第三个进行上述操作一直到第n-1和第n个。经过上述的一轮操作就可以把第一个最大值放到最右边,在进行n轮上述…