Linux系统如何正确添加DNS服务器的配置步骤方法?

在Linux系统中,DNS(域名系统)配置是网络连接的基础,它负责将人类可读的域名(如www.example.com)转换为机器可识别的IP地址,正确的DNS配置能确保系统高效访问互联网、内网服务或特定资源,本文将详细介绍Linux系统中添加DNS的多种方法,涵盖不同发行版和场景,并附上注意事项和验证步骤。

linux如何添加dns

DNS配置基础:核心概念与文件

在Linux中,DNS配置的核心是告诉系统使用哪些DNS服务器进行域名解析,这些信息通常存储在特定配置文件中,常见的包括:

  • /etc/resolv.conf:传统的DNS解析配置文件,直接列出DNS服务器地址。
  • 网络管理工具的配置文件(如NetworkManager的ifcfg文件、netplan的yaml文件等):通过网络管理工具动态管理DNS,优先级高于直接修改/etc/resolv.conf
  • /etc/systemd/resolved.confsystemd-resolved服务的配置文件,用于管理本地DNS缓存和上游服务器。

需要注意的是,直接编辑/etc/resolv.conf在某些系统(如使用NetworkManager或systemd-resolved的系统)中可能被覆盖,因此推荐使用网络管理工具或系统服务进行配置。

方法一:直接编辑/etc/resolv.conf(临时/简单场景)

/etc/resolv.conf是Linux中最直接的DNS配置文件,适用于快速测试或临时修改,但需注意其可能被网络管理工具覆盖。

操作步骤:

  1. 查看当前配置
    使用catless命令查看文件内容:

    cat /etc/resolv.conf

    输出示例:

    # Generated by NetworkManager
    nameserver 8.8.8.8
    nameserver 8.8.4.4

    其中nameserver行指定DNS服务器地址,可多个,按优先级顺序排列。

  2. 编辑配置文件
    使用vimnano等文本编辑器(需root权限):

    sudo vim /etc/resolv.conf

    添加或修改nameserver行,例如使用公共DNS(如Google DNS:8.8.88.4.4,或Cloudflare DNS:1.1.10.0.1),或内网DNS服务器(如168.1.1)。

  3. 保存并退出
    vim中按Esc,输入wq保存退出。

注意事项:

  • 临时性:在Ubuntu、CentOS等使用NetworkManager或systemd-resolved的系统中,重启网络服务或系统后,/etc/resolv.conf可能被重置为默认值。
  • 权限:文件需root权限编辑,普通用户需通过sudo执行。
  • 格式规范:每行一个nameserver,注释以开头,避免语法错误(如多余空格)。

方法二:使用NetworkManager管理DNS(桌面/服务器通用)

NetworkManager是大多数Linux发行版(如Ubuntu、CentOS、Fedora)的默认网络管理工具,支持通过命令行或图形界面动态配置DNS,且会自动更新/etc/resolv.conf,避免被覆盖。

场景1:命令行配置(nmcli)

nmcli是NetworkManager的命令行工具,适用于服务器或无界面环境。

  1. 查看当前网络连接

    nmcli connection show

    记录要修改的连接名称(如eno1Wired connection 1)。

  2. 配置DNS服务器
    为指定连接添加DNS服务器(可多个,用空格分隔):

    sudo nmcli connection modify "连接名称" ipv4.dns "8.8.8.8 8.8.4.4 1.1.1.1"

    eno1添加Google和Cloudflare DNS:

    sudo nmcli connection modify eno1 ipv4.dns "8.8.8.8 1.1.1.1"
  3. 重启网络连接生效

    sudo nmcli connection down "连接名称" && sudo nmcli connection up "连接名称"

    或直接重启NetworkManager服务(影响所有连接):

    linux如何添加dns

    sudo systemctl restart NetworkManager
  4. 验证配置
    检查/etc/resolv.conf是否更新:

    cat /etc/resolv.conf | grep nameserver

    或使用nmcli查看连接属性:

    nmcli connection show "连接名称" | grep ipv4.dns

场景2:图形界面配置(NetworkManager-applet)

在桌面版Linux中,可通过系统托盘的网络图标配置DNS:

  1. 点击网络图标,选择“有线设置”或“Wi-Fi设置”。
  2. 点击当前连接的齿轮图标(“网络设置”),进入连接详情。
  3. 选择“IPv4”或“IPv6”标签页,在“DNS服务器”字段中输入DNS地址(如8.8.8,1.1.1.1),用逗号分隔。
  4. 点击“应用”,系统会自动保存并重启网络服务。

