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系统中,共享库文件(.so文件)的版本号对软件兼容性、依赖管理和故障排查至关重要,以下是几种专业可靠的获取方法,适用于不同场景:使用 readelf 命令(推荐)readelf 是分析ELF格式文件的专业工具,可直接读取库文件的版本信息:readelf -d libexample.so | grep……

    2025年7月27日
    4700
  • linux 如何去掉文件空值

    Linux中,可以使用sed ‘/^$/d’ filename命令去掉文件中的空

    2025年8月19日
    4100
  • Linux如何退出普通用户登录状态?

    在Linux系统中,普通用户的退出操作通常涉及两种核心场景:一是用户主动结束当前会话(如注销、关闭终端),二是管理员协助终止特定用户的会话,由于Linux是多用户多任务操作系统,退出操作需结合权限、会话类型(图形界面/命令行)及具体需求展开,以下是详细操作说明及注意事项,命令行环境下普通用户的退出操作命令行是L……

    2025年10月5日
    1400
  • linux如何上传jar包

    Linux中,可使用scp命令上传jar包,格式如

    2025年8月10日
    4300
  • AppImage如何轻松运行于任何电脑?

    Linux QQ登录详细指南在Linux系统中登录QQ,目前主要有三种可靠方式:官方原生版本、Wine兼容方案和第三方开源客户端,以下是具体操作步骤及注意事项:官方原生QQ for Linux(推荐首选)适用系统:Ubuntu/Debian、Arch、Fedora等主流发行版优势:腾讯官方维护,安全性高,无兼容……

    2025年7月1日
    4900

发表回复

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

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信