resolv.conf文件分析

resolv.conf文件分析

  resolv.conf 文件是 Linux 和其他类 Unix 系统中用于配置域名系统 (DNS) 解析器库 (resolver) 的主要文件。当应用程序需要将主机名解析为 IP 地址(或反之)时,解析器库会查阅此文件以获取相关配置信息。

常见问题

  1. nameserver 解析条数限制
    在C库resolv.h头文件中,定义了最大使用的上游服务器条数,参考宏MAXNS,所以默认路由器的等网络设备会使用dnsmasq、smartdns等软件进行配置dns,然后会增加nameserver 127.0.0.1和nameserver ::1来使用第三方解析软件进行解析。

文件位置

该文件通常位于 /etc/resolv.conf。

主要配置指令

根据 resolv.conf(5) man page,以下是一些关键的配置指令:

  1. nameserver

    • 作用: 指定 DNS 服务器的 IP 地址。解析器库会按照列出的顺序向这些服务器发送查询请求。
    • 语法: nameserver IP_ADDRESS
    • 示例: nameserver 8.8.8.8
    • 说明: 可以指定多个 nameserver 行。通常建议至少配置两个或三个,以提供冗余。解析器会尝试第一个 nameserver,如果超时或失败,则尝试下一个。
  2. domain

    • 作用: 指定本地的域名。如果查询的主机名不包含点 (.),解析器会自动将此域附加到主机名后面进行查询。
    • 语法: domain LOCAL_DOMAIN_NAME
    • 示例: domain example.com
    • 说明: domainsearch 指令是互斥的。如果两者都存在,则最后出现的那个生效。
  3. search

    • 作用: 指定一个主机名查找的搜索列表。当查询一个不包含点 (.) 的短主机名时,解析器会依次尝试将列表中的每个域名附加到该主机名后面进行查询,直到找到匹配项或尝试完所有列表项。
    • 语法: search DOMAIN1 DOMAIN2 ...
    • 示例: search eng.example.com sales.example.com example.com
    • 说明: 搜索列表通常包含本地子域和父域。domainsearch 指令是互斥的。
  4. sortlist

    • 作用: 允许对 gethostbyname 返回的地址进行排序。它基于地址/网络掩码对。匹配 sortlist 中条目的地址会优先于不匹配的地址。
    • 语法: sortlist ADDRESS/NETMASK ...
    • 示例: sortlist 130.155.160.0/255.255.240.0 130.155.0.0
    • 说明: 这在具有多个网络接口或需要优先访问特定子网时很有用。
  5. options

    • 作用: 允许设置解析器库的内部变量。
    • 语法: options OPTION ...
    • 常见选项:
      • ndots:n: 设置在进行初始绝对查询之前,主机名中必须包含的点 (.) 的数量阈值。默认值为 1。如果主机名中的点数小于 n,则会先尝试附加 search 列表中的域名。
      • timeout:n: 设置等待 DNS 服务器响应的初始超时时间(秒)。默认通常是 5 秒。
      • attempts:n: 设置在放弃之前向 DNS 服务器发送查询的最大次数。默认通常是 2 次。
      • rotate: 使解析器轮询 nameserver 列表中的服务器,而不是总是从第一个开始尝试。这有助于负载均衡。
      • debug: (已弃用,但旧系统可能仍支持)开启调试模式。
    • 示例: options ndots:2 timeout:2 attempts:3 rotate

工作原理简述

  1. 应用程序调用解析器库函数(如 gethostbynamegetaddrinfo)。
  2. 解析器读取 resolv.conf 文件获取配置。
  3. 如果要解析的主机名是完全限定域名 (FQDN) 或其点数大于等于 options ndots 的值,则直接向 nameserver 列表中的服务器查询。
  4. 如果要解析的是短主机名(点数小于 ndots),则会依次尝试将 search 列表(或 domain 指定的域)附加到主机名后进行查询。
  5. 解析器按照 nameserver 列表顺序(或根据 rotate 选项)向 DNS 服务器发送查询。
  6. 根据 timeoutattempts 选项处理超时和重试。
  7. 如果配置了 sortlist,则对返回的地址进行排序。
  8. 将结果返回给应用程序。

示例

# /etc/resolv.conf
# Generated by NetworkManager or similar tool

search mycorp.net internal.mycorp.net
nameserver 192.168.1.1
nameserver 8.8.8.8
options timeout:1 attempts:2 rotate

在这个例子中:

  • 解析器会首先搜索 mycorp.netinternal.mycorp.net 域来解析短主机名。
  • 它会首先尝试向 192.168.1.1 发送查询,如果失败或超时,则尝试 8.8.8.8
  • rotate 选项意味着下次查询可能会先尝试 8.8.8.8
  • 初始超时设置为 1 秒,最多尝试 2 次。

注意事项

  • 在现代 Linux 发行版中,/etc/resolv.conf 文件通常由网络管理服务(如 NetworkManager 或 systemd-resolved)动态生成和管理。直接编辑此文件所做的更改可能会在网络重启或系统重启后被覆盖。
  • 如果使用 systemd-resolved,实际的配置文件可能是 resolv.conf 或 stub-resolv.conf,而 resolv.conf 可能是一个指向这些文件的符号链接,或者是一个静态的备用文件。配置 systemd-resolved 通常通过 resolved.conf(5)resolvectl(1) 命令进行。
  • 理解 resolv.conf 的配置对于诊断网络连接和 DNS 解析问题至关重要。

参考man page

### 解决 Linuxresolv.conf 文件报红问题 在某些情况下,`/etc/resolv.conf` 文件可能会因为权限或文件状态的原因,在编辑器中显示为红色警告。这通常是因为文件被标记为不可更改的状态,或者是由于文件权限设置不当。 为了修复 `resolv.conf` 文件报红的问题,可以采取以下措施: #### 1. 检查并调整文件属性 如果之前使用了 `chattr +i` 命令将 `/etc/resolv.conf` 设置为只读属性,则需要先解除该属性以便能够正常编辑此文件。可以通过执行命令来移除这个特殊属性: ```bash sudo chattr -i /etc/resolv.conf ``` #### 2. 修改文件权限 确保拥有足够的权限去访问和修改 `resolv.conf` 文件。一般建议将其所有权赋予 root 用户,并给予适当的读写权限给其他用户组成员: ```bash sudo chmod 644 /etc/resolv.conf ``` #### 3. 配置正确的DNS服务器地址 根据网络环境合理配置 DNS 服务器 IP 地址和其他必要的选项。例如,添加如下内容到 `resolv.conf` 文件中: ```plaintext nameserver 8.8.8.8 nameserver 8.8.4.4 search example.com ``` 上述示例指定了 Google 提供的公共 DNS 服务作为首选和备用名称服务器,并设置了默认搜索域[^4]。 完成以上操作之后保存更改并退出编辑模式。此时应该已经解决了 `resolv.conf` 报红的情况。不过需要注意的是,当系统通过 DHCP 获取网络配置时,NetworkManager 或者 dhclient 可能会自动覆盖这些手动设定的内容;因此对于这种情况还需要进一步考虑如何持久化自定义设置[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值