注意事项:

  • 连接优先级:NetworkManager会优先使用当前活动连接的DNS配置,多网卡环境下需为每个连接单独配置。
  • DHCP与DNS:如果通过DHCP自动获取IP,DHCP服务器可能会下发DNS配置,此时需在NetworkManager中禁用DHCP DNS(勾选“自动DNS”选项为关闭)或覆盖DHCP配置。

方法三:使用systemd-resolved管理DNS(现代系统默认)

systemd-resolved是systemd套件的一部分,提供本地DNS缓存和解析服务,广泛应用于Ubuntu 18.04+、Fedora等系统,它通过/etc/systemd/resolved.conf配置,并管理/etc/resolv.conf的符号链接(默认指向/run/systemd/resolve/stub-resolv.conf)。

操作步骤:

  1. 查看systemd-resolved状态
    确保服务已运行:

    systemctl status systemd-resolved

    若未运行,启动并启用:

    sudo systemctl enable --now systemd-resolved
  2. 编辑resolved.conf配置文件

    sudo vim /etc/systemd/resolved.conf

    取消注释并修改以下行(默认为注释):

    # DNS=    # 指定上游DNS服务器,多个用空格分隔,如 DNS=8.8.8.8 1.1.1.1
    # FallbackDNS=  # 备用DNS服务器,当主DNS不可用时使用
    # DNSStubListener=yes  # 监听本地53端口(默认开启,提供DNS缓存)

    配置Google和Cloudflare DNS:

    DNS=8.8.8.8 8.8.4.4 1.1.1.1 1.0.0.1
    FallbackDNS=114.114.114.114 223.5.5.5
  3. 重启systemd-resolved服务

    sudo systemctl restart systemd-resolved
  4. 验证DNS解析
    使用resolvectl命令(systemd-resolved的工具)查看解析状态:

    resolvectl status

    输出应包含配置的DNS服务器和缓存信息。
    测试域名解析:

    resolvectl www.example.com

注意事项:

  • /etc/resolv.conf的符号链接:默认情况下,/etc/resolv.conf指向/run/systemd/resolve/stub-resolv.conf,直接修改无效,若需手动管理,可删除符号链接并创建新文件(但不推荐,可能影响系统功能)。
  • DNS缓存systemd-resolved默认开启本地缓存(Cache= yes),可通过resolvectl query查询缓存命中情况。

方法四:针对特定发行版的配置(如netplan)

Ubuntu Server 18.04+、Debian 10+等系统使用netplan作为网络配置工具,通过yaml文件管理网络和DNS。

操作步骤:

  1. 查找netplan配置文件
    通常位于/etc/netplan/目录下,如01-network-manager-all.yaml50-cloud-init.yaml

  2. 编辑yaml文件

    sudo vim /etc/netplan/01-network-manager-all.yaml

    在网络接口配置中添加nameservers节点,指定DNS服务器:

    network:
      version: 2
      ethernets:
        eno1:  # 网络接口名称
          dhcp4: yes
          dhcp6: no
          nameservers:
            addresses: [8.8.8.8, 1.1.1.1, 114.114.114.114]  # DNS服务器列表
            search: [example.com]  # 可选:域名后缀,如内部域名解析
  3. 应用配置

    linux如何添加dns

    sudo netplan apply

    netplan --debug apply(调试模式,查看错误)。

  4. 验证配置
    检查/etc/resolv.conf是否更新:

    cat /etc/resolv.conf

    或使用nslookup测试:

    nslookup www.example.com

注意事项:

  • yaml语法:缩进必须使用2个空格,不能使用tab键;冒号后需加空格。
  • 静态IP配置:若使用静态IP,需在ethernets下添加addressesgateway4等参数,DNS仍通过nameservers配置。

DNS配置验证与故障排查

配置完成后,需验证DNS解析是否生效,常见工具包括:

  1. nslookup

    nslookup www.example.com

    若返回IP地址,则解析成功;若超时或报错,检查DNS服务器可达性(ping 8.8.8.8)。

  2. dig

    dig www.example.com

    显示详细的DNS解析过程,包括查询的DNS服务器、响应时间等。

  3. ping

    ping www.example.com

    通过域名测试网络连通性,依赖DNS解析成功。

常见问题:

  • DNS解析超时:检查DNS服务器是否可达(ping DNS_IP),或更换公共DNS测试。
  • /etc/resolv.conf被重置:确认是否使用NetworkManager/netplan/systemd-resolved管理,避免直接修改该文件。
  • 特定域名无法解析:检查/etc/hosts文件是否有错误条目,或DNS服务器是否支持该域名(如内网域名需配置正确的DNS后缀)。

不同配置方法对比总结

