Linux服务器DNS解析失败导致无法上网,该如何配置并开启服务呢?

在 Linux 系统中,域名系统(DNS)扮演着至关重要的角色,它负责将我们易于记忆的域名(如 www.google.com)翻译成机器能够理解的 IP 地址(如 250.196.100),所谓的“开启 DNS”,在大多数场景下,并非指启动一个全新的服务,而是指正确配置或管理系统的 DNS 解析设置,以确保网络连接的顺畅与高效,本文将详细介绍在主流 Linux 发行版中配置和管理 DNS 的几种核心方法。

Linux服务器DNS解析失败导致无法上网,该如何配置并开启服务呢?

传统的 /etc/resolv.conf 文件配置

这是最经典、最直接的 DNS 配置方式。/etc/resolv.conf 文件是 Linux 系统中用于指定 DNS 解析服务器的核心配置文件。

文件结构与指令

一个典型的 resolv.conf 文件内容如下:

# 这是一个示例 /etc/resolv.conf 文件
nameserver 8.8.8.8
nameserver 8.8.4.4
search localdomain
options timeout:2 attempts:3 rotate
  • nameserver:这是最重要的指令,用于指定 DNS 服务器的 IP 地址,系统会按照从上到下的顺序依次查询,因此通常将最快、最稳定的服务器放在第一位,可以配置多个 nameserver 作为备用。
  • search:定义了一个域名搜索列表,当您尝试解析一个不包含完整域名的主机名(如 server1)时,系统会自动依次尝试 server1.localdomain
  • options:用于设置 DNS 解析器的一些选项。
    • timeout:设置等待 DNS 服务器响应的超时时间(秒)。
    • attempts:设置在超时后重试的次数。
    • rotate:在多个 nameserver 之间轮询查询,以实现负载均衡。

重要提示

在现代的许多 Linux 发行版(如 Ubuntu 18.04+、CentOS 7+)中,/etc/resolv.conf 文件通常是由网络管理服务(如 systemd-resolvedNetworkManager)自动生成的,直接手动编辑此文件,在系统重启或网络服务重启后,您的修改很可能会被覆盖,虽然理解此文件至关重要,但在现代系统中,我们更推荐使用下面介绍的方法进行持久化配置。

使用 systemd-resolved 服务

systemd-resolved 是一个系统服务,它为本机提供网络名称解析,它不仅能缓存 DNS 查询以提高性能,还能作为一个本地 DNS 存根监听在 0.0.53:53 地址上。

配置步骤

  1. 编辑配置文件
    systemd-resolved 的主配置文件位于 /etc/systemd/resolved.conf,您需要使用 sudo 权限来编辑它。

    sudo nano /etc/systemd/resolved.conf
  2. 修改 DNS 设置
    [Resolve] 部分,取消注释(或添加)并修改以下行:

    [Resolve]
    DNS=8.8.8.8 1.1.1.1
    FallbackDNS=8.8.4.4 1.0.0.1
    #Domains=
    #LLMNR=no
    #MulticastDNS=no
    #DNSSEC=no
    #DNSOverTLS=no
    #Cache=yes
    #DNSStubListener=yes
    • DNS=:这是您希望系统优先使用的 DNS 服务器地址,用空格分隔。
    • FallbackDNS=:当 DNS= 指定的服务器无法访问时,系统将使用这些备用服务器。
  3. 更新 /etc/resolv.conf 符号链接
    为了让系统使用 systemd-resolved 提供的 DNS 服务,需要确保 /etc/resolv.conf 是一个指向 systemd-resolved 存根文件的符号链接。

    Linux服务器DNS解析失败导致无法上网,该如何配置并开启服务呢?

    # 备份现有的文件(如果它不是符号链接)
    sudo mv /etc/resolv.conf /etc/resolv.conf.backup
    # 创建符号链接
    sudo ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf
  4. 重启服务
    保存配置文件后,重启 systemd-resolved 服务以使更改生效。

    sudo systemctl restart systemd-resolved

您的系统将通过 systemd-resolved 来进行 DNS 查询,并享受其带来的缓存加速功能。

使用 NetworkManager

对于桌面环境或使用 NetworkManager 管理网络的服务器,通过它来配置 DNS 是最直观和持久的方法。

