跳转到内容
搜索 RunEntLinux 文档

仅搜索 RunEntLinux 通用文档,各发行版文档使用各自的搜索入口。

    浏览当前文档目录

    DNS(域名系统)负责将域名解析为 IP 地址。本文介绍在 CentOS / AlmaLinux / Rocky Linux 上配置 DNS 解析的方法,以及常用的 DNS 排查工具。

    /etc/resolv.conf 是 Linux 系统的 DNS 解析配置文件,系统中的 DNS 查询最终都依赖它。

    查看当前 DNS 配置
    cat /etc/resolv.conf

    典型内容如下:

    # Generated by NetworkManager
    nameserver 8.8.8.8
    nameserver 8.8.4.4
    search example.com
    • nameserver — 指定 DNS 服务器地址,最多可以写 3 个
    • search — DNS 搜索域,查询不带域名后缀的主机名时会自动补全
    为连接配置 DNS 服务器
    sudo nmcli connection modify ens33 ipv4.dns "223.5.5.5 119.29.29.29"
    sudo nmcli connection up ens33

    使用 + 前缀可以在现有 DNS 列表上追加:

    追加一个 DNS 服务器
    sudo nmcli connection modify ens33 +ipv4.dns "8.8.8.8"
    sudo nmcli connection up ens33
    从列表中移除指定的 DNS 服务器
    sudo nmcli connection modify ens33 -ipv4.dns "8.8.8.8"
    sudo nmcli connection up ens33

    设置搜索域后,查询短主机名时会自动追加域后缀。例如设置搜索域为 example.com 后,ping web01 会自动尝试 web01.example.com。

    设置 DNS 搜索域
    sudo nmcli connection modify ens33 ipv4.dns-search "example.com internal.local"
    sudo nmcli connection up ens33

    DHCP 模式下,服务器会自动下发 DNS 地址。如果你希望只使用手动配置的 DNS:

    忽略 DHCP 提供的 DNS 服务器
    sudo nmcli connection modify ens33 ipv4.ignore-auto-dns yes
    sudo nmcli connection up ens33

    恢复使用 DHCP 的 DNS:

    恢复使用 DHCP 下发的 DNS
    sudo nmcli connection modify ens33 ipv4.ignore-auto-dns no
    sudo nmcli connection up ens33
    检查 nmcli 中配置的 DNS
    nmcli connection show ens33 | grep -i dns
    查看实际生效的 resolv.conf
    cat /etc/resolv.conf

    /etc/hosts 是本地的静态域名解析文件,优先级高于 DNS 查询。适合用于:

    • 本地开发环境的域名映射
    • 在 DNS 不可用时提供基本的名称解析
    • 屏蔽特定域名
    查看 hosts 文件内容
    cat /etc/hosts

    默认内容:

    127.0.0.1 localhost localhost.localdomain
    ::1 localhost localhost.localdomain
    添加一条主机名映射
    echo '192.168.1.50 dbserver.example.com dbserver' | sudo tee -a /etc/hosts

    格式为:IP地址 完整域名 短别名

    添加多条映射
    sudo tee -a /etc/hosts > /dev/null <<'EOF'
    192.168.1.51 web01.example.com web01
    192.168.1.52 web02.example.com web02
    192.168.1.53 cache.example.com cache
    EOF

    系统的名称解析顺序由 /etc/nsswitch.conf 控制:

    查看名称解析顺序
    grep ^hosts /etc/nsswitch.conf

    输出通常为:

    hosts: files dns myhostname

    这意味着系统会依次检查:/etc/hosts 文件 → DNS 服务器 → 本机主机名。

    dig 是最强大的 DNS 查询工具,来自 bind-utils 包。

    安装 dig 工具
    sudo dnf install bind-utils
    查询域名的 A 记录
    dig example.com
    只显示精简结果
    dig +short example.com
    查询 MX 记录(邮件服务器)
    dig example.com MX
    查询 NS 记录(域名服务器)
    dig example.com NS
    指定 DNS 服务器进行查询
    dig @8.8.8.8 example.com
    跟踪完整的 DNS 解析路径
    dig +trace example.com
    反向 DNS 查询(IP 到域名)
    dig -x 8.8.8.8

    nslookup 也包含在 bind-utils 中,用法更简单:

    查询域名
    nslookup example.com
    指定 DNS 服务器查询
    nslookup example.com 8.8.8.8
    查询特定记录类型
    nslookup -type=MX example.com

    host 命令提供简洁的查询结果:

    简洁查询域名
    host example.com
    查询 MX 记录
    host -t MX example.com

    当遇到 DNS 解析问题时,按以下步骤排查:

    检查当前使用的 DNS 服务器
    cat /etc/resolv.conf
    测试 DNS 服务器是否可达
    ping -c 3 8.8.8.8
    直接测试 DNS 解析是否正常
    dig @8.8.8.8 example.com +short

    第四步:对比不同 DNS 服务器的结果

    Section titled “第四步:对比不同 DNS 服务器的结果”
    对比多个 DNS 的解析结果
    dig @223.5.5.5 example.com +short
    dig @8.8.8.8 example.com +short
    dig @119.29.29.29 example.com +short

    第五步:检查本地缓存(如有 systemd-resolved)

    Section titled “第五步:检查本地缓存(如有 systemd-resolved)”

    EL 系默认由 NetworkManager 管理 DNS,通常不安装也不启用 systemd-resolved;只有你显式装过它才需要看这一节(直接 systemctl status systemd-resolved 很可能得到 Unit not found):

    检查 systemd-resolved 状态
    systemctl status systemd-resolved
    清除 systemd-resolved 缓存
    sudo resolvectl flush-caches
    提供商首选 DNS备用 DNS
    阿里云 (AliDNS)223.5.5.5223.6.6.6
    腾讯 (DNSPod)119.29.29.29119.28.28.28
    Google8.8.8.88.8.4.4
    Cloudflare1.1.1.11.0.0.1

    配置示例:

    使用阿里云 DNS
    sudo nmcli connection modify ens33 ipv4.dns "223.5.5.5 223.6.6.6"
    sudo nmcli connection up ens33