为方便选择,以下表格总结常见DNS配置方法的适用场景和特点:

配置方法 适用场景 配置文件/命令 生效方式 优点 缺点
直接编辑/etc/resolv.conf 临时测试、简单场景 /etc/resolv.conf 立即生效,但可能被覆盖 操作简单,无需额外工具 不稳定,重启后可能失效
NetworkManager(nmcli) 通用桌面/服务器,动态管理 nmcli connection modify 重启网络连接后生效 自动维护/etc/resolv.conf 需熟悉nmcli命令
systemd-resolved 现代系统(Ubuntu 18.04+等) /etc/systemd/resolved.conf 重启服务后生效 提供DNS缓存,支持多DNS策略 配置相对复杂,依赖systemd
netplan Ubuntu Server、Debian等yaml配置系统 /etc/netplan/*.yaml 执行netplan apply后生效 统一管理网络和DNS,适合服务器 需掌握yaml语法

相关问答FAQs

Q1:为什么修改了DNS配置后,域名解析仍然失败?
A:可能原因包括:

  1. DNS服务器不可达:检查网络连通性(ping DNS_IP),确认DNS服务器未屏蔽或故障。
  2. 配置文件未生效:若使用NetworkManager/netplan,需重启网络服务或应用配置;若直接修改/etc/resolv.conf,确认文件未被其他工具覆盖。
  3. 本地缓存问题:清理本地DNS缓存(如sudo systemctl flush-dns或重启systemd-resolved服务)。
  4. /etc/hosts冲突:检查/etc/hosts文件中是否有错误条目覆盖了域名解析。

Q2:如何为Linux系统的不同网络接口配置不同的DNS?
A:通过NetworkManager或netplan可实现多网卡DNS隔离:

  • NetworkManager:为每个网络连接单独配置DNS。eno1连接使用8.8.8wlan0连接使用1.1.1
    sudo nmcli connection modify eno1 ipv4.dns "8.8.8.8"
    sudo nmcli connection modify wlan0 ipv4.dns "1.1.1.1"
    sudo nmcli connection down eno1 && sudo nmcli connection up eno1
    sudo nmcli connection down wlan0 && sudo nmcli connection up wlan0
  • netplan:在yaml文件中为不同接口配置nameservers
    network:
      version: 2
      ethernets:
        eno1:
          dhcp4: yes
          nameservers:
            addresses: [8.8.8.8]
        wlan0:
          dhcp4: yes
          nameservers:
            addresses: [1.1.1.1]

    执行sudo netplan apply后,每个接口将使用配置的DNS服务器。

原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/26709.html

(0)
酷番叔酷番叔
上一篇 2025年9月20日 08:28
下一篇 2025年9月20日 08:41

相关推荐

  • Linux下SSH连接服务器全攻略?

    基础连接步骤安装SSH客户端大多数Linux发行版已预装OpenSSH客户端,检查是否安装:ssh -V # 显示版本即表示已安装若未安装,执行:sudo apt install openssh-client # Debian/Ubuntusudo yum install openssh-clients # C……

    2025年8月8日
    8000
  • Linux环境下启动SMB服务器的具体方法是什么?详细操作步骤和命令有哪些?

    在Linux系统中,SMB(Server Message Block)服务器通常通过Samba软件包实现,它允许Linux与Windows系统之间进行文件和打印共享,以下是详细启动SMB服务器的步骤,涵盖安装、配置、启动及测试全流程,安装Samba软件包首先根据Linux发行版选择对应的命令安装Samba,主流……

    2025年9月9日
    6600
  • 如何启动Linux桌面?

    前提条件已安装 Linux 系统确保计算机已安装支持图形界面的 Linux 发行版(如 Ubuntu、Fedora、Debian),验证方法:开机后若看到命令行界面(黑屏白字),需额外安装桌面环境(见下文),确认桌面环境已安装主流桌面环境:GNOME(Ubuntu默认)、KDE Plasma(Kubuntu……

    2025年6月26日
    8600
  • 如何复制linux中的命令

    Linux 中,复制命令可先标记命令文本,然后按鼠标右键选择“复制”,

    2025年8月19日
    9400
  • 为什么Linux权限如此重要?

    在Linux系统中,文件权限管理是系统安全和功能控制的核心机制之一,chmod(change mode)命令作为权限管理的关键工具,允许用户精确控制文件或目录的访问权限,以下内容将详细解析其使用方法、原理及注意事项,帮助您高效安全地管理系统资源,权限类型读(r):查看文件内容 / 列出目录内容写(w):修改文件……

    2025年7月29日
    11500

发表回复

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

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信