通过命令行工具 nmcli 配置

nmcli 是一个强大的命令行工具,可以完全控制 NetworkManager。

  1. 查看网络连接名称
    找出您正在使用的网络连接的名称。

    nmcli connection show

    输出可能类似于:

    NAME                UUID                                  TYPE      DEVICE
    Wired connection 1  5a1234b7-8c9d-0e1f-2a3b-4c5d6e7f8g9h  ethernet  eth0

    这里的 Wired connection 1 就是连接名称。

  2. 为指定连接设置 DNS
    使用以下命令为该连接设置 IPv4 DNS 服务器。

    nmcli connection mod "Wired connection 1" ipv4.dns "8.8.8.8 1.1.1.1"
  3. 重新激活连接
    应用更改需要重新激活网络连接。

    Linux服务器DNS解析失败导致无法上网,该如何配置并开启服务呢?

    nmcli connection up "Wired connection 1"

NetworkManager 会自动更新 /etc/resolv.conf 文件,并确保设置在重启后依然有效。

验证 DNS 配置

无论采用哪种方法,配置完成后,都需要验证其是否正确生效,可以使用以下工具:

  • nslookup:一个简单易用的查询工具。
    nslookup www.linux.org
  • dig:功能更强大的 DNS 查询工具,提供详细的查询信息。
    dig www.linux.org
  • host:另一个简洁的查询工具。
    host www.linux.org

执行命令后,如果能看到正确的 IP 地址返回,则说明 DNS 配置成功。

DNS 配置方法对比

方法 配置文件/工具 适用场景 优点 缺点
/etc/resolv.conf /etc/resolv.conf 临时测试、嵌入式系统、无网络管理服务的环境 简单直接、即时生效 在现代系统中易被覆盖,不持久
systemd-resolved /etc/systemd/resolved.conf 使用 systemd 的现代发行版(Ubuntu, Debian, Fedora等) 提供本地缓存、配置集中化、稳定 配置步骤稍多,需要理解符号链接
NetworkManager nmcli 或图形界面 桌面系统、动态网络环境(如笔记本) 用户友好、与网络连接生命周期绑定、持久化 依赖 NetworkManager 服务,对于纯服务器可能略显臃肿

相关问答FAQs

为什么我修改了 /etc/resolv.conf 文件,重启后设置又变回去了?

解答: 这是因为您的 Linux 发行版使用了网络管理服务(如 NetworkManagersystemd-resolved)来动态管理网络设置,这些服务在系统启动或网络状态变化时,会根据其自身的配置规则重新生成 /etc/resolv.conf 文件,从而覆盖您的手动修改,要实现持久化配置,您应该去修改这些网络管理服务的配置文件(如通过 nmcli 命令或编辑 /etc/systemd/resolved.conf),而不是直接编辑 /etc/resolv.conf

如何查看我的 Linux 系统当前正在使用哪个 DNS 解析服务?

解答: 您可以通过以下几个步骤来确定:

  1. 检查 /etc/resolv.conf 的状态:运行 ls -l /etc/resolv.conf,如果它是一个符号链接(-> /run/systemd/resolve/resolv.conf),那么系统很可能正在使用 systemd-resolved,如果它是一个普通文件,则可能由 NetworkManager 或其他脚本管理。
  2. 检查 systemd-resolved 服务状态:运行 systemctl status systemd-resolved,如果服务是 active (running) 状态,/etc/resolv.conf 指向它的存根文件,那么它就是当前使用的解析服务。
  3. 检查监听端口 53:DNS 服务默认监听 53 端口,运行 ss -tulnp | grep :53,如果输出显示 0.0.53:53systemd-resolve 监听,则确认是 systemd-resolved,如果显示其他 IP 地址,则可能是其他 DNS 服务(如 dnsmasqnamed),如果没有任何输出,说明系统没有运行本地 DNS 服务,而是直接读取 /etc/resolv.conf 中的服务器进行查询。

来源互联网整合,作者:小编,如若转载,请注明出处:https://www.aiboce.com/ask/251646.html

Like (0)
小编小编
Previous 2025年10月5日 04:29
Next 2025年10月5日 05:07

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注